diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b8eaa22..c76e6b8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,7 +18,8 @@ # - PIKA_CI_CROSSROAD_WIN64: trigger the crossroad/meson build for Win 64-bit. # - PIKA_CI_MSYS2_WIN32: trigger the native MSYS2 build for Win 32-bit. # - PIKA_CI_MSYS2_WIN64: trigger the native MSYS2 build for Win 64-bit. -# - PIKA_CI_WIN_INSTALLER: trigger both native MSYS2 builds then creates Windows installer. +# - PIKA_CI_MSYS2_WIN_AARCH64: trigger the native MSYS2 build for Windows/Aarch64. +# - PIKA_CI_WIN_INSTALLER: trigger all native MSYS2 builds then creates Windows installer. # - PIKA_CI_SOURCES: trigger the meson/gcc build and the source tarball job. # - PIKA_CI_CPPCHECK: trigger cppcheck static analysis. # - PIKA_CI_FLATPAK: trigger the nightly flatpak build and publishing. @@ -375,7 +376,7 @@ pika-meson-raster-icons: - ninja -C _build - ninja -C _build test -## WINDOWS 64-bit CI (native MSYS2) ## +## WINDOWS x86_64 CI (native MSYS2) ## deps-win64-native: rules: @@ -462,7 +463,7 @@ packaging-win64-native: - done-dll.list needs: ["pika-win64-native"] -## WINDOWS 32-bit CI (native MSYS2) ## +## WINDOWS x86 CI (native MSYS2) ## deps-win32-native: rules: @@ -548,6 +549,96 @@ packaging-win32-native: - done-dll.list needs: ["pika-win32-native"] +## WINDOWS Aarch64 CI (native MSYS2) ## + +deps-win-aarch64-native: + rules: + # On releases. + - if: '$CI_COMMIT_TAG != null' + # Custom builds though web GUI, API or schedules. + - if: '$PIKA_CI_MSYS2_WIN_AARCH64 != null' + - if: '$PIKA_CI_WIN_INSTALLER != null' + # Merge requests with appropriate label. + - if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Windows Installer.*/' + stage: dependencies + variables: + MSYSTEM: "CLANGARM64" + CHERE_INVOKING: "yes" + tags: + - windows-aarch64 + script: + - C:\msys64\usr\bin\pacman --noconfirm -Syyuu + - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/build-deps-msys2.sh" + artifacts: + name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}" + when: always + expire_in: 2 hours + paths: + - _install-arm64 + needs: [] + +pika-win-aarch64-native: + rules: + # On releases. + - if: '$CI_COMMIT_TAG != null' + # Custom builds though web GUI, API or schedules. + - if: '$PIKA_CI_MSYS2_WIN_AARCH64 != null' + - if: '$PIKA_CI_WIN_INSTALLER != null' + # Merge requests with appropriate label. + - if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Windows Installer.*/' + stage: pika + variables: + MSYSTEM: "CLANGARM64" + CHERE_INVOKING: "yes" + tags: + - windows-aarch64 + script: + # Temporary patch until we use the latest LLVM. + - git apply ./build/windows/patches/0001-clang-rc-files-fix.patch + - git apply ./build/windows/patches/0004-clang-windres.patch + - C:\msys64\usr\bin\pacman --noconfirm -Syyuu + - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/build-pika-msys2.sh" + artifacts: + name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}" + when: always + expire_in: 1 day + paths: + - _install-arm64 + - _build-arm64/build/windows/installer/ + - _build-arm64/meson-*/ + cache: + paths: + - _ccache/ + needs: ["deps-win-aarch64-native"] + +packaging-win-aarch64-native: + rules: + # On releases. + - if: '$CI_COMMIT_TAG != null' + # Custom builds though web GUI, API or schedules. + - if: '$PIKA_CI_WIN_INSTALLER != null' + # Merge requests with appropriate label. + - if: '$CI_MERGE_REQUEST_LABELS =~ /.*5. Windows Installer.*/' + stage: packaging + variables: + MSYSTEM: "CLANGARM64" + CHERE_INVOKING: "yes" + tags: + - windows-aarch64 + script: + - C:\msys64\usr\bin\pacman --noconfirm -Syyuu + - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/package-pika-msys2.sh" + - cd pika-arm64 + - C:\msys64\usr\bin\bash -lc "bash -x ../build/windows/gitlab-ci/split-debug-msys2.sh" + artifacts: + name: "${CI_JOB_NAME}-${CI_COMMIT_REF_SLUG}" + when: always + expire_in: 1 day + paths: + - pika-arm64 + - done-dll.list + needs: ["pika-win-aarch64-native"] + ## WINDOWS 64-bit CI (cross-build crossroad) ## deps-win64: @@ -822,6 +913,7 @@ win-installer-nightly: dependencies: - packaging-win64-native - packaging-win32-native + - packaging-win-aarch64-native # This is needed for the BMP image generation for the installer. # See commit e1203e9f76f. - pika-meson-debian @@ -835,7 +927,7 @@ win-installer-nightly: script: - C:\msys64\usr\bin\pacman --noconfirm -Syyuu - C:\msys64\usr\bin\bash -lc "bash -x ./build/windows/gitlab-ci/installer-pika-msys2.sh > installer.log 2>&1" - needs: ["packaging-win32-native", "packaging-win64-native", "pika-meson-debian"] + needs: ["packaging-win32-native", "packaging-win64-native", "packaging-win-aarch64-native", "pika-meson-debian"] sources-meson: rules: diff --git a/app/actions/colormap-actions.c b/app/actions/colormap-actions.c index 1ad819a..921e7f3 100644 --- a/app/actions/colormap-actions.c +++ b/app/actions/colormap-actions.c @@ -34,6 +34,7 @@ #include "core/pikaimage-colormap.h" #include "widgets/pikaactiongroup.h" +#include "widgets/pikacolormapeditor.h" #include "widgets/pikahelp-ids.h" #include "actions.h" @@ -49,6 +50,12 @@ static const PikaActionEntry colormap_actions[] = NC_("colormap-action", "_Edit Color..."), NULL, { NULL }, NC_("colormap-action", "Edit this color"), colormap_edit_color_cmd_callback, + PIKA_HELP_INDEXED_PALETTE_EDIT }, + + { "colormap-delete-color", PIKA_ICON_EDIT_DELETE, + NC_("colormap-action", "_Delete Color..."), NULL, { NULL }, + NC_("colormap-action", "Delete this color"), + colormap_delete_color_cmd_callback, PIKA_HELP_INDEXED_PALETTE_EDIT } }; @@ -116,13 +123,14 @@ void colormap_actions_update (PikaActionGroup *group, gpointer data) { - PikaImage *image = action_data_get_image (data); - PikaContext *context = action_data_get_context (data); - gboolean indexed = FALSE; - gboolean drawable_indexed = FALSE; - gint num_colors = 0; - PikaRGB fg; - PikaRGB bg; + PikaColormapEditor *editor = PIKA_COLORMAP_EDITOR (data); + PikaImage *image = action_data_get_image (data); + PikaContext *context = action_data_get_context (data); + gboolean indexed = FALSE; + gboolean drawable_indexed = FALSE; + gint num_colors = 0; + PikaRGB fg; + PikaRGB bg; if (image) { @@ -154,6 +162,9 @@ colormap_actions_update (PikaActionGroup *group, SET_SENSITIVE ("colormap-edit-color", indexed && num_colors > 0); + SET_SENSITIVE ("colormap-delete-color", + indexed && num_colors > 0 && + pika_colormap_editor_is_color_deletable (editor)); SET_SENSITIVE ("colormap-add-color-from-fg", indexed && num_colors < 256); diff --git a/app/actions/colormap-commands.c b/app/actions/colormap-commands.c index 9f9a0ef..f04cdfe 100644 --- a/app/actions/colormap-commands.c +++ b/app/actions/colormap-commands.c @@ -50,6 +50,16 @@ colormap_edit_color_cmd_callback (PikaAction *action, pika_colormap_editor_edit_color (editor); } +void +colormap_delete_color_cmd_callback (PikaAction *action, + GVariant *value, + gpointer data) +{ + PikaColormapEditor *editor = PIKA_COLORMAP_EDITOR (data); + + pika_colormap_editor_delete_color (editor); +} + void colormap_add_color_cmd_callback (PikaAction *action, GVariant *value, diff --git a/app/actions/colormap-commands.h b/app/actions/colormap-commands.h index 8eb0c7e..90897aa 100644 --- a/app/actions/colormap-commands.h +++ b/app/actions/colormap-commands.h @@ -26,6 +26,9 @@ void colormap_edit_color_cmd_callback (PikaAction *action, GVariant *value, gpointer data); +void colormap_delete_color_cmd_callback (PikaAction *action, + GVariant *value, + gpointer data); void colormap_add_color_cmd_callback (PikaAction *action, GVariant *value, gpointer data); diff --git a/app/actions/pikageglprocedure.c b/app/actions/pikageglprocedure.c index 271d217..b598b00 100644 --- a/app/actions/pikageglprocedure.c +++ b/app/actions/pikageglprocedure.c @@ -446,7 +446,7 @@ pika_gegl_procedure_new (Pika *pika, FALSE, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - g_param_spec_int ("n-drawables", + g_param_spec_int ("num-drawables", "N drawables", "The number of drawables", 0, G_MAXINT32, 0, diff --git a/app/config/pikarc-blurbs.h b/app/config/pikarc-blurbs.h index 1e2d6db..340686f 100644 --- a/app/config/pikarc-blurbs.h +++ b/app/config/pikarc-blurbs.h @@ -50,7 +50,7 @@ _("Timestamp of the last update check.") "Defines the color management behavior." #define COLOR_PROFILE_POLICY_BLURB \ -_("How to handle embedded color profiles when opening a file.") +_("What to do when opening a file with an embedded ICC color profile.") #define COLOR_PROFILE_PATH_BLURB \ _("Sets the default folder path for all color profile file dialogs.") diff --git a/app/core/core-enums.c b/app/core/core-enums.c index 1a65054..7ab9c2b 100644 --- a/app/core/core-enums.c +++ b/app/core/core-enums.c @@ -1195,6 +1195,7 @@ pika_undo_type_get_type (void) { PIKA_UNDO_GROUP_IMAGE_VECTORS_MERGE, "PIKA_UNDO_GROUP_IMAGE_VECTORS_MERGE", "group-image-vectors-merge" }, { PIKA_UNDO_GROUP_IMAGE_QUICK_MASK, "PIKA_UNDO_GROUP_IMAGE_QUICK_MASK", "group-image-quick-mask" }, { PIKA_UNDO_GROUP_IMAGE_GRID, "PIKA_UNDO_GROUP_IMAGE_GRID", "group-image-grid" }, + { PIKA_UNDO_GROUP_IMAGE_COLORMAP_REMAP, "PIKA_UNDO_GROUP_IMAGE_COLORMAP_REMAP", "group-image-colormap-remap" }, { PIKA_UNDO_GROUP_GUIDE, "PIKA_UNDO_GROUP_GUIDE", "group-guide" }, { PIKA_UNDO_GROUP_SAMPLE_POINT, "PIKA_UNDO_GROUP_SAMPLE_POINT", "group-sample-point" }, { PIKA_UNDO_GROUP_DRAWABLE, "PIKA_UNDO_GROUP_DRAWABLE", "group-drawable" }, @@ -1303,6 +1304,7 @@ pika_undo_type_get_type (void) { PIKA_UNDO_GROUP_IMAGE_VECTORS_MERGE, NC_("undo-type", "Merge paths"), NULL }, { PIKA_UNDO_GROUP_IMAGE_QUICK_MASK, NC_("undo-type", "Quick Mask"), NULL }, { PIKA_UNDO_GROUP_IMAGE_GRID, NC_("undo-type", "Grid"), NULL }, + { PIKA_UNDO_GROUP_IMAGE_COLORMAP_REMAP, NC_("undo-type", "Colormap remapping"), NULL }, { PIKA_UNDO_GROUP_GUIDE, NC_("undo-type", "Guide"), NULL }, { PIKA_UNDO_GROUP_SAMPLE_POINT, NC_("undo-type", "Sample Point"), NULL }, { PIKA_UNDO_GROUP_DRAWABLE, NC_("undo-type", "Layer/Channel"), NULL }, diff --git a/app/core/core-enums.h b/app/core/core-enums.h index d6e234d..376aac9 100644 --- a/app/core/core-enums.h +++ b/app/core/core-enums.h @@ -548,6 +548,7 @@ typedef enum /*< pdb-skip >*/ PIKA_UNDO_GROUP_IMAGE_VECTORS_MERGE, /*< desc="Merge paths" >*/ PIKA_UNDO_GROUP_IMAGE_QUICK_MASK, /*< desc="Quick Mask" >*/ PIKA_UNDO_GROUP_IMAGE_GRID, /*< desc="Grid" >*/ + PIKA_UNDO_GROUP_IMAGE_COLORMAP_REMAP, /*< desc="Colormap remapping" >*/ PIKA_UNDO_GROUP_GUIDE, /*< desc="Guide" >*/ PIKA_UNDO_GROUP_SAMPLE_POINT, /*< desc="Sample Point" >*/ PIKA_UNDO_GROUP_DRAWABLE, /*< desc="Layer/Channel" >*/ diff --git a/app/core/pika-gui.c b/app/core/pika-gui.c index 289b8ab..49b4b2d 100644 --- a/app/core/pika-gui.c +++ b/app/core/pika-gui.c @@ -33,8 +33,10 @@ #include "pikacontainer.h" #include "pikacontext.h" #include "pikadisplay.h" +#include "pikadrawable.h" #include "pikaimage.h" #include "pikaprogress.h" +#include "pikaresource.h" #include "pikawaitable.h" #include "about.h" @@ -325,17 +327,17 @@ pika_get_empty_display (Pika *pika) return NULL; } -guint32 +GBytes * pika_get_display_window_id (Pika *pika, PikaDisplay *display) { - g_return_val_if_fail (PIKA_IS_PIKA (pika), -1); - g_return_val_if_fail (PIKA_IS_DISPLAY (display), -1); + g_return_val_if_fail (PIKA_IS_PIKA (pika), NULL); + g_return_val_if_fail (PIKA_IS_DISPLAY (display), NULL); if (pika->gui.display_get_window_id) return pika->gui.display_get_window_id (display); - return -1; + return NULL; } PikaDisplay * @@ -407,10 +409,11 @@ gboolean pika_pdb_dialog_new (Pika *pika, PikaContext *context, PikaProgress *progress, - PikaContainer *container, + GType contents_type, + GBytes *parent_handle, const gchar *title, const gchar *callback_name, - const gchar *object_name, + PikaObject *object, ...) { gboolean retval = FALSE; @@ -418,7 +421,10 @@ pika_pdb_dialog_new (Pika *pika, g_return_val_if_fail (PIKA_IS_PIKA (pika), FALSE); g_return_val_if_fail (PIKA_IS_CONTEXT (context), FALSE); g_return_val_if_fail (progress == NULL || PIKA_IS_PROGRESS (progress), FALSE); - g_return_val_if_fail (PIKA_IS_CONTAINER (container), FALSE); + g_return_val_if_fail (g_type_is_a (contents_type, PIKA_TYPE_RESOURCE) || + g_type_is_a (contents_type, PIKA_TYPE_DRAWABLE), FALSE); + g_return_val_if_fail (object == NULL || + g_type_is_a (G_TYPE_FROM_INSTANCE (object), contents_type), FALSE); g_return_val_if_fail (title != NULL, FALSE); g_return_val_if_fail (callback_name != NULL, FALSE); @@ -426,12 +432,11 @@ pika_pdb_dialog_new (Pika *pika, { va_list args; - va_start (args, object_name); + va_start (args, object); retval = pika->gui.pdb_dialog_new (pika, context, progress, - container, title, - callback_name, object_name, - args); + contents_type, parent_handle, title, + callback_name, object, args); va_end (args); } @@ -440,27 +445,28 @@ pika_pdb_dialog_new (Pika *pika, } gboolean -pika_pdb_dialog_set (Pika *pika, - PikaContainer *container, - const gchar *callback_name, - const gchar *object_name, +pika_pdb_dialog_set (Pika *pika, + GType contents_type, + const gchar *callback_name, + PikaObject *object, ...) { gboolean retval = FALSE; g_return_val_if_fail (PIKA_IS_PIKA (pika), FALSE); - g_return_val_if_fail (PIKA_IS_CONTAINER (container), FALSE); + g_return_val_if_fail (g_type_is_a (contents_type, PIKA_TYPE_RESOURCE) || + contents_type == PIKA_TYPE_DRAWABLE, FALSE); g_return_val_if_fail (callback_name != NULL, FALSE); - g_return_val_if_fail (object_name != NULL, FALSE); + g_return_val_if_fail (object == NULL || g_type_is_a (G_TYPE_FROM_INSTANCE (object), contents_type), FALSE); if (pika->gui.pdb_dialog_set) { va_list args; - va_start (args, object_name); + va_start (args, object); - retval = pika->gui.pdb_dialog_set (pika, container, callback_name, - object_name, args); + retval = pika->gui.pdb_dialog_set (pika, contents_type, callback_name, + object, args); va_end (args); } @@ -470,15 +476,16 @@ pika_pdb_dialog_set (Pika *pika, gboolean pika_pdb_dialog_close (Pika *pika, - PikaContainer *container, + GType contents_type, const gchar *callback_name) { g_return_val_if_fail (PIKA_IS_PIKA (pika), FALSE); - g_return_val_if_fail (PIKA_IS_CONTAINER (container), FALSE); + g_return_val_if_fail (g_type_is_a (contents_type, PIKA_TYPE_RESOURCE) || + contents_type == PIKA_TYPE_DRAWABLE, FALSE); g_return_val_if_fail (callback_name != NULL, FALSE); if (pika->gui.pdb_dialog_close) - return pika->gui.pdb_dialog_close (pika, container, callback_name); + return pika->gui.pdb_dialog_close (pika, contents_type, callback_name); return FALSE; } diff --git a/app/core/pika-gui.h b/app/core/pika-gui.h index 1ca23cb..4b58614 100644 --- a/app/core/pika-gui.h +++ b/app/core/pika-gui.h @@ -58,7 +58,7 @@ struct _PikaGui PikaObject * (* get_window_strategy) (Pika *pika); PikaDisplay * (* get_empty_display) (Pika *pika); - guint32 (* display_get_window_id) (PikaDisplay *display); + GBytes * (* display_get_window_id) (PikaDisplay *display); PikaDisplay * (* display_create) (Pika *pika, PikaImage *image, PikaUnit unit, @@ -77,18 +77,19 @@ struct _PikaGui gboolean (* pdb_dialog_new) (Pika *pika, PikaContext *context, PikaProgress *progress, - PikaContainer *container, + GType contents_type, + GBytes *parent_handle, const gchar *title, const gchar *callback_name, - const gchar *object_name, + PikaObject *object, va_list args); gboolean (* pdb_dialog_set) (Pika *pika, - PikaContainer *container, + GType contents_type, const gchar *callback_name, - const gchar *object_name, + PikaObject *object, va_list args); gboolean (* pdb_dialog_close) (Pika *pika, - PikaContainer *container, + GType contents_type, const gchar *callback_name); gboolean (* recent_list_add_file) (Pika *pika, GFile *file, @@ -126,7 +127,7 @@ PikaDisplay * pika_get_display_by_id (Pika *pika, gint ID); gint pika_get_display_id (Pika *pika, PikaDisplay *display); -guint32 pika_get_display_window_id (Pika *pika, +GBytes * pika_get_display_window_id (Pika *pika, PikaDisplay *display); PikaDisplay * pika_create_display (Pika *pika, PikaImage *image, @@ -175,19 +176,21 @@ GFile * pika_get_icon_theme_dir (Pika *pika); gboolean pika_pdb_dialog_new (Pika *pika, PikaContext *context, PikaProgress *progress, - PikaContainer *container, + GType contents_type, + GBytes *parent_handle, const gchar *title, const gchar *callback_name, - const gchar *object_name, + PikaObject *object, ...) G_GNUC_NULL_TERMINATED; gboolean pika_pdb_dialog_set (Pika *pika, - PikaContainer *container, + GType contents_type, const gchar *callback_name, - const gchar *object_name, + PikaObject *object, ...) G_GNUC_NULL_TERMINATED; gboolean pika_pdb_dialog_close (Pika *pika, - PikaContainer *container, + GType contents_type, const gchar *callback_name); + gboolean pika_recent_list_add_file (Pika *pika, GFile *file, const gchar *mime_type); diff --git a/app/core/pikacontainer.c b/app/core/pikacontainer.c index 8264fcc..14d0fb1 100644 --- a/app/core/pikacontainer.c +++ b/app/core/pikacontainer.c @@ -202,6 +202,7 @@ pika_container_class_init (PikaContainerClass *klass) klass->search = NULL; klass->get_unique_names = NULL; klass->get_child_by_name = NULL; + klass->get_children_by_name = NULL; klass->get_child_by_index = NULL; klass->get_child_index = NULL; @@ -885,6 +886,34 @@ pika_container_get_unique_names (PikaContainer *container) return FALSE; } +GList * +pika_container_get_children_by_name (PikaContainer *container, + const gchar *name) +{ + g_return_val_if_fail (PIKA_IS_CONTAINER (container), NULL); + + if (!name) + return NULL; + + if (PIKA_CONTAINER_GET_CLASS (container)->get_children_by_name != NULL && + ! pika_container_get_unique_names (container)) + { + return PIKA_CONTAINER_GET_CLASS (container)->get_children_by_name (container, + name); + } + else + { + PikaObject *child; + + child = PIKA_CONTAINER_GET_CLASS (container)->get_child_by_name (container, name); + + if (child != NULL) + return g_list_prepend (NULL, child); + else + return NULL; + } +} + PikaObject * pika_container_get_child_by_name (PikaContainer *container, const gchar *name) diff --git a/app/core/pikacontainer.h b/app/core/pikacontainer.h index 056c358..ceb5a75 100644 --- a/app/core/pikacontainer.h +++ b/app/core/pikacontainer.h @@ -79,6 +79,8 @@ struct _PikaContainerClass gboolean (* get_unique_names) (PikaContainer *container); PikaObject * (* get_child_by_name) (PikaContainer *container, const gchar *name); + GList * (* get_children_by_name) (PikaContainer *container, + const gchar *name); PikaObject * (* get_child_by_index) (PikaContainer *container, gint index); gint (* get_child_index) (PikaContainer *container, @@ -121,6 +123,8 @@ PikaObject * pika_container_search (PikaContainer *contain gboolean pika_container_get_unique_names (PikaContainer *container); +GList * pika_container_get_children_by_name (PikaContainer *container, + const gchar *name); PikaObject * pika_container_get_child_by_name (PikaContainer *container, const gchar *name); PikaObject * pika_container_get_child_by_index (PikaContainer *container, diff --git a/app/core/pikadata.c b/app/core/pikadata.c index bafa507..c2eebbd 100644 --- a/app/core/pikadata.c +++ b/app/core/pikadata.c @@ -34,6 +34,7 @@ #include "pika-memsize.h" #include "pikadata.h" #include "pikaidtable.h" +#include "pikaimage.h" #include "pikatag.h" #include "pikatagged.h" @@ -51,6 +52,7 @@ enum PROP_0, PROP_ID, PROP_FILE, + PROP_IMAGE, PROP_WRITABLE, PROP_DELETABLE, PROP_MIME_TYPE @@ -59,8 +61,10 @@ enum struct _PikaDataPrivate { - gint ID; - GFile *file; + gint ID; + GFile *file; + PikaImage *image; + GQuark mime_type; guint writable : 1; guint deletable : 1; @@ -172,6 +176,11 @@ pika_data_class_init (PikaDataClass *klass) G_TYPE_FILE, PIKA_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_IMAGE, + g_param_spec_object ("image", NULL, NULL, + PIKA_TYPE_IMAGE, + PIKA_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_WRITABLE, g_param_spec_boolean ("writable", NULL, NULL, FALSE, @@ -268,6 +277,12 @@ pika_data_set_property (GObject *object, private->deletable); break; + case PROP_IMAGE: + pika_data_set_image (data, + g_value_get_object (value), + private->writable, + private->deletable); + break; case PROP_WRITABLE: private->writable = g_value_get_boolean (value); break; @@ -307,6 +322,10 @@ pika_data_get_property (GObject *object, g_value_set_object (value, private->file); break; + case PROP_IMAGE: + g_value_set_object (value, private->image); + break; + case PROP_WRITABLE: g_value_set_boolean (value, private->writable); break; @@ -462,7 +481,7 @@ pika_data_get_identifier (PikaTagged *tagged) gchar *identifier = NULL; gchar *collection = NULL; - g_return_val_if_fail (private->internal || private->file != NULL, NULL); + g_return_val_if_fail (private->internal || private->file != NULL || private->image != NULL, NULL); collection = pika_data_get_collection (data); /* The identifier is guaranteed to be unique because we use 2 directory @@ -503,7 +522,7 @@ pika_data_get_collection (PikaData *data) PikaDataPrivate *private = PIKA_DATA_GET_PRIVATE (data); gchar *collection = NULL; - g_return_val_if_fail (private->internal || private->file != NULL, NULL); + g_return_val_if_fail (private->internal || private->file != NULL || private->image != NULL, NULL); if (private->file) { @@ -551,6 +570,10 @@ pika_data_get_collection (PikaData *data) g_free (path); } + else if (private->image) + { + collection = g_strdup_printf ("[image-id-%d]", pika_image_get_id (private->image)); + } else if (private->internal) { collection = g_strdup (private->collection); @@ -603,7 +626,7 @@ pika_data_save (PikaData *data, g_return_val_if_fail (private->writable == TRUE, FALSE); - if (private->internal) + if (private->internal || private->image != NULL) { private->dirty = FALSE; return TRUE; @@ -862,6 +885,8 @@ pika_data_set_file (PikaData *data, if (private->internal) return; + g_return_if_fail (private->image == NULL); + g_set_object (&private->file, file); private->writable = FALSE; @@ -937,6 +962,53 @@ pika_data_get_file (PikaData *data) return private->file; } +/** + * pika_data_set_image: + * @data: A #PikaData object + * @image: Image to assign to @data. + * @writable: %TRUE if we want to be able to write to this file. + * @deletable: %TRUE if we want to be able to delete this file. + * + * This function assigns an image to @data. This can only be done if no file has + * been assigned (a non-internal data can be attached either to a file or to an + * image). + **/ +void +pika_data_set_image (PikaData *data, + PikaImage *image, + gboolean writable, + gboolean deletable) +{ + PikaDataPrivate *private; + + g_return_if_fail (PIKA_IS_DATA (data)); + g_return_if_fail (PIKA_IS_IMAGE (image)); + + private = PIKA_DATA_GET_PRIVATE (data); + + if (private->internal) + return; + + g_return_if_fail (private->file == NULL); + + g_set_object (&private->image, image); + + private->writable = writable ? TRUE : FALSE; + private->deletable = deletable ? TRUE : FALSE; +} + +PikaImage * +pika_data_get_image (PikaData *data) +{ + PikaDataPrivate *private; + + g_return_val_if_fail (PIKA_IS_DATA (data), NULL); + + private = PIKA_DATA_GET_PRIVATE (data); + + return private->image; +} + /** * pika_data_create_filename: * @data: a #Pikadata object. diff --git a/app/core/pikadata.h b/app/core/pikadata.h index 2f4479a..f6917aa 100644 --- a/app/core/pikadata.h +++ b/app/core/pikadata.h @@ -102,6 +102,11 @@ void pika_data_set_file (PikaData *data, gboolean writable, gboolean deletable); GFile * pika_data_get_file (PikaData *data); +void pika_data_set_image (PikaData *data, + PikaImage *image, + gboolean writable, + gboolean deletable); +PikaImage * pika_data_get_image (PikaData *data); void pika_data_create_filename (PikaData *data, GFile *dest_dir); diff --git a/app/core/pikadatafactory.c b/app/core/pikadatafactory.c index 513b3fc..9d51802 100644 --- a/app/core/pikadatafactory.c +++ b/app/core/pikadatafactory.c @@ -403,6 +403,9 @@ pika_data_factory_real_data_save (PikaDataFactory *factory) PikaData *data = list->data; GError *error = NULL; + if (pika_data_get_image (data)) + continue; + if (! pika_data_get_file (data)) pika_data_create_filename (data, writable_dir); @@ -460,6 +463,7 @@ pika_data_factory_real_data_duplicate (PikaDataFactory *factory, gint copy_len; gint number; gchar *new_name; + GError *error = NULL; ext = strrchr (name, '#'); copy_len = strlen (_("copy")); @@ -479,8 +483,12 @@ pika_data_factory_real_data_duplicate (PikaDataFactory *factory, pika_object_take_name (PIKA_OBJECT (new_data), new_name); + if (! pika_data_factory_data_save_single (factory, new_data, &error)) + g_critical ("%s: data saving failed: %s", G_STRFUNC, error->message); + pika_container_add (priv->container, PIKA_OBJECT (new_data)); g_object_unref (new_data); + g_clear_error (&error); } return new_data; @@ -674,8 +682,14 @@ pika_data_factory_data_new (PikaDataFactory *factory, if (data) { + GError *error = NULL; + + if (! pika_data_factory_data_save_single (factory, data, &error)) + g_critical ("%s: data saving failed: %s", G_STRFUNC, error->message); + pika_container_add (priv->container, PIKA_OBJECT (data)); g_object_unref (data); + g_clear_error (&error); return data; } @@ -750,7 +764,7 @@ pika_data_factory_data_save_single (PikaDataFactory *factory, g_return_val_if_fail (PIKA_IS_DATA (data), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - if (! pika_data_is_dirty (data)) + if (! pika_data_is_dirty (data) || pika_data_get_image (data)) return TRUE; if (! pika_data_get_file (data)) diff --git a/app/core/pikaimage-colormap.c b/app/core/pikaimage-colormap.c index 5eebb2b..22b3ca8 100644 --- a/app/core/pikaimage-colormap.c +++ b/app/core/pikaimage-colormap.c @@ -31,25 +31,43 @@ #include "core-types.h" +#include "config/pikageglconfig.h" + #include "gegl/pika-babl.h" +#include "gegl/pika-gegl-loops.h" #include "pika.h" #include "pikacontainer.h" #include "pikadatafactory.h" +#include "pikadrawable.h" #include "pikaimage.h" #include "pikaimage-colormap.h" #include "pikaimage-private.h" +#include "pikaimage-undo.h" #include "pikaimage-undo-push.h" #include "pikapalette.h" #include "pika-intl.h" +typedef struct +{ + GeglBuffer *buffer; + const Babl *format; + + /* Shared by jobs. */ + gboolean *found; + GRWLock *lock; +} IndexUsedJobData; + + /* local function prototype */ -static void pika_image_colormap_set_palette_entry (PikaImage *image, - const PikaRGB *color, - gint index); +static void pika_image_colormap_set_palette_entry (PikaImage *image, + const PikaRGB *color, + gint index); +static void pika_image_colormap_thread_is_index_used (IndexUsedJobData *data, + gint index); /* public functions */ @@ -80,7 +98,7 @@ pika_image_colormap_init (PikaImage *image) pika_palette_set_columns (private->palette, 16); - pika_data_make_internal (PIKA_DATA (private->palette), palette_id); + pika_data_set_image (PIKA_DATA (private->palette), image, TRUE, FALSE); palettes = pika_data_factory_get_container (image->pika->palette_factory); @@ -319,9 +337,8 @@ pika_image_set_colormap (PikaImage *image, pika_image_colormap_set_palette_entry (image, &color, i); } - pika_data_thaw (PIKA_DATA (private->palette)); - pika_image_colormap_changed (image, -1); + pika_data_thaw (PIKA_DATA (private->palette)); } void @@ -347,6 +364,45 @@ pika_image_unset_colormap (PikaImage *image, pika_image_colormap_changed (image, -1); } +gboolean +pika_image_colormap_is_index_used (PikaImage *image, + gint color_index) +{ + GList *layers; + GList *iter; + GThreadPool *pool; + GRWLock lock; + gboolean found = FALSE; + gint num_processors; + + g_rw_lock_init (&lock); + num_processors = PIKA_GEGL_CONFIG (image->pika->config)->num_processors; + layers = pika_image_get_layer_list (image); + + pool = g_thread_pool_new_full ((GFunc) pika_image_colormap_thread_is_index_used, + GINT_TO_POINTER (color_index), + (GDestroyNotify) g_free, + num_processors, TRUE, NULL); + for (iter = layers; iter; iter = g_list_next (iter)) + { + IndexUsedJobData *job_data; + + job_data = g_malloc (sizeof (IndexUsedJobData )); + job_data->buffer = pika_drawable_get_buffer (iter->data); + job_data->format = pika_drawable_get_format_without_alpha (iter->data); + job_data->found = &found; + job_data->lock = &lock; + + g_thread_pool_push (pool, job_data, NULL); + } + + g_thread_pool_free (pool, FALSE, TRUE); + g_rw_lock_clear (&lock); + g_list_free (layers); + + return found; +} + void pika_image_get_colormap_entry (PikaImage *image, gint color_index, @@ -420,6 +476,57 @@ pika_image_add_colormap_entry (PikaImage *image, pika_image_colormap_changed (image, -1); } +gboolean +pika_image_delete_colormap_entry (PikaImage *image, + gint color_index, + gboolean push_undo) +{ + g_return_val_if_fail (PIKA_IS_IMAGE (image), FALSE); + + if (! pika_image_colormap_is_index_used (image, color_index)) + { + PikaImagePrivate *private; + PikaPaletteEntry *entry; + GList *layers; + GList *iter; + + if (push_undo) + { + pika_image_undo_group_start (image, PIKA_UNDO_GROUP_IMAGE_COLORMAP_REMAP, + C_("undo-type", "Delete Colormap entry")); + + pika_image_undo_push_image_colormap (image, NULL); + } + + private = PIKA_IMAGE_GET_PRIVATE (image); + layers = pika_image_get_layer_list (image); + + for (iter = layers; iter; iter = g_list_next (iter)) + { + if (push_undo) + pika_image_undo_push_drawable_mod (image, NULL, iter->data, TRUE); + + pika_gegl_shift_index (pika_drawable_get_buffer (iter->data), NULL, + pika_drawable_get_format (iter->data), + color_index, -1); + } + + entry = pika_palette_get_entry (private->palette, color_index); + pika_palette_delete_entry (private->palette, entry); + + g_list_free (layers); + + if (push_undo) + pika_image_undo_group_end (image); + + pika_image_colormap_changed (image, -1); + + return TRUE; + } + + return FALSE; +} + /* private functions */ @@ -442,3 +549,22 @@ pika_image_colormap_set_palette_entry (PikaImage *image, pika_palette_set_entry (private->palette, index, name, color); } + +static void +pika_image_colormap_thread_is_index_used (IndexUsedJobData *data, + gint index) +{ + g_rw_lock_reader_lock (data->lock); + if (*data->found) + { + g_rw_lock_reader_unlock (data->lock); + return; + } + g_rw_lock_reader_unlock (data->lock); + if (pika_gegl_is_index_used (data->buffer, NULL, data->format, index)) + { + g_rw_lock_writer_lock (data->lock); + *data->found = TRUE; + g_rw_lock_writer_unlock (data->lock); + } +} diff --git a/app/core/pikaimage-colormap.h b/app/core/pikaimage-colormap.h index 6ea459f..7c7686a 100644 --- a/app/core/pikaimage-colormap.h +++ b/app/core/pikaimage-colormap.h @@ -49,6 +49,9 @@ void pika_image_set_colormap (PikaImage *image, void pika_image_unset_colormap (PikaImage *image, gboolean push_undo); +gboolean pika_image_colormap_is_index_used (PikaImage *image, + gint color_index); + void pika_image_get_colormap_entry (PikaImage *image, gint color_index, PikaRGB *color); @@ -59,6 +62,9 @@ void pika_image_set_colormap_entry (PikaImage *image, void pika_image_add_colormap_entry (PikaImage *image, const PikaRGB *color); +gboolean pika_image_delete_colormap_entry (PikaImage *image, + gint color_index, + gboolean push_undo); #endif /* __PIKA_IMAGE_COLORMAP_H__ */ diff --git a/app/core/pikaimage-metadata.c b/app/core/pikaimage-metadata.c index f461adb..8ef2e13 100644 --- a/app/core/pikaimage-metadata.c +++ b/app/core/pikaimage-metadata.c @@ -24,17 +24,22 @@ #include #include #include +#include #include "libpikabase/pikabase.h" #include "libpikacolor/pikacolor.h" #include "core-types.h" +#include "pika.h" #include "pikaimage.h" #include "pikaimage-color-profile.h" #include "pikaimage-metadata.h" #include "pikaimage-private.h" +#include "pikaimage-rotate.h" +#include "pikaimage-undo.h" #include "pikaimage-undo-push.h" +#include "pikalayer-new.h" /* public functions */ @@ -186,3 +191,110 @@ pika_image_metadata_update_colorspace (PikaImage *image) pika_metadata_set_colorspace (metadata, space); } } + +/** + * pika_image_metadata_load_thumbnail: + * @pika: The #Pika object. + * @file: A #GFile image. + * @full_image_width: the width of the full image (not the thumbnail). + * @full_image_height: the height of the full image (not the thumbnail). + * @error: Return location for error message + * + * Retrieves a thumbnail from metadata in @file if present. + * It does not need to actually load the full image, only the metadata through + * GExiv2, which makes it fast. + * + * Returns: (transfer none) (nullable): a #PikaImage of the @file thumbnail. + */ +PikaImage * +pika_image_metadata_load_thumbnail (Pika *pika, + GFile *file, + gint *full_image_width, + gint *full_image_height, + const Babl **format, + GError **error) +{ + PikaMetadata *metadata; + GInputStream *input_stream; + GdkPixbuf *pixbuf; + guint8 *thumbnail_buffer; + gint thumbnail_size; + PikaImage *image = NULL; + + g_return_val_if_fail (G_IS_FILE (file), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + metadata = pika_metadata_load_from_file (file, error); + if (! metadata) + return NULL; + + if (! gexiv2_metadata_get_exif_thumbnail (GEXIV2_METADATA (metadata), + &thumbnail_buffer, + &thumbnail_size)) + { + g_object_unref (metadata); + return NULL; + } + + input_stream = g_memory_input_stream_new_from_data (thumbnail_buffer, + thumbnail_size, + (GDestroyNotify) g_free); + pixbuf = gdk_pixbuf_new_from_stream (input_stream, NULL, error); + g_object_unref (input_stream); + + if (pixbuf) + { + PikaLayer *layer; + + image = pika_image_new (pika, + gdk_pixbuf_get_width (pixbuf), + gdk_pixbuf_get_height (pixbuf), + PIKA_RGB, PIKA_PRECISION_U8_NON_LINEAR); + pika_image_undo_disable (image); + + /* XXX This is possibly wrong, because an image of a given color space may + * have a thumbnail stored in a different colorspace. This is even more + * true with PIKA which always exports RGB thumbnails (see code in + * pika_image_metadata_save_filter()), even for say grayscale images. + * Nevertheless other software may store thumbnail using the same + * colorspace. + */ + *format = pika_pixbuf_get_format (pixbuf); + layer = pika_layer_new_from_pixbuf (pixbuf, image, + pika_image_get_layer_format (image, FALSE), + /* No need to localize; this image is short-lived. */ + "Background", + PIKA_OPACITY_OPAQUE, + pika_image_get_default_new_layer_mode (image)); + g_object_unref (pixbuf); + + pika_image_add_layer (image, layer, NULL, 0, FALSE); + + pika_image_apply_metadata_orientation (image, pika_get_user_context (pika), metadata, NULL); + } + + /* This is the unoriented dimensions. Should we switch when there is a 90 or + * 270 degree rotation? We don't actually know if the metadata orientation is + * correct. + */ + *full_image_width = gexiv2_metadata_get_pixel_width (GEXIV2_METADATA (metadata)); + *full_image_height = gexiv2_metadata_get_pixel_height (GEXIV2_METADATA (metadata)); + + if (*full_image_width < 1 || *full_image_height < 1) + { + /* Dimensions stored in metadata might be less accurate, yet it's still + * informational. + */ + *full_image_width = gexiv2_metadata_try_get_metadata_pixel_width (GEXIV2_METADATA (metadata), NULL); + *full_image_height = gexiv2_metadata_try_get_metadata_pixel_width (GEXIV2_METADATA (metadata), NULL); + } + if (*full_image_width < 1 || *full_image_height < 1) + { + *full_image_width = 0; + *full_image_height = 0; + } + + g_object_unref (metadata); + + return image; +} diff --git a/app/core/pikaimage-metadata.h b/app/core/pikaimage-metadata.h index f95ff2e..e7c634a 100644 --- a/app/core/pikaimage-metadata.h +++ b/app/core/pikaimage-metadata.h @@ -33,5 +33,12 @@ void pika_image_metadata_update_bits_per_sample (PikaImage *image); void pika_image_metadata_update_resolution (PikaImage *image); void pika_image_metadata_update_colorspace (PikaImage *image); +PikaImage * pika_image_metadata_load_thumbnail (Pika *pika, + GFile *file, + gint *full_image_width, + gint *full_image_height, + const Babl **format, + GError **error); + #endif /* __PIKA_IMAGE_METADATA_H__ */ diff --git a/app/core/pikaimage-rotate.c b/app/core/pikaimage-rotate.c index feaf550..5027e4f 100644 --- a/app/core/pikaimage-rotate.c +++ b/app/core/pikaimage-rotate.c @@ -282,6 +282,17 @@ pika_image_import_rotation_metadata (PikaImage *image, } } +void +pika_image_apply_metadata_orientation (PikaImage *image, + PikaContext *context, + PikaMetadata *metadata, + PikaProgress *progress) +{ + pika_image_metadata_rotate (image, context, + gexiv2_metadata_try_get_orientation (GEXIV2_METADATA (metadata), NULL), + progress); +} + /* Private Functions */ diff --git a/app/core/pikaimage-rotate.h b/app/core/pikaimage-rotate.h index 9df2e28..8cc0911 100644 --- a/app/core/pikaimage-rotate.h +++ b/app/core/pikaimage-rotate.h @@ -23,14 +23,20 @@ #define __PIKA_IMAGE_ROTATE_H__ -void pika_image_rotate (PikaImage *image, - PikaContext *context, - PikaRotationType rotate_type, - PikaProgress *progress); +void pika_image_rotate (PikaImage *image, + PikaContext *context, + PikaRotationType rotate_type, + PikaProgress *progress); + +void pika_image_import_rotation_metadata (PikaImage *image, + PikaContext *context, + PikaProgress *progress, + gboolean interactive); + +void pika_image_apply_metadata_orientation (PikaImage *image, + PikaContext *context, + PikaMetadata *metadata, + PikaProgress *progress); -void pika_image_import_rotation_metadata (PikaImage *image, - PikaContext *context, - PikaProgress *progress, - gboolean interactive); #endif /* __PIKA_IMAGE_ROTATE_H__ */ diff --git a/app/core/pikaimage-undo.c b/app/core/pikaimage-undo.c index 5ebfb98..8ed171e 100644 --- a/app/core/pikaimage-undo.c +++ b/app/core/pikaimage-undo.c @@ -625,6 +625,9 @@ pika_image_undo_dirty_from_type (PikaUndoType undo_type) case PIKA_UNDO_GROUP_IMAGE_CONVERT: return PIKA_DIRTY_IMAGE | PIKA_DIRTY_DRAWABLE; + case PIKA_UNDO_GROUP_IMAGE_COLORMAP_REMAP: + return PIKA_DIRTY_IMAGE | PIKA_DIRTY_DRAWABLE; + case PIKA_UNDO_GROUP_IMAGE_LAYERS_MERGE: return PIKA_DIRTY_IMAGE_STRUCTURE | PIKA_DIRTY_DRAWABLE; diff --git a/app/core/pikaimagefile.c b/app/core/pikaimagefile.c index 44b87e6..a102f6f 100644 --- a/app/core/pikaimagefile.c +++ b/app/core/pikaimagefile.c @@ -45,6 +45,7 @@ #include "pikacontainer.h" #include "pikacontext.h" #include "pikaimage.h" +#include "pikaimage-metadata.h" #include "pikaimagefile.h" #include "pikapickable.h" #include "pikaprogress.h" @@ -486,19 +487,37 @@ pika_imagefile_create_thumbnail (PikaImagefile *imagefile, if (error && *error) { g_printerr ("Info: Thumbnail load procedure failed: %s\n" - " Falling back to file load procedure.\n", + " Falling back to metadata or file load.\n", (*error)->message); g_clear_error (error); } - image = file_open_image (private->pika, context, progress, - private->file, - FALSE, NULL, PIKA_RUN_NONINTERACTIVE, - &status, &mime_type, error); - + image = pika_image_metadata_load_thumbnail (private->pika, private->file, &width, &height, &format, error); if (image) - pika_thumbnail_set_info_from_image (private->thumbnail, - mime_type, image); + { + pika_thumbnail_set_info (private->thumbnail, + mime_type, width, height, + format, 0); + } + else + { + if (error && *error) + { + g_printerr ("Info: metadata load failed: %s\n" + " Falling back to file load procedure.\n", + (*error)->message); + g_clear_error (error); + } + + image = file_open_image (private->pika, context, progress, + private->file, + FALSE, NULL, PIKA_RUN_NONINTERACTIVE, + &status, &mime_type, error); + + if (image) + pika_thumbnail_set_info_from_image (private->thumbnail, + mime_type, image); + } } if (image) diff --git a/app/core/pikalist.c b/app/core/pikalist.c index ff3833a..8b69961 100644 --- a/app/core/pikalist.c +++ b/app/core/pikalist.c @@ -76,6 +76,8 @@ static PikaObject * pika_list_search (PikaContainer *conta PikaContainerSearchFunc func, gpointer user_data); static gboolean pika_list_get_unique_names (PikaContainer *container); +static GList * pika_list_get_children_by_name (PikaContainer *container, + const gchar *name); static PikaObject * pika_list_get_child_by_name (PikaContainer *container, const gchar *name); static PikaObject * pika_list_get_child_by_index (PikaContainer *container, @@ -101,23 +103,24 @@ pika_list_class_init (PikaListClass *klass) PikaObjectClass *pika_object_class = PIKA_OBJECT_CLASS (klass); PikaContainerClass *container_class = PIKA_CONTAINER_CLASS (klass); - object_class->finalize = pika_list_finalize; - object_class->set_property = pika_list_set_property; - object_class->get_property = pika_list_get_property; + object_class->finalize = pika_list_finalize; + object_class->set_property = pika_list_set_property; + object_class->get_property = pika_list_get_property; - pika_object_class->get_memsize = pika_list_get_memsize; + pika_object_class->get_memsize = pika_list_get_memsize; - container_class->add = pika_list_add; - container_class->remove = pika_list_remove; - container_class->reorder = pika_list_reorder; - container_class->clear = pika_list_clear; - container_class->have = pika_list_have; - container_class->foreach = pika_list_foreach; - container_class->search = pika_list_search; - container_class->get_unique_names = pika_list_get_unique_names; - container_class->get_child_by_name = pika_list_get_child_by_name; - container_class->get_child_by_index = pika_list_get_child_by_index; - container_class->get_child_index = pika_list_get_child_index; + container_class->add = pika_list_add; + container_class->remove = pika_list_remove; + container_class->reorder = pika_list_reorder; + container_class->clear = pika_list_clear; + container_class->have = pika_list_have; + container_class->foreach = pika_list_foreach; + container_class->search = pika_list_search; + container_class->get_unique_names = pika_list_get_unique_names; + container_class->get_children_by_name = pika_list_get_children_by_name; + container_class->get_child_by_name = pika_list_get_child_by_name; + container_class->get_child_by_index = pika_list_get_child_by_index; + container_class->get_child_index = pika_list_get_child_index; g_object_class_install_property (object_class, PROP_UNIQUE_NAMES, g_param_spec_boolean ("unique-names", @@ -369,6 +372,29 @@ pika_list_get_unique_names (PikaContainer *container) return list->unique_names; } +static GList * +pika_list_get_children_by_name (PikaContainer *container, + const gchar *name) +{ + PikaList *list = PIKA_LIST (container); + GList *children = NULL; + GList *iter; + + for (iter = list->queue->head; iter; iter = g_list_next (iter)) + { + PikaObject *object = iter->data; + + if (! strcmp (pika_object_get_name (object), name)) + { + children = g_list_prepend (children, object); + if (list->unique_names) + return children; + } + } + + return children; +} + static PikaObject * pika_list_get_child_by_name (PikaContainer *container, const gchar *name) diff --git a/app/core/pikapalette.c b/app/core/pikapalette.c index efe42b2..e073fab 100644 --- a/app/core/pikapalette.c +++ b/app/core/pikapalette.c @@ -33,6 +33,8 @@ #include "core-types.h" #include "pika-memsize.h" +#include "pikaimage.h" +#include "pikaimage-undo-push.h" #include "pikapalette.h" #include "pikapalette-load.h" #include "pikapalette-save.h" @@ -44,6 +46,12 @@ #define RGB_EPSILON 1e-6 +enum +{ + ENTRY_CHANGED, + LAST_SIGNAL +}; + /* local function prototypes */ @@ -75,6 +83,8 @@ static gchar * pika_palette_get_description (PikaViewable *viewa static const gchar * pika_palette_get_extension (PikaData *data); static void pika_palette_copy (PikaData *data, PikaData *src_data); +static void pika_palette_real_entry_changed (PikaPalette *palette, + gint index); static void pika_palette_entry_free (PikaPaletteEntry *entry); static gint64 pika_palette_entry_get_memsize (PikaPaletteEntry *entry, @@ -88,6 +98,7 @@ G_DEFINE_TYPE_WITH_CODE (PikaPalette, pika_palette, PIKA_TYPE_DATA, #define parent_class pika_palette_parent_class +static guint signals[LAST_SIGNAL] = { 0 }; static void pika_palette_class_init (PikaPaletteClass *klass) @@ -97,6 +108,14 @@ pika_palette_class_init (PikaPaletteClass *klass) PikaViewableClass *viewable_class = PIKA_VIEWABLE_CLASS (klass); PikaDataClass *data_class = PIKA_DATA_CLASS (klass); + signals[ENTRY_CHANGED] = g_signal_new ("entry-changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (PikaPaletteClass, entry_changed), + NULL, NULL, NULL, + G_TYPE_NONE, 1, + G_TYPE_INT); + object_class->finalize = pika_palette_finalize; pika_object_class->get_memsize = pika_palette_get_memsize; @@ -110,6 +129,8 @@ pika_palette_class_init (PikaPaletteClass *klass) data_class->save = pika_palette_save; data_class->get_extension = pika_palette_get_extension; data_class->copy = pika_palette_copy; + + klass->entry_changed = pika_palette_real_entry_changed; } static void @@ -344,6 +365,16 @@ pika_palette_copy (PikaData *data, pika_data_thaw (data); } +static void +pika_palette_real_entry_changed (PikaPalette *palette, + gint index) +{ + PikaImage *image = pika_data_get_image (PIKA_DATA (palette)); + + if (image != NULL) + pika_image_colormap_changed (image, index); +} + static gchar * pika_palette_get_checksum (PikaTagged *tagged) { @@ -406,11 +437,17 @@ pika_palette_move_entry (PikaPalette *palette, if (g_list_find (palette->colors, entry)) { + gint old_position = g_list_index (palette->colors, entry); + palette->colors = g_list_remove (palette->colors, entry); palette->colors = g_list_insert (palette->colors, entry, position); + if (! pika_data_is_frozen (PIKA_DATA (palette))) + for (gint i = MIN (position, old_position); i <= MAX (position, old_position); i++) + g_signal_emit (palette, signals[ENTRY_CHANGED], 0, i); + pika_data_dirty (PIKA_DATA (palette)); } } @@ -442,6 +479,10 @@ pika_palette_add_entry (PikaPalette *palette, palette->n_colors += 1; + if (! pika_data_is_frozen (PIKA_DATA (palette))) + for (gint i = position; i < palette->n_colors; i++) + g_signal_emit (palette, signals[ENTRY_CHANGED], 0, i); + pika_data_dirty (PIKA_DATA (palette)); return entry; @@ -456,12 +497,18 @@ pika_palette_delete_entry (PikaPalette *palette, if (g_list_find (palette->colors, entry)) { + gint old_position = g_list_index (palette->colors, entry); + pika_palette_entry_free (entry); palette->colors = g_list_remove (palette->colors, entry); palette->n_colors--; + if (! pika_data_is_frozen (PIKA_DATA (palette))) + for (gint i = old_position; i < palette->n_colors; i++) + g_signal_emit (palette, signals[ENTRY_CHANGED], 0, i); + pika_data_dirty (PIKA_DATA (palette)); } } @@ -489,6 +536,9 @@ pika_palette_set_entry (PikaPalette *palette, entry->name = g_strdup (name); + if (! pika_data_is_frozen (PIKA_DATA (palette))) + g_signal_emit (palette, signals[ENTRY_CHANGED], 0, position); + pika_data_dirty (PIKA_DATA (palette)); return TRUE; @@ -497,7 +547,8 @@ pika_palette_set_entry (PikaPalette *palette, gboolean pika_palette_set_entry_color (PikaPalette *palette, gint position, - const PikaRGB *color) + const PikaRGB *color, + gboolean push_undo_if_image) { PikaPaletteEntry *entry; @@ -509,8 +560,15 @@ pika_palette_set_entry_color (PikaPalette *palette, if (! entry) return FALSE; + if (push_undo_if_image && pika_data_get_image (PIKA_DATA (palette))) + pika_image_undo_push_image_colormap (pika_data_get_image (PIKA_DATA (palette)), + C_("undo-type", "Change Colormap entry")); + entry->color = *color; + if (! pika_data_is_frozen (PIKA_DATA (palette))) + g_signal_emit (palette, signals[ENTRY_CHANGED], 0, position); + pika_data_dirty (PIKA_DATA (palette)); return TRUE; @@ -535,6 +593,9 @@ pika_palette_set_entry_name (PikaPalette *palette, entry->name = g_strdup (name); + if (! pika_data_is_frozen (PIKA_DATA (palette))) + g_signal_emit (palette, signals[ENTRY_CHANGED], 0, position); + pika_data_dirty (PIKA_DATA (palette)); return TRUE; diff --git a/app/core/pikapalette.h b/app/core/pikapalette.h index c8f721f..c5e0636 100644 --- a/app/core/pikapalette.h +++ b/app/core/pikapalette.h @@ -56,6 +56,9 @@ struct _PikaPalette struct _PikaPaletteClass { PikaDataClass parent_class; + + void (* entry_changed) (PikaPalette *palette, + gint index); }; @@ -85,7 +88,8 @@ gboolean pika_palette_set_entry (PikaPalette *palette, const PikaRGB *color); gboolean pika_palette_set_entry_color (PikaPalette *palette, gint position, - const PikaRGB *color); + const PikaRGB *color, + gboolean push_undo_if_image); gboolean pika_palette_set_entry_name (PikaPalette *palette, gint position, const gchar *name); diff --git a/app/core/pikapalettemru.c b/app/core/pikapalettemru.c index 960bb3a..6e31569 100644 --- a/app/core/pikapalettemru.c +++ b/app/core/pikapalettemru.c @@ -217,7 +217,7 @@ pika_palette_mru_add (PikaPaletteMru *mru, /* Even though they are nearly the same color, let's make them * exactly equal. */ - pika_palette_set_entry_color (palette, 0, color); + pika_palette_set_entry_color (palette, 0, color, FALSE); return; } diff --git a/app/core/pikapdbprogress.c b/app/core/pikapdbprogress.c index cae422c..60bf62f 100644 --- a/app/core/pikapdbprogress.c +++ b/app/core/pikapdbprogress.c @@ -78,7 +78,7 @@ static void pika_pdb_progress_progress_set_value (PikaProgress *progress gdouble percentage); static gdouble pika_pdb_progress_progress_get_value (PikaProgress *progress); static void pika_pdb_progress_progress_pulse (PikaProgress *progress); -static guint32 pika_pdb_progress_progress_get_window_id (PikaProgress *progress); +static GBytes * pika_pdb_progress_progress_get_window_id (PikaProgress *progress); static GObjectClass *parent_class = NULL; @@ -241,14 +241,13 @@ pika_pdb_progress_set_property (GObject *object, } } -static gdouble -pika_pdb_progress_run_callback (PikaPdbProgress *progress, - PikaProgressCommand command, - const gchar *text, - gdouble value) +static void +pika_pdb_progress_run_callback (PikaPdbProgress *progress, + PikaProgressCommand command, + const gchar *text, + gdouble value, + GBytes **handle) { - gdouble retval = 0; - if (progress->callback_name && ! progress->callback_busy) { PikaValueArray *return_vals; @@ -274,17 +273,16 @@ pika_pdb_progress_run_callback (PikaPdbProgress *progress, g_type_name (G_TYPE_FROM_INSTANCE (progress))); } else if (pika_value_array_length (return_vals) >= 2 && - G_VALUE_HOLDS_DOUBLE (pika_value_array_index (return_vals, 1))) + handle != NULL && + G_VALUE_HOLDS_BOXED (pika_value_array_index (return_vals, 1))) { - retval = g_value_get_double (pika_value_array_index (return_vals, 1)); + *handle = g_value_dup_boxed (pika_value_array_index (return_vals, 1)); } pika_value_array_unref (return_vals); progress->callback_busy = FALSE; } - - return retval; } static PikaProgress * @@ -298,7 +296,7 @@ pika_pdb_progress_progress_start (PikaProgress *progress, { pika_pdb_progress_run_callback (pdb_progress, PIKA_PROGRESS_COMMAND_START, - message, 0.0); + message, 0.0, NULL); pdb_progress->active = TRUE; pdb_progress->value = 0.0; @@ -318,7 +316,7 @@ pika_pdb_progress_progress_end (PikaProgress *progress) { pika_pdb_progress_run_callback (pdb_progress, PIKA_PROGRESS_COMMAND_END, - NULL, 0.0); + NULL, 0.0, NULL); pdb_progress->active = FALSE; pdb_progress->value = 0.0; @@ -342,7 +340,7 @@ pika_pdb_progress_progress_set_text (PikaProgress *progress, if (pdb_progress->active) pika_pdb_progress_run_callback (pdb_progress, PIKA_PROGRESS_COMMAND_SET_TEXT, - message, 0.0); + message, 0.0, NULL); } static void @@ -355,7 +353,7 @@ pika_pdb_progress_progress_set_value (PikaProgress *progress, { pika_pdb_progress_run_callback (pdb_progress, PIKA_PROGRESS_COMMAND_SET_VALUE, - NULL, percentage); + NULL, percentage, NULL); pdb_progress->value = percentage; } } @@ -377,18 +375,19 @@ pika_pdb_progress_progress_pulse (PikaProgress *progress) if (pdb_progress->active) pika_pdb_progress_run_callback (pdb_progress, PIKA_PROGRESS_COMMAND_PULSE, - NULL, 0.0); + NULL, 0.0, NULL); } -static guint32 +static GBytes * pika_pdb_progress_progress_get_window_id (PikaProgress *progress) { PikaPdbProgress *pdb_progress = PIKA_PDB_PROGRESS (progress); + GBytes *handle = NULL; - return (guint32) - pika_pdb_progress_run_callback (pdb_progress, - PIKA_PROGRESS_COMMAND_GET_WINDOW, - NULL, 0.0); + pika_pdb_progress_run_callback (pdb_progress, + PIKA_PROGRESS_COMMAND_GET_WINDOW, + NULL, 0.0, &handle); + return handle; } PikaPdbProgress * diff --git a/app/core/pikaprogress.c b/app/core/pikaprogress.c index 7cc98ba..2aa17c4 100644 --- a/app/core/pikaprogress.c +++ b/app/core/pikaprogress.c @@ -209,7 +209,7 @@ pika_progress_pulse (PikaProgress *progress) progress_iface->pulse (progress); } -guint32 +GBytes * pika_progress_get_window_id (PikaProgress *progress) { PikaProgressInterface *progress_iface; @@ -221,7 +221,7 @@ pika_progress_get_window_id (PikaProgress *progress) if (progress_iface->get_window_id) return progress_iface->get_window_id (progress); - return 0; + return NULL; } gboolean diff --git a/app/core/pikaprogress.h b/app/core/pikaprogress.h index 272fa17..6186771 100644 --- a/app/core/pikaprogress.h +++ b/app/core/pikaprogress.h @@ -48,7 +48,7 @@ struct _PikaProgressInterface gdouble (* get_value) (PikaProgress *progress); void (* pulse) (PikaProgress *progress); - guint32 (* get_window_id) (PikaProgress *progress); + GBytes * (* get_window_id) (PikaProgress *progress); gboolean (* message) (PikaProgress *progress, Pika *pika, @@ -78,7 +78,7 @@ void pika_progress_set_value (PikaProgress *progress, gdouble pika_progress_get_value (PikaProgress *progress); void pika_progress_pulse (PikaProgress *progress); -guint32 pika_progress_get_window_id (PikaProgress *progress); +GBytes * pika_progress_get_window_id (PikaProgress *progress); gboolean pika_progress_message (PikaProgress *progress, Pika *pika, diff --git a/app/core/pikasubprogress.c b/app/core/pikasubprogress.c index eedc9dd..aade470 100644 --- a/app/core/pikasubprogress.c +++ b/app/core/pikasubprogress.c @@ -59,7 +59,7 @@ static void pika_sub_progress_set_value (PikaProgress *prog gdouble percentage); static gdouble pika_sub_progress_get_value (PikaProgress *progress); static void pika_sub_progress_pulse (PikaProgress *progress); -static guint32 pika_sub_progress_get_window_id (PikaProgress *progress); +static GBytes * pika_sub_progress_get_window_id (PikaProgress *progress); static gboolean pika_sub_progress_message (PikaProgress *progress, Pika *pika, PikaMessageSeverity severity, @@ -228,7 +228,7 @@ pika_sub_progress_pulse (PikaProgress *progress) pika_progress_pulse (sub->progress); } -static guint32 +static GBytes * pika_sub_progress_get_window_id (PikaProgress *progress) { PikaSubProgress *sub = PIKA_SUB_PROGRESS (progress); @@ -236,7 +236,7 @@ pika_sub_progress_get_window_id (PikaProgress *progress) if (sub->progress) return pika_progress_get_window_id (sub->progress); - return 0; + return NULL; } static gboolean diff --git a/app/dialogs/dialogs-constructors.c b/app/dialogs/dialogs-constructors.c index 44e337d..881fc17 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->edit_config); + return about_dialog_create (context->pika); } GtkWidget * diff --git a/app/dialogs/quit-dialog.c b/app/dialogs/quit-dialog.c index eb87069..cdcedb4 100644 --- a/app/dialogs/quit-dialog.c +++ b/app/dialogs/quit-dialog.c @@ -151,6 +151,13 @@ quit_close_all_dialog_new (Pika *pika, GClosure *closure; gint rows; gint view_size; + GdkRectangle geometry; + GdkMonitor *monitor; + gint max_rows; + gint scale_factor; + const gfloat rows_per_height = 32 / 1440.0f; + const gint greatest_max_rows = 36; + const gint least_max_rows = 6; g_return_val_if_fail (PIKA_IS_PIKA (pika), NULL); @@ -206,8 +213,28 @@ quit_close_all_dialog_new (Pika *pika, private->box = PIKA_MESSAGE_DIALOG (private->dialog)->box; + monitor = pika_widget_get_monitor (private->dialog); + scale_factor = gdk_monitor_get_scale_factor (monitor); + gdk_monitor_get_geometry (monitor, &geometry); + + if (scale_factor > 1) + { + #ifdef GDK_WINDOWING_WIN32 + max_rows = (geometry.height * scale_factor * rows_per_height) + / (scale_factor + 1); + #else + max_rows = (geometry.height * rows_per_height) / (scale_factor + 1); + #endif + } + else + { + max_rows = geometry.height * rows_per_height; + } + + max_rows = CLAMP (max_rows, least_max_rows, greatest_max_rows); + view_size = pika->config->layer_preview_size; - rows = CLAMP (pika_container_get_n_children (private->images), 3, 6); + rows = CLAMP (pika_container_get_n_children (private->images), 3, max_rows); view = pika_container_tree_view_new (private->images, private->context, view_size, 1); diff --git a/app/display/pikadisplay.c b/app/display/pikadisplay.c index 30ec955..0446338 100644 --- a/app/display/pikadisplay.c +++ b/app/display/pikadisplay.c @@ -110,7 +110,7 @@ static void pika_display_progress_set_value (PikaProgress *progre gdouble percentage); static gdouble pika_display_progress_get_value (PikaProgress *progress); static void pika_display_progress_pulse (PikaProgress *progress); -static guint32 pika_display_progress_get_window_id (PikaProgress *progress); +static GBytes * pika_display_progress_get_window_id (PikaProgress *progress); static gboolean pika_display_progress_message (PikaProgress *progress, Pika *pika, PikaMessageSeverity severity, @@ -323,7 +323,7 @@ pika_display_progress_pulse (PikaProgress *progress) pika_progress_pulse (PIKA_PROGRESS (display->priv->shell)); } -static guint32 +static GBytes * pika_display_progress_get_window_id (PikaProgress *progress) { PikaDisplayImpl *display = PIKA_DISPLAY_IMPL (progress); @@ -331,7 +331,7 @@ pika_display_progress_get_window_id (PikaProgress *progress) if (display->priv->shell) return pika_progress_get_window_id (PIKA_PROGRESS (display->priv->shell)); - return 0; + return NULL; } static gboolean diff --git a/app/display/pikadisplayshell-progress.c b/app/display/pikadisplayshell-progress.c index 6672df3..d9a2a77 100644 --- a/app/display/pikadisplayshell-progress.c +++ b/app/display/pikadisplayshell-progress.c @@ -103,15 +103,16 @@ pika_display_shell_progress_pulse (PikaProgress *progress) pika_progress_pulse (PIKA_PROGRESS (statusbar)); } -static guint32 +static GBytes * pika_display_shell_progress_get_window_id (PikaProgress *progress) { - GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (progress)); + PikaDisplayShell *shell = PIKA_DISPLAY_SHELL (progress); + GBytes *handle = NULL; - if (GTK_IS_WINDOW (toplevel)) - return pika_window_get_native_id (GTK_WINDOW (toplevel)); + if (shell->window_handle) + handle = g_bytes_ref (shell->window_handle); - return 0; + return handle; } static gboolean diff --git a/app/display/pikadisplayshell.c b/app/display/pikadisplayshell.c index b5063d5..a13b56d 100644 --- a/app/display/pikadisplayshell.c +++ b/app/display/pikadisplayshell.c @@ -27,6 +27,10 @@ #include #include +#ifdef GDK_WINDOWING_WAYLAND +#include +#endif + #include "libpikabase/pikabase.h" #include "libpikamath/pikamath.h" #include "libpikacolor/pikacolor.h" @@ -587,6 +591,8 @@ pika_display_shell_constructed (GObject *object) G_CALLBACK (pika_display_shell_canvas_grab_notify), shell); + pika_widget_set_native_handle (GTK_WIDGET (shell), &shell->window_handle); + g_signal_connect (shell->canvas, "realize", G_CALLBACK (pika_display_shell_canvas_realize), shell); @@ -851,6 +857,17 @@ pika_display_shell_dispose (GObject *object) shell->display = NULL; + if (shell->window_handle != NULL) + { +#ifdef GDK_WINDOWING_WAYLAND + if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ()) && + /* The GdkWindow is likely already destroyed. */ + gtk_widget_get_window (GTK_WIDGET (shell)) != NULL) + gdk_wayland_window_unexport_handle (gtk_widget_get_window (GTK_WIDGET (shell))); +#endif + g_clear_pointer (&shell->window_handle, g_bytes_unref); + } + G_OBJECT_CLASS (parent_class)->dispose (object); } diff --git a/app/display/pikadisplayshell.h b/app/display/pikadisplayshell.h index d43fda3..c25f71f 100644 --- a/app/display/pikadisplayshell.h +++ b/app/display/pikadisplayshell.h @@ -55,6 +55,8 @@ struct _PikaDisplayShell PikaDisplay *display; + GBytes *window_handle; + PikaUIManager *popup_manager; GdkMonitor *initial_monitor; diff --git a/app/display/pikaimagewindow.c b/app/display/pikaimagewindow.c index 1e4d641..863bac0 100644 --- a/app/display/pikaimagewindow.c +++ b/app/display/pikaimagewindow.c @@ -1174,9 +1174,6 @@ pika_image_window_set_aux_info (PikaSessionManaged *session_managed, else if (StartupInfo.wShowWindow == SW_SHOWMINIMIZED || StartupInfo.wShowWindow == SW_SHOWMINNOACTIVE || StartupInfo.wShowWindow == SW_MINIMIZE) - /* XXX Iconification does not seem to work. I see the - * window being iconified and immediately re-raised. - * I leave this piece of code for later improvement. */ gtk_window_iconify (GTK_WINDOW (session_managed)); else /* Another show property not relevant to min/max. diff --git a/app/display/pikatoolrectangle.c b/app/display/pikatoolrectangle.c index e56bfd3..7db8aaf 100644 --- a/app/display/pikatoolrectangle.c +++ b/app/display/pikatoolrectangle.c @@ -2026,8 +2026,10 @@ static void pika_tool_rectangle_update_options (PikaToolRectangle *rectangle) { PikaToolRectanglePrivate *private = rectangle->private; - gdouble x1, y1; - gdouble x2, y2; + gdouble x1 = 0; + gdouble y1 = 0; + gdouble x2 = 0; + gdouble y2 = 0; pika_tool_rectangle_get_public_rect (rectangle, &x1, &y1, &x2, &y2); @@ -2162,7 +2164,10 @@ static void pika_tool_rectangle_update_status (PikaToolRectangle *rectangle) { PikaToolRectanglePrivate *private = rectangle->private; - gdouble x1, y1, x2, y2; + gdouble x1 = 0; + gdouble y1 = 0; + gdouble x2 = 0; + gdouble y2 = 0; pika_tool_rectangle_get_public_rect (rectangle, &x1, &y1, &x2, &y2); @@ -2436,7 +2441,10 @@ pika_tool_rectangle_coord_on_handle (PikaToolRectangle *rectangle, { PikaToolRectanglePrivate *private = rectangle->private; PikaDisplayShell *shell; - gdouble x1, y1, x2, y2; + gdouble x1 = 0; + gdouble y1 = 0; + gdouble x2 = 0; + gdouble y2 = 0; gdouble rect_w, rect_h; gdouble handle_x = 0; gdouble handle_y = 0; @@ -2838,7 +2846,10 @@ pika_tool_rectangle_setup_snap_offsets (PikaToolRectangle *rectangle, { PikaToolWidget *widget = PIKA_TOOL_WIDGET (rectangle); PikaToolRectanglePrivate *private = rectangle->private; - gdouble x1, y1, x2, y2; + gdouble x1 = 0; + gdouble y1 = 0; + gdouble x2 = 0; + gdouble y2 = 0; gdouble coord_x, coord_y; pika_tool_rectangle_get_public_rect (rectangle, &x1, &y1, &x2, &y2); @@ -4185,7 +4196,10 @@ pika_tool_rectangle_point_in_rectangle (PikaToolRectangle *rectangle, gdouble x, gdouble y) { - gdouble x1, y1, x2, y2; + gdouble x1 = 0; + gdouble y1 = 0; + gdouble x2 = 0; + gdouble y2 = 0; g_return_val_if_fail (PIKA_IS_TOOL_RECTANGLE (rectangle), FALSE); diff --git a/app/file-data/file-data-gbr.c b/app/file-data/file-data-gbr.c index c1be29a..75bb923 100644 --- a/app/file-data/file-data-gbr.c +++ b/app/file-data/file-data-gbr.c @@ -35,11 +35,15 @@ #include "core/pikabrush.h" #include "core/pikabrush-load.h" #include "core/pikabrush-private.h" +#include "core/pikacontainer.h" #include "core/pikadrawable.h" #include "core/pikaimage.h" -#include "core/pikalayer-new.h" +#include "core/pikaimage-merge.h" +#include "core/pikaimage-new.h" #include "core/pikaimage-resize.h" +#include "core/pikalayer-new.h" #include "core/pikaparamspecs.h" +#include "core/pikapickable.h" #include "core/pikatempbuf.h" #include "pdb/pikaprocedure.h" @@ -51,12 +55,14 @@ /* local function prototypes */ -static PikaImage * file_gbr_brush_to_image (Pika *pika, - PikaBrush *brush); -static PikaBrush * file_gbr_image_to_brush (PikaImage *image, - PikaDrawable *drawable, - const gchar *name, - gdouble spacing); +static PikaImage * file_gbr_brush_to_image (Pika *pika, + PikaBrush *brush); +static PikaBrush * file_gbr_image_to_brush (PikaImage *image, + PikaContext *context, + gint n_drawables, + PikaDrawable **drawables, + const gchar *name, + gdouble spacing); /* public functions */ @@ -119,24 +125,26 @@ file_gbr_save_invoker (PikaProcedure *procedure, const PikaValueArray *args, GError **error) { - PikaValueArray *return_vals; - PikaImage *image; - PikaDrawable *drawable; - PikaBrush *brush; - const gchar *name; - GFile *file; - gint spacing; - gboolean success; + PikaValueArray *return_vals; + PikaImage *image; + PikaDrawable **drawables; + gint n_drawables; + PikaBrush *brush; + const gchar *name; + GFile *file; + gint spacing; + gboolean success; pika_set_busy (pika); - image = g_value_get_object (pika_value_array_index (args, 1)); - drawable = g_value_get_object (pika_value_array_index (args, 2)); - file = g_value_get_object (pika_value_array_index (args, 3)); - spacing = g_value_get_int (pika_value_array_index (args, 4)); - name = g_value_get_string (pika_value_array_index (args, 5)); + image = g_value_get_object (pika_value_array_index (args, 1)); + n_drawables = g_value_get_int (pika_value_array_index (args, 2)); + drawables = (PikaDrawable **) pika_value_get_object_array (pika_value_array_index (args, 3)); + file = g_value_get_object (pika_value_array_index (args, 4)); + spacing = g_value_get_int (pika_value_array_index (args, 5)); + name = g_value_get_string (pika_value_array_index (args, 6)); - brush = file_gbr_image_to_brush (image, drawable, name, spacing); + brush = file_gbr_image_to_brush (image, context, n_drawables, drawables, name, spacing); pika_data_set_file (PIKA_DATA (brush), file, TRUE, TRUE); @@ -417,15 +425,49 @@ file_gbr_brush_to_image (Pika *pika, } static PikaBrush * -file_gbr_image_to_brush (PikaImage *image, - PikaDrawable *drawable, - const gchar *name, - gdouble spacing) +file_gbr_image_to_brush (PikaImage *image, + PikaContext *context, + gint n_drawables, + PikaDrawable **drawables, + const gchar *name, + gdouble spacing) { - gint width = pika_item_get_width (PIKA_ITEM (drawable)); - gint height = pika_item_get_height (PIKA_ITEM (drawable)); + PikaBrush *brush; + PikaImage *subimage = NULL; + PikaDrawable *drawable; + gint width; + gint height; - return file_gbr_drawable_to_brush (drawable, - GEGL_RECTANGLE (0, 0, width, height), - name, spacing); + g_return_val_if_fail (n_drawables > 0, NULL); + g_return_val_if_fail (drawables != NULL, NULL); + + if (n_drawables > 1) + { + GList *drawable_list = NULL; + + for (gint i = 0; i < n_drawables; i++) + drawable_list = g_list_prepend (drawable_list, drawables[i]); + + subimage = pika_image_new_from_drawables (image->pika, drawable_list, FALSE, FALSE); + g_list_free (drawable_list); + pika_container_remove (image->pika->images, PIKA_OBJECT (subimage)); + pika_image_resize_to_layers (subimage, context, + NULL, NULL, NULL, NULL, NULL); + drawable = PIKA_DRAWABLE (pika_image_merge_visible_layers (subimage, context, PIKA_CLIP_TO_IMAGE, + FALSE, TRUE, NULL)); + pika_pickable_flush (PIKA_PICKABLE (subimage)); + } + else + { + drawable = drawables[0]; + } + width = pika_item_get_width (PIKA_ITEM (drawable)); + height = pika_item_get_height (PIKA_ITEM (drawable)); + + brush = file_gbr_drawable_to_brush (drawable, + GEGL_RECTANGLE (0, 0, width, height), + name, spacing); + g_clear_object (&subimage); + + return brush; } diff --git a/app/file-data/file-data-pat.c b/app/file-data/file-data-pat.c index 0d3f144..92ae457 100644 --- a/app/file-data/file-data-pat.c +++ b/app/file-data/file-data-pat.c @@ -260,6 +260,7 @@ file_pat_image_to_pattern (PikaImage *image, gint height; g_return_val_if_fail (n_drawables > 0, NULL); + g_return_val_if_fail (drawables != NULL, NULL); if (n_drawables > 1) { diff --git a/app/file-data/file-data.c b/app/file-data/file-data.c index 3c52413..0e7b261 100644 --- a/app/file-data/file-data.c +++ b/app/file-data/file-data.c @@ -87,7 +87,7 @@ file_data_init (Pika *pika) "1995-2019"); pika_procedure_add_argument (procedure, - pika_param_spec_enum ("dummy-param", + pika_param_spec_enum ("run-mode", "Dummy Param", "Dummy parameter", PIKA_TYPE_RUN_MODE, @@ -145,7 +145,7 @@ file_data_init (Pika *pika) "1995-2019"); pika_procedure_add_argument (procedure, - pika_param_spec_enum ("dummy-param", + pika_param_spec_enum ("run-mode", "Dummy Param", "Dummy parameter", PIKA_TYPE_RUN_MODE, @@ -158,12 +158,17 @@ file_data_init (Pika *pika) FALSE, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_drawable ("drawable", - "Drawable", - "Active drawable " - "of input image", - FALSE, - PIKA_PARAM_READWRITE)); + g_param_spec_int ("num-drawables", + "Num drawables", + "Number of drawables", + 1, G_MAXINT, 1, + PIKA_PARAM_READWRITE)); + pika_procedure_add_argument (procedure, + pika_param_spec_object_array ("drawables", + "Drawables", + "Selected drawables", + PIKA_TYPE_DRAWABLE, + PIKA_PARAM_READWRITE | PIKA_PARAM_NO_VALIDATE)); pika_procedure_add_argument (procedure, g_param_spec_object ("file", "File", @@ -219,7 +224,7 @@ file_data_init (Pika *pika) "1999-2019"); pika_procedure_add_argument (procedure, - pika_param_spec_enum ("dummy-param", + pika_param_spec_enum ("run-mode", "Dummy Param", "Dummy parameter", PIKA_TYPE_RUN_MODE, @@ -277,7 +282,7 @@ file_data_init (Pika *pika) "1999-2019"); pika_procedure_add_argument (procedure, - pika_param_spec_enum ("dummy-param", + pika_param_spec_enum ("run-mode", "Dummy Param", "Dummy parameter", PIKA_TYPE_RUN_MODE, @@ -363,7 +368,7 @@ file_data_init (Pika *pika) "1997-2019"); pika_procedure_add_argument (procedure, - pika_param_spec_enum ("dummy-param", + pika_param_spec_enum ("run-mode", "Dummy Param", "Dummy parameter", PIKA_TYPE_RUN_MODE, @@ -420,7 +425,7 @@ file_data_init (Pika *pika) "1995-2019"); pika_procedure_add_argument (procedure, - pika_param_spec_enum ("dummy-param", + pika_param_spec_enum ("run-mode", "Dummy Param", "Dummy parameter", PIKA_TYPE_RUN_MODE, @@ -433,7 +438,7 @@ file_data_init (Pika *pika) FALSE, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - g_param_spec_int ("n-drawables", + g_param_spec_int ("num-drawables", "Num drawables", "Number of drawables", 1, G_MAXINT, 1, @@ -491,7 +496,7 @@ file_data_init (Pika *pika) "Jehan", "Jehan", "2019"); pika_procedure_add_argument (procedure, - pika_param_spec_enum ("dummy-param", + pika_param_spec_enum ("run-mode", "Dummy Param", "Dummy parameter", PIKA_TYPE_RUN_MODE, diff --git a/app/file/file-open.c b/app/file/file-open.c index 443a371..0fe88fc 100644 --- a/app/file/file-open.c +++ b/app/file/file-open.c @@ -374,7 +374,7 @@ file_open_thumbnail (Pika *pika, { image = g_value_get_object (pika_value_array_index (return_vals, 1)); - if (pika_value_array_length (return_vals) >= 3 && + if (pika_value_array_length (return_vals) >= 4 && G_VALUE_HOLDS_INT (pika_value_array_index (return_vals, 2)) && G_VALUE_HOLDS_INT (pika_value_array_index (return_vals, 3))) { @@ -385,11 +385,11 @@ file_open_thumbnail (Pika *pika, MAX (0, g_value_get_int (pika_value_array_index (return_vals, 3))); if (pika_value_array_length (return_vals) >= 5 && - G_VALUE_HOLDS_INT (pika_value_array_index (return_vals, 4))) + G_VALUE_HOLDS_ENUM (pika_value_array_index (return_vals, 4))) { - gint value = g_value_get_int (pika_value_array_index (return_vals, 4)); + PikaImageType itype = g_value_get_enum (pika_value_array_index (return_vals, 4)); - switch (value) + switch (itype) { case PIKA_RGB_IMAGE: *format = pika_babl_format (PIKA_RGB, @@ -424,7 +424,7 @@ file_open_thumbnail (Pika *pika, babl_new_palette ("-pika-indexed-format-dummy", &rgb, &rgba); - if (value == PIKA_INDEXED_IMAGE) + if (itype == PIKA_INDEXED_IMAGE) *format = rgb; else *format = rgba; diff --git a/app/gegl/pika-gegl-loops.cc b/app/gegl/pika-gegl-loops.cc index 0922ddd..7d796dc 100644 --- a/app/gegl/pika-gegl-loops.cc +++ b/app/gegl/pika-gegl-loops.cc @@ -918,6 +918,98 @@ pika_gegl_index_to_mask (GeglBuffer *indexed_buffer, }); } +gboolean +pika_gegl_is_index_used (GeglBuffer *indexed_buffer, + const GeglRectangle *indexed_rect, + const Babl *indexed_format, + gint index) +{ + GeglBufferIterator *iter; + gboolean found = FALSE; + + if (! indexed_rect) + indexed_rect = gegl_buffer_get_extent (indexed_buffer); + + iter = gegl_buffer_iterator_new (indexed_buffer, indexed_rect, 0, + indexed_format, + GEGL_ACCESS_READ, GEGL_ABYSS_NONE, 1); + + /* I initially had an implementation using gegl_parallel_distribute_area() + * which turned out to be much slower than the simpler iteration on the whole + * buffer at once. I think the cost of threading and using GRWLock is just far + * too high for such very basic value check. + * See gegl_parallel_distribute_area() implementation in commit dbaa8b6a1c. + */ + while (gegl_buffer_iterator_next (iter)) + { + const guchar *indexed = (const guchar *) iter->items[0].data; + gint count = iter->length; + + while (count--) + { + if (*indexed == index) + { + /* + * Position of one item using this color index: + gint x = iter->items[0].roi.x + (iter->length - count - 1) % iter->items[0].roi.width; + gint y = iter->items[0].roi.y + (gint) ((iter->length - count - 1) / iter->items[0].roi.width); + */ + found = TRUE; + break; + } + indexed++; + } + + if (found) + { + gegl_buffer_iterator_stop (iter); + break; + } + } + + return found; +} + +void +pika_gegl_shift_index (GeglBuffer *indexed_buffer, + const GeglRectangle *indexed_rect, + const Babl *indexed_format, + gint from_index, + gint shift) +{ + gboolean indexed_format_has_alpha; + + if (! indexed_rect) + indexed_rect = gegl_buffer_get_extent (indexed_buffer); + + indexed_format_has_alpha = babl_format_has_alpha (indexed_format); + + gegl_parallel_distribute_area ( + indexed_rect, PIXELS_PER_THREAD, + [=] (const GeglRectangle *indexed_area) + { + GeglBufferIterator *iter; + + iter = gegl_buffer_iterator_new (indexed_buffer, indexed_area, 0, + indexed_format, + GEGL_ACCESS_READWRITE, GEGL_ABYSS_NONE, 1); + + while (gegl_buffer_iterator_next (iter)) + { + guchar *indexed = (guchar *) iter->items[0].data; + gint count = iter->length; + + while (count--) + { + if (*indexed >= from_index) + *indexed += shift; + + indexed += (indexed_format_has_alpha ? 2 : 1); + } + } + }); +} + static void pika_gegl_convert_color_profile_progress (PikaProgress *progress, gdouble value) diff --git a/app/gegl/pika-gegl-loops.h b/app/gegl/pika-gegl-loops.h index 58e02ad..4a67cbe 100644 --- a/app/gegl/pika-gegl-loops.h +++ b/app/gegl/pika-gegl-loops.h @@ -91,6 +91,15 @@ void pika_gegl_index_to_mask (GeglBuffer *indexed_buffer GeglBuffer *mask_buffer, const GeglRectangle *mask_rect, gint index); +gboolean pika_gegl_is_index_used (GeglBuffer *indexed_buffer, + const GeglRectangle *indexed_rect, + const Babl *indexed_format, + gint index); +void pika_gegl_shift_index (GeglBuffer *indexed_buffer, + const GeglRectangle *indexed_rect, + const Babl *indexed_format, + gint from_index, + gint shift); void pika_gegl_convert_color_profile (GeglBuffer *src_buffer, const GeglRectangle *src_rect, diff --git a/app/gui/gui-message.c b/app/gui/gui-message.c index 8c4aa61..6c8666c 100644 --- a/app/gui/gui-message.c +++ b/app/gui/gui-message.c @@ -287,10 +287,7 @@ progress_error_dialog (PikaProgress *progress) } else { - guint32 window_id = pika_progress_get_window_id (progress); - - if (window_id) - pika_window_set_transient_for (GTK_WINDOW (dialog), window_id); + pika_window_set_transient_for (GTK_WINDOW (dialog), progress); } } diff --git a/app/gui/gui-vtable.c b/app/gui/gui-vtable.c index 1da8dda..6cf4c8c 100644 --- a/app/gui/gui-vtable.c +++ b/app/gui/gui-vtable.c @@ -62,6 +62,8 @@ #include "core/pikacancelable.h" #include "core/pikacontainer.h" #include "core/pikacontext.h" +#include "core/pikadatafactory.h" +#include "core/pikadrawable.h" #include "core/pikagradient.h" #include "core/pikaimage.h" #include "core/pikaimagefile.h" @@ -89,6 +91,7 @@ #include "widgets/pikamenufactory.h" #include "widgets/pikapaletteselect.h" #include "widgets/pikapatternselect.h" +#include "widgets/pikapickableselect.h" #include "widgets/pikaprogressdialog.h" #include "widgets/pikauimanager.h" #include "widgets/pikawidgets-utils.h" @@ -136,7 +139,7 @@ static GFile * gui_get_theme_dir (Pika *pika); static GFile * gui_get_icon_theme_dir (Pika *pika); static PikaObject * gui_get_window_strategy (Pika *pika); static PikaDisplay * gui_get_empty_display (Pika *pika); -static guint32 gui_display_get_window_id (PikaDisplay *display); +static GBytes * gui_display_get_window_id (PikaDisplay *display); static PikaDisplay * gui_display_create (Pika *pika, PikaImage *image, PikaUnit unit, @@ -156,18 +159,19 @@ static void gui_free_progress (Pika *pika, static gboolean gui_pdb_dialog_new (Pika *pika, PikaContext *context, PikaProgress *progress, - PikaContainer *container, + GType object_type, + GBytes *parent_handle, const gchar *title, const gchar *callback_name, - const gchar *object_name, + PikaObject *object, va_list args); static gboolean gui_pdb_dialog_set (Pika *pika, - PikaContainer *container, + GType contents_type, const gchar *callback_name, - const gchar *object_name, + PikaObject *object, va_list args); static gboolean gui_pdb_dialog_close (Pika *pika, - PikaContainer *container, + GType contents_type, const gchar *callback_name); static gboolean gui_recent_list_add_file (Pika *pika, GFile *file, @@ -378,7 +382,7 @@ gui_get_empty_display (Pika *pika) return display; } -static guint32 +static GBytes * gui_display_get_window_id (PikaDisplay *display) { PikaDisplay *disp = PIKA_DISPLAY (display); @@ -386,13 +390,11 @@ gui_display_get_window_id (PikaDisplay *display) if (shell) { - GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (shell)); - - if (GTK_IS_WINDOW (toplevel)) - return pika_window_get_native_id (GTK_WINDOW (toplevel)); + if (shell) + return g_bytes_ref (shell->window_handle); } - return 0; + return NULL; } static PikaDisplay * @@ -516,16 +518,16 @@ gui_wait (Pika *pika, args = pika_procedure_get_arguments (procedure); pika_value_array_truncate (args, 5); - g_value_set_enum (pika_value_array_index (args, 0), - PIKA_RUN_INTERACTIVE); - g_value_set_int (pika_value_array_index (args, 1), - output_pipe[0]); - g_value_set_int (pika_value_array_index (args, 2), - input_pipe[1]); - g_value_set_string (pika_value_array_index (args, 3), - message); - g_value_set_int (pika_value_array_index (args, 4), - PIKA_IS_CANCELABLE (waitable)); + g_value_set_enum (pika_value_array_index (args, 0), + PIKA_RUN_INTERACTIVE); + g_value_set_int (pika_value_array_index (args, 1), + output_pipe[0]); + g_value_set_int (pika_value_array_index (args, 2), + input_pipe[1]); + g_value_set_string (pika_value_array_index (args, 3), + message); + g_value_set_boolean (pika_value_array_index (args, 4), + PIKA_IS_CANCELABLE (waitable)); pika_procedure_execute_async (procedure, pika, pika_get_user_context (pika), @@ -616,65 +618,74 @@ static gboolean gui_pdb_dialog_new (Pika *pika, PikaContext *context, PikaProgress *progress, - PikaContainer *container, + GType contents_type, + GBytes *parent_handle, const gchar *title, const gchar *callback_name, - const gchar *object_name, + PikaObject *object, va_list args) { GType dialog_type = G_TYPE_NONE; const gchar *dialog_role = NULL; const gchar *help_id = NULL; - if (pika_container_get_children_type (container) == PIKA_TYPE_BRUSH) + if (contents_type == PIKA_TYPE_BRUSH) { dialog_type = PIKA_TYPE_BRUSH_SELECT; dialog_role = "pika-brush-selection"; help_id = PIKA_HELP_BRUSH_DIALOG; } - else if (pika_container_get_children_type (container) == PIKA_TYPE_FONT) + else if (contents_type == PIKA_TYPE_FONT) { dialog_type = PIKA_TYPE_FONT_SELECT; dialog_role = "pika-font-selection"; help_id = PIKA_HELP_FONT_DIALOG; } - else if (pika_container_get_children_type (container) == PIKA_TYPE_GRADIENT) + else if (contents_type == PIKA_TYPE_GRADIENT) { dialog_type = PIKA_TYPE_GRADIENT_SELECT; dialog_role = "pika-gradient-selection"; help_id = PIKA_HELP_GRADIENT_DIALOG; } - else if (pika_container_get_children_type (container) == PIKA_TYPE_PALETTE) + else if (contents_type == PIKA_TYPE_PALETTE) { dialog_type = PIKA_TYPE_PALETTE_SELECT; dialog_role = "pika-palette-selection"; help_id = PIKA_HELP_PALETTE_DIALOG; } - else if (pika_container_get_children_type (container) == PIKA_TYPE_PATTERN) + else if (contents_type == PIKA_TYPE_PATTERN) { dialog_type = PIKA_TYPE_PATTERN_SELECT; dialog_role = "pika-pattern-selection"; help_id = PIKA_HELP_PATTERN_DIALOG; } + else if (g_type_is_a (contents_type, PIKA_TYPE_DRAWABLE)) + { + dialog_type = PIKA_TYPE_PICKABLE_SELECT; + dialog_role = "pika-pickable-selection"; + } + else + { + g_return_val_if_reached (FALSE); + } if (dialog_type != G_TYPE_NONE) { - PikaObject *object = NULL; + if (! object && ! g_type_is_a (contents_type, PIKA_TYPE_DRAWABLE)) + object = pika_context_get_by_type (context, contents_type); - if (object_name && strlen (object_name)) - object = pika_container_get_child_by_name (container, object_name); - - if (! object) - object = pika_context_get_by_type (context, - pika_container_get_children_type (container)); - - if (object) + if (object || g_type_is_a (contents_type, PIKA_TYPE_DRAWABLE)) { gint n_properties = 0; gchar **names = NULL; GValue *values = NULL; GtkWidget *dialog; GtkWidget *view; + gboolean use_header_bar; + + g_object_get (gtk_settings_get_default (), + "gtk-dialogs-use-header", &use_header_bar, + NULL); names = pika_properties_append (dialog_type, &n_properties, names, &values, @@ -684,10 +695,11 @@ gui_pdb_dialog_new (Pika *pika, "help-id", help_id, "pdb", pika->pdb, "context", context, - "select-type", pika_container_get_children_type (container), + "select-type", contents_type, "initial-object", object, "callback-name", callback_name, "menu-factory", menus_get_global_menu_factory (pika), + "use-header-bar", use_header_bar, NULL); names = pika_properties_append_valist (dialog_type, @@ -707,27 +719,25 @@ gui_pdb_dialog_new (Pika *pika, pika_docked_set_show_button_bar (PIKA_DOCKED (view), FALSE); if (progress) - { - guint32 window_id = pika_progress_get_window_id (progress); - - if (window_id) - pika_window_set_transient_for (GTK_WINDOW (dialog), window_id); - } + pika_window_set_transient_for (GTK_WINDOW (dialog), progress); gtk_widget_show (dialog); /* workaround for bug #360106 */ - { - GSource *source = g_timeout_source_new (100); - GClosure *closure; + { + GSource *source = g_timeout_source_new (100); + GClosure *closure; - closure = g_cclosure_new_object (G_CALLBACK (gui_pdb_dialog_present), - G_OBJECT (dialog)); + closure = g_cclosure_new_object (G_CALLBACK (gui_pdb_dialog_present), + G_OBJECT (dialog)); - g_source_set_closure (source, closure); - g_source_attach (source, NULL); - g_source_unref (source); - } + g_source_set_closure (source, closure); + g_source_attach (source, NULL); + g_source_unref (source); + } + + if (parent_handle != NULL) + pika_window_set_transient_for_handle (GTK_WINDOW (dialog), parent_handle); return TRUE; } @@ -738,73 +748,96 @@ gui_pdb_dialog_new (Pika *pika, static gboolean gui_pdb_dialog_set (Pika *pika, - PikaContainer *container, + GType contents_type, const gchar *callback_name, - const gchar *object_name, + PikaObject *object, va_list args) { - PikaPdbDialogClass *klass = NULL; + PikaPdbDialogClass *klass = NULL; + PikaContainer *container = NULL; + PikaPdbDialog *dialog; - if (pika_container_get_children_type (container) == PIKA_TYPE_BRUSH) - klass = g_type_class_peek (PIKA_TYPE_BRUSH_SELECT); - else if (pika_container_get_children_type (container) == PIKA_TYPE_FONT) - klass = g_type_class_peek (PIKA_TYPE_FONT_SELECT); - else if (pika_container_get_children_type (container) == PIKA_TYPE_GRADIENT) - klass = g_type_class_peek (PIKA_TYPE_GRADIENT_SELECT); - else if (pika_container_get_children_type (container) == PIKA_TYPE_PALETTE) - klass = g_type_class_peek (PIKA_TYPE_PALETTE_SELECT); - else if (pika_container_get_children_type (container) == PIKA_TYPE_PATTERN) - klass = g_type_class_peek (PIKA_TYPE_PATTERN_SELECT); - - if (klass) + if (contents_type == PIKA_TYPE_BRUSH) { - PikaPdbDialog *dialog; + klass = g_type_class_peek (PIKA_TYPE_BRUSH_SELECT); + container = pika_data_factory_get_container (pika->brush_factory); + } + else if (contents_type == PIKA_TYPE_FONT) + { + klass = g_type_class_peek (PIKA_TYPE_FONT_SELECT); + container = pika_data_factory_get_container (pika->font_factory); + } + else if (contents_type == PIKA_TYPE_GRADIENT) + { + klass = g_type_class_peek (PIKA_TYPE_GRADIENT_SELECT); + container = pika_data_factory_get_container (pika->gradient_factory); + } + else if (contents_type == PIKA_TYPE_PALETTE) + { + klass = g_type_class_peek (PIKA_TYPE_PALETTE_SELECT); + container = pika_data_factory_get_container (pika->palette_factory); + } + else if (contents_type == PIKA_TYPE_PATTERN) + { + klass = g_type_class_peek (PIKA_TYPE_PATTERN_SELECT); + container = pika_data_factory_get_container (pika->pattern_factory); + } + else if (contents_type == PIKA_TYPE_DRAWABLE) + { + klass = g_type_class_peek (PIKA_TYPE_PICKABLE_SELECT); + } - dialog = pika_pdb_dialog_get_by_callback (klass, callback_name); + g_return_val_if_fail (klass != NULL, FALSE); - if (dialog && dialog->select_type == pika_container_get_children_type (container)) + dialog = pika_pdb_dialog_get_by_callback (klass, callback_name); + + if (dialog != NULL && + dialog->select_type == contents_type && + (container == NULL || pika_container_get_child_index (container, object) != -1)) + { + const gchar *prop_name = va_arg (args, const gchar *); + + if (g_type_is_a (contents_type, PIKA_TYPE_RESOURCE)) { - PikaObject *object; - - object = pika_container_get_child_by_name (container, object_name); - - if (object) - { - const gchar *prop_name = va_arg (args, const gchar *); - - pika_context_set_by_type (dialog->context, dialog->select_type, - object); - - if (prop_name) - g_object_set_valist (G_OBJECT (dialog), prop_name, args); - - gtk_window_present (GTK_WINDOW (dialog)); - - return TRUE; - } + g_return_val_if_fail (container != NULL, FALSE); + pika_context_set_by_type (dialog->context, dialog->select_type, object); } + else + { + g_return_val_if_fail (klass->set_object != NULL, FALSE); + klass->set_object (dialog, object); + } + + if (prop_name) + g_object_set_valist (G_OBJECT (dialog), prop_name, args); + + gtk_window_present (GTK_WINDOW (dialog)); + + return TRUE; } return FALSE; } static gboolean -gui_pdb_dialog_close (Pika *pika, - PikaContainer *container, - const gchar *callback_name) +gui_pdb_dialog_close (Pika *pika, + GType contents_type, + const gchar *callback_name) { PikaPdbDialogClass *klass = NULL; - if (pika_container_get_children_type (container) == PIKA_TYPE_BRUSH) + if (contents_type == PIKA_TYPE_BRUSH) klass = g_type_class_peek (PIKA_TYPE_BRUSH_SELECT); - else if (pika_container_get_children_type (container) == PIKA_TYPE_FONT) + else if (contents_type == PIKA_TYPE_FONT) klass = g_type_class_peek (PIKA_TYPE_FONT_SELECT); - else if (pika_container_get_children_type (container) == PIKA_TYPE_GRADIENT) + else if (contents_type == PIKA_TYPE_GRADIENT) klass = g_type_class_peek (PIKA_TYPE_GRADIENT_SELECT); - else if (pika_container_get_children_type (container) == PIKA_TYPE_PALETTE) + else if (contents_type == PIKA_TYPE_PALETTE) klass = g_type_class_peek (PIKA_TYPE_PALETTE_SELECT); - else if (pika_container_get_children_type (container) == PIKA_TYPE_PATTERN) + else if (contents_type == PIKA_TYPE_PATTERN) klass = g_type_class_peek (PIKA_TYPE_PATTERN_SELECT); + else if (contents_type == PIKA_TYPE_DRAWABLE) + klass = g_type_class_peek (PIKA_TYPE_PICKABLE_SELECT); if (klass) { @@ -812,7 +845,7 @@ gui_pdb_dialog_close (Pika *pika, dialog = pika_pdb_dialog_get_by_callback (klass, callback_name); - if (dialog && dialog->select_type == pika_container_get_children_type (container)) + if (dialog && dialog->select_type == contents_type) { gtk_widget_destroy (GTK_WIDGET (dialog)); return TRUE; diff --git a/app/gui/gui.c b/app/gui/gui.c index eea31e3..da62bcf 100644 --- a/app/gui/gui.c +++ b/app/gui/gui.c @@ -90,6 +90,12 @@ #include "splash.h" #include "themes.h" +#ifdef G_OS_WIN32 +#include +#include +#include +#endif + #ifdef GDK_WINDOWING_QUARTZ #import @@ -543,6 +549,11 @@ gui_restore_after_callback (Pika *pika, PikaGuiConfig *gui_config = PIKA_GUI_CONFIG (pika->config); PikaUIManager *image_ui_manager; PikaDisplay *display; +#ifdef G_OS_WIN32 + STARTUPINFO StartupInfo; + + GetStartupInfo (&StartupInfo); +#endif if (pika->be_verbose) g_print ("INIT: %s\n", G_STRFUNC); @@ -610,11 +621,23 @@ gui_restore_after_callback (Pika *pika, shell = pika_display_get_shell (display); +#ifdef G_OS_WIN32 + themes_set_title_bar (pika); +#endif + if (gui_config->restore_session) session_restore (pika, initial_monitor); toplevel = gtk_widget_get_toplevel (GTK_WIDGET (shell)); +#ifdef G_OS_WIN32 + /* Prevents window from reappearing on start-up if the user + * requested it to be minimized via window hints + */ + if (StartupInfo.wShowWindow != SW_SHOWMINIMIZED && + StartupInfo.wShowWindow != SW_SHOWMINNOACTIVE && + StartupInfo.wShowWindow != SW_MINIMIZE) +#endif /* move keyboard focus to the display */ gtk_window_present (GTK_WINDOW (toplevel)); } @@ -925,12 +948,26 @@ gui_check_unique_accelerators (Pika *pika) gchar **disabled_accels; gint len; gint remove; + gboolean print_warning = TRUE; + action = g_action_map_lookup_action (G_ACTION_MAP (pika->app), + actions[i]); /* Just keep the first one (no reason other than we have * to choose), unless it's a secondary shortcut, and the * second is a primary shortcut. */ - if (l == 0 && j != 0) + if ((l == 0 && j != 0) || + /* If the first action is one of "view-zoom-1-*" and + * the shortcut default, we assume it's because of our + * trick to transform `Shift+num` shortcuts based on + * layout and we happen to be on a layout where it + * clashes with other shortcuts. In this case, we + * drop the duplicate shortcut on the zoom action. See + * special code in + * pika_action_group_add_action_with_accel() + */ + (g_str_has_prefix (actions[i], "view-zoom-1-") && + pika_action_is_default_accel (PIKA_ACTION (action), accels[j]))) { disabled_action = actions[i]; disabled_accels = accels; @@ -942,6 +979,20 @@ gui_check_unique_accelerators (Pika *pika) disabled_accels = accels2; remove = l; } + + action = g_action_map_lookup_action (G_ACTION_MAP (pika->app), + disabled_action); + + if (g_str_has_prefix (disabled_action, "view-zoom-1-") && + pika_action_is_default_accel (PIKA_ACTION (action), disabled_accels[remove])) + /* We drop the shortcut **silently** because it will be + * a case where we have 2 default accelerators clashing + * (because of the conversion code) while not being a + * real bug. Clashes with custom accelerators are + * handled by shortcuts_action_deserialize(). + */ + print_warning = FALSE; + /* Remove only the duplicate shortcut but keep others. */ len = g_strv_length (disabled_accels); g_free (disabled_accels[remove]); @@ -949,12 +1000,11 @@ gui_check_unique_accelerators (Pika *pika) &disabled_accels[remove + 1], sizeof (char *) * (len - remove)); - g_printerr ("Actions \"%s\" and \"%s\" use the same accelerator.\n" - " Disabling the accelerator on \"%s\".\n", - actions[i], actions[k], disabled_action); + if (print_warning) + g_printerr ("Actions \"%s\" and \"%s\" use the same accelerator.\n" + " Disabling the accelerator on \"%s\".\n", + actions[i], actions[k], disabled_action); - action = g_action_map_lookup_action (G_ACTION_MAP (pika->app), - disabled_action); pika_action_set_accels (PIKA_ACTION (action), (const gchar **) disabled_accels); } diff --git a/app/gui/splash.c b/app/gui/splash.c index 2ccd17f..f36d889 100644 --- a/app/gui/splash.c +++ b/app/gui/splash.c @@ -29,6 +29,12 @@ #include #endif +#ifdef G_OS_WIN32 +#include +#include +#include +#endif + #include "libpikabase/pikabase.h" #include "libpikamath/pikamath.h" #include "libpikacolor/pikacolor.h" @@ -125,6 +131,11 @@ splash_create (Pika *pika, GdkRectangle workarea; gint max_width; gint max_height; +#ifdef G_OS_WIN32 + STARTUPINFO StartupInfo; + + GetStartupInfo (&StartupInfo); +#endif g_return_if_fail (splash == NULL); g_return_if_fail (GDK_IS_MONITOR (monitor)); @@ -255,6 +266,13 @@ splash_create (Pika *pika, gtk_widget_show (splash->window); +#ifdef G_OS_WIN32 + if (StartupInfo.wShowWindow == SW_SHOWMINIMIZED || + StartupInfo.wShowWindow == SW_SHOWMINNOACTIVE || + StartupInfo.wShowWindow == SW_MINIMIZE) + gtk_window_iconify (GTK_WINDOW (splash->window)); +#endif + if (FALSE) splash->timer = g_timer_new (); } diff --git a/app/gui/themes.c b/app/gui/themes.c index 88afeb2..269c1e6 100644 --- a/app/gui/themes.c +++ b/app/gui/themes.c @@ -35,6 +35,10 @@ #include "core/pika.h" +#include "display/pikaimagewindow.h" + +#include "widgets/pikawidgets-utils.h" + #include "themes.h" #include "pika-intl.h" @@ -109,6 +113,10 @@ themes_init (Pika *pika) pika); themes_theme_change_notify (config, NULL, pika); + +#ifdef G_OS_WIN32 + themes_set_title_bar (pika); +#endif } void @@ -473,6 +481,10 @@ themes_theme_change_notify (PikaGuiConfig *config, g_object_unref (theme_css); gtk_style_context_reset_widgets (gdk_screen_get_default ()); + +#ifdef G_OS_WIN32 + themes_set_title_bar (pika); +#endif } static void @@ -553,3 +565,22 @@ themes_theme_paths_notify (PikaExtensionManager *manager, g_list_free_full (path, (GDestroyNotify) g_object_unref); } } + +void +themes_set_title_bar (Pika *pika) +{ +#ifdef G_OS_WIN32 + GList *windows = pika_get_image_windows (pika); + GList *iter; + + for (iter = windows; iter; iter = g_list_next (iter)) + { + GtkWidget *window = GTK_WIDGET (windows->data); + + pika_window_set_title_bar_theme (pika, window, TRUE); + } + + if (windows) + g_list_free (windows); +#endif +} diff --git a/app/gui/themes.h b/app/gui/themes.h index 6e9c9f4..ad7b532 100644 --- a/app/gui/themes.h +++ b/app/gui/themes.h @@ -34,5 +34,6 @@ GFile * themes_get_theme_file (Pika *pika, const gchar *first_component, ...) G_GNUC_NULL_TERMINATED; +void themes_set_title_bar (Pika *pika); #endif /* __THEMES_H__ */ diff --git a/app/menus/shortcuts-rc.c b/app/menus/shortcuts-rc.c index c40163a..78fdb6a 100644 --- a/app/menus/shortcuts-rc.c +++ b/app/menus/shortcuts-rc.c @@ -28,7 +28,6 @@ #include #include "libpikabase/pikabase.h" -#include "libpikabase/pikaprotocol.h" #include "libpikaconfig/pikaconfig.h" #include "menus-types.h" @@ -56,8 +55,7 @@ static GTokenType shortcuts_action_deserialize (GScanner *scanner, enum { - PROTOCOL_VERSION = 1, - FILE_VERSION, + FILE_VERSION = 1, ACTION, }; @@ -68,8 +66,7 @@ shortcuts_rc_parse (GtkApplication *application, GError **error) { GScanner *scanner; - gint protocol_version = PIKA_PROTOCOL_VERSION; - gint file_version = SHORTCUTS_RC_FILE_VERSION; + gint file_version = SHORTCUTS_RC_FILE_VERSION; GTokenType token; g_return_val_if_fail (GTK_IS_APPLICATION (application), FALSE); @@ -81,9 +78,6 @@ shortcuts_rc_parse (GtkApplication *application, if (! scanner) return FALSE; - g_scanner_scope_add_symbol (scanner, 0, - "protocol-version", - GINT_TO_POINTER (PROTOCOL_VERSION)); g_scanner_scope_add_symbol (scanner, 0, "file-version", GINT_TO_POINTER (FILE_VERSION)); @@ -92,9 +86,9 @@ shortcuts_rc_parse (GtkApplication *application, token = G_TOKEN_LEFT_PAREN; - while (protocol_version == PIKA_PROTOCOL_VERSION && - file_version == SHORTCUTS_RC_FILE_VERSION && - g_scanner_peek_next_token (scanner) == token) + while (g_scanner_peek_next_token (scanner) == token || + (token == G_TOKEN_SYMBOL && + g_scanner_peek_next_token (scanner) == G_TOKEN_IDENTIFIER)) { token = g_scanner_get_next_token (scanner); @@ -107,12 +101,6 @@ shortcuts_rc_parse (GtkApplication *application, case G_TOKEN_SYMBOL: switch (GPOINTER_TO_INT (scanner->value.v_symbol)) { - case PROTOCOL_VERSION: - token = G_TOKEN_INT; - if (pika_scanner_parse_int (scanner, &protocol_version)) - token = G_TOKEN_RIGHT_PAREN; - break; - case FILE_VERSION: token = G_TOKEN_INT; if (pika_scanner_parse_int (scanner, &file_version)) @@ -127,7 +115,17 @@ shortcuts_rc_parse (GtkApplication *application, default: break; } - break; + break; + + case G_TOKEN_IDENTIFIER: + g_printerr ("%s: ignoring unknown symbol '%s'.\n", G_STRFUNC, scanner->value.v_string); + while ((token = g_scanner_get_next_token (scanner)) != G_TOKEN_EOF) + { + if (token == G_TOKEN_RIGHT_PAREN) + break; + } + token = G_TOKEN_LEFT_PAREN; + break; case G_TOKEN_RIGHT_PAREN: token = G_TOKEN_LEFT_PAREN; @@ -138,25 +136,16 @@ shortcuts_rc_parse (GtkApplication *application, } } - if (protocol_version != PIKA_PROTOCOL_VERSION || - file_version != SHORTCUTS_RC_FILE_VERSION || - token != G_TOKEN_LEFT_PAREN) + if (file_version != SHORTCUTS_RC_FILE_VERSION) { - if (protocol_version != PIKA_PROTOCOL_VERSION) - { - g_set_error (error, - PIKA_CONFIG_ERROR, PIKA_CONFIG_ERROR_VERSION, - _("Skipping '%s': wrong PIKA protocol version."), - pika_file_get_utf8_name (file)); - } - else if (file_version != SHORTCUTS_RC_FILE_VERSION) - { - g_set_error (error, - PIKA_CONFIG_ERROR, PIKA_CONFIG_ERROR_VERSION, - _("Skipping '%s': wrong shortcutsrc file format version."), - pika_file_get_utf8_name (file)); - } - else if (token != G_TOKEN_ERROR) + g_printerr (_("Wrong shortcutsrc (%s) file format version: %d (expected: %d). " + "We tried to load shortcuts as well as possible.\n"), + pika_file_get_utf8_name (file), + file_version, SHORTCUTS_RC_FILE_VERSION); + } + if (token != G_TOKEN_LEFT_PAREN) + { + if (token != G_TOKEN_ERROR) { g_scanner_get_next_token (scanner); g_scanner_unexp_token (scanner, token, NULL, NULL, NULL, @@ -194,10 +183,6 @@ shortcuts_rc_write (GtkApplication *application, actions = g_action_group_list_actions (G_ACTION_GROUP (application)); - pika_config_writer_open (writer, "protocol-version"); - pika_config_writer_printf (writer, "%d", PIKA_PROTOCOL_VERSION); - pika_config_writer_close (writer); - pika_config_writer_open (writer, "file-version"); pika_config_writer_printf (writer, "%d", SHORTCUTS_RC_FILE_VERSION); pika_config_writer_close (writer); diff --git a/app/pdb/brush-select-cmds.c b/app/pdb/brush-select-cmds.c index ad4aae9..1d9d2ce 100644 --- a/app/pdb/brush-select-cmds.c +++ b/app/pdb/brush-select-cmds.c @@ -34,6 +34,8 @@ #include "pdb-types.h" #include "core/pika.h" +#include "core/pikabrush.h" +#include "core/pikacontainer.h" #include "core/pikadatafactory.h" #include "core/pikaparamspecs.h" @@ -53,20 +55,24 @@ brushes_popup_invoker (PikaProcedure *procedure, gboolean success = TRUE; const gchar *brush_callback; const gchar *popup_title; - const gchar *initial_brush_name; + PikaBrush *initial_brush; + GBytes *parent_window; brush_callback = g_value_get_string (pika_value_array_index (args, 0)); popup_title = g_value_get_string (pika_value_array_index (args, 1)); - initial_brush_name = g_value_get_string (pika_value_array_index (args, 2)); + initial_brush = g_value_get_object (pika_value_array_index (args, 2)); + parent_window = g_value_get_boxed (pika_value_array_index (args, 3)); if (success) { - if (pika->no_interface || + PikaContainer *container = pika_data_factory_get_container (pika->brush_factory); + + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, brush_callback) || ! pika_pdb_dialog_new (pika, context, progress, - pika_data_factory_get_container (pika->brush_factory), - popup_title, brush_callback, initial_brush_name, - NULL)) + pika_container_get_children_type (container), + parent_window, popup_title, brush_callback, + PIKA_OBJECT (initial_brush), NULL)) success = FALSE; } @@ -89,9 +95,12 @@ brushes_close_popup_invoker (PikaProcedure *procedure, if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->brush_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, brush_callback) || - ! pika_pdb_dialog_close (pika, pika_data_factory_get_container (pika->brush_factory), + ! pika_pdb_dialog_close (pika, + pika_container_get_children_type (container), brush_callback)) success = FALSE; } @@ -110,18 +119,20 @@ brushes_set_popup_invoker (PikaProcedure *procedure, { gboolean success = TRUE; const gchar *brush_callback; - const gchar *brush_name; + PikaBrush *brush; brush_callback = g_value_get_string (pika_value_array_index (args, 0)); - brush_name = g_value_get_string (pika_value_array_index (args, 1)); + brush = g_value_get_object (pika_value_array_index (args, 1)); if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->brush_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, brush_callback) || - ! pika_pdb_dialog_set (pika, pika_data_factory_get_container (pika->brush_factory), - brush_callback, brush_name, - NULL)) + ! pika_pdb_dialog_set (pika, + pika_container_get_children_type (container), + brush_callback, PIKA_OBJECT (brush), NULL)) success = FALSE; } @@ -163,12 +174,17 @@ register_brush_select_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("initial-brush-name", - "initial brush name", - "The name of the brush to set as the initial choice", - FALSE, TRUE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_brush ("initial-brush", + "initial brush", + "The brush to set as the initial choice", + FALSE, + PIKA_PARAM_READWRITE)); + pika_procedure_add_argument (procedure, + g_param_spec_boxed ("parent-window", + "parent window", + "An optional parent window handle for the popup to be set transient to", + G_TYPE_BYTES, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); @@ -218,12 +234,11 @@ register_brush_select_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("brush-name", - "brush name", - "The name of the brush to set as selected", - FALSE, FALSE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_brush ("brush", + "brush", + "The brush to set as selected", + FALSE, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); } diff --git a/app/pdb/display-cmds.c b/app/pdb/display-cmds.c index 4d22446..84e9267 100644 --- a/app/pdb/display-cmds.c +++ b/app/pdb/display-cmds.c @@ -148,20 +148,20 @@ display_get_window_handle_invoker (PikaProcedure *procedure, gboolean success = TRUE; PikaValueArray *return_vals; PikaDisplay *display; - gint window = 0; + GBytes *handle = NULL; display = g_value_get_object (pika_value_array_index (args, 0)); if (success) { - window = (gint32) pika_get_display_window_id (pika, display); + handle = pika_get_display_window_id (pika, display); } return_vals = pika_procedure_get_return_values (procedure, success, error ? *error : NULL); if (success) - g_value_set_int (pika_value_array_index (return_vals, 1), window); + g_value_take_boxed (pika_value_array_index (return_vals, 1), handle); return return_vals; } @@ -330,7 +330,8 @@ register_display_procs (PikaPDB *pdb) "pika-display-get-window-handle"); pika_procedure_set_static_help (procedure, "Get a handle to the native window for an image display.", - "This procedure returns a handle to the native window for a given image display. For example in the X backend of GDK, a native window handle is an Xlib XID. A value of 0 is returned for an invalid display or if this function is unimplemented for the windowing system that is being used.", + "This procedure returns a handle to the native window for a given image display.\n" + "It can be different types of data depending on the platform you are running on. For example in the X backend of GDK, a native window handle is an Xlib XID whereas on Wayland, it is a string handle. A value of NULL is returned for an invalid display or if this function is unimplemented for the windowing system that is being used.", NULL); pika_procedure_set_static_attribution (procedure, "Sven Neumann ", @@ -343,11 +344,11 @@ register_display_procs (PikaPDB *pdb) FALSE, PIKA_PARAM_READWRITE)); pika_procedure_add_return_value (procedure, - g_param_spec_int ("window", - "window", - "The native window handle or 0", - G_MININT32, G_MAXINT32, 0, - PIKA_PARAM_READWRITE)); + g_param_spec_boxed ("handle", + "handle", + "The native window handle or NULL", + G_TYPE_BYTES, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); diff --git a/app/pdb/font-cmds.c b/app/pdb/font-cmds.c index f8f36dd..21e978d 100644 --- a/app/pdb/font-cmds.c +++ b/app/pdb/font-cmds.c @@ -75,6 +75,57 @@ font_get_by_name_invoker (PikaProcedure *procedure, return return_vals; } +static PikaValueArray * +fonts_get_by_name_invoker (PikaProcedure *procedure, + Pika *pika, + PikaContext *context, + PikaProgress *progress, + const PikaValueArray *args, + GError **error) +{ + gboolean success = TRUE; + PikaValueArray *return_vals; + const gchar *name; + gint num_fonts = 0; + PikaFont **fonts = NULL; + + name = g_value_get_string (pika_value_array_index (args, 0)); + + if (success) + { + GList *list; + + list = pika_pdb_get_resources (pika, PIKA_TYPE_FONT, name, PIKA_PDB_DATA_ACCESS_READ, error); + + if (list == NULL) + success = FALSE; + + num_fonts = g_list_length (list); + + if (num_fonts > 0) + { + gint i = 0; + + fonts = g_new (PikaFont *, num_fonts); + + for (GList *iter = list; i < num_fonts; i++, iter = g_list_next (iter)) + fonts[i] = g_object_ref (iter->data); + } + g_list_free (list); + } + + return_vals = pika_procedure_get_return_values (procedure, success, + error ? *error : NULL); + + if (success) + { + g_value_set_int (pika_value_array_index (return_vals, 1), num_fonts); + pika_value_take_object_array (pika_value_array_index (return_vals, 2), PIKA_TYPE_FONT, (GObject **) fonts, num_fonts); + } + + return return_vals; +} + void register_font_procs (PikaPDB *pdb) { @@ -87,8 +138,9 @@ register_font_procs (PikaPDB *pdb) pika_object_set_static_name (PIKA_OBJECT (procedure), "pika-font-get-by-name"); pika_procedure_set_static_help (procedure, - "Returns the font with the given name.", - "Returns the font with the given name.", + "Returns a font with the given name.", + "If several fonts are named identically, the one which is returned by this function should be considered random. This can be used when you know you won't have multiple fonts of this name or that you don't want to choose (non-interactive scripts, etc.).\n" + "If you need more control, you should use 'pika-fonts-get-by-name' instead.", NULL); pika_procedure_set_static_attribution (procedure, "Michael Natterer ", @@ -109,4 +161,40 @@ register_font_procs (PikaPDB *pdb) PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); + + /* + * pika-fonts-get-by-name + */ + procedure = pika_procedure_new (fonts_get_by_name_invoker); + pika_object_set_static_name (PIKA_OBJECT (procedure), + "pika-fonts-get-by-name"); + pika_procedure_set_static_help (procedure, + "Returns the fonts with the given name.", + "Returns the fonts with the given name. There may be more than one.", + NULL); + pika_procedure_set_static_attribution (procedure, + "Jehan", + "Jehan", + "2023"); + pika_procedure_add_argument (procedure, + pika_param_spec_string ("name", + "name", + "The name of the font", + FALSE, FALSE, TRUE, + NULL, + PIKA_PARAM_READWRITE)); + pika_procedure_add_return_value (procedure, + g_param_spec_int ("num-fonts", + "num fonts", + "The number of fonts with the given name", + 0, G_MAXINT32, 0, + PIKA_PARAM_READWRITE)); + pika_procedure_add_return_value (procedure, + pika_param_spec_object_array ("fonts", + "fonts", + "The fonts with the given name", + PIKA_TYPE_FONT, + PIKA_PARAM_READWRITE)); + pika_pdb_register_procedure (pdb, procedure); + g_object_unref (procedure); } diff --git a/app/pdb/font-select-cmds.c b/app/pdb/font-select-cmds.c index 96017ec..0d01ca0 100644 --- a/app/pdb/font-select-cmds.c +++ b/app/pdb/font-select-cmds.c @@ -34,8 +34,10 @@ #include "pdb-types.h" #include "core/pika.h" +#include "core/pikacontainer.h" #include "core/pikadatafactory.h" #include "core/pikaparamspecs.h" +#include "text/pikafont.h" #include "pikapdb.h" #include "pikaprocedure.h" @@ -53,21 +55,25 @@ fonts_popup_invoker (PikaProcedure *procedure, gboolean success = TRUE; const gchar *font_callback; const gchar *popup_title; - const gchar *initial_font_name; + PikaFont *initial_font; + GBytes *parent_window; font_callback = g_value_get_string (pika_value_array_index (args, 0)); popup_title = g_value_get_string (pika_value_array_index (args, 1)); - initial_font_name = g_value_get_string (pika_value_array_index (args, 2)); + initial_font = g_value_get_object (pika_value_array_index (args, 2)); + parent_window = g_value_get_boxed (pika_value_array_index (args, 3)); if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->font_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, font_callback) || ! pika_data_factory_data_wait (pika->font_factory) || ! pika_pdb_dialog_new (pika, context, progress, - pika_data_factory_get_container (pika->font_factory), - popup_title, font_callback, initial_font_name, - NULL)) + pika_container_get_children_type (container), + parent_window, popup_title, font_callback, + PIKA_OBJECT (initial_font), NULL)) success = FALSE; } @@ -90,10 +96,12 @@ fonts_close_popup_invoker (PikaProcedure *procedure, if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->font_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, font_callback) || ! pika_pdb_dialog_close (pika, - pika_data_factory_get_container (pika->font_factory), + pika_container_get_children_type (container), font_callback)) success = FALSE; } @@ -112,20 +120,21 @@ fonts_set_popup_invoker (PikaProcedure *procedure, { gboolean success = TRUE; const gchar *font_callback; - const gchar *font_name; + PikaFont *font; font_callback = g_value_get_string (pika_value_array_index (args, 0)); - font_name = g_value_get_string (pika_value_array_index (args, 1)); + font = g_value_get_object (pika_value_array_index (args, 1)); if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->font_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, font_callback) || ! pika_data_factory_data_wait (pika->font_factory) || ! pika_pdb_dialog_set (pika, - pika_data_factory_get_container (pika->font_factory), - font_callback, font_name, - NULL)) + pika_container_get_children_type (container), + font_callback, PIKA_OBJECT (font), NULL)) success = FALSE; } @@ -167,12 +176,17 @@ register_font_select_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("initial-font-name", - "initial font name", - "The name of the initial font choice.", - FALSE, TRUE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_font ("initial-font", + "initial font", + "The name of the initial font choice.", + FALSE, + PIKA_PARAM_READWRITE)); + pika_procedure_add_argument (procedure, + g_param_spec_boxed ("parent-window", + "parent window", + "An optional parent window handle for the popup to be set transient to", + G_TYPE_BYTES, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); @@ -222,12 +236,11 @@ register_font_select_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("font-name", - "font name", - "The name of the font to set as selected", - FALSE, FALSE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_font ("font", + "font", + "The font to set as selected", + FALSE, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); } diff --git a/app/pdb/gradient-select-cmds.c b/app/pdb/gradient-select-cmds.c index ea77837..842ddae 100644 --- a/app/pdb/gradient-select-cmds.c +++ b/app/pdb/gradient-select-cmds.c @@ -34,6 +34,7 @@ #include "pdb-types.h" #include "core/pika.h" +#include "core/pikacontainer.h" #include "core/pikadatafactory.h" #include "core/pikagradient.h" #include "core/pikaparamspecs.h" @@ -54,14 +55,18 @@ gradients_popup_invoker (PikaProcedure *procedure, gboolean success = TRUE; const gchar *gradient_callback; const gchar *popup_title; - const gchar *initial_gradient_name; + PikaGradient *initial_gradient; + GBytes *parent_window; gradient_callback = g_value_get_string (pika_value_array_index (args, 0)); popup_title = g_value_get_string (pika_value_array_index (args, 1)); - initial_gradient_name = g_value_get_string (pika_value_array_index (args, 2)); + initial_gradient = g_value_get_object (pika_value_array_index (args, 2)); + parent_window = g_value_get_boxed (pika_value_array_index (args, 3)); if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->gradient_factory); + /* Formerly, this procedure had another parameter: * the sample size of the gradient's data passed in the changed callback. * Now the sample size is determined by core, and in the future, @@ -71,9 +76,9 @@ gradients_popup_invoker (PikaProcedure *procedure, if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, gradient_callback) || ! pika_pdb_dialog_new (pika, context, progress, - pika_data_factory_get_container (pika->gradient_factory), - popup_title, gradient_callback, initial_gradient_name, - NULL)) + pika_container_get_children_type (container), + parent_window, popup_title, gradient_callback, + PIKA_OBJECT (initial_gradient), NULL)) success = FALSE; } @@ -96,9 +101,12 @@ gradients_close_popup_invoker (PikaProcedure *procedure, if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->gradient_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, gradient_callback) || - ! pika_pdb_dialog_close (pika, pika_data_factory_get_container (pika->gradient_factory), + ! pika_pdb_dialog_close (pika, + pika_container_get_children_type (container), gradient_callback)) success = FALSE; } @@ -117,18 +125,20 @@ gradients_set_popup_invoker (PikaProcedure *procedure, { gboolean success = TRUE; const gchar *gradient_callback; - const gchar *gradient_name; + PikaGradient *gradient; gradient_callback = g_value_get_string (pika_value_array_index (args, 0)); - gradient_name = g_value_get_string (pika_value_array_index (args, 1)); + gradient = g_value_get_object (pika_value_array_index (args, 1)); if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->gradient_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, gradient_callback) || - ! pika_pdb_dialog_set (pika, pika_data_factory_get_container (pika->gradient_factory), - gradient_callback, gradient_name, - NULL)) + ! pika_pdb_dialog_set (pika, + pika_container_get_children_type (container), + gradient_callback, PIKA_OBJECT (gradient), NULL)) success = FALSE; } @@ -170,12 +180,17 @@ register_gradient_select_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("initial-gradient-name", - "initial gradient name", - "The name of the initial gradient choice", - FALSE, TRUE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_gradient ("initial-gradient", + "initial gradient", + "The initial gradient choice", + FALSE, + PIKA_PARAM_READWRITE)); + pika_procedure_add_argument (procedure, + g_param_spec_boxed ("parent-window", + "parent window", + "An optional parent window handle for the popup to be set transient to", + G_TYPE_BYTES, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); @@ -225,12 +240,11 @@ register_gradient_select_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("gradient-name", - "gradient name", - "The name of the gradient to set as selected", - FALSE, FALSE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_gradient ("gradient", + "gradient", + "The gradient to set as selected", + FALSE, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); } diff --git a/app/pdb/image-cmds.c b/app/pdb/image-cmds.c index 4f532fd..593bdf3 100644 --- a/app/pdb/image-cmds.c +++ b/app/pdb/image-cmds.c @@ -55,6 +55,7 @@ #include "core/pikaimage.h" #include "core/pikaitem.h" #include "core/pikalayer.h" +#include "core/pikapalette.h" #include "core/pikaparamspecs.h" #include "core/pikapickable.h" #include "core/pikaprogress.h" @@ -1575,6 +1576,35 @@ image_set_colormap_invoker (PikaProcedure *procedure, error ? *error : NULL); } +static PikaValueArray * +image_get_palette_invoker (PikaProcedure *procedure, + Pika *pika, + PikaContext *context, + PikaProgress *progress, + const PikaValueArray *args, + GError **error) +{ + gboolean success = TRUE; + PikaValueArray *return_vals; + PikaImage *image; + PikaPalette *colormap = NULL; + + image = g_value_get_object (pika_value_array_index (args, 0)); + + if (success) + { + colormap = pika_image_get_colormap_palette (image); + } + + return_vals = pika_procedure_get_return_values (procedure, success, + error ? *error : NULL); + + if (success) + g_value_set_object (pika_value_array_index (return_vals, 1), colormap); + + return return_vals; +} + static PikaValueArray * image_get_metadata_invoker (PikaProcedure *procedure, Pika *pika, @@ -4356,6 +4386,35 @@ register_image_procs (PikaPDB *pdb) pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); + /* + * pika-image-get-palette + */ + procedure = pika_procedure_new (image_get_palette_invoker); + pika_object_set_static_name (PIKA_OBJECT (procedure), + "pika-image-get-palette"); + pika_procedure_set_static_help (procedure, + "Returns the image's colormap", + "This procedure returns the image's colormap as a PikaPalette. If the image is not in Indexed color mode, %NULL is returned.", + NULL); + pika_procedure_set_static_attribution (procedure, + "Jehan", + "Jehan", + "2023"); + pika_procedure_add_argument (procedure, + pika_param_spec_image ("image", + "image", + "The image", + FALSE, + PIKA_PARAM_READWRITE)); + pika_procedure_add_return_value (procedure, + pika_param_spec_palette ("colormap", + "colormap", + "The image's colormap.", + FALSE, + PIKA_PARAM_READWRITE)); + pika_pdb_register_procedure (pdb, procedure); + g_object_unref (procedure); + /* * pika-image-get-metadata */ diff --git a/app/pdb/internal-procs.c b/app/pdb/internal-procs.c index c6203b5..c5b7568 100644 --- a/app/pdb/internal-procs.c +++ b/app/pdb/internal-procs.c @@ -34,7 +34,7 @@ #include "internal-procs.h" -/* 775 procedures registered total */ +/* 779 procedures registered total */ void internal_procs_init (PikaPDB *pdb) @@ -52,6 +52,7 @@ internal_procs_init (PikaPDB *pdb) register_drawable_procs (pdb); register_drawable_color_procs (pdb); register_drawable_edit_procs (pdb); + register_drawable_select_procs (pdb); register_dynamics_procs (pdb); register_edit_procs (pdb); register_file_procs (pdb); diff --git a/app/pdb/internal-procs.h b/app/pdb/internal-procs.h index 0c5768a..86940dc 100644 --- a/app/pdb/internal-procs.h +++ b/app/pdb/internal-procs.h @@ -39,6 +39,7 @@ void register_display_procs (PikaPDB *pdb); void register_drawable_procs (PikaPDB *pdb); void register_drawable_color_procs (PikaPDB *pdb); void register_drawable_edit_procs (PikaPDB *pdb); +void register_drawable_select_procs (PikaPDB *pdb); void register_dynamics_procs (PikaPDB *pdb); void register_edit_procs (PikaPDB *pdb); void register_file_procs (PikaPDB *pdb); diff --git a/app/pdb/meson.build b/app/pdb/meson.build index 5c7b09d..fe10801 100644 --- a/app/pdb/meson.build +++ b/app/pdb/meson.build @@ -19,6 +19,7 @@ libappinternalprocs_sources = [ 'drawable-cmds.c', 'drawable-color-cmds.c', 'drawable-edit-cmds.c', + 'drawable-select-cmds.c', 'dynamics-cmds.c', 'edit-cmds.c', 'file-cmds.c', diff --git a/app/pdb/palette-cmds.c b/app/pdb/palette-cmds.c index b67cebe..7248bb4 100644 --- a/app/pdb/palette-cmds.c +++ b/app/pdb/palette-cmds.c @@ -41,6 +41,7 @@ #include "core/pika.h" #include "core/pikacontext.h" #include "core/pikadatafactory.h" +#include "core/pikaimage-colormap.h" #include "core/pikapalette.h" #include "core/pikaparamspecs.h" @@ -308,9 +309,18 @@ palette_delete_entry_invoker (PikaProcedure *procedure, PikaPaletteEntry *entry = pika_palette_get_entry (palette, entry_num); if (entry) - pika_palette_delete_entry (palette, entry); + { + PikaImage *image = pika_data_get_image (PIKA_DATA (palette)); + + if (image != NULL) + success = pika_image_delete_colormap_entry (image, entry_num, TRUE); + else + pika_palette_delete_entry (palette, entry); + } else - success = FALSE; + { + success = FALSE; + } } else success = FALSE; @@ -376,7 +386,7 @@ palette_entry_set_color_invoker (PikaProcedure *procedure, if (success) { if (pika_data_is_writable (PIKA_DATA (palette))) - success = pika_palette_set_entry_color (palette, entry_num, &color); + success = pika_palette_set_entry_color (palette, entry_num, &color, TRUE); else success = FALSE; } @@ -687,7 +697,8 @@ register_palette_procs (PikaPDB *pdb) "pika-palette-delete-entry"); pika_procedure_set_static_help (procedure, "Deletes an entry from the palette.", - "Deletes an entry from the palette. Returns an error if the index is out or range. Returns an error if the palette is not editable.", + "This function will fail and return %FALSE if the index is out or range or if the palette is not editable.\n" + "Additionally if the palette belongs to an indexed image, it will only be possible to delete palette colors not in use in the image.", NULL); pika_procedure_set_static_attribution (procedure, "Michael Natterer ", diff --git a/app/pdb/palette-select-cmds.c b/app/pdb/palette-select-cmds.c index c4d8b4c..8a384cd 100644 --- a/app/pdb/palette-select-cmds.c +++ b/app/pdb/palette-select-cmds.c @@ -34,7 +34,9 @@ #include "pdb-types.h" #include "core/pika.h" +#include "core/pikacontainer.h" #include "core/pikadatafactory.h" +#include "core/pikapalette.h" #include "core/pikaparamspecs.h" #include "pikapdb.h" @@ -53,20 +55,24 @@ palettes_popup_invoker (PikaProcedure *procedure, gboolean success = TRUE; const gchar *palette_callback; const gchar *popup_title; - const gchar *initial_palette_name; + PikaPalette *initial_palette; + GBytes *parent_window; palette_callback = g_value_get_string (pika_value_array_index (args, 0)); popup_title = g_value_get_string (pika_value_array_index (args, 1)); - initial_palette_name = g_value_get_string (pika_value_array_index (args, 2)); + initial_palette = g_value_get_object (pika_value_array_index (args, 2)); + parent_window = g_value_get_boxed (pika_value_array_index (args, 3)); if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->palette_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, palette_callback) || ! pika_pdb_dialog_new (pika, context, progress, - pika_data_factory_get_container (pika->palette_factory), - popup_title, palette_callback, initial_palette_name, - NULL)) + pika_container_get_children_type (container), + parent_window, popup_title, palette_callback, + PIKA_OBJECT (initial_palette), NULL)) success = FALSE; } @@ -89,9 +95,12 @@ palettes_close_popup_invoker (PikaProcedure *procedure, if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->palette_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, palette_callback) || - ! pika_pdb_dialog_close (pika, pika_data_factory_get_container (pika->palette_factory), + ! pika_pdb_dialog_close (pika, + pika_container_get_children_type (container), palette_callback)) success = FALSE; } @@ -110,18 +119,20 @@ palettes_set_popup_invoker (PikaProcedure *procedure, { gboolean success = TRUE; const gchar *palette_callback; - const gchar *palette_name; + PikaPalette *palette; palette_callback = g_value_get_string (pika_value_array_index (args, 0)); - palette_name = g_value_get_string (pika_value_array_index (args, 1)); + palette = g_value_get_object (pika_value_array_index (args, 1)); if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->palette_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, palette_callback) || - ! pika_pdb_dialog_set (pika, pika_data_factory_get_container (pika->palette_factory), - palette_callback, palette_name, - NULL)) + ! pika_pdb_dialog_set (pika, + pika_container_get_children_type (container), + palette_callback, PIKA_OBJECT (palette), NULL)) success = FALSE; } @@ -163,12 +174,17 @@ register_palette_select_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("initial-palette-name", - "initial palette name", - "The name of the palette to set as the initial choice.", - FALSE, TRUE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_palette ("initial-palette", + "initial palette", + "The palette to set as the initial choice.", + FALSE, + PIKA_PARAM_READWRITE)); + pika_procedure_add_argument (procedure, + g_param_spec_boxed ("parent-window", + "parent window", + "An optional parent window handle for the popup to be set transient to", + G_TYPE_BYTES, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); @@ -218,12 +234,11 @@ register_palette_select_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("palette-name", - "palette name", - "The name of the palette to set as selected", - FALSE, FALSE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_palette ("palette", + "palette", + "The palette to set as selected", + FALSE, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); } diff --git a/app/pdb/pattern-cmds.c b/app/pdb/pattern-cmds.c index 6a56f63..a9ff773 100644 --- a/app/pdb/pattern-cmds.c +++ b/app/pdb/pattern-cmds.c @@ -256,7 +256,7 @@ register_pattern_procs (PikaPDB *pdb) "pika-pattern-get-pixels"); pika_procedure_set_static_help (procedure, "Gets information about the pattern (including pixels).", - "Gets information about the pattern: the pattern extents (width and height), its bpp, and its pixel data. The pixel data is an array in C or a list in some languages.", + "Gets information about the pattern: the pattern extents (width and height), its bpp, and its pixel data.", NULL); pika_procedure_set_static_attribution (procedure, "Michael Natterer ", diff --git a/app/pdb/pattern-select-cmds.c b/app/pdb/pattern-select-cmds.c index d33bd2e..6b596c3 100644 --- a/app/pdb/pattern-select-cmds.c +++ b/app/pdb/pattern-select-cmds.c @@ -34,8 +34,10 @@ #include "pdb-types.h" #include "core/pika.h" +#include "core/pikacontainer.h" #include "core/pikadatafactory.h" #include "core/pikaparamspecs.h" +#include "core/pikapattern.h" #include "pikapdb.h" #include "pikaprocedure.h" @@ -53,20 +55,24 @@ patterns_popup_invoker (PikaProcedure *procedure, gboolean success = TRUE; const gchar *pattern_callback; const gchar *popup_title; - const gchar *initial_pattern_name; + PikaPattern *initial_pattern; + GBytes *parent_window; pattern_callback = g_value_get_string (pika_value_array_index (args, 0)); popup_title = g_value_get_string (pika_value_array_index (args, 1)); - initial_pattern_name = g_value_get_string (pika_value_array_index (args, 2)); + initial_pattern = g_value_get_object (pika_value_array_index (args, 2)); + parent_window = g_value_get_boxed (pika_value_array_index (args, 3)); if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->pattern_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, pattern_callback) || ! pika_pdb_dialog_new (pika, context, progress, - pika_data_factory_get_container (pika->pattern_factory), - popup_title, pattern_callback, initial_pattern_name, - NULL)) + pika_container_get_children_type (container), + parent_window, popup_title, pattern_callback, + PIKA_OBJECT (initial_pattern), NULL)) success = FALSE; } @@ -89,9 +95,12 @@ patterns_close_popup_invoker (PikaProcedure *procedure, if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->pattern_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, pattern_callback) || - ! pika_pdb_dialog_close (pika, pika_data_factory_get_container (pika->pattern_factory), + ! pika_pdb_dialog_close (pika, + pika_container_get_children_type (container), pattern_callback)) success = FALSE; } @@ -110,18 +119,20 @@ patterns_set_popup_invoker (PikaProcedure *procedure, { gboolean success = TRUE; const gchar *pattern_callback; - const gchar *pattern_name; + PikaPattern *pattern; pattern_callback = g_value_get_string (pika_value_array_index (args, 0)); - pattern_name = g_value_get_string (pika_value_array_index (args, 1)); + pattern = g_value_get_object (pika_value_array_index (args, 1)); if (success) { + PikaContainer *container = pika_data_factory_get_container (pika->pattern_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, pattern_callback) || - ! pika_pdb_dialog_set (pika, pika_data_factory_get_container (pika->pattern_factory), - pattern_callback, pattern_name, - NULL)) + ! pika_pdb_dialog_set (pika, + pika_container_get_children_type (container), + pattern_callback, PIKA_OBJECT (pattern), NULL)) success = FALSE; } @@ -163,12 +174,17 @@ register_pattern_select_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("initial-pattern-name", - "initial pattern name", - "The name of the pattern to set as the initial choice", - FALSE, TRUE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_pattern ("initial-pattern", + "initial pattern", + "The pattern to set as the initial choice", + FALSE, + PIKA_PARAM_READWRITE)); + pika_procedure_add_argument (procedure, + g_param_spec_boxed ("parent-window", + "parent window", + "An optional parent window handle for the popup to be set transient to", + G_TYPE_BYTES, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); @@ -218,12 +234,11 @@ register_pattern_select_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("pattern-name", - "pattern name", - "The name of the pattern to set as selected", - FALSE, FALSE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_pattern ("pattern", + "pattern", + "The pattern to set as selected", + FALSE, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); } diff --git a/app/pdb/pdb-cmds.c b/app/pdb/pdb-cmds.c index 959933e..7f5901f 100644 --- a/app/pdb/pdb-cmds.c +++ b/app/pdb/pdb-cmds.c @@ -1167,47 +1167,6 @@ pdb_get_data_invoker (PikaProcedure *procedure, return return_vals; } -static PikaValueArray * -pdb_get_data_size_invoker (PikaProcedure *procedure, - Pika *pika, - PikaContext *context, - PikaProgress *progress, - const PikaValueArray *args, - GError **error) -{ - gboolean success = TRUE; - PikaValueArray *return_vals; - const gchar *identifier; - gint bytes = 0; - - identifier = g_value_get_string (pika_value_array_index (args, 0)); - - if (success) - { - if (pika_is_canonical_identifier (identifier)) - { - if (! pika_plug_in_manager_get_data (pika->plug_in_manager, - identifier, &bytes)) - success = FALSE; - } - else - { - g_set_error (error, PIKA_PDB_ERROR, PIKA_PDB_ERROR_INVALID_ARGUMENT, - _("Data label '%s' is not a canonical identifier"), - identifier); - success = FALSE; - } - } - - return_vals = pika_procedure_get_return_values (procedure, success, - error ? *error : NULL); - - if (success) - g_value_set_int (pika_value_array_index (return_vals, 1), bytes); - - return return_vals; -} - static PikaValueArray * pdb_set_data_invoker (PikaProcedure *procedure, Pika *pika, @@ -2230,36 +2189,6 @@ register_pdb_procs (PikaPDB *pdb) pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); - /* - * pika-pdb-get-data-size - */ - procedure = pika_procedure_new (pdb_get_data_size_invoker); - pika_object_set_static_name (PIKA_OBJECT (procedure), - "pika-pdb-get-data-size"); - pika_procedure_set_static_help (procedure, - "Returns size of data associated with the specified identifier.", - "This procedure returns the size of any data which may have been associated with the specified identifier. If no data has been associated with the identifier, an error is returned.", - NULL); - pika_procedure_set_static_attribution (procedure, - "Nick Lamb", - "Nick Lamb", - "1998"); - pika_procedure_add_argument (procedure, - pika_param_spec_string ("identifier", - "identifier", - "The identifier associated with data", - FALSE, FALSE, TRUE, - NULL, - PIKA_PARAM_READWRITE)); - pika_procedure_add_return_value (procedure, - g_param_spec_int ("bytes", - "bytes", - "The number of bytes in the data", - 1, G_MAXINT32, 1, - PIKA_PARAM_READWRITE)); - pika_pdb_register_procedure (pdb, procedure); - g_object_unref (procedure); - /* * pika-pdb-set-data */ diff --git a/app/pdb/pikapdb-utils.c b/app/pdb/pikapdb-utils.c index 27011ca..e63ec38 100644 --- a/app/pdb/pikapdb-utils.c +++ b/app/pdb/pikapdb-utils.c @@ -105,6 +105,91 @@ pika_pdb_get_data_factory (Pika *pika, g_return_val_if_reached (NULL); } +GList * +pika_pdb_get_resources (Pika *pika, + GType data_type, + const gchar *name, + PikaPDBDataAccess access, + GError **error) +{ + GList *resources; + PikaDataFactory *factory; + PikaContainer *container; + const gchar *label; + + g_return_val_if_fail (PIKA_IS_PIKA (pika), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + label = pika_pdb_get_data_label (data_type); + + if (! name || ! strlen (name)) + { + g_set_error (error, PIKA_PDB_ERROR, PIKA_PDB_ERROR_INVALID_ARGUMENT, + /* TRANSLATOR: %s is a data label from the + * PDB-error-data-label context. + */ + C_("PDB-error-message", "%s name cannot be empty"), + g_type_name (data_type)); + return NULL; + } + + factory = pika_pdb_get_data_factory (pika, data_type); + g_return_val_if_fail (PIKA_IS_DATA_FACTORY (factory), NULL); + + container = pika_data_factory_get_container (factory); + resources = pika_container_get_children_by_name (container, name); + + if (! resources && ! strcmp (name, "Standard")) + { + PikaData *resource; + + resource = pika_data_factory_data_get_standard (factory, pika_get_user_context (pika)); + g_return_val_if_fail (resource != NULL, NULL); + resources = g_list_prepend (NULL, resource); + } + + if (! resources) + { + g_set_error (error, PIKA_PDB_ERROR, PIKA_PDB_ERROR_INVALID_ARGUMENT, + /* TRANSLATOR: the first %s is a data label from the + * PDB-error-data-label context. The second %s is a data + * name. + */ + C_("PDB-error-message", "%s '%s' not found"), label, name); + } + else if ((access & PIKA_PDB_DATA_ACCESS_WRITE) || + (access & PIKA_PDB_DATA_ACCESS_RENAME)) + { + for (GList *iter = resources; iter; iter = iter->next) + { + if ((access & PIKA_PDB_DATA_ACCESS_WRITE) && + ! pika_data_is_writable (PIKA_DATA (iter->data))) + { + g_set_error (error, PIKA_PDB_ERROR, PIKA_PDB_ERROR_INVALID_ARGUMENT, + /* TRANSLATOR: the first %s is a data label from the + * PDB-error-data-label context. The second %s is a data + * name. + */ + C_("PDB-error-message", "%s '%s' is not editable"), label, name); + return NULL; + } + else if ((access & PIKA_PDB_DATA_ACCESS_RENAME) && + ! pika_viewable_is_name_editable (PIKA_VIEWABLE (iter->data))) + { + g_set_error (error, PIKA_PDB_ERROR, PIKA_PDB_ERROR_INVALID_ARGUMENT, + /* TRANSLATOR: the first %s is a data label from the + * PDB-error-data-label context. The second %s is a data + * name. + */ + C_("PDB-error-message", "%s '%s' is not renamable"), label, name); + return NULL; + } + } + } + + return resources; +} + PikaResource * pika_pdb_get_resource (Pika *pika, GType data_type, diff --git a/app/pdb/pikapdb-utils.h b/app/pdb/pikapdb-utils.h index 2c543e9..4777179 100644 --- a/app/pdb/pikapdb-utils.h +++ b/app/pdb/pikapdb-utils.h @@ -26,6 +26,11 @@ PikaDataFactory * pika_pdb_get_data_factory (Pika *pika, GType data_type); +GList * pika_pdb_get_resources (Pika *pika, + GType data_type, + const gchar *name, + PikaPDBDataAccess access, + GError **error); PikaResource * pika_pdb_get_resource (Pika *pika, GType data_type, const gchar *name, diff --git a/app/pdb/progress-cmds.c b/app/pdb/progress-cmds.c index c62e345..f374177 100644 --- a/app/pdb/progress-cmds.c +++ b/app/pdb/progress-cmds.c @@ -193,14 +193,14 @@ progress_get_window_handle_invoker (PikaProcedure *procedure, { gboolean success = TRUE; PikaValueArray *return_vals; - gint window = 0; + GBytes *handle = NULL; PikaPlugIn *plug_in = pika->plug_in_manager->current_plug_in; if (plug_in && plug_in->open) { if (! pika->no_interface) - window = pika_plug_in_progress_get_window_id (plug_in); + handle = pika_plug_in_progress_get_window_id (plug_in); } else success = FALSE; @@ -209,7 +209,7 @@ progress_get_window_handle_invoker (PikaProcedure *procedure, error ? *error : NULL); if (success) - g_value_set_int (pika_value_array_index (return_vals, 1), window); + g_value_take_boxed (pika_value_array_index (return_vals, 1), handle); return return_vals; } @@ -418,19 +418,20 @@ register_progress_procs (PikaPDB *pdb) pika_object_set_static_name (PIKA_OBJECT (procedure), "pika-progress-get-window-handle"); pika_procedure_set_static_help (procedure, - "Returns the native window ID of the toplevel window this plug-in's progress is displayed in.", - "This function returns the native window ID of the toplevel window this plug-in\'s progress is displayed in.", + "Returns the native handle of the toplevel window this plug-in's progress is displayed in.", + "This function returns the native handle allowing to identify the toplevel window this plug-in's progress is displayed in.\n" + "This handle can be of various types (integer, string, etc.) depending on the platform you are running on which is why it returns a GBytes. There are usually no reasons to call this directly.", NULL); pika_procedure_set_static_attribution (procedure, "Michael Natterer ", "Michael Natterer", "2004"); pika_procedure_add_return_value (procedure, - g_param_spec_int ("window", - "window", - "The progress bar's toplevel window", - G_MININT32, G_MAXINT32, 0, - PIKA_PARAM_READWRITE)); + g_param_spec_boxed ("handle", + "handle", + "The progress bar's toplevel window's handle", + G_TYPE_BYTES, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); diff --git a/app/pdb/text-layer-cmds.c b/app/pdb/text-layer-cmds.c index 02acfc1..fdbf691 100644 --- a/app/pdb/text-layer-cmds.c +++ b/app/pdb/text-layer-cmds.c @@ -67,14 +67,14 @@ text_layer_new_invoker (PikaProcedure *procedure, PikaValueArray *return_vals; PikaImage *image; const gchar *text; - const gchar *fontname; + PikaFont *font; gdouble size; PikaUnit unit; PikaTextLayer *layer = NULL; image = g_value_get_object (pika_value_array_index (args, 0)); text = g_value_get_string (pika_value_array_index (args, 1)); - fontname = g_value_get_string (pika_value_array_index (args, 2)); + font = g_value_get_object (pika_value_array_index (args, 2)); size = g_value_get_double (pika_value_array_index (args, 3)); unit = g_value_get_int (pika_value_array_index (args, 4)); @@ -87,7 +87,7 @@ text_layer_new_invoker (PikaProcedure *procedure, pika_text = g_object_new (PIKA_TYPE_TEXT, "text", text, - "font", fontname, + "font", font, "font-size", size, "font-size-unit", unit, "color", &color, @@ -259,26 +259,26 @@ text_layer_get_font_invoker (PikaProcedure *procedure, gboolean success = TRUE; PikaValueArray *return_vals; PikaTextLayer *layer; - gchar *font = NULL; + PikaFont *font = NULL; layer = g_value_get_object (pika_value_array_index (args, 0)); if (success) { - PikaFont *font_obj; - g_object_get (pika_text_layer_get_text (layer), - "font", &font_obj, + "font", &font, NULL); - font = g_strdup (pika_font_get_lookup_name (font_obj)); - g_object_unref (font_obj); + /* The PikaText keeps a reference. Therefore unref before returning the + * pointer so that we don't leak a reference. + */ + g_object_unref (font); } return_vals = pika_procedure_get_return_values (procedure, success, error ? *error : NULL); if (success) - g_value_take_string (pika_value_array_index (return_vals, 1), font); + g_value_set_object (pika_value_array_index (return_vals, 1), font); return return_vals; } @@ -293,10 +293,10 @@ text_layer_set_font_invoker (PikaProcedure *procedure, { gboolean success = TRUE; PikaTextLayer *layer; - const gchar *font; + PikaFont *font; layer = g_value_get_object (pika_value_array_index (args, 0)); - font = g_value_get_string (pika_value_array_index (args, 1)); + font = g_value_get_object (pika_value_array_index (args, 1)); if (success) { @@ -1028,12 +1028,11 @@ register_text_layer_procs (PikaPDB *pdb) NULL, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("fontname", - "fontname", - "The name of the font", - FALSE, FALSE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_font ("font", + "font", + "The font to write the text with", + FALSE, + PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, g_param_spec_double ("size", "size", @@ -1186,7 +1185,7 @@ register_text_layer_procs (PikaPDB *pdb) "pika-text-layer-get-font"); pika_procedure_set_static_help (procedure, "Get the font from a text layer as string.", - "This procedure returns the name of the font from a text layer.", + "This procedure returns the font from a text layer.", NULL); pika_procedure_set_static_attribution (procedure, "Marcus Heese ", @@ -1199,12 +1198,11 @@ register_text_layer_procs (PikaPDB *pdb) FALSE, PIKA_PARAM_READWRITE)); pika_procedure_add_return_value (procedure, - pika_param_spec_string ("font", - "font", - "The font which is used in the specified text layer.", - FALSE, FALSE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_font ("font", + "font", + "The font which is used in the specified text layer.", + FALSE, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); @@ -1229,12 +1227,11 @@ register_text_layer_procs (PikaPDB *pdb) FALSE, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - pika_param_spec_string ("font", - "font", - "The new font to use", - FALSE, FALSE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_font ("font", + "font", + "The new font to use", + FALSE, + PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); diff --git a/app/pdb/text-tool-cmds.c b/app/pdb/text-tool-cmds.c index 1e3eb20..e14fca4 100644 --- a/app/pdb/text-tool-cmds.c +++ b/app/pdb/text-tool-cmds.c @@ -39,6 +39,7 @@ #include "core/pikaimage.h" #include "core/pikalayer.h" #include "core/pikaparamspecs.h" +#include "text/pikafont.h" #include "text/pikatext-compat.h" #include "pikapdb.h" @@ -48,12 +49,12 @@ static PikaValueArray * -text_fontname_invoker (PikaProcedure *procedure, - Pika *pika, - PikaContext *context, - PikaProgress *progress, - const PikaValueArray *args, - GError **error) +text_font_invoker (PikaProcedure *procedure, + Pika *pika, + PikaContext *context, + PikaProgress *progress, + const PikaValueArray *args, + GError **error) { gboolean success = TRUE; PikaValueArray *return_vals; @@ -65,7 +66,7 @@ text_fontname_invoker (PikaProcedure *procedure, gint border; gboolean antialias; gdouble size; - const gchar *fontname; + PikaFont *font; PikaLayer *text_layer = NULL; image = g_value_get_object (pika_value_array_index (args, 0)); @@ -76,7 +77,7 @@ text_fontname_invoker (PikaProcedure *procedure, border = g_value_get_int (pika_value_array_index (args, 5)); antialias = g_value_get_boolean (pika_value_array_index (args, 6)); size = g_value_get_double (pika_value_array_index (args, 7)); - fontname = g_value_get_string (pika_value_array_index (args, 9)); + font = g_value_get_object (pika_value_array_index (args, 8)); if (success) { @@ -87,15 +88,9 @@ text_fontname_invoker (PikaProcedure *procedure, success = FALSE; if (success) - { - gchar *real_fontname = g_strdup_printf ("%s %d", fontname, (gint) size); - - text_layer = text_render (image, drawable, context, - x, y, real_fontname, text, - border, antialias); - - g_free (real_fontname); - } + text_layer = text_render (image, drawable, context, + x, y, font, size, text, + border, antialias); } return_vals = pika_procedure_get_return_values (procedure, success, @@ -108,18 +103,18 @@ text_fontname_invoker (PikaProcedure *procedure, } static PikaValueArray * -text_get_extents_fontname_invoker (PikaProcedure *procedure, - Pika *pika, - PikaContext *context, - PikaProgress *progress, - const PikaValueArray *args, - GError **error) +text_get_extents_font_invoker (PikaProcedure *procedure, + Pika *pika, + PikaContext *context, + PikaProgress *progress, + const PikaValueArray *args, + GError **error) { gboolean success = TRUE; PikaValueArray *return_vals; const gchar *text; gdouble size; - const gchar *fontname; + PikaFont *font; gint width = 0; gint height = 0; gint ascent = 0; @@ -127,18 +122,14 @@ text_get_extents_fontname_invoker (PikaProcedure *procedure, text = g_value_get_string (pika_value_array_index (args, 0)); size = g_value_get_double (pika_value_array_index (args, 1)); - fontname = g_value_get_string (pika_value_array_index (args, 3)); + font = g_value_get_object (pika_value_array_index (args, 2)); if (success) { - gchar *real_fontname = g_strdup_printf ("%s %d", fontname, (gint) size); - success = text_get_extents (pika, - real_fontname, text, + font, size, text, &width, &height, &ascent, &descent); - - g_free (real_fontname); } return_vals = pika_procedure_get_return_values (procedure, success, @@ -161,14 +152,15 @@ register_text_tool_procs (PikaPDB *pdb) PikaProcedure *procedure; /* - * pika-text-fontname + * pika-text-font */ - procedure = pika_procedure_new (text_fontname_invoker); + procedure = pika_procedure_new (text_font_invoker); pika_object_set_static_name (PIKA_OBJECT (procedure), - "pika-text-fontname"); + "pika-text-font"); pika_procedure_set_static_help (procedure, "Add text at the specified location as a floating selection or a new layer.", - "This tool requires a fontname matching an installed PangoFT2 font. You can specify the fontsize in units of pixels or points, and the appropriate metric is specified using the size_type argument. The x and y parameters together control the placement of the new text by specifying the upper left corner of the text bounding box. If the specified drawable parameter is valid, the text will be created as a floating selection attached to the drawable. If the drawable parameter is not valid (%NULL), the text will appear as a new layer. Finally, a border can be specified around the final rendered text. The border is measured in pixels. Parameter size-type is not used and is currently ignored. If you need to display a font in points, divide the size in points by 72.0 and multiply it by the image's vertical resolution.", + "The x and y parameters together control the placement of the new text by specifying the upper left corner of the text bounding box. If the specified drawable parameter is valid, the text will be created as a floating selection attached to the drawable. If the drawable parameter is not valid (%NULL), the text will appear as a new layer. Finally, a border can be specified around the final rendered text. The border is measured in pixels.\n" + "The size is always in pixels. If you need to display a font in points, divide the size in points by 72.0 and multiply it by the image's vertical resolution.", NULL); pika_procedure_set_static_attribution (procedure, "Martin Edlman & Sven Neumann", @@ -220,23 +212,15 @@ register_text_tool_procs (PikaPDB *pdb) pika_procedure_add_argument (procedure, g_param_spec_double ("size", "size", - "The size of text in either pixels or points", + "The size of text in pixels", 0, G_MAXDOUBLE, 0, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - g_param_spec_enum ("size-type", - "size type", - "The units of specified size", - PIKA_TYPE_SIZE_TYPE, - PIKA_PIXELS, - PIKA_PARAM_READWRITE)); - pika_procedure_add_argument (procedure, - pika_param_spec_string ("fontname", - "fontname", - "The name of the font", - FALSE, FALSE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_font ("font", + "font", + "The font", + FALSE, + PIKA_PARAM_READWRITE)); pika_procedure_add_return_value (procedure, pika_param_spec_layer ("text-layer", "text layer", @@ -247,14 +231,16 @@ register_text_tool_procs (PikaPDB *pdb) g_object_unref (procedure); /* - * pika-text-get-extents-fontname + * pika-text-get-extents-font */ - procedure = pika_procedure_new (text_get_extents_fontname_invoker); + procedure = pika_procedure_new (text_get_extents_font_invoker); pika_object_set_static_name (PIKA_OBJECT (procedure), - "pika-text-get-extents-fontname"); + "pika-text-get-extents-font"); pika_procedure_set_static_help (procedure, "Get extents of the bounding box for the specified text.", - "This tool returns the width and height of a bounding box for the specified text string with the specified font information. Ascent and descent for the specified font are returned as well. Parameter size-type is not used and is currently ignored. If you need to display a font in points, divide the size in points by 72.0 and multiply it by the vertical resolution of the image you are taking into account.", + "This tool returns the width and height of a bounding box for the specified text rendered with the specified font information. Ascent and descent of the glyph extents are returned as well.\n" + "The ascent is the distance from the baseline to the highest point of the character. This is positive if the glyph ascends above the baseline. The descent is the distance from the baseline to the lowest point of the character. This is positive if the glyph descends below the baseline.\n" + "The size is always in pixels. If you need to set a font in points, divide the size in points by 72.0 and multiply it by the vertical resolution of the image you are taking into account.", NULL); pika_procedure_set_static_attribution (procedure, "Martin Edlman & Sven Neumann", @@ -274,41 +260,33 @@ register_text_tool_procs (PikaPDB *pdb) 0, G_MAXDOUBLE, 0, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - g_param_spec_enum ("size-type", - "size type", - "The units of specified size", - PIKA_TYPE_SIZE_TYPE, - PIKA_PIXELS, - PIKA_PARAM_READWRITE)); - pika_procedure_add_argument (procedure, - pika_param_spec_string ("fontname", - "fontname", - "The name of the font", - FALSE, FALSE, FALSE, - NULL, - PIKA_PARAM_READWRITE)); + pika_param_spec_font ("font", + "font", + "The name of the font", + FALSE, + PIKA_PARAM_READWRITE)); pika_procedure_add_return_value (procedure, g_param_spec_int ("width", "width", - "The width of the specified font", + "The width of the glyph extents", G_MININT32, G_MAXINT32, 0, PIKA_PARAM_READWRITE)); pika_procedure_add_return_value (procedure, g_param_spec_int ("height", "height", - "The height of the specified font", + "The height of the glyph extents", G_MININT32, G_MAXINT32, 0, PIKA_PARAM_READWRITE)); pika_procedure_add_return_value (procedure, g_param_spec_int ("ascent", "ascent", - "The ascent of the specified font", + "The ascent of the glyph extents", G_MININT32, G_MAXINT32, 0, PIKA_PARAM_READWRITE)); pika_procedure_add_return_value (procedure, g_param_spec_int ("descent", "descent", - "The descent of the specified font", + "The descent of the glyph extents", G_MININT32, G_MAXINT32, 0, PIKA_PARAM_READWRITE)); pika_pdb_register_procedure (pdb, procedure); diff --git a/app/pika-update.c b/app/pika-update.c index 9cbf452..d0166ac 100644 --- a/app/pika-update.c +++ b/app/pika-update.c @@ -439,14 +439,18 @@ pika_update_about_dialog (PikaCoreConfig *config, const GParamSpec *pspec, gpointer user_data) { +#ifndef PIKA_CONSOLE_COMPILATION + Pika *pika = user_data; +#endif + g_signal_handlers_disconnect_by_func (config, (GCallback) pika_update_about_dialog, - NULL); + user_data); if (config->last_known_release != NULL) { #ifndef PIKA_CONSOLE_COMPILATION - gtk_widget_show (about_dialog_create (config)); + gtk_widget_show (about_dialog_create (pika)); #else g_printerr (_("A new version of PIKA (%s) was released.\n" "It is recommended to update."), @@ -643,7 +647,7 @@ pika_update_auto_check (PikaCoreConfig *config, g_signal_connect (config, "notify::last-known-release", (GCallback) pika_update_about_dialog, - NULL); + pika); pika_update_check (config); diff --git a/app/plug-in/pikaplugin-progress.c b/app/plug-in/pikaplugin-progress.c index 8599a46..94b0478 100644 --- a/app/plug-in/pikaplugin-progress.c +++ b/app/plug-in/pikaplugin-progress.c @@ -237,7 +237,7 @@ pika_plug_in_progress_pulse (PikaPlugIn *plug_in) pika_progress_pulse (proc_frame->progress); } -guint32 +GBytes * pika_plug_in_progress_get_window_id (PikaPlugIn *plug_in) { PikaPlugInProcFrame *proc_frame; diff --git a/app/plug-in/pikaplugin-progress.h b/app/plug-in/pikaplugin-progress.h index ed98f27..5662c49 100644 --- a/app/plug-in/pikaplugin-progress.h +++ b/app/plug-in/pikaplugin-progress.h @@ -38,7 +38,7 @@ void pika_plug_in_progress_set_text (PikaPlugIn *plug_in, void pika_plug_in_progress_set_value (PikaPlugIn *plug_in, gdouble percentage); void pika_plug_in_progress_pulse (PikaPlugIn *plug_in); -guint32 pika_plug_in_progress_get_window_id (PikaPlugIn *plug_in); +GBytes * pika_plug_in_progress_get_window_id (PikaPlugIn *plug_in); gboolean pika_plug_in_progress_install (PikaPlugIn *plug_in, const gchar *progress_callback); diff --git a/app/plug-in/pikapluginmanager-restore.c b/app/plug-in/pikapluginmanager-restore.c index 228d4f2..0fe1ba2 100644 --- a/app/plug-in/pikapluginmanager-restore.c +++ b/app/plug-in/pikapluginmanager-restore.c @@ -665,10 +665,11 @@ pika_plug_in_manager_add_from_file (PikaPlugInManager *manager, basename = g_path_get_basename (filename); g_free (filename); - /* When we scan build dirs for plug-ins, there will be some + /* When we scan build dirs for plug-ins, there might be some * executable files that are not plug-ins that we want to ignore, - * for example plug-ins/common/mkgen.pl if - * PIKA_TESTING_PLUGINDIRS=plug-ins/common + * for example back with autotools, there used to be a file + * plug-ins/common/mkgen.pl if PIKA_TESTING_PLUGINDIRS=plug-ins/common + * Such files should be listed in PIKA_TESTING_PLUGINDIRS_BASENAME_IGNORES */ if (pika_plug_in_manager_ignore_plugin_basename (basename)) { diff --git a/app/plug-in/plug-in-rc.c b/app/plug-in/plug-in-rc.c index ae4bb79..73b39cb 100644 --- a/app/plug-in/plug-in-rc.c +++ b/app/plug-in/plug-in-rc.c @@ -830,6 +830,56 @@ plug_in_proc_arg_deserialize (GScanner *scanner, } break; + case GP_PARAM_DEF_TYPE_CHOICE: + { + PikaChoice *choice; + gint n_choices; + + if (! pika_scanner_parse_string (scanner, + ¶m_def.meta.m_choice.default_val) || + ! pika_scanner_parse_int (scanner, &n_choices)) + { + token = G_TOKEN_INT; + goto error; + } + + choice = pika_choice_new (); + param_def.meta.m_choice.choice = choice; + + for (int i = 0; i < n_choices; i++) + { + gchar *nick = NULL; + gchar *label = NULL; + gchar *help = NULL; + gint id; + + if (! pika_scanner_parse_string (scanner, &nick)) + { + token = G_TOKEN_STRING; + goto error; + } + if (! pika_scanner_parse_int (scanner, &id)) + { + token = G_TOKEN_INT; + goto error; + } + if (! pika_scanner_parse_string (scanner, &label) || + ! pika_scanner_parse_string (scanner, &help)) + { + token = G_TOKEN_STRING; + g_free (nick); + g_free (label); + g_free (help); + goto error; + } + pika_choice_add (choice, nick, id, label, help); + g_free (nick); + g_free (label); + g_free (help); + } + } + break; + case GP_PARAM_DEF_TYPE_BOOLEAN: if (! pika_scanner_parse_int (scanner, ¶m_def.meta.m_boolean.default_val)) @@ -944,6 +994,11 @@ plug_in_proc_arg_deserialize (GScanner *scanner, case GP_PARAM_DEF_TYPE_ID: break; + case GP_PARAM_DEF_TYPE_CHOICE: + g_clear_object (¶m_def.meta.m_choice.choice); + g_free (param_def.meta.m_choice.default_val); + break; + case GP_PARAM_DEF_TYPE_ID_ARRAY: g_free (param_def.meta.m_id_array.type_name); break; @@ -1038,6 +1093,31 @@ plug_in_rc_write_proc_arg (PikaConfigWriter *writer, param_def.meta.m_enum.default_val); break; + case GP_PARAM_DEF_TYPE_CHOICE: + { + GList *choices; + + choices = pika_choice_list_nicks (param_def.meta.m_choice.choice); + pika_config_writer_string (writer, param_def.meta.m_choice.default_val); + pika_config_writer_printf (writer, "%d", g_list_length (choices)); + for (GList *iter = choices; iter; iter = iter->next) + { + const gchar *nick = iter->data; + const gchar *label; + const gchar *help; + gint id; + + pika_choice_get_documentation (param_def.meta.m_choice.choice, + nick, &label, &help); + id = pika_choice_get_id (param_def.meta.m_choice.choice, nick); + pika_config_writer_string (writer, nick); + pika_config_writer_printf (writer, "%d", id); + pika_config_writer_string (writer, label); + pika_config_writer_string (writer, help); + } + } + break; + case GP_PARAM_DEF_TYPE_BOOLEAN: pika_config_writer_printf (writer, "%d", param_def.meta.m_boolean.default_val); diff --git a/app/tests/meson.build b/app/tests/meson.build index 9ae6ff4..5b9c446 100644 --- a/app/tests/meson.build +++ b/app/tests/meson.build @@ -66,8 +66,7 @@ foreach test_name : app_tests env: [ 'PIKA_TESTING_ABS_TOP_SRCDIR=' + meson.project_source_root(), 'PIKA_TESTING_ABS_TOP_BUILDDIR='+ meson.project_build_root(), - 'PIKA_TESTING_PLUGINDIRS=' + meson.project_build_root()/'plug-ins'/'common', - 'PIKA_TESTING_PLUGINDIRS_BASENAME_IGNORES=mkgen.pl', + 'PIKA_TESTING_PLUGINDIRS=' + meson.project_build_root()/'plug-ins'/'common', 'UI_TEST=yes', ], suite: 'app', diff --git a/app/text/pikafont.c b/app/text/pikafont.c index 0d2d381..2499554 100644 --- a/app/text/pikafont.c +++ b/app/text/pikafont.c @@ -406,13 +406,6 @@ pika_font_deserialize_create (GType type, font = PIKA_FONT (pika_container_get_child_by_index (fonts_container, i)); - if (fonthash != NULL && font->hash != NULL && !g_strcmp0 (font->hash, fonthash)) - { - most_similar_font_index = i; - g_clear_pointer (&similar_fonts, g_list_free); - break; - } - /* Some attrs are more identifying than others, * hence their higher importance in measuring similarity. */ diff --git a/app/text/pikafontfactory.c b/app/text/pikafontfactory.c index a55b123..1e9c264 100644 --- a/app/text/pikafontfactory.c +++ b/app/text/pikafontfactory.c @@ -704,6 +704,7 @@ pika_font_factory_load_names (PikaContainer *container, { PangoFontDescription *pfd; GString *xml; + GString *xml_bold_variant; gchar *fontformat; gchar *family = NULL; gchar *style = NULL; @@ -796,26 +797,43 @@ pika_font_factory_load_names (PikaContainer *container, xml = g_string_new ("\n"); + /*We can't use faux bold (sometimes real bold) unless it is specified in fontconfig*/ + xml_bold_variant = g_string_new ("\n"); + g_string_append_printf (xml, "%s", newname); + g_string_append_printf (xml_bold_variant, + "%s", + newname); + g_string_append (xml_bold_variant, + "bold"); escaped_fullname = g_markup_escape_text (fullname, -1); g_string_append_printf (xml, "%s", escaped_fullname); + g_string_append_printf (xml_bold_variant, + "%s", + escaped_fullname); g_free (escaped_fullname); family = g_markup_escape_text (family, -1); g_string_append_printf (xml, "%s", family); + g_string_append_printf (xml_bold_variant, + "%s", + family); g_free (family); escaped_file = g_markup_escape_text (file, -1); g_string_append_printf (xml, "%s", escaped_file); + g_string_append_printf (xml_bold_variant, + "%s", + escaped_file); g_free (escaped_file); if (psname != NULL) @@ -824,6 +842,9 @@ pika_font_factory_load_names (PikaContainer *container, g_string_append_printf (xml, "%s", psname); + g_string_append_printf (xml_bold_variant, + "%s", + psname); g_free (psname); } @@ -833,36 +854,64 @@ pika_font_factory_load_names (PikaContainer *container, g_string_append_printf (xml, "%s", style); + g_string_append_printf (xml_bold_variant, + "%s", + style); g_free (style); } + g_string_append (xml_bold_variant, "bold"); + if (weight != -1) g_string_append_printf (xml, - "%i", + "%i", weight); if (width != -1) - g_string_append_printf (xml, - "%i", - width); + { + g_string_append_printf (xml, + "%i", + width); + g_string_append_printf (xml_bold_variant, + "%i", + width); + } if (slant != -1) - g_string_append_printf (xml, - "%i", - slant); + { + g_string_append_printf (xml, + "%i", + slant); + g_string_append_printf (xml_bold_variant, + "%i", + slant); + } if (fontversion != -1) - g_string_append_printf (xml, - "%i", - fontversion); + { + g_string_append_printf (xml, + "%i", + fontversion); + g_string_append_printf (xml_bold_variant, + "%i", + fontversion); + } if (index != -1) - g_string_append_printf (xml, - "%i", - index); + { + g_string_append_printf (xml, + "%i", + index); + g_string_append_printf (xml_bold_variant, + "%i", + index); + } + g_string_append (xml, "\n"); + g_string_append (xml_bold_variant, "\n"); + FcConfigParseAndLoadFromMemory (FcConfigGetCurrent (), (const FcChar8 *) xml_bold_variant->str, FcTrue); FcConfigParseAndLoadFromMemory (FcConfigGetCurrent (), (const FcChar8 *) xml->str, FcTrue); pfd = pango_font_description_from_string (newname); @@ -877,6 +926,7 @@ pika_font_factory_load_names (PikaContainer *container, pango_font_description_free (pfd); g_free (newname); g_string_free (xml, TRUE); + g_string_free (xml_bold_variant, TRUE); } if (n_ignored > 0) diff --git a/app/text/pikatext-compat.c b/app/text/pikatext-compat.c index 7351dde..d4c6adc 100644 --- a/app/text/pikatext-compat.c +++ b/app/text/pikatext-compat.c @@ -42,6 +42,7 @@ #include "core/pikaimage-undo.h" #include "core/pikalayer-floating-selection.h" +#include "pikafont.h" #include "pikatext.h" #include "pikatext-compat.h" #include "pikatextlayer.h" @@ -55,24 +56,22 @@ text_render (PikaImage *image, PikaContext *context, gint text_x, gint text_y, - const gchar *fontname, + PikaFont *font, + gdouble font_size, const gchar *text, gint border, gboolean antialias) { - PangoFontDescription *desc; - PikaText *gtext; - PikaLayer *layer; - PikaRGB color; - gchar *font; - gdouble size; + PikaText *gtext; + PikaLayer *layer; + PikaRGB color; g_return_val_if_fail (PIKA_IS_IMAGE (image), NULL); g_return_val_if_fail (drawable == NULL || PIKA_IS_DRAWABLE (drawable), NULL); g_return_val_if_fail (drawable == NULL || pika_item_is_attached (PIKA_ITEM (drawable)), NULL); g_return_val_if_fail (PIKA_IS_CONTEXT (context), NULL); - g_return_val_if_fail (fontname != NULL, NULL); + g_return_val_if_fail (PIKA_IS_FONT (font), NULL); g_return_val_if_fail (text != NULL, NULL); if (! pika_data_factory_data_wait (image->pika->font_factory)) @@ -81,27 +80,17 @@ text_render (PikaImage *image, if (border < 0) border = 0; - desc = pango_font_description_from_string (fontname); - size = PANGO_PIXELS (pango_font_description_get_size (desc)); - - pango_font_description_unset_fields (desc, PANGO_FONT_MASK_SIZE); - font = pango_font_description_to_string (desc); - - pango_font_description_free (desc); - pika_context_get_foreground (context, &color); gtext = g_object_new (PIKA_TYPE_TEXT, "text", text, "font", font, - "font-size", size, + "font-size", font_size, "antialias", antialias, "border", border, "color", &color, NULL); - g_free (font); - layer = pika_text_layer_new (image, gtext); g_object_unref (gtext); @@ -142,7 +131,8 @@ text_render (PikaImage *image, gboolean text_get_extents (Pika *pika, - const gchar *fontname, + PikaFont *font, + gdouble font_size, const gchar *text, gint *width, gint *height, @@ -154,9 +144,10 @@ text_get_extents (Pika *pika, PangoLayout *layout; PangoFontMap *fontmap; PangoRectangle rect; + gchar *real_fontname; g_return_val_if_fail (PIKA_IS_PIKA (pika), FALSE); - g_return_val_if_fail (fontname != NULL, FALSE); + g_return_val_if_fail (PIKA_IS_FONT (font), FALSE); g_return_val_if_fail (text != NULL, FALSE); if (! pika_data_factory_data_wait (pika->font_factory)) @@ -175,9 +166,11 @@ text_get_extents (Pika *pika, layout = pango_layout_new (context); g_object_unref (context); - font_desc = pango_font_description_from_string (fontname); + real_fontname = g_strdup_printf ("%s %d", pika_font_get_lookup_name (font), (gint) font_size); + font_desc = pango_font_description_from_string (real_fontname); pango_layout_set_font_description (layout, font_desc); pango_font_description_free (font_desc); + g_free (real_fontname); pango_layout_set_text (layout, text, -1); @@ -202,7 +195,7 @@ text_get_extents (Pika *pika, if (ascent) *ascent = PANGO_ASCENT (rect); if (descent) - *descent = - PANGO_DESCENT (rect); + *descent = PANGO_DESCENT (rect); } g_object_unref (layout); diff --git a/app/text/pikatext-compat.h b/app/text/pikatext-compat.h index c874682..7e9cf73 100644 --- a/app/text/pikatext-compat.h +++ b/app/text/pikatext-compat.h @@ -33,12 +33,14 @@ PikaLayer * text_render (PikaImage *image, PikaContext *context, gint text_x, gint text_y, - const gchar *fontname, + PikaFont *font, + gdouble font_size, const gchar *text, gint border, gboolean antialias); gboolean text_get_extents (Pika *pika, - const gchar *fontname, + PikaFont *font, + gdouble font_size, const gchar *text, gint *width, gint *height, diff --git a/app/tools/pikaalignoptions.c b/app/tools/pikaalignoptions.c index 6ba6471..cc11e24 100644 --- a/app/tools/pikaalignoptions.c +++ b/app/tools/pikaalignoptions.c @@ -121,7 +121,7 @@ static void pika_align_options_pivot_changed (PikaPivotSelector *sele G_DEFINE_TYPE_WITH_PRIVATE (PikaAlignOptions, pika_align_options, PIKA_TYPE_TOOL_OPTIONS) -#define parent_class pika_selection_options_parent_class +#define parent_class pika_align_options_parent_class static guint align_options_signals[LAST_SIGNAL] = { 0 }; @@ -205,6 +205,8 @@ pika_align_options_finalize (GObject *object) if (PIKA_CONTEXT (options)->pika) pika_align_options_image_changed (pika_get_user_context (PIKA_CONTEXT (options)->pika), NULL, options); + + G_OBJECT_CLASS (parent_class)->finalize (object); } static void @@ -544,10 +546,10 @@ pika_align_options_gui (PikaToolOptions *tool_options) pika_align_options_button_new (options, PIKA_DISTRIBUTE_EVEN_VERTICAL_GAP, hbox, _("Distribute vertically with even vertical gaps")); - g_signal_connect (pika_get_user_context (PIKA_CONTEXT (options)->pika), - "image-changed", - G_CALLBACK (pika_align_options_image_changed), - tool_options); + g_signal_connect_object (pika_get_user_context (PIKA_CONTEXT (options)->pika), + "image-changed", + G_CALLBACK (pika_align_options_image_changed), + tool_options, 0); pika_align_options_image_changed (pika_get_user_context (PIKA_CONTEXT (options)->pika), pika_context_get_image (pika_get_user_context (PIKA_CONTEXT (options)->pika)), options); diff --git a/app/tools/tool_manager.c b/app/tools/tool_manager.c index fc882cb..aea9790 100644 --- a/app/tools/tool_manager.c +++ b/app/tools/tool_manager.c @@ -188,6 +188,11 @@ tool_manager_exit (Pika *pika) tool_manager_image_changed, tool_manager); + if (tool_manager->image) + g_signal_handlers_disconnect_by_func (tool_manager->image, + tool_manager_selected_layers_changed, + tool_manager); + pika_container_remove_handler (pika->images, tool_manager->image_clean_handler_id); pika_container_remove_handler (pika->images, diff --git a/app/widgets/meson.build b/app/widgets/meson.build index 9623c2e..2abebd3 100644 --- a/app/widgets/meson.build +++ b/app/widgets/meson.build @@ -161,7 +161,9 @@ libappwidgets_sources = [ 'pikapatternselect.c', 'pikapdbdialog.c', 'pikapickablebutton.c', + 'pikapickablechooser.c', 'pikapickablepopup.c', + 'pikapickableselect.c', 'pikapivotselector.c', 'pikapixbuf.c', 'pikapluginview.c', diff --git a/app/widgets/pikaaction-history.c b/app/widgets/pikaaction-history.c index ced9ab6..2087275 100644 --- a/app/widgets/pikaaction-history.c +++ b/app/widgets/pikaaction-history.c @@ -366,6 +366,8 @@ pika_action_history_action_activated (PikaAction *action) GList *link; PikaActionHistoryItem *item; + g_return_if_fail (PIKA_IS_ACTION (action)); + /* Silently return when called at the wrong time, like when the * activated action was "quit" and the history is already gone. */ diff --git a/app/widgets/pikaaction.c b/app/widgets/pikaaction.c index 0bb5973..d17b13e 100644 --- a/app/widgets/pikaaction.c +++ b/app/widgets/pikaaction.c @@ -693,6 +693,39 @@ pika_action_use_default_accels (PikaAction *action) return TRUE; } +gboolean +pika_action_is_default_accel (PikaAction *action, + const gchar *accel) +{ + gchar **default_accels; + guint accelerator_key = 0; + GdkModifierType accelerator_mods = 0; + + g_return_val_if_fail (PIKA_IS_ACTION (action), TRUE); + g_return_val_if_fail (accel != NULL, TRUE); + + gtk_accelerator_parse (accel, &accelerator_key, &accelerator_mods); + g_return_val_if_fail (accelerator_key != 0 || accelerator_mods == 0, FALSE); + + default_accels = GET_PRIVATE (action)->default_accels; + + if (default_accels == NULL) + return FALSE; + + for (gint i = 0; default_accels[i] != NULL; i++) + { + guint default_key; + GdkModifierType default_mods; + + gtk_accelerator_parse (default_accels[i], &default_key, &default_mods); + + if (default_key == accelerator_key && default_mods == accelerator_mods) + return TRUE; + } + + return FALSE; +} + const gchar * pika_action_get_menu_path (PikaAction *action) { diff --git a/app/widgets/pikaaction.h b/app/widgets/pikaaction.h index aa80001..1d26bb4 100644 --- a/app/widgets/pikaaction.h +++ b/app/widgets/pikaaction.h @@ -119,6 +119,8 @@ const gchar ** pika_action_get_default_accels (PikaAction *action); const gchar ** pika_action_get_accels (PikaAction *action); gchar ** pika_action_get_display_accels (PikaAction *action); gboolean pika_action_use_default_accels (PikaAction *action); +gboolean pika_action_is_default_accel (PikaAction *action, + const gchar *accel); const gchar * pika_action_get_menu_path (PikaAction *action); diff --git a/app/widgets/pikaactiongroup.c b/app/widgets/pikaactiongroup.c index 429327e..2bdfa66 100644 --- a/app/widgets/pikaactiongroup.c +++ b/app/widgets/pikaactiongroup.c @@ -394,7 +394,87 @@ pika_action_group_add_action_with_accel (PikaActionGroup *group, if ((accelerators != NULL && accelerators[0] != NULL && g_strcmp0 (accelerators[0], "") != 0)) - pika_action_set_default_accels (action, (const gchar **) accelerators); + { + guint i = 0; + GdkDisplay *display; + GdkKeymap *keymap; + gchar *accel_strs[] = { NULL, NULL, NULL, NULL}; + + display = gdk_display_get_default (); + keymap = gdk_keymap_get_for_display (display); + + while (accelerators[i] != NULL) + { + /** + * Shifted numeric key accelerators ("0" .. "9") do + * not work with GTK3 so the following code converts these + * accelerators to the shifted character (or the un-shifted + * character in the case of an azerty keyboard for example) that + * relates to the selected numeric character. This takes into + * account the keyboard layout that is being used when PIKA starts. + * This means that the appropriate characters will be shown for the + * shortcuts in the menus and keyboard preferences. + **/ + guint accelerator_key; + GdkModifierType accelerator_modifier; + gboolean accelerator_string_set; + + accelerator_string_set = FALSE; + + gtk_accelerator_parse (accelerators[i], + &accelerator_key, + &accelerator_modifier); + + if ((accelerator_key >= '0') && + (accelerator_key <= '9') && + (accelerator_modifier == GDK_SHIFT_MASK)) + { + gboolean result; + gint count; + GdkKeymapKey key; + GdkKeymapKey *keys = NULL; + guint non_number_keyval; + + result = gdk_keymap_get_entries_for_keyval (keymap, + accelerator_key, + &keys, + &count); + if (result && (count > 0)) + { + key.keycode = keys[0].keycode; + key.group = 0; + key.level = 1; + + non_number_keyval = gdk_keymap_lookup_key (keymap, &key); + + if (non_number_keyval == accelerator_key) + { + /** + * the number shifted is the number - assume keyboard + * such as azerty where the numbers are on the shifted + * key and the other characters are obtained without + * the shift + **/ + key.level = 0; + non_number_keyval = gdk_keymap_lookup_key (keymap, &key); + } + accel_strs[i] = g_strdup (gdk_keyval_name (non_number_keyval)); + accelerator_string_set = TRUE; + } + g_free (keys); + } + + if (! accelerator_string_set) + accel_strs[i] = g_strdup (accelerators[i]); + + i++; + } + pika_action_set_default_accels (action, (const gchar **) accel_strs); + + /* free up to 3 accelerator strings (4th entry is always NULL) */ + for (guint i = 0; i < 3; i++) + g_free (accel_strs[i]); + } pika_action_set_group (action, group); } diff --git a/app/widgets/pikabrushselect.c b/app/widgets/pikabrushselect.c index 813b455..887deb1 100644 --- a/app/widgets/pikabrushselect.c +++ b/app/widgets/pikabrushselect.c @@ -282,7 +282,7 @@ pika_brush_select_run_callback (PikaPdbDialog *dialog, dialog->caller_context, NULL, error, dialog->callback_name, - G_TYPE_STRING, pika_object_get_name (object), + PIKA_TYPE_RESOURCE, object, G_TYPE_DOUBLE, pika_context_get_opacity (dialog->context) * 100.0, G_TYPE_INT, PIKA_BRUSH_SELECT (dialog)->spacing, PIKA_TYPE_LAYER_MODE, pika_context_get_paint_mode (dialog->context), diff --git a/app/widgets/pikacolorhistory.c b/app/widgets/pikacolorhistory.c index 4180bfa..c498b33 100644 --- a/app/widgets/pikacolorhistory.c +++ b/app/widgets/pikacolorhistory.c @@ -538,7 +538,7 @@ pika_color_history_color_changed (GtkWidget *widget, pika_color_area_get_color (PIKA_COLOR_AREA (widget), &color); - pika_palette_set_entry_color (palette, GPOINTER_TO_INT (data), &color); + pika_palette_set_entry_color (palette, GPOINTER_TO_INT (data), &color, FALSE); } static void diff --git a/app/widgets/pikacolormapeditor.c b/app/widgets/pikacolormapeditor.c index c315370..6ff5e30 100644 --- a/app/widgets/pikacolormapeditor.c +++ b/app/widgets/pikacolormapeditor.c @@ -47,29 +47,33 @@ #include "pika-intl.h" -static void pika_colormap_editor_docked_iface_init (PikaDockedInterface *face); +static void pika_colormap_editor_docked_iface_init (PikaDockedInterface *face); -static void pika_colormap_editor_constructed (GObject *object); -static void pika_colormap_editor_dispose (GObject *object); +static void pika_colormap_editor_constructed (GObject *object); +static void pika_colormap_editor_dispose (GObject *object); -static void pika_colormap_editor_unmap (GtkWidget *widget); +static void pika_colormap_editor_unmap (GtkWidget *widget); -static void pika_colormap_editor_set_context (PikaDocked *docked, - PikaContext *context); +static void pika_colormap_editor_set_context (PikaDocked *docked, + PikaContext *context); -static void pika_colormap_editor_color_update (PikaColorDialog *dialog, - const PikaRGB *color, - PikaColorDialogState state, - PikaColormapEditor *editor); +static void pika_colormap_editor_color_update (PikaColorDialog *dialog, + const PikaRGB *color, + PikaColorDialogState state, + PikaColormapEditor *editor); + +static gboolean pika_colormap_editor_entry_button_press (GtkWidget *widget, + GdkEvent *event, + gpointer user_data); +static gboolean pika_colormap_editor_entry_popup (GtkWidget *widget, + gpointer user_data); +static void pika_colormap_editor_color_clicked (PikaColormapEditor *editor, + PikaPaletteEntry *entry, + GdkModifierType state); +static void pika_colormap_editor_notify_index (PikaColormapSelection *selection, + const GParamSpec *pspec, + PikaColormapEditor *editor); -static gboolean pika_colormap_editor_entry_button_press (GtkWidget *widget, - GdkEvent *event, - gpointer user_data); -static gboolean pika_colormap_editor_entry_popup (GtkWidget *widget, - gpointer user_data); -static void pika_colormap_editor_color_clicked (PikaColormapEditor *editor, - PikaPaletteEntry *entry, - GdkModifierType state); G_DEFINE_TYPE_WITH_CODE (PikaColormapEditor, pika_colormap_editor, PIKA_TYPE_IMAGE_EDITOR, @@ -127,6 +131,9 @@ pika_colormap_editor_constructed (GObject *object) pika_editor_add_action_button (PIKA_EDITOR (editor), "colormap", "colormap-edit-color", NULL); + pika_editor_add_action_button (PIKA_EDITOR (editor), "colormap", + "colormap-delete-color", + NULL); pika_editor_add_action_button (PIKA_EDITOR (editor), "colormap", "colormap-add-color-from-fg", @@ -197,6 +204,9 @@ pika_colormap_editor_set_context (PikaDocked *docked, g_signal_connect (editor->selection, "popup-menu", G_CALLBACK (pika_colormap_editor_entry_popup), editor); + g_signal_connect (editor->selection, "notify::index", + G_CALLBACK (pika_colormap_editor_notify_index), + editor); } } @@ -281,6 +291,43 @@ pika_colormap_editor_edit_color (PikaColormapEditor *editor) gtk_window_present (GTK_WINDOW (editor->color_dialog)); } +void +pika_colormap_editor_delete_color (PikaColormapEditor *editor) +{ + PikaColormapSelection *selection; + PikaImage *image; + gint index; + + g_return_if_fail (PIKA_IS_COLORMAP_EDITOR (editor)); + g_return_if_fail (pika_colormap_editor_is_color_deletable (editor)); + + image = PIKA_IMAGE_EDITOR (editor)->image; + selection = PIKA_COLORMAP_SELECTION (editor->selection); + index = pika_colormap_selection_get_index (selection, NULL); + + pika_image_delete_colormap_entry (image, index, TRUE); +} + +gboolean +pika_colormap_editor_is_color_deletable (PikaColormapEditor *editor) +{ + PikaColormapSelection *selection; + PikaImage *image; + gint index; + + g_return_val_if_fail (PIKA_IS_COLORMAP_EDITOR (editor), FALSE); + + image = PIKA_IMAGE_EDITOR (editor)->image; + selection = PIKA_COLORMAP_SELECTION (editor->selection); + index = pika_colormap_selection_get_index (selection, NULL); + + if (index == -1) + /* No colormap. */ + return FALSE; + else + return ! pika_image_colormap_is_index_used (image, index); +} + gint pika_colormap_editor_get_index (PikaColormapEditor *editor, const PikaRGB *search) @@ -411,3 +458,16 @@ pika_colormap_editor_color_clicked (PikaColormapEditor *editor, else pika_context_set_foreground (image_editor->context, &entry->color); } + +static void +pika_colormap_editor_notify_index (PikaColormapSelection *selection, + const GParamSpec *pspec, + PikaColormapEditor *editor) +{ + g_return_if_fail (PIKA_IS_COLORMAP_EDITOR (editor)); + + pika_editor_set_action_sensitive (PIKA_EDITOR (editor), "colormap", + "colormap-delete-color", + pika_colormap_editor_is_color_deletable (editor), + _("The color is used in this indexed image")); +} diff --git a/app/widgets/pikacolormapeditor.h b/app/widgets/pikacolormapeditor.h index 84cd457..4aba174 100644 --- a/app/widgets/pikacolormapeditor.h +++ b/app/widgets/pikacolormapeditor.h @@ -50,19 +50,21 @@ struct _PikaColormapEditorClass }; -GType pika_colormap_editor_get_type (void) G_GNUC_CONST; +GType pika_colormap_editor_get_type (void) G_GNUC_CONST; -GtkWidget * pika_colormap_editor_new (PikaMenuFactory *menu_factory); +GtkWidget * pika_colormap_editor_new (PikaMenuFactory *menu_factory); -void pika_colormap_editor_edit_color (PikaColormapEditor *editor); +void pika_colormap_editor_edit_color (PikaColormapEditor *editor); +void pika_colormap_editor_delete_color (PikaColormapEditor *editor); +gboolean pika_colormap_editor_is_color_deletable (PikaColormapEditor *editor); -gint pika_colormap_editor_get_index (PikaColormapEditor *editor, - const PikaRGB *search); -gboolean pika_colormap_editor_set_index (PikaColormapEditor *editor, - gint index, - PikaRGB *color); +gint pika_colormap_editor_get_index (PikaColormapEditor *editor, + const PikaRGB *search); +gboolean pika_colormap_editor_set_index (PikaColormapEditor *editor, + gint index, + PikaRGB *color); -gint pika_colormap_editor_max_index (PikaColormapEditor *editor); +gint pika_colormap_editor_max_index (PikaColormapEditor *editor); #endif /* __PIKA_COLORMAP_EDITOR_H__ */ diff --git a/app/widgets/pikacolormapselection.c b/app/widgets/pikacolormapselection.c index 853746e..8abc416 100644 --- a/app/widgets/pikacolormapselection.c +++ b/app/widgets/pikacolormapselection.c @@ -57,7 +57,8 @@ enum { PROP_0, - PROP_CONTEXT + PROP_CONTEXT, + PROP_INDEX }; enum @@ -169,6 +170,10 @@ pika_colormap_selection_class_init (PikaColormapSelectionClass* klass) PIKA_TYPE_CONTEXT, PIKA_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + g_object_class_install_property (object_class, PROP_INDEX, + g_param_spec_int ("index", NULL, NULL, + 0, G_MAXINT, 0, + PIKA_PARAM_READABLE)); } static void @@ -285,6 +290,9 @@ pika_colormap_selection_get_property (GObject *object, case PROP_CONTEXT: g_value_set_object (value, selection->context); break; + case PROP_INDEX: + g_value_set_int (value, selection->col_index); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -433,6 +441,7 @@ pika_colormap_selection_set_index (PikaColormapSelection *selection, selection->col_index = index; + g_object_notify (G_OBJECT (selection), "index"); pika_palette_view_select_entry (PIKA_PALETTE_VIEW (selection->view), pika_palette_get_entry (palette, index)); @@ -789,6 +798,8 @@ pika_colormap_selection_set_palette (PikaColormapSelection *selection) { if (selection->active_palette) { + pika_colormap_selection_set_index (selection, 0, NULL); + g_signal_handlers_disconnect_by_func (selection->active_palette, G_CALLBACK (gtk_widget_queue_draw), selection); diff --git a/app/widgets/pikacontainertreeview.c b/app/widgets/pikacontainertreeview.c index 1663ab9..05dfb79 100644 --- a/app/widgets/pikacontainertreeview.c +++ b/app/widgets/pikacontainertreeview.c @@ -899,6 +899,7 @@ pika_container_tree_view_select_items (PikaContainerView *view, GList *path; gboolean free_paths = FALSE; gboolean scroll_to_first = TRUE; + GtkTreePath *focused_path = NULL; /* If @paths is not set, compute it ourselves. */ if (g_list_length (items) != g_list_length (paths)) @@ -926,6 +927,95 @@ pika_container_tree_view_select_items (PikaContainerView *view, pika_container_tree_view_selection_changed, tree_view); gtk_tree_selection_unselect_all (tree_view->priv->selection); + gtk_tree_view_get_cursor (tree_view->view, &focused_path, NULL); + if (focused_path != NULL) + { + GtkTreePath *closer_up = NULL; + GtkTreePath *closer_down = NULL; + + for (path = paths; path; path = path->next) + { + if (gtk_tree_path_compare (path->data, focused_path) == 0) + { + break; + } + else if (gtk_tree_path_compare (path->data, focused_path) == -1) + { + if (closer_up == NULL || gtk_tree_path_compare (path->data, closer_up) == 1) + closer_up = path->data; + } + else + { + if (closer_down == NULL || gtk_tree_path_compare (path->data, closer_down) == -1) + closer_down = path->data; + } + } + + if (path == NULL) + { + /* The current cursor is not part of the selection. This may happen in + * particular with a ctrl-click interaction which would deselect the + * item the cursor is now on. + */ + g_clear_pointer (&focused_path, gtk_tree_path_free); + + if (closer_up != NULL || closer_down != NULL) + { + GtkTreePath *first = NULL; + GtkTreePath *last = NULL; + + if (gtk_tree_view_get_visible_range (tree_view->view, &first, &last)) + { + if (closer_up != NULL && + gtk_tree_path_compare (closer_up, first) >= 0 && + gtk_tree_path_compare (closer_up, last) <= 0) + focused_path = gtk_tree_path_copy (closer_up); + else if (closer_down != NULL && + gtk_tree_path_compare (closer_down, first) >= 0 && + gtk_tree_path_compare (closer_down, last) <= 0) + focused_path = gtk_tree_path_copy (closer_down); + } + + if (focused_path == NULL) + { + if (closer_up != NULL) + focused_path = gtk_tree_path_copy (closer_up); + else + focused_path = gtk_tree_path_copy (closer_down); + } + + gtk_tree_path_free (first); + gtk_tree_path_free (last); + } + else if (paths != NULL) + { + focused_path = gtk_tree_path_copy (paths->data); + } + } + } + else if (paths != NULL) + { + focused_path = gtk_tree_path_copy (paths->data); + } + /* Setting a cursor will reset the selection, so we must do it first. We don't + * want to change the cursor (which is likely the last clicked item), yet we + * also want to make sure that the cursor cannot end up out of the selected + * items, leading to discrepancy between pointer and keyboard navigation. This + * is why we set the cursor with this priority: + * 1. unchanged if it stays within selection; + * 2. closer item above the current cursor, if visible; + * 3. closer item below the current cursor, if visible; + * 4. closer item above the current cursor (even though invisible, which will + * make the view scroll up); + * 5. closer item below the current cursor if there are no items above (view + * will scroll down); + * 6. top selected item if there was no current cursor; + * 7. nothing if no selected items. + */ + if (focused_path != NULL) + gtk_tree_view_set_cursor (tree_view->view, focused_path, NULL, FALSE); + gtk_tree_path_free (focused_path); + for (item = items, path = paths; item && path; item = item->next, path = path->next) { GtkTreePath *parent_path; @@ -1267,12 +1357,10 @@ pika_container_tree_view_button (GtkWidget *widget, PikaContainerView *container_view = PIKA_CONTAINER_VIEW (tree_view); GtkTreeViewColumn *column; GtkTreePath *path; + gboolean handled = TRUE; tree_view->priv->dnd_renderer = NULL; - if (bevent->type != GDK_BUTTON_RELEASE && ! gtk_widget_has_focus (widget)) - gtk_widget_grab_focus (widget); - if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), bevent->x, bevent->y, &path, &column, NULL, NULL)) @@ -1283,10 +1371,10 @@ pika_container_tree_view_button (GtkWidget *widget, GtkCellRenderer *edit_cell = NULL; GdkRectangle column_area; GtkTreeIter iter; - gboolean handled = TRUE; gboolean multisel_mode; GdkModifierType modifiers = (bevent->state & pika_get_all_modifiers_mask ()); + handled = TRUE; multisel_mode = (gtk_tree_selection_get_mode (tree_view->priv->selection) == GTK_SELECTION_MULTIPLE); @@ -1301,6 +1389,19 @@ 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. + */ + if (multisel_mode && bevent->type == GDK_BUTTON_PRESS && ! gtk_widget_has_focus (widget)) + gtk_widget_grab_focus (widget); + gtk_tree_model_get_iter (tree_view->model, &iter, path); renderer = pika_container_tree_store_get_renderer (PIKA_CONTAINER_TREE_STORE (tree_view->model), &iter); @@ -1607,7 +1708,7 @@ pika_container_tree_view_button (GtkWidget *widget, gtk_tree_path_free (path); g_object_unref (renderer); - return multisel_mode ? handled : (bevent->type == GDK_BUTTON_RELEASE ? FALSE : TRUE); + handled = (multisel_mode ? handled : (bevent->type == GDK_BUTTON_RELEASE ? FALSE : TRUE)); } else { @@ -1616,8 +1717,13 @@ pika_container_tree_view_button (GtkWidget *widget, pika_editor_popup_menu_at_pointer (PIKA_EDITOR (tree_view), (GdkEvent *) bevent); } - return TRUE; + handled = TRUE; } + + if (handled && bevent->type == GDK_BUTTON_PRESS && ! gtk_widget_has_focus (widget)) + gtk_widget_grab_focus (widget); + + return handled; } /* We want to zoom on each 1/4 scroll events to roughly match zooming diff --git a/app/widgets/pikacontainerview.c b/app/widgets/pikacontainerview.c index 233d6d5..d013a3c 100644 --- a/app/widgets/pikacontainerview.c +++ b/app/widgets/pikacontainerview.c @@ -1195,9 +1195,7 @@ pika_container_view_remove (PikaContainerView *view, if (insert_data) { - PIKA_CONTAINER_VIEW_GET_IFACE (view)->remove_item (view, - viewable, - insert_data); + PIKA_CONTAINER_VIEW_GET_IFACE (view)->remove_item (view, viewable, insert_data); g_hash_table_remove (private->item_hash, viewable); } diff --git a/app/widgets/pikadatafactoryview.c b/app/widgets/pikadatafactoryview.c index 4fc9ca4..f0daea4 100644 --- a/app/widgets/pikadatafactoryview.c +++ b/app/widgets/pikadatafactoryview.c @@ -226,7 +226,7 @@ pika_data_factory_view_constructed (GObject *object) G_OBJECT_CLASS (parent_class)->constructed (object); - pika_container_editor_set_selection_mode (editor, GTK_SELECTION_MULTIPLE); + pika_container_editor_set_selection_mode (editor, GTK_SELECTION_SINGLE); if (PIKA_IS_CONTAINER_TREE_VIEW (editor->view)) { diff --git a/app/widgets/pikaeditor.c b/app/widgets/pikaeditor.c index c42e4a8..d70806e 100644 --- a/app/widgets/pikaeditor.c +++ b/app/widgets/pikaeditor.c @@ -778,6 +778,31 @@ pika_editor_add_action_button (PikaEditor *editor, return button; } +void +pika_editor_set_action_sensitive (PikaEditor *editor, + const gchar *group_name, + const gchar *action_name, + gboolean sensitive, + const gchar *reason) +{ + PikaActionGroup *group; + PikaAction *action; + + g_return_if_fail (PIKA_IS_EDITOR (editor)); + g_return_if_fail (action_name != NULL); + g_return_if_fail (editor->priv->ui_manager != NULL); + + group = pika_ui_manager_get_action_group (editor->priv->ui_manager, + group_name); + + g_return_if_fail (group != NULL); + + action = pika_action_group_get_action (group, action_name); + g_return_if_fail (action != NULL); + + pika_action_set_sensitive (action, sensitive, reason); +} + void pika_editor_set_show_name (PikaEditor *editor, gboolean show) diff --git a/app/widgets/pikaeditor.h b/app/widgets/pikaeditor.h index 6a53db3..2d71b2a 100644 --- a/app/widgets/pikaeditor.h +++ b/app/widgets/pikaeditor.h @@ -89,6 +89,11 @@ GtkWidget * pika_editor_add_action_button (PikaEditor *editor, const gchar *group_name, const gchar *action_name, ...) G_GNUC_NULL_TERMINATED; +void pika_editor_set_action_sensitive (PikaEditor *editor, + const gchar *group_name, + const gchar *action_name, + gboolean sensitive, + const gchar *reason); void pika_editor_set_show_name (PikaEditor *editor, gboolean show); diff --git a/app/widgets/pikafiledialog.c b/app/widgets/pikafiledialog.c index 351a51d..17ffc3e 100644 --- a/app/widgets/pikafiledialog.c +++ b/app/widgets/pikafiledialog.c @@ -90,6 +90,8 @@ static gboolean pika_file_dialog_delete_event (GtkWidget *w GdkEventAny *event); static void pika_file_dialog_response (GtkDialog *dialog, gint response_id); +static void pika_file_dialog_map (PikaFileDialog *dialog, + gpointer data); static GFile * pika_file_dialog_real_get_default_folder (PikaFileDialog *dialog); static void pika_file_dialog_real_save_state (PikaFileDialog *dialog, const gchar *state_name); @@ -108,7 +110,7 @@ static void pika_file_dialog_progress_set_value (PikaProgress *p gdouble percentage); static gdouble pika_file_dialog_progress_get_value (PikaProgress *progress); static void pika_file_dialog_progress_pulse (PikaProgress *progress); -static guint32 pika_file_dialog_progress_get_window_id (PikaProgress *progress); +static GBytes * pika_file_dialog_progress_get_window_id (PikaProgress *progress); static void pika_file_dialog_add_user_dir (PikaFileDialog *dialog, GUserDirectory directory); @@ -229,6 +231,11 @@ pika_file_dialog_class_init (PikaFileDialogClass *klass) static void pika_file_dialog_init (PikaFileDialog *dialog) { +#ifdef G_OS_WIN32 + g_signal_connect (dialog, "map", + G_CALLBACK (pika_file_dialog_map), + NULL); +#endif } static void @@ -372,6 +379,8 @@ pika_file_dialog_constructed (GObject *object) dialog->progress = pika_progress_box_new (); gtk_box_pack_end (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), dialog->progress, FALSE, FALSE, 0); + + pika_widget_set_native_handle (GTK_WIDGET (dialog), &dialog->window_handle); } static void @@ -422,6 +431,15 @@ pika_file_dialog_response (GtkDialog *dialog, } } +static void +pika_file_dialog_map (PikaFileDialog *dialog, + gpointer data) +{ +#ifdef G_OS_WIN32 + pika_window_set_title_bar_theme (dialog->pika, GTK_WIDGET (dialog), FALSE); +#endif +} + static GFile * pika_file_dialog_real_get_default_folder (PikaFileDialog *dialog) { @@ -579,12 +597,12 @@ pika_file_dialog_progress_pulse (PikaProgress *progress) pika_progress_pulse (PIKA_PROGRESS (dialog->progress)); } -static guint32 +static GBytes * pika_file_dialog_progress_get_window_id (PikaProgress *progress) { PikaFileDialog *dialog = PIKA_FILE_DIALOG (progress); - return pika_window_get_native_id (GTK_WINDOW (dialog)); + return dialog->window_handle; } diff --git a/app/widgets/pikafiledialog.h b/app/widgets/pikafiledialog.h index baaeaea..30da314 100644 --- a/app/widgets/pikafiledialog.h +++ b/app/widgets/pikafiledialog.h @@ -42,6 +42,8 @@ struct _PikaFileDialog { GtkFileChooserDialog parent_instance; + GBytes *window_handle; + Pika *pika; PikaImage *image; diff --git a/app/widgets/pikafontselect.c b/app/widgets/pikafontselect.c index eea6e2a..bdb6442 100644 --- a/app/widgets/pikafontselect.c +++ b/app/widgets/pikafontselect.c @@ -110,7 +110,7 @@ pika_font_select_run_callback (PikaPdbDialog *dialog, dialog->caller_context, NULL, error, dialog->callback_name, - G_TYPE_STRING, pika_object_get_name (object), - G_TYPE_BOOLEAN, closing, + PIKA_TYPE_RESOURCE, object, + G_TYPE_BOOLEAN, closing, G_TYPE_NONE); } diff --git a/app/widgets/pikagradientselect.c b/app/widgets/pikagradientselect.c index c1e093e..833cb80 100644 --- a/app/widgets/pikagradientselect.c +++ b/app/widgets/pikagradientselect.c @@ -187,7 +187,7 @@ pika_gradient_select_run_callback (PikaPdbDialog *dialog, dialog->caller_context, NULL, error, dialog->callback_name, - G_TYPE_STRING, pika_object_get_name (object), + PIKA_TYPE_RESOURCE, object, G_TYPE_INT, array->length / sizeof (gdouble), PIKA_TYPE_FLOAT_ARRAY, array->data, G_TYPE_BOOLEAN, closing, diff --git a/app/widgets/pikahelp.c b/app/widgets/pikahelp.c index db80ab8..5fff2ea 100644 --- a/app/widgets/pikahelp.c +++ b/app/widgets/pikahelp.c @@ -451,12 +451,7 @@ pika_help_browser_error (Pika *pika, -1); if (progress) - { - guint32 window_id = pika_progress_get_window_id (progress); - - if (window_id) - pika_window_set_transient_for (GTK_WINDOW (dialog), window_id); - } + pika_window_set_transient_for (GTK_WINDOW (dialog), progress); pika_message_box_set_primary_text (PIKA_MESSAGE_DIALOG (dialog)->box, "%s", primary); @@ -785,12 +780,7 @@ pika_help_query_alt_user_manual (PikaIdleHelp *idle_help) idle_help->query_dialog = GTK_DIALOG (dialog); if (idle_help->progress) - { - guint32 window_id = pika_progress_get_window_id (idle_help->progress); - - if (window_id) - pika_window_set_transient_for (GTK_WINDOW (dialog), window_id); - } + pika_window_set_transient_for (GTK_WINDOW (dialog), idle_help->progress); pika_message_box_set_primary_text (PIKA_MESSAGE_DIALOG (dialog)->box, _("The PIKA user manual is not installed " diff --git a/app/widgets/pikalayertreeview.c b/app/widgets/pikalayertreeview.c index 664aa63..0c5e7db 100644 --- a/app/widgets/pikalayertreeview.c +++ b/app/widgets/pikalayertreeview.c @@ -823,14 +823,29 @@ pika_layer_tree_view_select_items (PikaContainerView *view, { if (success) { - for (layers = items, path = paths; - layers && path; - layers = layers->next, path = path->next) + if (g_list_length (items) == 1) { - GtkTreeIter iter; + GtkTreeIter *iter = NULL; - gtk_tree_model_get_iter (tree_view->model, &iter, path->data); - pika_layer_tree_view_update_borders (layer_view, &iter); + iter = + pika_container_view_lookup (PIKA_CONTAINER_VIEW (layer_view), + PIKA_VIEWABLE (layers->data)); + + if (iter) + pika_layer_tree_view_update_borders (layer_view, iter); + } + else + { + for (layers = items, path = paths; + layers && path; + layers = layers->next, path = path->next) + { + GtkTreeIter iter; + + gtk_tree_model_get_iter (tree_view->model, &iter, + path->data); + pika_layer_tree_view_update_borders (layer_view, &iter); + } } pika_layer_tree_view_update_options (layer_view, items); @@ -2156,13 +2171,14 @@ pika_layer_tree_view_layer_clicked (PikaCellRendererViewable *cell, } else #endif - if (! modifiers && mask && pika_layer_get_edit_mask (layer)) + if (! modifiers) { /* Simple clicks (without modifiers) activate the layer */ - - if (mask) + if (mask && pika_layer_get_edit_mask (layer)) pika_action_group_set_action_active (group, "layers-mask-edit", FALSE); + else + pika_layer_tree_view_update_borders (layer_view, &iter); } g_object_unref (renderer); diff --git a/app/widgets/pikapaletteeditor.c b/app/widgets/pikapaletteeditor.c index 404b825..01ef429 100644 --- a/app/widgets/pikapaletteeditor.c +++ b/app/widgets/pikapaletteeditor.c @@ -560,7 +560,7 @@ pika_palette_editor_pick_color (PikaPaletteEditor *editor, case PIKA_COLOR_PICK_STATE_UPDATE: case PIKA_COLOR_PICK_STATE_END: pika_palette_set_entry_color (PIKA_PALETTE (data), - index, color); + index, color, FALSE); break; } } diff --git a/app/widgets/pikapaletteselect.c b/app/widgets/pikapaletteselect.c index a3ae900..b70b679 100644 --- a/app/widgets/pikapaletteselect.c +++ b/app/widgets/pikapaletteselect.c @@ -113,8 +113,8 @@ pika_palette_select_run_callback (PikaPdbDialog *dialog, dialog->caller_context, NULL, error, dialog->callback_name, - G_TYPE_STRING, pika_object_get_name (object), - G_TYPE_INT, pika_palette_get_n_colors (palette), - G_TYPE_BOOLEAN, closing, + PIKA_TYPE_RESOURCE, object, + G_TYPE_INT, pika_palette_get_n_colors (palette), + G_TYPE_BOOLEAN, closing, G_TYPE_NONE); } diff --git a/app/widgets/pikapatternselect.c b/app/widgets/pikapatternselect.c index 494ecff..4f23a70 100644 --- a/app/widgets/pikapatternselect.c +++ b/app/widgets/pikapatternselect.c @@ -128,7 +128,7 @@ pika_pattern_select_run_callback (PikaPdbDialog *dialog, dialog->caller_context, NULL, error, dialog->callback_name, - G_TYPE_STRING, pika_object_get_name (object), + PIKA_TYPE_RESOURCE, object, G_TYPE_INT, pika_temp_buf_get_width (pattern->mask), G_TYPE_INT, pika_temp_buf_get_height (pattern->mask), G_TYPE_INT, babl_format_get_bytes_per_pixel (pika_temp_buf_get_format (pattern->mask)), diff --git a/app/widgets/pikapdbdialog.c b/app/widgets/pikapdbdialog.c index 407809c..5af8f19 100644 --- a/app/widgets/pikapdbdialog.c +++ b/app/widgets/pikapdbdialog.c @@ -36,6 +36,7 @@ #include "core/pika.h" #include "core/pikacontext.h" +#include "core/pikaresource.h" #include "pdb/pikapdb.h" @@ -58,22 +59,24 @@ enum }; -static void pika_pdb_dialog_constructed (GObject *object); -static void pika_pdb_dialog_dispose (GObject *object); -static void pika_pdb_dialog_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); +static void pika_pdb_dialog_constructed (GObject *object); +static void pika_pdb_dialog_dispose (GObject *object); +static void pika_pdb_dialog_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); -static void pika_pdb_dialog_response (GtkDialog *dialog, - gint response_id); +static void pika_pdb_dialog_response (GtkDialog *dialog, + gint response_id); -static void pika_pdb_dialog_context_changed (PikaContext *context, - PikaObject *object, - PikaPdbDialog *dialog); -static void pika_pdb_dialog_plug_in_closed (PikaPlugInManager *manager, - PikaPlugIn *plug_in, - PikaPdbDialog *dialog); +static void pika_pdb_dialog_context_changed (PikaContext *context, + PikaObject *object, + PikaPdbDialog *dialog); +static void pika_pdb_dialog_plug_in_closed (PikaPlugInManager *manager, + PikaPlugIn *plug_in, + PikaPdbDialog *dialog); + +static gboolean pika_pdb_dialog_run_callback_idle (PikaPdbDialog *dialog); G_DEFINE_ABSTRACT_TYPE (PikaPdbDialog, pika_pdb_dialog, PIKA_TYPE_DIALOG) @@ -96,6 +99,8 @@ pika_pdb_dialog_class_init (PikaPdbDialogClass *klass) dialog_class->response = pika_pdb_dialog_response; klass->run_callback = NULL; + klass->get_object = NULL; + klass->set_object = NULL; g_object_class_install_property (object_class, PROP_CONTEXT, g_param_spec_object ("context", NULL, NULL, @@ -142,7 +147,9 @@ static void pika_pdb_dialog_init (PikaPdbDialog *dialog) { gtk_dialog_add_button (GTK_DIALOG (dialog), - _("_Close"), GTK_RESPONSE_CLOSE); + _("_OK"), GTK_RESPONSE_OK); + gtk_dialog_add_button (GTK_DIALOG (dialog), + _("_Cancel"), GTK_RESPONSE_CANCEL); } static void @@ -164,17 +171,19 @@ pika_pdb_dialog_constructed (GObject *object) G_OBJECT_TYPE_NAME (object), NULL); - pika_context_set_by_type (dialog->context, dialog->select_type, - dialog->initial_object); + if (g_type_is_a (dialog->select_type, PIKA_TYPE_RESOURCE)) + { + pika_context_set_by_type (dialog->context, dialog->select_type, + dialog->initial_object); - dialog->initial_object = NULL; + signal_name = pika_context_type_to_signal_name (dialog->select_type); - signal_name = pika_context_type_to_signal_name (dialog->select_type); + g_signal_connect_object (dialog->context, signal_name, + G_CALLBACK (pika_pdb_dialog_context_changed), + dialog, 0); + } - g_signal_connect_object (dialog->context, signal_name, - G_CALLBACK (pika_pdb_dialog_context_changed), - dialog, 0); - g_signal_connect_object (dialog->context->pika->plug_in_manager, + g_signal_connect_object (dialog->caller_context->pika->plug_in_manager, "plug-in-closed", G_CALLBACK (pika_pdb_dialog_plug_in_closed), dialog, 0); @@ -191,6 +200,7 @@ pika_pdb_dialog_dispose (GObject *object) g_clear_object (&dialog->pdb); g_clear_object (&dialog->caller_context); g_clear_object (&dialog->context); + g_clear_object (&dialog->initial_object); g_clear_pointer (&dialog->callback_name, g_free); @@ -222,8 +232,7 @@ pika_pdb_dialog_set_property (GObject *object, break; case PROP_INITIAL_OBJECT: - /* don't ref, see constructor */ - dialog->initial_object = g_value_get_object (value); + dialog->initial_object = g_value_dup_object (value); break; case PROP_CALLBACK_NAME: @@ -248,9 +257,24 @@ pika_pdb_dialog_response (GtkDialog *gtk_dialog, { PikaPdbDialog *dialog = PIKA_PDB_DIALOG (gtk_dialog); + if (response_id != GTK_RESPONSE_OK) + { + if (g_type_is_a (dialog->select_type, PIKA_TYPE_RESOURCE)) + { + pika_context_set_by_type (dialog->context, dialog->select_type, + dialog->initial_object); + } + else + { + PikaPdbDialogClass *klass = PIKA_PDB_DIALOG_GET_CLASS (dialog); + + g_return_if_fail (klass->set_object != NULL); + klass->set_object (dialog, dialog->initial_object); + } + } + pika_pdb_dialog_run_callback (&dialog, TRUE); - if (dialog) - gtk_widget_destroy (GTK_WIDGET (dialog)); + gtk_widget_destroy (GTK_WIDGET (dialog)); } void @@ -261,16 +285,26 @@ pika_pdb_dialog_run_callback (PikaPdbDialog **dialog, PikaObject *object; g_object_add_weak_pointer (G_OBJECT (*dialog), (gpointer) dialog); - object = pika_context_get_by_type ((*dialog)->context, (*dialog)->select_type); - if (*dialog && object && + if (g_type_is_a ((*dialog)->select_type, PIKA_TYPE_RESOURCE)) + { + object = pika_context_get_by_type ((*dialog)->context, (*dialog)->select_type); + } + else + { + g_return_if_fail (klass->get_object != NULL); + object = klass->get_object (*dialog); + } + + if (*dialog && klass->run_callback && (*dialog)->callback_name && ! (*dialog)->callback_busy) { (*dialog)->callback_busy = TRUE; - if (pika_pdb_lookup_procedure ((*dialog)->pdb, (*dialog)->callback_name)) + if (pika_pdb_lookup_procedure ((*dialog)->pdb, (*dialog)->callback_name) && + (object == NULL || g_type_is_a (G_TYPE_FROM_INSTANCE (object), (*dialog)->select_type))) { PikaValueArray *return_vals; GError *error = NULL; @@ -288,7 +322,7 @@ pika_pdb_dialog_run_callback (PikaPdbDialog **dialog, else message = _("The corresponding plug-in may have crashed."); - pika_message ((*dialog)->context->pika, G_OBJECT (*dialog), + pika_message ((*dialog)->caller_context->pika, G_OBJECT (*dialog), PIKA_MESSAGE_ERROR, _("Unable to run %s callback.\n%s"), g_type_name (G_TYPE_FROM_INSTANCE (*dialog)), @@ -296,7 +330,7 @@ pika_pdb_dialog_run_callback (PikaPdbDialog **dialog, } else if (*dialog && error) { - pika_message_literal ((*dialog)->context->pika, G_OBJECT (*dialog), + pika_message_literal ((*dialog)->caller_context->pika, G_OBJECT (*dialog), PIKA_MESSAGE_ERROR, error->message); g_error_free (error); @@ -342,8 +376,47 @@ pika_pdb_dialog_context_changed (PikaContext *context, PikaObject *object, PikaPdbDialog *dialog) { + /* XXX Long explanation below because this was annoying to debug! + * + * The context might change for 2 reasons: either from code coming from the + * plug-in or because of direct GUI interaction with the dialog. This second + * case may happen while the plug-in is doing something else completely and + * making PDB calls too. If the callback itself triggers the plug-in to run + * other PDB calls, we may end up in a case where PDB requests made by the + * plug-in receive the wrong result. Here is an actual case I encountered: + * + * 1. The plug-in calls pika-gradient-get-uniform-samples to draw a button. + * 2. Because you click inside the dialog (using any of the Gimp*Select + * subclasses, e.g. PikaBrushSelect), the core dialog run its callback + * indicating that a resource changed. This is unrelated to step 1. It just + * happens nearly in the same time by a race condition. + * 3. The plug-in receives the callback as a temp procedure request, processes + * it first. In particular, as part of the code in libpika/plug-in, it + * verifies the resource is valid calling pika-resource-id-is-valid. + * 4. Meanwhile, the core returns pika-gradient-get-uniform-samples result. + * 5. The plug-in takes it as a result for pika-resource-id-is-valid with + * invalid return values (size and types). + * 6. Then again, it receives result of pika-resource-id-is-valid as being the + * result of pika-gradient-get-uniform-samples, again invalid. + * + * This scenario mostly happens because the callback is not the consequence of + * the plug-in's requests (if the callback from core were the consequence of a + * call from the plug-in, the PDB protocol would ensure that every message in + * both direction get its return values in the proper order). The problem here + * is really that the callback interrupts unexpectedly PDB requests coming + * from the plug-in while the plug-in process can't really know that this + * callback is not a consequence of its own PDB call. + * + * Running as idle will make the callback run when the core is not already + * processing anything, which should also mean that the plug-in is not waiting + * for an unrelated procedure result. + * To be fair, I am not 100% sure if a complex race condition may not still + * happen, but extensive testing were successful so far. + */ if (object) - pika_pdb_dialog_run_callback (&dialog, FALSE); + g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc) pika_pdb_dialog_run_callback_idle, + g_object_ref (dialog), g_object_unref); } static void @@ -359,3 +432,11 @@ pika_pdb_dialog_plug_in_closed (PikaPlugInManager *manager, } } } + +static gboolean +pika_pdb_dialog_run_callback_idle (PikaPdbDialog *dialog) +{ + pika_pdb_dialog_run_callback (&dialog, FALSE); + + return G_SOURCE_REMOVE; +} diff --git a/app/widgets/pikapdbdialog.h b/app/widgets/pikapdbdialog.h index 188e386..5e0d610 100644 --- a/app/widgets/pikapdbdialog.h +++ b/app/widgets/pikapdbdialog.h @@ -73,6 +73,9 @@ struct _PikaPdbDialogClass PikaObject *object, gboolean closing, GError **error); + PikaObject * (* get_object) (PikaPdbDialog *dialog); + void (* set_object) (PikaPdbDialog *dialog, + PikaObject *object); }; diff --git a/app/widgets/pikapickablebutton.c b/app/widgets/pikapickablebutton.c index 4168572..d82be20 100644 --- a/app/widgets/pikapickablebutton.c +++ b/app/widgets/pikapickablebutton.c @@ -61,6 +61,10 @@ struct _PikaPickableButtonPrivate PikaPickable *pickable; GtkWidget *view; + + GBinding *popup_binding; + GtkWidget *popup; + PikaPickable *initial_pickable; }; @@ -78,8 +82,8 @@ static void pika_pickable_button_get_property (GObject *object, static void pika_pickable_button_clicked (GtkButton *button); -static void pika_pickable_button_popup_confirm (PikaPickablePopup *popup, - PikaPickableButton *button); +static void pika_pickable_button_popup_confirm (PikaPickableButton *button); +static void pika_pickable_button_popup_cancel (PikaPickableButton *button); static void pika_pickable_button_drop_pickable (GtkWidget *widget, gint x, gint y, @@ -131,6 +135,7 @@ pika_pickable_button_init (PikaPickableButton *button) button->private->view_size = PIKA_VIEW_SIZE_LARGE; button->private->view_border_width = 1; + button->private->popup_binding = NULL; pika_dnd_viewable_dest_add (GTK_WIDGET (button), PIKA_TYPE_LAYER, pika_pickable_button_drop_pickable, @@ -182,6 +187,9 @@ pika_pickable_button_finalize (GObject *object) PikaPickableButton *button = PIKA_PICKABLE_BUTTON (object); g_clear_object (&button->private->context); + g_clear_object (&button->private->initial_pickable); + if (button->private->popup) + gtk_widget_destroy (button->private->popup); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -244,23 +252,39 @@ pika_pickable_button_clicked (GtkButton *button) pickable_button->private->view_size, pickable_button->private->view_border_width); - g_signal_connect (popup, "confirm", - G_CALLBACK (pika_pickable_button_popup_confirm), - button); + g_signal_connect_swapped (popup, "confirm", + G_CALLBACK (pika_pickable_button_popup_confirm), + button); + g_signal_connect_swapped (popup, "cancel", + G_CALLBACK (pika_pickable_button_popup_cancel), + button); + pickable_button->private->popup_binding = g_object_bind_property (G_OBJECT (button), "pickable", + G_OBJECT (popup), "pickable", + G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); + pickable_button->private->initial_pickable = pickable_button->private->pickable; + if (pickable_button->private->initial_pickable) + g_object_ref (pickable_button->private->initial_pickable); + pickable_button->private->popup = popup; + g_signal_connect (popup, "destroy", + G_CALLBACK (gtk_widget_destroyed), + &pickable_button->private->popup); pika_popup_show (PIKA_POPUP (popup), GTK_WIDGET (button)); } static void -pika_pickable_button_popup_confirm (PikaPickablePopup *popup, - PikaPickableButton *button) +pika_pickable_button_popup_confirm (PikaPickableButton *button) { - PikaPickable *pickable = pika_pickable_popup_get_pickable (popup); - - if (pickable) - pika_pickable_button_set_pickable (button, pickable); + g_clear_pointer (&button->private->popup_binding, g_binding_unbind); + g_clear_object (&button->private->initial_pickable); } +static void +pika_pickable_button_popup_cancel (PikaPickableButton *button) +{ + pika_pickable_button_set_pickable (button, button->private->initial_pickable); + pika_pickable_button_popup_confirm (button); +} static void pika_pickable_button_drop_pickable (GtkWidget *widget, gint x, diff --git a/app/widgets/pikapickablepopup.c b/app/widgets/pikapickablepopup.c index f8699bb..3361874 100644 --- a/app/widgets/pikapickablepopup.c +++ b/app/widgets/pikapickablepopup.c @@ -41,6 +41,7 @@ #include "pikacontainertreeview.h" #include "pikacontainerview.h" +#include "pikapickablechooser.h" #include "pikapickablepopup.h" #include "pikaviewrenderer.h" @@ -58,12 +59,13 @@ enum struct _PikaPickablePopupPrivate { - PikaPickable *pickable; PikaContext *context; gint view_size; gint view_border_width; + GtkWidget *chooser; + GtkWidget *image_view; GtkWidget *layer_view; GtkWidget *channel_view; @@ -71,24 +73,19 @@ struct _PikaPickablePopupPrivate }; -static void pika_pickable_popup_constructed (GObject *object); -static void pika_pickable_popup_finalize (GObject *object); -static void pika_pickable_popup_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); -static void pika_pickable_popup_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); +static void pika_pickable_popup_constructed (GObject *object); +static void pika_pickable_popup_finalize (GObject *object); +static void pika_pickable_popup_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void pika_pickable_popup_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); -static void pika_pickable_popup_image_changed (PikaContext *context, - PikaImage *image, - PikaPickablePopup *popup); -static void pika_pickable_popup_item_activate (PikaContainerView *view, - PikaPickable *pickable, - gpointer unused, - PikaPickablePopup *popup); +static void pika_pickable_popup_activate (PikaPickablePopup *popup); +static void pika_pickable_popup_notify_pickable (PikaPickablePopup *popup); G_DEFINE_TYPE_WITH_PRIVATE (PikaPickablePopup, pika_pickable_popup, @@ -118,7 +115,7 @@ pika_pickable_popup_class_init (PikaPickablePopupClass *klass) g_param_spec_object ("pickable", NULL, NULL, PIKA_TYPE_PICKABLE, - PIKA_PARAM_READABLE)); + PIKA_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_VIEW_SIZE, g_param_spec_int ("view-size", @@ -153,114 +150,22 @@ static void pika_pickable_popup_constructed (GObject *object) { PikaPickablePopup *popup = PIKA_PICKABLE_POPUP (object); - GtkWidget *frame; - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *label; - GtkWidget *notebook; - PikaImage *image; G_OBJECT_CLASS (parent_class)->constructed (object); pika_assert (PIKA_IS_CONTEXT (popup->priv->context)); - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); - gtk_container_add (GTK_CONTAINER (popup), frame); - gtk_widget_show (frame); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); - gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_widget_show (hbox); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4); - gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); - gtk_widget_show (vbox); - - label = gtk_label_new (_("Images")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - popup->priv->image_view = - pika_container_tree_view_new (popup->priv->context->pika->images, - popup->priv->context, - popup->priv->view_size, - popup->priv->view_border_width); - pika_container_box_set_size_request (PIKA_CONTAINER_BOX (popup->priv->image_view), - 4 * (popup->priv->view_size + - 2 * popup->priv->view_border_width), - 4 * (popup->priv->view_size + - 2 * popup->priv->view_border_width)); - gtk_box_pack_start (GTK_BOX (vbox), popup->priv->image_view, TRUE, TRUE, 0); - gtk_widget_show (popup->priv->image_view); - - g_signal_connect_object (popup->priv->image_view, "activate-item", - G_CALLBACK (pika_pickable_popup_item_activate), - G_OBJECT (popup), 0); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4); - gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); - gtk_widget_show (vbox); - - popup->priv->layer_label = label = - gtk_label_new (_("Select an image in the left pane")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - notebook = gtk_notebook_new (); - gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0); - gtk_widget_show (notebook); - - popup->priv->layer_view = - pika_container_tree_view_new (NULL, - popup->priv->context, - popup->priv->view_size, - popup->priv->view_border_width); - gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (PIKA_CONTAINER_TREE_VIEW (popup->priv->layer_view)->view), - TRUE); - pika_container_box_set_size_request (PIKA_CONTAINER_BOX (popup->priv->layer_view), - 4 * (popup->priv->view_size + - 2 * popup->priv->view_border_width), - 4 * (popup->priv->view_size + - 2 * popup->priv->view_border_width)); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), - popup->priv->layer_view, - gtk_label_new (_("Layers"))); - gtk_widget_show (popup->priv->layer_view); - - g_signal_connect_object (popup->priv->layer_view, "activate-item", - G_CALLBACK (pika_pickable_popup_item_activate), - G_OBJECT (popup), 0); - - popup->priv->channel_view = - pika_container_tree_view_new (NULL, - popup->priv->context, - popup->priv->view_size, - popup->priv->view_border_width); - pika_container_box_set_size_request (PIKA_CONTAINER_BOX (popup->priv->channel_view), - 4 * (popup->priv->view_size + - 2 * popup->priv->view_border_width), - 4 * (popup->priv->view_size + - 2 * popup->priv->view_border_width)); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), - popup->priv->channel_view, - gtk_label_new (_("Channels"))); - gtk_widget_show (popup->priv->channel_view); - - g_signal_connect_object (popup->priv->channel_view, "activate-item", - G_CALLBACK (pika_pickable_popup_item_activate), - G_OBJECT (popup), 0); - - g_signal_connect_object (popup->priv->context, "image-changed", - G_CALLBACK (pika_pickable_popup_image_changed), - G_OBJECT (popup), 0); - - image = pika_context_get_image (popup->priv->context); - pika_pickable_popup_image_changed (popup->priv->context, image, popup); + popup->priv->chooser = pika_pickable_chooser_new (popup->priv->context, PIKA_TYPE_PICKABLE, + popup->priv->view_size, + popup->priv->view_border_width); + gtk_container_add (GTK_CONTAINER (popup), popup->priv->chooser); + g_signal_connect_swapped (popup->priv->chooser, "notify::pickable", + G_CALLBACK (pika_pickable_popup_notify_pickable), + popup); + g_signal_connect_swapped (popup->priv->chooser, "activate", + G_CALLBACK (pika_pickable_popup_activate), + popup); + gtk_widget_show (popup->priv->chooser); } static void @@ -268,7 +173,6 @@ pika_pickable_popup_finalize (GObject *object) { PikaPickablePopup *popup = PIKA_PICKABLE_POPUP (object); - g_clear_object (&popup->priv->pickable); g_clear_object (&popup->priv->context); G_OBJECT_CLASS (parent_class)->finalize (object); @@ -290,6 +194,11 @@ pika_pickable_popup_set_property (GObject *object, popup->priv->context = g_value_dup_object (value); break; + case PROP_PICKABLE: + pika_pickable_chooser_set_pickable (PIKA_PICKABLE_CHOOSER (popup->priv->chooser), + g_value_get_object (value)); + break; + case PROP_VIEW_SIZE: popup->priv->view_size = g_value_get_int (value); break; @@ -298,7 +207,6 @@ pika_pickable_popup_set_property (GObject *object, popup->priv->view_border_width = g_value_get_int (value); break; - case PROP_PICKABLE: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -320,7 +228,7 @@ pika_pickable_popup_get_property (GObject *object, break; case PROP_PICKABLE: - g_value_set_object (value, popup->priv->pickable); + g_value_set_object (value, pika_pickable_popup_get_pickable (popup)); break; case PROP_VIEW_SIZE: @@ -337,6 +245,9 @@ pika_pickable_popup_get_property (GObject *object, } } + +/* Public functions */ + GtkWidget * pika_pickable_popup_new (PikaContext *context, gint view_size, @@ -360,82 +271,22 @@ pika_pickable_popup_new (PikaContext *context, PikaPickable * pika_pickable_popup_get_pickable (PikaPickablePopup *popup) { - GtkWidget *focus; - PikaPickable *pickable = NULL; - g_return_val_if_fail (PIKA_IS_PICKABLE_POPUP (popup), NULL); - focus = gtk_window_get_focus (GTK_WINDOW (popup)); - - if (focus && gtk_widget_is_ancestor (focus, popup->priv->image_view)) - { - pickable = PIKA_PICKABLE (pika_context_get_image (popup->priv->context)); - } - else if (focus && gtk_widget_is_ancestor (focus, popup->priv->layer_view)) - { - GList *selected; - - if (pika_container_view_get_selected (PIKA_CONTAINER_VIEW (popup->priv->layer_view), - &selected, NULL)) - { - pickable = selected->data; - g_list_free (selected); - } - } - else if (focus && gtk_widget_is_ancestor (focus, popup->priv->channel_view)) - { - GList *selected; - - if (pika_container_view_get_selected (PIKA_CONTAINER_VIEW (popup->priv->channel_view), - &selected, NULL)) - { - pickable = selected->data; - g_list_free (selected); - } - } - - return pickable; + return pika_pickable_chooser_get_pickable (PIKA_PICKABLE_CHOOSER (popup->priv->chooser)); } -/* private functions */ +/* Private functions */ static void -pika_pickable_popup_image_changed (PikaContext *context, - PikaImage *image, - PikaPickablePopup *popup) -{ - PikaContainer *layers = NULL; - PikaContainer *channels = NULL; - - if (image) - { - gchar *desc; - - layers = pika_image_get_layers (image); - channels = pika_image_get_channels (image); - - desc = pika_viewable_get_description (PIKA_VIEWABLE (image), NULL); - gtk_label_set_text (GTK_LABEL (popup->priv->layer_label), desc); - g_free (desc); - } - else - { - gtk_label_set_text (GTK_LABEL (popup->priv->layer_label), - _("Select an image in the left pane")); - } - - pika_container_view_set_container (PIKA_CONTAINER_VIEW (popup->priv->layer_view), - layers); - pika_container_view_set_container (PIKA_CONTAINER_VIEW (popup->priv->channel_view), - channels); -} - -static void -pika_pickable_popup_item_activate (PikaContainerView *view, - PikaPickable *pickable, - gpointer unused, - PikaPickablePopup *popup) +pika_pickable_popup_activate (PikaPickablePopup *popup) { g_signal_emit_by_name (popup, "confirm"); } + +static void +pika_pickable_popup_notify_pickable (PikaPickablePopup *popup) +{ + g_object_notify (G_OBJECT (popup), "pickable"); +} diff --git a/app/widgets/pikapopup.c b/app/widgets/pikapopup.c index a65c22c..9f0c9f9 100644 --- a/app/widgets/pikapopup.c +++ b/app/widgets/pikapopup.c @@ -42,6 +42,11 @@ enum LAST_SIGNAL }; +typedef struct _PikaPopupPrivate +{ + GtkWidget *parent; +} PikaPopupPrivate; + static gboolean pika_popup_map_event (GtkWidget *widget, GdkEventAny *event); @@ -54,7 +59,7 @@ static void pika_popup_real_cancel (PikaPopup *popup); static void pika_popup_real_confirm (PikaPopup *popup); -G_DEFINE_TYPE (PikaPopup, pika_popup, GTK_TYPE_WINDOW) +G_DEFINE_TYPE_WITH_PRIVATE (PikaPopup, pika_popup, GTK_TYPE_WINDOW) #define parent_class pika_popup_parent_class @@ -179,7 +184,8 @@ pika_popup_button_press (GtkWidget *widget, GdkEventButton *bevent) { GtkWidget *event_widget; - gboolean cancel = FALSE; + gboolean cancel = FALSE; + gboolean confirm = FALSE; event_widget = gtk_get_event_widget ((GdkEvent *) bevent); @@ -204,15 +210,22 @@ pika_popup_button_press (GtkWidget *widget, } else if (gtk_widget_get_toplevel (event_widget) != widget) { + PikaPopupPrivate *priv; /* the event was on a pika widget, but not inside the popup */ - cancel = TRUE; + priv = pika_popup_get_instance_private (PIKA_POPUP (widget)); + if (event_widget == priv->parent || gtk_widget_is_ancestor (event_widget, priv->parent)) + confirm = TRUE; + else + cancel = TRUE; } if (cancel) g_signal_emit (widget, popup_signals[CANCEL], 0); + else if (confirm) + g_signal_emit (widget, popup_signals[CONFIRM], 0); - return cancel; + return (cancel || confirm); } static gboolean @@ -279,23 +292,39 @@ pika_popup_real_confirm (PikaPopup *popup) gtk_widget_destroy (widget); } +/** + * pika_popup_show: + * @popup: + * @widget: the parent widget which will determine @popup location. + * + * Shows @popup above @widget. Its placement will be determined relatively to + * @widget. + * Moreover clicking outside @popup but within @widget will be considered a + * "confirm" signal. Typically @widget would be a button. A typical UX could be: + * clicking it once would show the popup; clicking it again would confirm the + * choice within the popup. + */ void pika_popup_show (PikaPopup *popup, GtkWidget *widget) { - GdkDisplay *display; - GdkMonitor *monitor; - GtkRequisition requisition; - GtkAllocation allocation; - GdkRectangle rect; - gint orig_x; - gint orig_y; - gint x; - gint y; + PikaPopupPrivate *priv; + GdkDisplay *display; + GdkMonitor *monitor; + GtkRequisition requisition; + GtkAllocation allocation; + GdkRectangle rect; + gint orig_x; + gint orig_y; + gint x; + gint y; g_return_if_fail (PIKA_IS_POPUP (popup)); g_return_if_fail (GTK_IS_WIDGET (widget)); + priv = pika_popup_get_instance_private (popup); + priv->parent = widget; + gtk_widget_get_preferred_size (GTK_WIDGET (popup), &requisition, NULL); gtk_widget_get_allocation (widget, &allocation); diff --git a/app/widgets/pikaprocedureaction.c b/app/widgets/pikaprocedureaction.c index 157a864..702e726 100644 --- a/app/widgets/pikaprocedureaction.c +++ b/app/widgets/pikaprocedureaction.c @@ -161,10 +161,20 @@ pika_procedure_action_activate (GAction *action, { gsize hack = GPOINTER_TO_SIZE (procedure_action->procedure); + g_object_add_weak_pointer (G_OBJECT (action), (gpointer) &action); pika_action_emit_activate (PIKA_ACTION (action), g_variant_new_uint64 (hack)); - pika_action_history_action_activated (PIKA_ACTION (action)); + if (action != NULL) + { + g_object_remove_weak_pointer (G_OBJECT (action), (gpointer) &action); + /* An action might disappear between the moment it's run and the + * moment we log it. I experienced this when script-fu crashed, though + * we could imagine that it may be soon possible in normal process too + * for procedures to get un-registered (e.g. in extensions). + */ + pika_action_history_action_activated (PIKA_ACTION (action)); + } } } diff --git a/app/widgets/pikawidgets-utils.c b/app/widgets/pikawidgets-utils.c index 9449988..da0e7bb 100644 --- a/app/widgets/pikawidgets-utils.c +++ b/app/widgets/pikawidgets-utils.c @@ -30,7 +30,12 @@ #include #ifdef GDK_WINDOWING_WIN32 +#include #include + +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif #endif #ifdef GDK_WINDOWING_X11 @@ -55,7 +60,10 @@ #include "gegl/pika-babl.h" +#include "config/pikaguiconfig.h" + #include "core/pika.h" +#include "core/pikaprogress.h" #include "core/pikatoolinfo.h" #include "pikaaccellabel.h" @@ -91,11 +99,18 @@ typedef struct gchar *settings_value; } BlinkStep; -static void pika_widget_blink_after (GtkWidget *widget, - gint ms_timeout); -static void pika_search_widget_rec (GtkWidget *widget, - BlinkSearch *data); -static void pika_blink_free_script (GList *blink_scenario); +static void pika_widget_blink_after (GtkWidget *widget, + gint ms_timeout); +static void pika_search_widget_rec (GtkWidget *widget, + BlinkSearch *data); +static void pika_blink_free_script (GList *blink_scenario); + +static gboolean pika_window_transient_on_mapped (GtkWidget *widget, + GdkEventAny *event, + PikaProgress *progress); +static void pika_window_set_transient_cb (GtkWidget *window, + GdkEventAny *event, + GBytes *handle); GtkWidget * @@ -909,105 +924,51 @@ pika_window_set_hint (GtkWindow *window, } } -/** - * pika_window_get_native_id: - * @window: a #GtkWindow - * - * This function is used to pass a window handle to plug-ins so that - * they can set their dialog windows transient to the parent window. - * - * Returns: a native window ID of the window's #GdkWindow or 0 - * if the window isn't realized yet - */ -guint32 -pika_window_get_native_id (GtkWindow *window) -{ - GdkWindow *surface; - - g_return_val_if_fail (GTK_IS_WINDOW (window), 0); - - surface = gtk_widget_get_window (GTK_WIDGET (window)); - if (!surface) /* aka window is not yet realized */ - return 0; - -#ifdef GDK_WINDOWING_WIN32 - if (GDK_IS_WIN32_WINDOW (surface)) - return GPOINTER_TO_INT (GDK_WINDOW_HWND (gtk_widget_get_window (GTK_WIDGET (window)))); -#endif - -#ifdef GDK_WINDOWING_X11 - if (GDK_IS_X11_WINDOW (surface)) - return GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (window))); -#endif - -#ifdef GDK_WINDOWING_WAYLAND - if (GDK_IS_WAYLAND_WINDOW (surface)) - g_debug ("Getting window ID for progress not supported on Wayland yet"); -#endif - - return 0; -} - -#ifndef GDK_WINDOWING_WIN32 -static void -pika_window_transient_realized (GtkWidget *window, - GdkWindow *parent) -{ - if (gtk_widget_get_realized (window)) - gdk_window_set_transient_for (gtk_widget_get_window (window), parent); -} - /* similar to what we have in libpika/pikaui.c */ static GdkWindow * -pika_get_foreign_window (guint32 window) +pika_get_foreign_window (gpointer window) { #ifdef GDK_WINDOWING_X11 if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) return gdk_x11_window_foreign_new_for_display (gdk_display_get_default (), - window); + (Window) window); #endif #ifdef GDK_WINDOWING_WIN32 return gdk_win32_window_foreign_new_for_display (gdk_display_get_default (), - window); + (HWND) window); #endif return NULL; } -#endif void -pika_window_set_transient_for (GtkWindow *window, - guint32 parent_ID) +pika_window_set_transient_for (GtkWindow *window, + PikaProgress *parent) { - /* Cross-process transient-for is broken in gdk/win32 <= 2.10.6. It - * causes hangs, at least when used as by the pika and script-fu - * processes. In some newer GTK+ version it will be fixed to be a - * no-op. If it eventually is fixed to actually work, change this to - * a run-time check of GTK+ version. Remember to change also the - * function with the same name in libpika/pikaui.c - * - * Note: this hanging bug is still happening with GTK+3 as of 2019-10, - * with steps described in comment 4 in: - * https://bugzilla.gnome.org/show_bug.cgi?id=359538 - */ -#ifndef GDK_WINDOWING_WIN32 - GdkWindow *parent; + g_signal_connect_after (window, "map-event", + G_CALLBACK (pika_window_transient_on_mapped), + parent); - parent = pika_get_foreign_window (parent_ID); - if (! parent) - return; + if (gtk_widget_get_mapped (GTK_WIDGET (window))) + pika_window_transient_on_mapped (GTK_WIDGET (window), NULL, parent); +} - if (gtk_widget_get_realized (GTK_WIDGET (window))) - gdk_window_set_transient_for (gtk_widget_get_window (GTK_WIDGET (window)), - parent); +void +pika_window_set_transient_for_handle (GtkWindow *window, + GBytes *handle) +{ + g_return_if_fail (GTK_IS_WINDOW (window)); + g_return_if_fail (handle != NULL); - g_signal_connect_object (window, "realize", - G_CALLBACK (pika_window_transient_realized), - parent, 0); + g_signal_connect_data (window, "map-event", + G_CALLBACK (pika_window_set_transient_cb), + g_bytes_ref (handle), + (GClosureNotify) g_bytes_unref, + G_CONNECT_AFTER); - g_object_unref (parent); -#endif + if (gtk_widget_get_mapped (GTK_WIDGET (window))) + pika_window_set_transient_cb (GTK_WIDGET (window), NULL, handle); } static void @@ -2574,3 +2535,151 @@ pika_utils_are_menu_path_identical (const gchar *path1, return identical; } + +static gboolean +pika_window_transient_on_mapped (GtkWidget *window, + GdkEventAny *event G_GNUC_UNUSED, + PikaProgress *progress) +{ + GBytes *handle; + + handle = pika_progress_get_window_id (progress); + + if (handle == NULL) + return FALSE; + + pika_window_set_transient_cb (window, NULL, handle); + + g_bytes_unref (handle); + + return FALSE; +} + +static void +pika_window_set_transient_cb (GtkWidget *window, + GdkEventAny *event G_GNUC_UNUSED, + GBytes *handle) +{ + gboolean transient_set = FALSE; + + g_return_if_fail (handle != NULL); + +#ifdef GDK_WINDOWING_WAYLAND + if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) + { + char *wayland_handle; + + wayland_handle = (char *) g_bytes_get_data (handle, NULL); + gdk_wayland_window_set_transient_for_exported (gtk_widget_get_window (window), + wayland_handle); + transient_set = TRUE; + } +#endif + +#ifdef GDK_WINDOWING_X11 + if (! transient_set && GDK_IS_X11_DISPLAY (gdk_display_get_default ())) + { + GdkWindow *parent; + Window *handle_data; + Window parent_ID; + gsize handle_size; + + handle_data = (Window *) g_bytes_get_data (handle, &handle_size); + g_return_if_fail (handle_size == sizeof (Window)); + parent_ID = *handle_data; + + parent = pika_get_foreign_window ((gpointer) parent_ID); + + if (parent) + gdk_window_set_transient_for (gtk_widget_get_window (window), parent); + + transient_set = TRUE; + } +#endif + /* Cross-process transient-for is broken in gdk/win32. It causes hangs of the + * main process and we still don't know why. + * If it eventually is fixed to actually work, change this to a run-time check + * of GTK+ version. Remember to change also pika_window_transient_on_mapped() + * in libpika/pikaui.c + * + * Note: this hanging bug is still happening with GTK+3 as of mid-2023 with + * steps described in comment 4 in: + * https://bugzilla.gnome.org/show_bug.cgi?id=359538 + */ +#if 0 && defined (GDK_WINDOWING_WIN32) + if (! transient_set) + { + GdkWindow *parent; + HANDLE *handle_data; + HANDLE parent_ID; + gsize handle_size; + + handle_data = (HANDLE *) g_bytes_get_data (handle, &handle_size); + g_return_if_fail (handle_size == sizeof (HANDLE)); + parent_ID = *handle_data; + + parent = pika_get_foreign_window ((gpointer) parent_ID); + + if (parent) + gdk_window_set_transient_for (gtk_widget_get_window (window), parent); + + transient_set = TRUE; + } +#endif +} + +void +pika_window_set_title_bar_theme (Pika *pika, + GtkWidget *dialog, + gboolean is_main_window) +{ +#ifdef G_OS_WIN32 + HWND hwnd; + GdkWindow *window = NULL; + gboolean use_dark_mode = FALSE; + + window = gtk_widget_get_window (GTK_WIDGET (dialog)); + if (window) + { + if (pika) + { + PikaGuiConfig *config; + + config = PIKA_GUI_CONFIG (pika->config); + use_dark_mode = config->prefer_dark_theme; + } + else + { + GtkStyleContext *style; + GdkRGBA *color = NULL; + + /* Workaround if we don't have access to PikaGuiConfig. + * If the background color is below the threshold, then we're + * likely in dark mode. + */ + style = gtk_widget_get_style_context (dialog); + gtk_style_context_get (style, gtk_style_context_get_state (style), + GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &color, + NULL); + if (color) + { + if (color->red < 0.5 && color->green < 0.5 && color->blue < 0.5) + use_dark_mode = TRUE; + + gdk_rgba_free (color); + } + } + + hwnd = (HWND) gdk_win32_window_get_handle (window); + DwmSetWindowAttribute (hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE, + &use_dark_mode, sizeof (use_dark_mode)); + + if (! is_main_window) + { + /* Toggle the window's visibility so the title bar change appears */ + gdk_window_hide (window); + gdk_window_show (window); + } + } +#endif +} diff --git a/app/widgets/pikawidgets-utils.h b/app/widgets/pikawidgets-utils.h index 158c7ed..42c2bdf 100644 --- a/app/widgets/pikawidgets-utils.h +++ b/app/widgets/pikawidgets-utils.h @@ -75,9 +75,10 @@ gboolean pika_get_style_color (GtkWidget *widget GdkRGBA *color); void pika_window_set_hint (GtkWindow *window, PikaWindowHint hint); -guint32 pika_window_get_native_id (GtkWindow *window); void pika_window_set_transient_for (GtkWindow *window, - guint32 parent_ID); + PikaProgress *progress); +void pika_window_set_transient_for_handle (GtkWindow *window, + GBytes *handle); void pika_widget_set_accel_help (GtkWidget *widget, PikaAction *action); @@ -168,5 +169,9 @@ gboolean pika_utils_are_menu_path_identical (const gchar *path1 gchar **mnemonic_path1, gchar **path1_section_name); +void pika_window_set_title_bar_theme (Pika *pika, + GtkWidget *dialog, + gboolean is_main_window); + #endif /* __APP_PIKA_WIDGETS_UTILS_H__ */ diff --git a/app/widgets/widgets-types.h b/app/widgets/widgets-types.h index df3006a..a5a832a 100644 --- a/app/widgets/widgets-types.h +++ b/app/widgets/widgets-types.h @@ -168,6 +168,7 @@ typedef struct _PikaFontSelect PikaFontSelect; typedef struct _PikaGradientSelect PikaGradientSelect; typedef struct _PikaPaletteSelect PikaPaletteSelect; typedef struct _PikaPatternSelect PikaPatternSelect; +typedef struct _PikaPickableSelect PikaPickableSelect; typedef struct _PikaPdbDialog PikaPdbDialog; @@ -225,6 +226,7 @@ typedef struct _PikaMeter PikaMeter; typedef struct _PikaModifiersEditor PikaModifiersEditor; typedef struct _PikaOverlayBox PikaOverlayBox; typedef struct _PikaPickableButton PikaPickableButton; +typedef struct _PikaPickableChooser PikaPickableChooser; typedef struct _PikaPickablePopup PikaPickablePopup; typedef struct _PikaPivotSelector PikaPivotSelector; typedef struct _PikaPlugInView PikaPlugInView; diff --git a/app/xcf/xcf.c b/app/xcf/xcf.c index 6900ae4..f30c34d 100644 --- a/app/xcf/xcf.c +++ b/app/xcf/xcf.c @@ -147,7 +147,7 @@ xcf_init (Pika *pika) "1995-1996"); pika_procedure_add_argument (procedure, - pika_param_spec_enum ("dummy-param", + pika_param_spec_enum ("run-mode", "Dummy Param", "Dummy parameter", PIKA_TYPE_RUN_MODE, @@ -160,7 +160,7 @@ xcf_init (Pika *pika) FALSE, PIKA_PARAM_READWRITE)); pika_procedure_add_argument (procedure, - g_param_spec_int ("n-drawables", + g_param_spec_int ("num-drawables", "Num drawables", "Number of drawables", 0, G_MAXINT, 0, @@ -216,7 +216,7 @@ xcf_init (Pika *pika) "1995-1996"); pika_procedure_add_argument (procedure, - pika_param_spec_enum ("dummy-param", + pika_param_spec_enum ("run-mode", "Dummy Param", "Dummy parameter", PIKA_TYPE_RUN_MODE, diff --git a/build/windows/gitlab-ci/build-deps-msys2.sh b/build/windows/gitlab-ci/build-deps-msys2.sh index 52d79d3..b22b3ff 100644 --- a/build/windows/gitlab-ci/build-deps-msys2.sh +++ b/build/windows/gitlab-ci/build-deps-msys2.sh @@ -5,17 +5,15 @@ set -e if [[ "$MSYSTEM" == "MINGW32" ]]; then export ARTIFACTS_SUFFIX="-w32" export MSYS2_ARCH="i686" - # vapi build fails on 32-bit, with no error output. Let's just drop - # it for this architecture. - export BABL_OPTIONS="-Denable-vapi=false" - export GEGL_OPTIONS="-Dvapigen=disabled" - export MSYS_PREFIX="/c/msys64/mingw32/" -else + export MSYS2_ARCH_FOLDER="mingw32" +elif [[ "$MSYSTEM" == "MINGW64" ]]; then export ARTIFACTS_SUFFIX="-w64" export MSYS2_ARCH="x86_64" - export BABL_OPTIONS="" - export GEGL_OPTIONS="" - export MSYS_PREFIX="/c/msys64/mingw64/" + export MSYS2_ARCH_FOLDER="mingw64" +else # [[ "$MSYSTEM" == "CLANGARM64" ]]; + export ARTIFACTS_SUFFIX="-arm64" + export MSYS2_ARCH="clang-aarch64" + export MSYS2_ARCH_FOLDER="clangarm64" fi # Update everything @@ -48,8 +46,8 @@ export PATH="$PIKA_PREFIX/bin:$PATH" export PKG_CONFIG_PATH="${PIKA_PREFIX}/lib/pkgconfig:$PKG_CONFIG_PATH" export PKG_CONFIG_PATH="${PIKA_PREFIX}/share/pkgconfig:$PKG_CONFIG_PATH" export LD_LIBRARY_PATH="${PIKA_PREFIX}/lib:${LD_LIBRARY_PATH}" -export ACLOCAL_FLAGS="-I/c/msys64/mingw64/share/aclocal" -export XDG_DATA_DIRS="${PIKA_PREFIX}/share:/mingw64/share/" +export ACLOCAL_FLAGS="-I/c/msys64/${MSYS2_ARCH_FOLDER}/share/aclocal" +export XDG_DATA_DIRS="${PIKA_PREFIX}/share:/${MSYS2_ARCH_FOLDER}/share/" ## babl and GEGL (follow master branch) ## @@ -67,8 +65,7 @@ mkdir ../../_gegl/_build cd ../../_gegl/_build meson setup -Dprefix="${PIKA_PREFIX}" -Ddocs=false \ -Dcairo=enabled -Dumfpack=enabled \ - -Dopenexr=enabled -Dworkshop=true \ - ${GEGL_OPTIONS} .. + -Dopenexr=enabled -Dworkshop=true .. ninja ninja install cd ../.. diff --git a/build/windows/gitlab-ci/build-pika-msys2.sh b/build/windows/gitlab-ci/build-pika-msys2.sh index a8073fb..9ee32de 100644 --- a/build/windows/gitlab-ci/build-pika-msys2.sh +++ b/build/windows/gitlab-ci/build-pika-msys2.sh @@ -5,15 +5,28 @@ set -e if [[ "$MSYSTEM" == "MINGW32" ]]; then export ARTIFACTS_SUFFIX="-w32" export MSYS2_ARCH="i686" + export MSYS2_ARCH_FOLDER="mingw32" export MSYS2_PREFIX="/c/msys64/mingw32" - export PIKA_OPTIONS="-Dvala=disabled" -else +elif [[ "$MSYSTEM" == "MINGW64" ]]; then export ARTIFACTS_SUFFIX="-w64" export MSYS2_ARCH="x86_64" + export MSYS2_ARCH_FOLDER="mingw64" export MSYS2_PREFIX="/c/msys64/mingw64/" +else # [[ "$MSYSTEM" == "CLANGARM64" ]]; + export ARTIFACTS_SUFFIX="-arm64" + export MSYS2_ARCH="clang-aarch64" + export MSYS2_ARCH_FOLDER="clangarm64" + export MSYS2_PREFIX="/c/msys64/clangarm64/" +fi + +export OPTIONAL_PACKAGES="" +if [[ "$MSYSTEM" == "CLANGARM64" ]]; then + # No luajit package on clangarm64 for the time being. + export OPTIONAL_PACKAGES="mingw-w64-$MSYS2_ARCH-lua51" +else + export OPTIONAL_PACKAGES="mingw-w64-$MSYS2_ARCH-luajit" fi -export ACLOCAL_FLAGS="-I${MSYS2_PREFIX}/share/aclocal" export PATH="${MSYS2_PREFIX}/bin:$PATH" # Update everything @@ -27,6 +40,9 @@ pacman --noconfirm -S --needed \ mingw-w64-$MSYS2_ARCH-ccache \ mingw-w64-$MSYS2_ARCH-meson \ \ + $OPTIONAL_PACKAGES \ + mingw-w64-$MSYS2_ARCH-lua51-lgi \ + \ mingw-w64-$MSYS2_ARCH-aalib \ mingw-w64-$MSYS2_ARCH-appstream-glib \ mingw-w64-$MSYS2_ARCH-atk \ @@ -57,7 +73,6 @@ pacman --noconfirm -S --needed \ mingw-w64-$MSYS2_ARCH-libspiro \ mingw-w64-$MSYS2_ARCH-libwebp \ mingw-w64-$MSYS2_ARCH-libwmf \ - mingw-w64-$MSYS2_ARCH-luajit \ mingw-w64-$MSYS2_ARCH-maxflow \ mingw-w64-$MSYS2_ARCH-mypaint-brushes \ mingw-w64-$MSYS2_ARCH-openexr \ @@ -75,6 +90,7 @@ pacman --noconfirm -S --needed \ # XXX We've got a weird error when the prefix is in the current dir. # Until we figure it out, this trick seems to work, even though it's # completely ridiculous. +rm -fr ~/_install${ARTIFACTS_SUFFIX} mv "_install${ARTIFACTS_SUFFIX}" ~ export PIKA_PREFIX="`realpath ~/_install`${ARTIFACTS_SUFFIX}" @@ -82,8 +98,8 @@ export PATH="$PIKA_PREFIX/bin:$PATH" export PKG_CONFIG_PATH="${PIKA_PREFIX}/lib/pkgconfig:$PKG_CONFIG_PATH" export PKG_CONFIG_PATH="${PIKA_PREFIX}/share/pkgconfig:$PKG_CONFIG_PATH" export LD_LIBRARY_PATH="${PIKA_PREFIX}/lib:${LD_LIBRARY_PATH}" -export ACLOCAL_FLAGS="-I/c/msys64/mingw32/share/aclocal" -export XDG_DATA_DIRS="${PIKA_PREFIX}/share:/mingw64/share/" +export ACLOCAL_FLAGS="-I/c/msys64/${MSYS2_ARCH_FOLDER}/share/aclocal" +export XDG_DATA_DIRS="${PIKA_PREFIX}/share:/${MSYS2_ARCH_FOLDER}/share/" mkdir -p _ccache export CCACHE_BASEDIR="$(pwd)" @@ -108,8 +124,7 @@ meson .. -Dprefix="${PIKA_PREFIX}" \ -Ddirectx-sdk-dir="${MSYS2_PREFIX}" \ -Djavascript=disabled \ -Dbuild-id=technology.heckin.PIKA_official \ - -Dgi-docgen=disabled \ - ${PIKA_OPTIONS} + -Dgi-docgen=disabled ninja ninja install cd .. diff --git a/build/windows/gitlab-ci/installer-pika-msys2.sh b/build/windows/gitlab-ci/installer-pika-msys2.sh index 0f3ddc8..730c9a9 100644 --- a/build/windows/gitlab-ci/installer-pika-msys2.sh +++ b/build/windows/gitlab-ci/installer-pika-msys2.sh @@ -46,6 +46,7 @@ add_bom () download_lang Basque.isl +download_lang Belarusian.isl download_lang ChineseSimplified.isl download_lang ChineseTraditional.isl # Supposed to be UTF-8 yet missing BOM. @@ -83,7 +84,7 @@ VERSION=`grep -rI '\ #include #include +#include #include #include @@ -37,10 +38,13 @@ #include #include +#include #include #include #include +#include #include +#include #include #include #include @@ -49,7 +53,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -76,11 +82,6 @@ G_BEGIN_DECLS -#define pika_get_data pika_pdb_get_data -#define pika_get_data_size pika_pdb_get_data_size -#define pika_set_data pika_pdb_set_data - - /** * PIKA_MAIN: * @plug_in_type: The #GType of the plug-in's #PikaPlugIn subclass diff --git a/libpika/pika_pdb.c b/libpika/pika_pdb.c index 7945ffe..7fe7d48 100644 --- a/libpika/pika_pdb.c +++ b/libpika/pika_pdb.c @@ -61,9 +61,9 @@ pika_version (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-version", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-version", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -95,9 +95,9 @@ pika_getpid (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-getpid", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-getpid", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -131,9 +131,9 @@ pika_attach_parasite (const PikaParasite *parasite) PIKA_TYPE_PARASITE, parasite, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-attach-parasite", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-attach-parasite", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -167,9 +167,9 @@ pika_detach_parasite (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-detach-parasite", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-detach-parasite", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -202,9 +202,9 @@ pika_get_parasite (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-get-parasite", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-get-parasite", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -238,9 +238,9 @@ pika_get_parasite_list (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-get-parasite-list", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-get-parasite-list", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -273,9 +273,9 @@ pika_temp_file (const gchar *extension) G_TYPE_STRING, extension, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-temp-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-temp-file", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pika_pdb_headers.h b/libpika/pika_pdb_headers.h index 5ee9973..5876aea 100644 --- a/libpika/pika_pdb_headers.h +++ b/libpika/pika_pdb_headers.h @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include diff --git a/libpika/pikaaspectpreview.c b/libpika/pikaaspectpreview.c index dc8396a..07cd033 100644 --- a/libpika/pikaaspectpreview.c +++ b/libpika/pikaaspectpreview.c @@ -28,6 +28,7 @@ #include "pikauitypes.h" #include "pika.h" +#include "pikapdb-private.h" #include "libpika-intl.h" @@ -154,6 +155,7 @@ pika_aspect_preview_constructed (GObject *object) { gchar *data_name; PreviewSettings settings; + GBytes *settings_bytes = NULL; G_OBJECT_CLASS (parent_class)->constructed (object); @@ -161,10 +163,13 @@ pika_aspect_preview_constructed (GObject *object) g_get_prgname (), pika_aspect_preview_counter++); - if (pika_get_data (data_name, &settings)) + if (pika_pdb_get_data (data_name, &settings_bytes) && + g_bytes_get_size (settings_bytes) == sizeof (PreviewSettings)) { + settings = *((PreviewSettings *) g_bytes_get_data (settings_bytes, NULL)); pika_preview_set_update (PIKA_PREVIEW (object), settings.update); } + g_bytes_unref (settings_bytes); g_object_set_data_full (object, "pika-aspect-preview-data-name", data_name, (GDestroyNotify) g_free); @@ -181,11 +186,14 @@ pika_aspect_preview_dispose (GObject *object) if (data_name) { PikaPreview *preview = PIKA_PREVIEW (object); + GBytes *bytes; PreviewSettings settings; settings.update = pika_preview_get_update (preview); - pika_set_data (data_name, &settings, sizeof (PreviewSettings)); + bytes = g_bytes_new_static (&settings, sizeof (PreviewSettings)); + pika_pdb_set_data (data_name, bytes); + g_bytes_unref (bytes); } g_clear_object (&priv->drawable); diff --git a/libpika/pikabatchprocedure.c b/libpika/pikabatchprocedure.c index f4e47d7..edad7b4 100644 --- a/libpika/pikabatchprocedure.c +++ b/libpika/pikabatchprocedure.c @@ -26,6 +26,7 @@ #include "pika.h" #include "pikabatchprocedure.h" +#include "pikaprocedureconfig-private.h" #include "pikapdb_pdb.h" @@ -128,12 +129,14 @@ static PikaValueArray * pika_batch_procedure_run (PikaProcedure *procedure, const PikaValueArray *args) { - PikaBatchProcedure *batch_proc = PIKA_BATCH_PROCEDURE (procedure); - PikaValueArray *remaining; - PikaValueArray *return_values; - PikaRunMode run_mode; - const gchar *cmd; - gint i; + PikaBatchProcedure *batch_proc = PIKA_BATCH_PROCEDURE (procedure); + PikaValueArray *remaining; + PikaValueArray *return_values; + PikaRunMode run_mode; + const gchar *cmd; + PikaProcedureConfig *config; + PikaPDBStatusType status = PIKA_PDB_EXECUTION_ERROR; + gint i; run_mode = PIKA_VALUES_GET_ENUM (args, 0); cmd = PIKA_VALUES_GET_STRING (args, 1); @@ -147,12 +150,22 @@ pika_batch_procedure_run (PikaProcedure *procedure, pika_value_array_append (remaining, value); } + config = pika_procedure_create_config (procedure); + _pika_procedure_config_begin_run (config, NULL, run_mode, remaining); + pika_value_array_unref (remaining); + return_values = batch_proc->priv->run_func (procedure, run_mode, cmd, - remaining, + config, batch_proc->priv->run_data); - pika_value_array_unref (remaining); + if (return_values != NULL && + pika_value_array_length (return_values) > 0 && + G_VALUE_HOLDS_ENUM (pika_value_array_index (return_values, 0))) + status = PIKA_VALUES_GET_ENUM (return_values, 0); + + _pika_procedure_config_end_run (config, status); + g_object_unref (config); return return_values; } diff --git a/libpika/pikabatchprocedure.h b/libpika/pikabatchprocedure.h index 358320d..9be31ff 100644 --- a/libpika/pikabatchprocedure.h +++ b/libpika/pikabatchprocedure.h @@ -37,7 +37,7 @@ G_BEGIN_DECLS * PikaBatchFunc: * @procedure: the #PikaProcedure that runs. * @run_mode: the #PikaRunMode. - * @args: the @procedure's remaining arguments. + * @config: the @procedure's remaining arguments. * @run_data: (closure): the run_data given in pika_batch_procedure_new(). * * The batch function is run during the lifetime of the PIKA session, @@ -50,7 +50,7 @@ G_BEGIN_DECLS typedef PikaValueArray * (* PikaBatchFunc) (PikaProcedure *procedure, PikaRunMode run_mode, const gchar *command, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); diff --git a/libpika/pikabrush_pdb.c b/libpika/pikabrush_pdb.c index ab3307f..9353ec1 100644 --- a/libpika/pikabrush_pdb.c +++ b/libpika/pikabrush_pdb.c @@ -59,9 +59,9 @@ pika_brush_new (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -96,9 +96,9 @@ pika_brush_get_by_name (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-get-by-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-get-by-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -132,9 +132,9 @@ pika_brush_is_generated (PikaBrush *brush) PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-is-generated", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-is-generated", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -178,9 +178,9 @@ pika_brush_get_info (PikaBrush *brush, PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-get-info", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-get-info", + args); pika_value_array_unref (args); *width = 0; @@ -204,7 +204,7 @@ pika_brush_get_info (PikaBrush *brush, } /** - * pika_brush_get_pixels: + * _pika_brush_get_pixels: * @brush: The brush. * @width: (out): The brush width. * @height: (out): The brush height. @@ -224,13 +224,13 @@ pika_brush_get_info (PikaBrush *brush, * Since: 2.2 **/ gboolean -pika_brush_get_pixels (PikaBrush *brush, - gint *width, - gint *height, - gint *mask_bpp, - GBytes **mask_bytes, - gint *color_bpp, - GBytes **color_bytes) +_pika_brush_get_pixels (PikaBrush *brush, + gint *width, + gint *height, + gint *mask_bpp, + GBytes **mask_bytes, + gint *color_bpp, + GBytes **color_bytes) { PikaValueArray *args; PikaValueArray *return_vals; @@ -240,9 +240,9 @@ pika_brush_get_pixels (PikaBrush *brush, PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-get-pixels", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-get-pixels", + args); pika_value_array_unref (args); *width = 0; @@ -295,9 +295,9 @@ pika_brush_get_spacing (PikaBrush *brush) PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-get-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-get-spacing", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -337,9 +337,9 @@ pika_brush_set_spacing (PikaBrush *brush, G_TYPE_INT, spacing, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-set-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-set-spacing", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -378,9 +378,9 @@ pika_brush_get_shape (PikaBrush *brush, PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-get-shape", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-get-shape", + args); pika_value_array_unref (args); *shape = 0; @@ -426,9 +426,9 @@ pika_brush_set_shape (PikaBrush *brush, PIKA_TYPE_BRUSH_GENERATED_SHAPE, shape_in, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-set-shape", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-set-shape", + args); pika_value_array_unref (args); *shape_out = 0; @@ -469,9 +469,9 @@ pika_brush_get_radius (PikaBrush *brush, PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-get-radius", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-get-radius", + args); pika_value_array_unref (args); *radius = 0.0; @@ -516,9 +516,9 @@ pika_brush_set_radius (PikaBrush *brush, G_TYPE_DOUBLE, radius_in, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-set-radius", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-set-radius", + args); pika_value_array_unref (args); *radius_out = 0.0; @@ -559,9 +559,9 @@ pika_brush_get_spikes (PikaBrush *brush, PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-get-spikes", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-get-spikes", + args); pika_value_array_unref (args); *spikes = 0; @@ -606,9 +606,9 @@ pika_brush_set_spikes (PikaBrush *brush, G_TYPE_INT, spikes_in, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-set-spikes", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-set-spikes", + args); pika_value_array_unref (args); *spikes_out = 0; @@ -651,9 +651,9 @@ pika_brush_get_hardness (PikaBrush *brush, PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-get-hardness", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-get-hardness", + args); pika_value_array_unref (args); *hardness = 0.0; @@ -698,9 +698,9 @@ pika_brush_set_hardness (PikaBrush *brush, G_TYPE_DOUBLE, hardness_in, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-set-hardness", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-set-hardness", + args); pika_value_array_unref (args); *hardness_out = 0.0; @@ -742,9 +742,9 @@ pika_brush_get_aspect_ratio (PikaBrush *brush, PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-get-aspect-ratio", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-get-aspect-ratio", + args); pika_value_array_unref (args); *aspect_ratio = 0.0; @@ -789,9 +789,9 @@ pika_brush_set_aspect_ratio (PikaBrush *brush, G_TYPE_DOUBLE, aspect_ratio_in, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-set-aspect-ratio", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-set-aspect-ratio", + args); pika_value_array_unref (args); *aspect_ratio_out = 0.0; @@ -832,9 +832,9 @@ pika_brush_get_angle (PikaBrush *brush, PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-get-angle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-get-angle", + args); pika_value_array_unref (args); *angle = 0.0; @@ -879,9 +879,9 @@ pika_brush_set_angle (PikaBrush *brush, G_TYPE_DOUBLE, angle_in, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brush-set-angle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brush-set-angle", + args); pika_value_array_unref (args); *angle_out = 0.0; diff --git a/libpika/pikabrush_pdb.h b/libpika/pikabrush_pdb.h index 63d44ce..78bd97e 100644 --- a/libpika/pikabrush_pdb.h +++ b/libpika/pikabrush_pdb.h @@ -32,54 +32,54 @@ G_BEGIN_DECLS /* For information look into the C source or the html documentation */ -PikaBrush* pika_brush_new (const gchar *name); -PikaBrush* pika_brush_get_by_name (const gchar *name); -gboolean pika_brush_is_generated (PikaBrush *brush); -gboolean pika_brush_get_info (PikaBrush *brush, - gint *width, - gint *height, - gint *mask_bpp, - gint *color_bpp); -gboolean pika_brush_get_pixels (PikaBrush *brush, - gint *width, - gint *height, - gint *mask_bpp, - GBytes **mask_bytes, - gint *color_bpp, - GBytes **color_bytes); -gint pika_brush_get_spacing (PikaBrush *brush); -gboolean pika_brush_set_spacing (PikaBrush *brush, - gint spacing); -gboolean pika_brush_get_shape (PikaBrush *brush, - PikaBrushGeneratedShape *shape); -gboolean pika_brush_set_shape (PikaBrush *brush, - PikaBrushGeneratedShape shape_in, - PikaBrushGeneratedShape *shape_out); -gboolean pika_brush_get_radius (PikaBrush *brush, - gdouble *radius); -gboolean pika_brush_set_radius (PikaBrush *brush, - gdouble radius_in, - gdouble *radius_out); -gboolean pika_brush_get_spikes (PikaBrush *brush, - gint *spikes); -gboolean pika_brush_set_spikes (PikaBrush *brush, - gint spikes_in, - gint *spikes_out); -gboolean pika_brush_get_hardness (PikaBrush *brush, - gdouble *hardness); -gboolean pika_brush_set_hardness (PikaBrush *brush, - gdouble hardness_in, - gdouble *hardness_out); -gboolean pika_brush_get_aspect_ratio (PikaBrush *brush, - gdouble *aspect_ratio); -gboolean pika_brush_set_aspect_ratio (PikaBrush *brush, - gdouble aspect_ratio_in, - gdouble *aspect_ratio_out); -gboolean pika_brush_get_angle (PikaBrush *brush, - gdouble *angle); -gboolean pika_brush_set_angle (PikaBrush *brush, - gdouble angle_in, - gdouble *angle_out); +PikaBrush* pika_brush_new (const gchar *name); +PikaBrush* pika_brush_get_by_name (const gchar *name); +gboolean pika_brush_is_generated (PikaBrush *brush); +gboolean pika_brush_get_info (PikaBrush *brush, + gint *width, + gint *height, + gint *mask_bpp, + gint *color_bpp); +G_GNUC_INTERNAL gboolean _pika_brush_get_pixels (PikaBrush *brush, + gint *width, + gint *height, + gint *mask_bpp, + GBytes **mask_bytes, + gint *color_bpp, + GBytes **color_bytes); +gint pika_brush_get_spacing (PikaBrush *brush); +gboolean pika_brush_set_spacing (PikaBrush *brush, + gint spacing); +gboolean pika_brush_get_shape (PikaBrush *brush, + PikaBrushGeneratedShape *shape); +gboolean pika_brush_set_shape (PikaBrush *brush, + PikaBrushGeneratedShape shape_in, + PikaBrushGeneratedShape *shape_out); +gboolean pika_brush_get_radius (PikaBrush *brush, + gdouble *radius); +gboolean pika_brush_set_radius (PikaBrush *brush, + gdouble radius_in, + gdouble *radius_out); +gboolean pika_brush_get_spikes (PikaBrush *brush, + gint *spikes); +gboolean pika_brush_set_spikes (PikaBrush *brush, + gint spikes_in, + gint *spikes_out); +gboolean pika_brush_get_hardness (PikaBrush *brush, + gdouble *hardness); +gboolean pika_brush_set_hardness (PikaBrush *brush, + gdouble hardness_in, + gdouble *hardness_out); +gboolean pika_brush_get_aspect_ratio (PikaBrush *brush, + gdouble *aspect_ratio); +gboolean pika_brush_set_aspect_ratio (PikaBrush *brush, + gdouble aspect_ratio_in, + gdouble *aspect_ratio_out); +gboolean pika_brush_get_angle (PikaBrush *brush, + gdouble *angle); +gboolean pika_brush_set_angle (PikaBrush *brush, + gdouble angle_in, + gdouble *angle_out); G_END_DECLS diff --git a/libpika/pikabrushes_pdb.c b/libpika/pikabrushes_pdb.c index 38cbe40..7ca8881 100644 --- a/libpika/pikabrushes_pdb.c +++ b/libpika/pikabrushes_pdb.c @@ -56,9 +56,9 @@ pika_brushes_refresh (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brushes-refresh", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brushes-refresh", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -92,9 +92,9 @@ pika_brushes_get_list (const gchar *filter) G_TYPE_STRING, filter, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brushes-get-list", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brushes-get-list", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikabrushselect_pdb.c b/libpika/pikabrushselect_pdb.c index cf24a70..87da0b4 100644 --- a/libpika/pikabrushselect_pdb.c +++ b/libpika/pikabrushselect_pdb.c @@ -41,7 +41,8 @@ * pika_brushes_popup: * @brush_callback: The callback PDB proc to call when user chooses a brush. * @popup_title: Title of the brush selection dialog. - * @initial_brush_name: The name of the brush to set as the initial choice. + * @initial_brush: The brush to set as the initial choice. + * @parent_window: An optional parent window handle for the popup to be set transient to. * * Invokes the PIKA brush selection dialog. * @@ -52,7 +53,8 @@ gboolean pika_brushes_popup (const gchar *brush_callback, const gchar *popup_title, - const gchar *initial_brush_name) + PikaBrush *initial_brush, + GBytes *parent_window) { PikaValueArray *args; PikaValueArray *return_vals; @@ -61,12 +63,13 @@ pika_brushes_popup (const gchar *brush_callback, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, brush_callback, G_TYPE_STRING, popup_title, - G_TYPE_STRING, initial_brush_name, + PIKA_TYPE_BRUSH, initial_brush, + G_TYPE_BYTES, parent_window, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brushes-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brushes-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -97,9 +100,9 @@ pika_brushes_close_popup (const gchar *brush_callback) G_TYPE_STRING, brush_callback, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brushes-close-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brushes-close-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -112,7 +115,7 @@ pika_brushes_close_popup (const gchar *brush_callback) /** * pika_brushes_set_popup: * @brush_callback: The name of the callback registered for this pop-up. - * @brush_name: The name of the brush to set as selected. + * @brush: The brush to set as selected. * * Sets the selected brush in a brush selection dialog. * @@ -122,7 +125,7 @@ pika_brushes_close_popup (const gchar *brush_callback) **/ gboolean pika_brushes_set_popup (const gchar *brush_callback, - const gchar *brush_name) + PikaBrush *brush) { PikaValueArray *args; PikaValueArray *return_vals; @@ -130,12 +133,12 @@ pika_brushes_set_popup (const gchar *brush_callback, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, brush_callback, - G_TYPE_STRING, brush_name, + PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-brushes-set-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-brushes-set-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikabrushselect_pdb.h b/libpika/pikabrushselect_pdb.h index 41ce197..9d6243f 100644 --- a/libpika/pikabrushselect_pdb.h +++ b/libpika/pikabrushselect_pdb.h @@ -34,10 +34,11 @@ G_BEGIN_DECLS gboolean pika_brushes_popup (const gchar *brush_callback, const gchar *popup_title, - const gchar *initial_brush_name); + PikaBrush *initial_brush, + GBytes *parent_window); gboolean pika_brushes_close_popup (const gchar *brush_callback); gboolean pika_brushes_set_popup (const gchar *brush_callback, - const gchar *brush_name); + PikaBrush *brush); G_END_DECLS diff --git a/libpika/pikabuffer_pdb.c b/libpika/pikabuffer_pdb.c index 985ccf3..edabce3 100644 --- a/libpika/pikabuffer_pdb.c +++ b/libpika/pikabuffer_pdb.c @@ -62,9 +62,9 @@ pika_buffers_get_list (const gchar *filter) G_TYPE_STRING, filter, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-buffers-get-list", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-buffers-get-list", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -102,9 +102,9 @@ pika_buffer_rename (const gchar *buffer_name, G_TYPE_STRING, new_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-buffer-rename", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-buffer-rename", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -138,9 +138,9 @@ pika_buffer_delete (const gchar *buffer_name) G_TYPE_STRING, buffer_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-buffer-delete", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-buffer-delete", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -173,9 +173,9 @@ pika_buffer_get_width (const gchar *buffer_name) G_TYPE_STRING, buffer_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-buffer-get-width", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-buffer-get-width", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -209,9 +209,9 @@ pika_buffer_get_height (const gchar *buffer_name) G_TYPE_STRING, buffer_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-buffer-get-height", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-buffer-get-height", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -245,9 +245,9 @@ pika_buffer_get_bytes (const gchar *buffer_name) G_TYPE_STRING, buffer_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-buffer-get-bytes", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-buffer-get-bytes", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -281,9 +281,9 @@ pika_buffer_get_image_type (const gchar *buffer_name) G_TYPE_STRING, buffer_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-buffer-get-image-type", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-buffer-get-image-type", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikachannel_pdb.c b/libpika/pikachannel_pdb.c index 2ffb9a1..20dbead 100644 --- a/libpika/pikachannel_pdb.c +++ b/libpika/pikachannel_pdb.c @@ -78,9 +78,9 @@ _pika_channel_new (PikaImage *image, PIKA_TYPE_RGB, color, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-channel-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-channel-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -124,9 +124,9 @@ pika_channel_new_from_component (PikaImage *image, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-channel-new-from-component", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-channel-new-from-component", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -160,9 +160,9 @@ pika_channel_copy (PikaChannel *channel) PIKA_TYPE_CHANNEL, channel, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-channel-copy", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-channel-copy", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -207,9 +207,9 @@ pika_channel_combine_masks (PikaChannel *channel1, G_TYPE_INT, offy, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-channel-combine-masks", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-channel-combine-masks", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -242,9 +242,9 @@ pika_channel_get_show_masked (PikaChannel *channel) PIKA_TYPE_CHANNEL, channel, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-channel-get-show-masked", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-channel-get-show-masked", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -281,9 +281,9 @@ pika_channel_set_show_masked (PikaChannel *channel, G_TYPE_BOOLEAN, show_masked, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-channel-set-show-masked", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-channel-set-show-masked", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -314,9 +314,9 @@ pika_channel_get_opacity (PikaChannel *channel) PIKA_TYPE_CHANNEL, channel, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-channel-get-opacity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-channel-get-opacity", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -351,9 +351,9 @@ pika_channel_set_opacity (PikaChannel *channel, G_TYPE_DOUBLE, opacity, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-channel-set-opacity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-channel-set-opacity", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -386,9 +386,9 @@ pika_channel_get_color (PikaChannel *channel, PIKA_TYPE_CHANNEL, channel, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-channel-get-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-channel-get-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -425,9 +425,9 @@ pika_channel_set_color (PikaChannel *channel, PIKA_TYPE_RGB, color, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-channel-set-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-channel-set-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikacontext_pdb.c b/libpika/pikacontext_pdb.c index 11ee6ea..d30b3da 100644 --- a/libpika/pikacontext_pdb.c +++ b/libpika/pikacontext_pdb.c @@ -59,9 +59,9 @@ pika_context_push (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-push", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-push", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -95,9 +95,9 @@ pika_context_pop (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-pop", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-pop", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -131,9 +131,9 @@ pika_context_set_defaults (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-defaults", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-defaults", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -166,9 +166,9 @@ pika_context_list_paint_methods (gchar ***paint_methods) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-list-paint-methods", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-list-paint-methods", + args); pika_value_array_unref (args); *paint_methods = NULL; @@ -205,9 +205,9 @@ pika_context_get_paint_method (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-paint-method", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-paint-method", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -244,9 +244,9 @@ pika_context_set_paint_method (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-paint-method", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-paint-method", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -277,9 +277,9 @@ pika_context_get_stroke_method (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-stroke-method", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-stroke-method", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -314,9 +314,9 @@ pika_context_set_stroke_method (PikaStrokeMethod stroke_method) PIKA_TYPE_STROKE_METHOD, stroke_method, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-stroke-method", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-stroke-method", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -350,9 +350,9 @@ pika_context_get_foreground (PikaRGB *foreground) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-foreground", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-foreground", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -390,9 +390,9 @@ pika_context_set_foreground (const PikaRGB *foreground) PIKA_TYPE_RGB, foreground, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-foreground", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-foreground", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -426,9 +426,9 @@ pika_context_get_background (PikaRGB *background) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-background", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-background", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -466,9 +466,9 @@ pika_context_set_background (const PikaRGB *background) PIKA_TYPE_RGB, background, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-background", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-background", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -501,9 +501,9 @@ pika_context_set_default_colors (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-default-colors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-default-colors", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -536,9 +536,9 @@ pika_context_swap_colors (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-swap-colors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-swap-colors", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -570,9 +570,9 @@ pika_context_get_opacity (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-opacity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-opacity", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -607,9 +607,9 @@ pika_context_set_opacity (gdouble opacity) G_TYPE_DOUBLE, opacity, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-opacity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-opacity", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -641,9 +641,9 @@ pika_context_get_paint_mode (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-paint-mode", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-paint-mode", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -677,9 +677,9 @@ pika_context_set_paint_mode (PikaLayerMode paint_mode) PIKA_TYPE_LAYER_MODE, paint_mode, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-paint-mode", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-paint-mode", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -710,9 +710,9 @@ pika_context_get_line_width (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-line-width", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-line-width", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -750,9 +750,9 @@ pika_context_set_line_width (gdouble line_width) G_TYPE_DOUBLE, line_width, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-line-width", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-line-width", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -783,9 +783,9 @@ pika_context_get_line_width_unit (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-line-width-unit", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-line-width-unit", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -823,9 +823,9 @@ pika_context_set_line_width_unit (PikaUnit line_width_unit) PIKA_TYPE_UNIT, line_width_unit, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-line-width-unit", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-line-width-unit", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -856,9 +856,9 @@ pika_context_get_line_cap_style (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-line-cap-style", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-line-cap-style", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -896,9 +896,9 @@ pika_context_set_line_cap_style (PikaCapStyle cap_style) PIKA_TYPE_CAP_STYLE, cap_style, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-line-cap-style", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-line-cap-style", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -929,9 +929,9 @@ pika_context_get_line_join_style (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-line-join-style", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-line-join-style", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -968,9 +968,9 @@ pika_context_set_line_join_style (PikaJoinStyle join_style) PIKA_TYPE_JOIN_STYLE, join_style, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-line-join-style", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-line-join-style", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1001,9 +1001,9 @@ pika_context_get_line_miter_limit (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-line-miter-limit", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-line-miter-limit", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1044,9 +1044,9 @@ pika_context_set_line_miter_limit (gdouble miter_limit) G_TYPE_DOUBLE, miter_limit, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-line-miter-limit", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-line-miter-limit", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1077,9 +1077,9 @@ pika_context_get_line_dash_offset (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-line-dash-offset", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-line-dash-offset", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1117,9 +1117,9 @@ pika_context_set_line_dash_offset (gdouble dash_offset) G_TYPE_DOUBLE, dash_offset, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-line-dash-offset", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-line-dash-offset", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1153,9 +1153,9 @@ pika_context_get_line_dash_pattern (gint *num_dashes, args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-line-dash-pattern", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-line-dash-pattern", + args); pika_value_array_unref (args); *num_dashes = 0; @@ -1209,9 +1209,9 @@ pika_context_set_line_dash_pattern (gint num_dashes, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 1), dashes, num_dashes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-line-dash-pattern", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-line-dash-pattern", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1243,9 +1243,9 @@ pika_context_get_brush (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-brush", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-brush", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1281,9 +1281,9 @@ pika_context_set_brush (PikaBrush *brush) PIKA_TYPE_BRUSH, brush, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-brush", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-brush", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1314,9 +1314,9 @@ pika_context_get_brush_size (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-brush-size", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-brush-size", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1350,9 +1350,9 @@ pika_context_set_brush_size (gdouble size) G_TYPE_DOUBLE, size, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-brush-size", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-brush-size", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1384,9 +1384,9 @@ pika_context_set_brush_default_size (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-brush-default-size", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-brush-default-size", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1417,9 +1417,9 @@ pika_context_get_brush_aspect_ratio (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-brush-aspect-ratio", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-brush-aspect-ratio", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1453,9 +1453,9 @@ pika_context_set_brush_aspect_ratio (gdouble aspect) G_TYPE_DOUBLE, aspect, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-brush-aspect-ratio", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-brush-aspect-ratio", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1486,9 +1486,9 @@ pika_context_get_brush_angle (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-brush-angle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-brush-angle", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1522,9 +1522,9 @@ pika_context_set_brush_angle (gdouble angle) G_TYPE_DOUBLE, angle, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-brush-angle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-brush-angle", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1556,9 +1556,9 @@ pika_context_get_brush_spacing (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-brush-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-brush-spacing", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1593,9 +1593,9 @@ pika_context_set_brush_spacing (gdouble spacing) G_TYPE_DOUBLE, spacing, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-brush-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-brush-spacing", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1627,9 +1627,9 @@ pika_context_set_brush_default_spacing (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-brush-default-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-brush-default-spacing", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1660,9 +1660,9 @@ pika_context_get_brush_hardness (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-brush-hardness", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-brush-hardness", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1696,9 +1696,9 @@ pika_context_set_brush_hardness (gdouble hardness) G_TYPE_DOUBLE, hardness, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-brush-hardness", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-brush-hardness", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1730,9 +1730,9 @@ pika_context_set_brush_default_hardness (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-brush-default-hardness", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-brush-default-hardness", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1763,9 +1763,9 @@ pika_context_get_brush_force (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-brush-force", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-brush-force", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1799,9 +1799,9 @@ pika_context_set_brush_force (gdouble force) G_TYPE_DOUBLE, force, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-brush-force", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-brush-force", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1838,9 +1838,9 @@ pika_context_get_dynamics (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-dynamics", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-dynamics", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1877,9 +1877,9 @@ pika_context_set_dynamics (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-dynamics", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-dynamics", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1912,9 +1912,9 @@ pika_context_are_dynamics_enabled (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-are-dynamics-enabled", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-are-dynamics-enabled", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1949,9 +1949,9 @@ pika_context_enable_dynamics (gboolean enable) G_TYPE_BOOLEAN, enable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-enable-dynamics", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-enable-dynamics", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1983,9 +1983,9 @@ pika_context_get_mypaint_brush (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-mypaint-brush", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-mypaint-brush", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2022,9 +2022,9 @@ pika_context_set_mypaint_brush (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-mypaint-brush", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-mypaint-brush", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2057,9 +2057,9 @@ pika_context_get_pattern (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-pattern", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-pattern", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2096,9 +2096,9 @@ pika_context_set_pattern (PikaPattern *pattern) PIKA_TYPE_PATTERN, pattern, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-pattern", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-pattern", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2129,9 +2129,9 @@ pika_context_get_gradient (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-gradient", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-gradient", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2167,9 +2167,9 @@ pika_context_set_gradient (PikaGradient *gradient) PIKA_TYPE_GRADIENT, gradient, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-gradient", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-gradient", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2201,9 +2201,9 @@ pika_context_set_gradient_fg_bg_rgb (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-gradient-fg-bg-rgb", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-gradient-fg-bg-rgb", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2235,9 +2235,9 @@ pika_context_set_gradient_fg_bg_hsv_cw (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-gradient-fg-bg-hsv-cw", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-gradient-fg-bg-hsv-cw", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2269,9 +2269,9 @@ pika_context_set_gradient_fg_bg_hsv_ccw (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-gradient-fg-bg-hsv-ccw", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-gradient-fg-bg-hsv-ccw", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2303,9 +2303,9 @@ pika_context_set_gradient_fg_transparent (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-gradient-fg-transparent", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-gradient-fg-transparent", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2337,9 +2337,9 @@ pika_context_get_gradient_blend_color_space (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-gradient-blend-color-space", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-gradient-blend-color-space", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2374,9 +2374,9 @@ pika_context_set_gradient_blend_color_space (PikaGradientBlendColorSpace blend_c PIKA_TYPE_GRADIENT_BLEND_COLOR_SPACE, blend_color_space, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-gradient-blend-color-space", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-gradient-blend-color-space", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2407,9 +2407,9 @@ pika_context_get_gradient_repeat_mode (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-gradient-repeat-mode", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-gradient-repeat-mode", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2443,9 +2443,9 @@ pika_context_set_gradient_repeat_mode (PikaRepeatMode repeat_mode) PIKA_TYPE_REPEAT_MODE, repeat_mode, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-gradient-repeat-mode", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-gradient-repeat-mode", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2477,9 +2477,9 @@ pika_context_get_gradient_reverse (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-gradient-reverse", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-gradient-reverse", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2514,9 +2514,9 @@ pika_context_set_gradient_reverse (gboolean reverse) G_TYPE_BOOLEAN, reverse, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-gradient-reverse", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-gradient-reverse", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2547,9 +2547,9 @@ pika_context_get_palette (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-palette", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-palette", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2585,9 +2585,9 @@ pika_context_set_palette (PikaPalette *palette) PIKA_TYPE_PALETTE, palette, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-palette", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-palette", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2618,9 +2618,9 @@ pika_context_get_font (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-font", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-font", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2656,9 +2656,9 @@ pika_context_set_font (PikaFont *font) PIKA_TYPE_FONT, font, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-font", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-font", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2689,9 +2689,9 @@ pika_context_get_antialias (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-antialias", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-antialias", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2735,9 +2735,9 @@ pika_context_set_antialias (gboolean antialias) G_TYPE_BOOLEAN, antialias, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-antialias", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-antialias", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2768,9 +2768,9 @@ pika_context_get_feather (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-feather", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-feather", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2813,9 +2813,9 @@ pika_context_set_feather (gboolean feather) G_TYPE_BOOLEAN, feather, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-feather", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-feather", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2849,9 +2849,9 @@ pika_context_get_feather_radius (gdouble *feather_radius_x, args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-feather-radius", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-feather-radius", + args); pika_value_array_unref (args); *feather_radius_x = 0.0; @@ -2899,9 +2899,9 @@ pika_context_set_feather_radius (gdouble feather_radius_x, G_TYPE_DOUBLE, feather_radius_y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-feather-radius", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-feather-radius", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2932,9 +2932,9 @@ pika_context_get_sample_merged (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-sample-merged", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-sample-merged", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2977,9 +2977,9 @@ pika_context_set_sample_merged (gboolean sample_merged) G_TYPE_BOOLEAN, sample_merged, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-sample-merged", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-sample-merged", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3010,9 +3010,9 @@ pika_context_get_sample_criterion (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-sample-criterion", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-sample-criterion", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3053,9 +3053,9 @@ pika_context_set_sample_criterion (PikaSelectCriterion sample_criterion) PIKA_TYPE_SELECT_CRITERION, sample_criterion, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-sample-criterion", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-sample-criterion", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3086,9 +3086,9 @@ pika_context_get_sample_threshold (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-sample-threshold", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-sample-threshold", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3130,9 +3130,9 @@ pika_context_set_sample_threshold (gdouble sample_threshold) G_TYPE_DOUBLE, sample_threshold, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-sample-threshold", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-sample-threshold", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3164,9 +3164,9 @@ pika_context_get_sample_threshold_int (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-sample-threshold-int", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-sample-threshold-int", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3201,9 +3201,9 @@ pika_context_set_sample_threshold_int (gint sample_threshold) G_TYPE_INT, sample_threshold, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-sample-threshold-int", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-sample-threshold-int", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3234,9 +3234,9 @@ pika_context_get_sample_transparent (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-sample-transparent", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-sample-transparent", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3278,9 +3278,9 @@ pika_context_set_sample_transparent (gboolean sample_transparent) G_TYPE_BOOLEAN, sample_transparent, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-sample-transparent", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-sample-transparent", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3311,9 +3311,9 @@ pika_context_get_diagonal_neighbors (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-diagonal-neighbors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-diagonal-neighbors", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3356,9 +3356,9 @@ pika_context_set_diagonal_neighbors (gboolean diagonal_neighbors) G_TYPE_BOOLEAN, diagonal_neighbors, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-diagonal-neighbors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-diagonal-neighbors", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3390,9 +3390,9 @@ pika_context_get_distance_metric (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-distance-metric", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-distance-metric", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3432,9 +3432,9 @@ pika_context_set_distance_metric (GeglDistanceMetric metric) GEGL_TYPE_DISTANCE_METRIC, metric, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-distance-metric", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-distance-metric", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3469,9 +3469,9 @@ pika_context_get_interpolation (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-interpolation", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-interpolation", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3512,9 +3512,9 @@ pika_context_set_interpolation (PikaInterpolationType interpolation) PIKA_TYPE_INTERPOLATION_TYPE, interpolation, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-interpolation", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-interpolation", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3546,9 +3546,9 @@ pika_context_get_transform_direction (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-transform-direction", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-transform-direction", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3588,9 +3588,9 @@ pika_context_set_transform_direction (PikaTransformDirection transform_direction PIKA_TYPE_TRANSFORM_DIRECTION, transform_direction, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-transform-direction", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-transform-direction", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3622,9 +3622,9 @@ pika_context_get_transform_resize (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-transform-resize", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-transform-resize", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3668,9 +3668,9 @@ pika_context_set_transform_resize (PikaTransformResize transform_resize) PIKA_TYPE_TRANSFORM_RESIZE, transform_resize, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-transform-resize", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-transform-resize", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3701,9 +3701,9 @@ pika_context_get_ink_size (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-ink-size", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-ink-size", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3737,9 +3737,9 @@ pika_context_set_ink_size (gdouble size) G_TYPE_DOUBLE, size, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-ink-size", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-ink-size", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3770,9 +3770,9 @@ pika_context_get_ink_angle (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-ink-angle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-ink-angle", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3806,9 +3806,9 @@ pika_context_set_ink_angle (gdouble angle) G_TYPE_DOUBLE, angle, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-ink-angle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-ink-angle", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3839,9 +3839,9 @@ pika_context_get_ink_size_sensitivity (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-ink-size-sensitivity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-ink-size-sensitivity", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3875,9 +3875,9 @@ pika_context_set_ink_size_sensitivity (gdouble size) G_TYPE_DOUBLE, size, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-ink-size-sensitivity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-ink-size-sensitivity", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3908,9 +3908,9 @@ pika_context_get_ink_tilt_sensitivity (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-ink-tilt-sensitivity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-ink-tilt-sensitivity", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3944,9 +3944,9 @@ pika_context_set_ink_tilt_sensitivity (gdouble tilt) G_TYPE_DOUBLE, tilt, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-ink-tilt-sensitivity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-ink-tilt-sensitivity", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3977,9 +3977,9 @@ pika_context_get_ink_speed_sensitivity (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-ink-speed-sensitivity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-ink-speed-sensitivity", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -4013,9 +4013,9 @@ pika_context_set_ink_speed_sensitivity (gdouble speed) G_TYPE_DOUBLE, speed, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-ink-speed-sensitivity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-ink-speed-sensitivity", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -4046,9 +4046,9 @@ pika_context_get_ink_blob_type (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-ink-blob-type", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-ink-blob-type", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -4082,9 +4082,9 @@ pika_context_set_ink_blob_type (PikaInkBlobType type) PIKA_TYPE_INK_BLOB_TYPE, type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-ink-blob-type", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-ink-blob-type", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -4115,9 +4115,9 @@ pika_context_get_ink_blob_aspect_ratio (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-ink-blob-aspect-ratio", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-ink-blob-aspect-ratio", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -4151,9 +4151,9 @@ pika_context_set_ink_blob_aspect_ratio (gdouble aspect) G_TYPE_DOUBLE, aspect, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-ink-blob-aspect-ratio", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-ink-blob-aspect-ratio", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -4184,9 +4184,9 @@ pika_context_get_ink_blob_angle (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-ink-blob-angle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-ink-blob-angle", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -4220,9 +4220,9 @@ pika_context_set_ink_blob_angle (gdouble angle) G_TYPE_DOUBLE, angle, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-set-ink-blob-angle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-set-ink-blob-angle", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -4255,9 +4255,9 @@ _pika_context_get_resource (const gchar *type_name) G_TYPE_STRING, type_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-context-get-resource", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-context-get-resource", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikadebug_pdb.c b/libpika/pikadebug_pdb.c index de0796f..fe38d1d 100644 --- a/libpika/pikadebug_pdb.c +++ b/libpika/pikadebug_pdb.c @@ -63,9 +63,9 @@ pika_debug_timer_start (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-debug-timer-start", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-debug-timer-start", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -101,9 +101,9 @@ pika_debug_timer_end (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-debug-timer-end", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-debug-timer-end", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikadisplay_pdb.c b/libpika/pikadisplay_pdb.c index 19bf773..e952235 100644 --- a/libpika/pikadisplay_pdb.c +++ b/libpika/pikadisplay_pdb.c @@ -60,9 +60,9 @@ pika_display_id_is_valid (gint display_id) G_TYPE_INT, display_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-display-id-is-valid", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-display-id-is-valid", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -99,9 +99,9 @@ pika_display_new (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-display-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-display-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -137,9 +137,9 @@ pika_display_delete (PikaDisplay *display) PIKA_TYPE_DISPLAY, display, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-display-delete", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-display-delete", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -156,37 +156,39 @@ pika_display_delete (PikaDisplay *display) * Get a handle to the native window for an image display. * * This procedure returns a handle to the native window for a given - * image display. For example in the X backend of GDK, a native window - * handle is an Xlib XID. A value of 0 is returned for an invalid - * display or if this function is unimplemented for the windowing - * system that is being used. + * image display. + * It can be different types of data depending on the platform you are + * running on. For example in the X backend of GDK, a native window + * handle is an Xlib XID whereas on Wayland, it is a string handle. A + * value of NULL is returned for an invalid display or if this function + * is unimplemented for the windowing system that is being used. * - * Returns: The native window handle or 0. + * Returns: (transfer full): The native window handle or NULL. * * Since: 2.4 **/ -gint +GBytes * pika_display_get_window_handle (PikaDisplay *display) { PikaValueArray *args; PikaValueArray *return_vals; - gint window = 0; + GBytes *handle = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_DISPLAY, display, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-display-get-window-handle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-display-get-window-handle", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) - window = PIKA_VALUES_GET_INT (return_vals, 1); + handle = PIKA_VALUES_DUP_BYTES (return_vals, 1); pika_value_array_unref (return_vals); - return window; + return handle; } /** @@ -213,9 +215,9 @@ pika_display_present (PikaDisplay *display) PIKA_TYPE_DISPLAY, display, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-display-present", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-display-present", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -247,9 +249,9 @@ pika_displays_flush (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-displays-flush", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-displays-flush", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -286,9 +288,9 @@ pika_displays_reconnect (PikaImage *old_image, PIKA_TYPE_IMAGE, new_image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-displays-reconnect", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-displays-reconnect", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikadisplay_pdb.h b/libpika/pikadisplay_pdb.h index d34491c..82c162f 100644 --- a/libpika/pikadisplay_pdb.h +++ b/libpika/pikadisplay_pdb.h @@ -35,7 +35,7 @@ G_BEGIN_DECLS gboolean pika_display_id_is_valid (gint display_id); PikaDisplay* pika_display_new (PikaImage *image); gboolean pika_display_delete (PikaDisplay *display); -gint pika_display_get_window_handle (PikaDisplay *display); +GBytes* pika_display_get_window_handle (PikaDisplay *display); gboolean pika_display_present (PikaDisplay *display); gboolean pika_displays_flush (void); gboolean pika_displays_reconnect (PikaImage *old_image, diff --git a/libpika/pikadrawable_pdb.c b/libpika/pikadrawable_pdb.c index debf37a..63737a0 100644 --- a/libpika/pikadrawable_pdb.c +++ b/libpika/pikadrawable_pdb.c @@ -63,9 +63,9 @@ _pika_drawable_get_format (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-get-format", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-get-format", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -102,9 +102,9 @@ _pika_drawable_get_thumbnail_format (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-get-thumbnail-format", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-get-thumbnail-format", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -136,9 +136,9 @@ pika_drawable_type (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-type", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-type", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -173,9 +173,9 @@ pika_drawable_type_with_alpha (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-type-with-alpha", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-type-with-alpha", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -209,9 +209,9 @@ pika_drawable_has_alpha (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-has-alpha", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-has-alpha", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -244,9 +244,9 @@ pika_drawable_is_rgb (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-is-rgb", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-is-rgb", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -279,9 +279,9 @@ pika_drawable_is_gray (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-is-gray", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-is-gray", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -314,9 +314,9 @@ pika_drawable_is_indexed (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-is-indexed", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-is-indexed", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -348,9 +348,9 @@ pika_drawable_get_bpp (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-get-bpp", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-get-bpp", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -382,9 +382,9 @@ pika_drawable_get_width (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-get-width", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-get-width", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -416,9 +416,9 @@ pika_drawable_get_height (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-get-height", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-get-height", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -456,9 +456,9 @@ pika_drawable_get_offsets (PikaDrawable *drawable, PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-get-offsets", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-get-offsets", + args); pika_value_array_unref (args); *offset_x = 0; @@ -518,9 +518,9 @@ pika_drawable_mask_bounds (PikaDrawable *drawable, PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-mask-bounds", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-mask-bounds", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -573,9 +573,9 @@ pika_drawable_mask_intersect (PikaDrawable *drawable, PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-mask-intersect", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-mask-intersect", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -619,9 +619,9 @@ pika_drawable_merge_shadow (PikaDrawable *drawable, G_TYPE_BOOLEAN, undo, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-merge-shadow", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-merge-shadow", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -657,9 +657,9 @@ pika_drawable_free_shadow (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-free-shadow", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-free-shadow", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -705,9 +705,9 @@ pika_drawable_update (PikaDrawable *drawable, G_TYPE_INT, height, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-update", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-update", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -751,9 +751,9 @@ pika_drawable_fill (PikaDrawable *drawable, PIKA_TYPE_FILL_TYPE, fill_type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-fill", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-fill", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -802,9 +802,9 @@ pika_drawable_offset (PikaDrawable *drawable, G_TYPE_INT, offset_y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-offset", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-offset", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -852,9 +852,9 @@ _pika_drawable_thumbnail (PikaDrawable *drawable, G_TYPE_INT, height, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-thumbnail", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-thumbnail", + args); pika_value_array_unref (args); *actual_width = 0; @@ -929,9 +929,9 @@ _pika_drawable_sub_thumbnail (PikaDrawable *drawable, G_TYPE_INT, dest_height, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-sub-thumbnail", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-sub-thumbnail", + args); pika_value_array_unref (args); *width = 0; @@ -984,9 +984,9 @@ pika_drawable_foreground_extract (PikaDrawable *drawable, PIKA_TYPE_DRAWABLE, mask, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-foreground-extract", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-foreground-extract", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikadrawablecolor_pdb.c b/libpika/pikadrawablecolor_pdb.c index 543806b..e32a58f 100644 --- a/libpika/pikadrawablecolor_pdb.c +++ b/libpika/pikadrawablecolor_pdb.c @@ -68,9 +68,9 @@ pika_drawable_brightness_contrast (PikaDrawable *drawable, G_TYPE_DOUBLE, contrast, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-brightness-contrast", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-brightness-contrast", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -125,9 +125,9 @@ pika_drawable_color_balance (PikaDrawable *drawable, G_TYPE_DOUBLE, yellow_blue, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-color-balance", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-color-balance", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -172,9 +172,9 @@ pika_drawable_colorize_hsl (PikaDrawable *drawable, G_TYPE_DOUBLE, lightness, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-colorize-hsl", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-colorize-hsl", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -222,9 +222,9 @@ pika_drawable_curves_explicit (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 3), values, num_values); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-curves-explicit", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-curves-explicit", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -273,9 +273,9 @@ pika_drawable_curves_spline (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 3), points, num_points); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-curves-spline", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-curves-spline", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -317,9 +317,9 @@ pika_drawable_extract_component (PikaDrawable *drawable, G_TYPE_BOOLEAN, linear, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-extract-component", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-extract-component", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -358,9 +358,9 @@ pika_drawable_desaturate (PikaDrawable *drawable, PIKA_TYPE_DESATURATE_MODE, desaturate_mode, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-desaturate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-desaturate", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -402,9 +402,9 @@ pika_drawable_equalize (PikaDrawable *drawable, G_TYPE_BOOLEAN, mask_only, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-equalize", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-equalize", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -473,9 +473,9 @@ pika_drawable_histogram (PikaDrawable *drawable, G_TYPE_DOUBLE, end_range, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-histogram", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-histogram", + args); pika_value_array_unref (args); *mean = 0.0; @@ -544,9 +544,9 @@ pika_drawable_hue_saturation (PikaDrawable *drawable, G_TYPE_DOUBLE, overlap, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-hue-saturation", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-hue-saturation", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -585,9 +585,9 @@ pika_drawable_invert (PikaDrawable *drawable, G_TYPE_BOOLEAN, linear, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-invert", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-invert", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -655,9 +655,9 @@ pika_drawable_levels (PikaDrawable *drawable, G_TYPE_BOOLEAN, clamp_output, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-levels", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-levels", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -692,9 +692,9 @@ pika_drawable_levels_stretch (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-levels-stretch", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-levels-stretch", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -750,9 +750,9 @@ pika_drawable_shadows_highlights (PikaDrawable *drawable, G_TYPE_DOUBLE, highlights_ccorrect, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-shadows-highlights", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-shadows-highlights", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -789,9 +789,9 @@ pika_drawable_posterize (PikaDrawable *drawable, G_TYPE_INT, levels, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-posterize", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-posterize", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -836,9 +836,9 @@ pika_drawable_threshold (PikaDrawable *drawable, G_TYPE_DOUBLE, high_threshold, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-threshold", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-threshold", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikadrawableedit_pdb.c b/libpika/pikadrawableedit_pdb.c index 597a990..7139afb 100644 --- a/libpika/pikadrawableedit_pdb.c +++ b/libpika/pikadrawableedit_pdb.c @@ -64,9 +64,9 @@ pika_drawable_edit_clear (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-edit-clear", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-edit-clear", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -108,9 +108,9 @@ pika_drawable_edit_fill (PikaDrawable *drawable, PIKA_TYPE_FILL_TYPE, fill_type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-edit-fill", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-edit-fill", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -164,9 +164,9 @@ pika_drawable_edit_bucket_fill (PikaDrawable *drawable, G_TYPE_DOUBLE, y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-edit-bucket-fill", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-edit-bucket-fill", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -240,9 +240,9 @@ pika_drawable_edit_gradient_fill (PikaDrawable *drawable, G_TYPE_DOUBLE, y2, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-edit-gradient-fill", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-edit-gradient-fill", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -284,9 +284,9 @@ pika_drawable_edit_stroke_selection (PikaDrawable *drawable) PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-edit-stroke-selection", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-edit-stroke-selection", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -333,9 +333,9 @@ pika_drawable_edit_stroke_item (PikaDrawable *drawable, PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-drawable-edit-stroke-item", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-drawable-edit-stroke-item", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikadrawablepreview.c b/libpika/pikadrawablepreview.c index 874ab80..6ab28e3 100644 --- a/libpika/pikadrawablepreview.c +++ b/libpika/pikadrawablepreview.c @@ -28,6 +28,7 @@ #include "pikauitypes.h" #include "pika.h" +#include "pikapdb-private.h" #include "pikadrawablepreview.h" @@ -152,6 +153,7 @@ pika_drawable_preview_constructed (GObject *object) { gchar *data_name; PreviewSettings settings; + GBytes *settings_bytes = NULL; G_OBJECT_CLASS (parent_class)->constructed (object); @@ -159,12 +161,15 @@ pika_drawable_preview_constructed (GObject *object) g_get_prgname (), ++pika_drawable_preview_counter); - if (pika_get_data (data_name, &settings)) + if (pika_pdb_get_data (data_name, &settings_bytes) && + g_bytes_get_size (settings_bytes) == sizeof (PreviewSettings)) { + settings = *((PreviewSettings *) g_bytes_get_data (settings_bytes, NULL)); pika_preview_set_update (PIKA_PREVIEW (object), settings.update); pika_scrolled_preview_set_position (PIKA_SCROLLED_PREVIEW (object), settings.x, settings.y); } + g_bytes_unref (settings_bytes); g_object_set_data_full (object, "pika-drawable-preview-data-name", data_name, (GDestroyNotify) g_free); @@ -181,12 +186,15 @@ pika_drawable_preview_dispose (GObject *object) if (data_name) { PikaPreview *preview = PIKA_PREVIEW (object); + GBytes *bytes; PreviewSettings settings; pika_preview_get_position (preview, &settings.x, &settings.y); settings.update = pika_preview_get_update (preview); - pika_set_data (data_name, &settings, sizeof (PreviewSettings)); + bytes = g_bytes_new_static (&settings, sizeof (PreviewSettings)); + pika_pdb_set_data (data_name, bytes); + g_bytes_unref (bytes); } g_clear_object (&priv->drawable); diff --git a/libpika/pikadynamics_pdb.c b/libpika/pikadynamics_pdb.c index 2431303..4779357 100644 --- a/libpika/pikadynamics_pdb.c +++ b/libpika/pikadynamics_pdb.c @@ -59,9 +59,9 @@ pika_dynamics_refresh (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-dynamics-refresh", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-dynamics-refresh", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -97,9 +97,9 @@ pika_dynamics_get_list (const gchar *filter) G_TYPE_STRING, filter, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-dynamics-get-list", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-dynamics-get-list", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikaedit_pdb.c b/libpika/pikaedit_pdb.c index beb1f3c..b7c0ba9 100644 --- a/libpika/pikaedit_pdb.c +++ b/libpika/pikaedit_pdb.c @@ -68,9 +68,9 @@ pika_edit_cut (gint num_drawables, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 1), PIKA_TYPE_ITEM, (GObject **) drawables, num_drawables); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-edit-cut", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-edit-cut", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -114,9 +114,9 @@ pika_edit_copy (gint num_drawables, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 1), PIKA_TYPE_ITEM, (GObject **) drawables, num_drawables); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-edit-copy", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-edit-copy", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -155,9 +155,9 @@ pika_edit_copy_visible (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-edit-copy-visible", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-edit-copy-visible", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -210,9 +210,9 @@ pika_edit_paste (PikaDrawable *drawable, G_TYPE_BOOLEAN, paste_into, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-edit-paste", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-edit-paste", + args); pika_value_array_unref (args); *num_layers = 0; @@ -252,9 +252,9 @@ pika_edit_paste_as_new_image (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-edit-paste-as-new-image", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-edit-paste-as-new-image", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -300,9 +300,9 @@ pika_edit_named_cut (gint num_drawables, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 1), PIKA_TYPE_ITEM, (GObject **) drawables, num_drawables); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-edit-named-cut", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-edit-named-cut", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -348,9 +348,9 @@ pika_edit_named_copy (gint num_drawables, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 1), PIKA_TYPE_ITEM, (GObject **) drawables, num_drawables); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-edit-named-copy", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-edit-named-copy", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -392,9 +392,9 @@ pika_edit_named_copy_visible (PikaImage *image, G_TYPE_STRING, buffer_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-edit-named-copy-visible", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-edit-named-copy-visible", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -435,9 +435,9 @@ pika_edit_named_paste (PikaDrawable *drawable, G_TYPE_BOOLEAN, paste_into, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-edit-named-paste", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-edit-named-paste", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -472,9 +472,9 @@ pika_edit_named_paste_as_new_image (const gchar *buffer_name) G_TYPE_STRING, buffer_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-edit-named-paste-as-new-image", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-edit-named-paste-as-new-image", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikafile_pdb.c b/libpika/pikafile_pdb.c index 9e1547e..5512ad8 100644 --- a/libpika/pikafile_pdb.c +++ b/libpika/pikafile_pdb.c @@ -62,9 +62,9 @@ pika_file_load (PikaRunMode run_mode, G_TYPE_FILE, file, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-file-load", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-file-load", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -107,9 +107,9 @@ pika_file_load_layer (PikaRunMode run_mode, G_TYPE_FILE, file, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-file-load-layer", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-file-load-layer", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -156,9 +156,9 @@ pika_file_load_layers (PikaRunMode run_mode, G_TYPE_FILE, file, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-file-load-layers", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-file-load-layers", + args); pika_value_array_unref (args); *num_layers = 0; @@ -209,9 +209,9 @@ pika_file_save (PikaRunMode run_mode, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 3), PIKA_TYPE_ITEM, (GObject **) drawables, num_drawables); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-file-save", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-file-save", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -250,9 +250,9 @@ pika_file_save_thumbnail (PikaImage *image, G_TYPE_FILE, file, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-file-save-thumbnail", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-file-save-thumbnail", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikafileprocedure.c b/libpika/pikafileprocedure.c index 3aa6638..d244466 100644 --- a/libpika/pikafileprocedure.c +++ b/libpika/pikafileprocedure.c @@ -28,7 +28,7 @@ #include "pikafileprocedure.h" -struct _PikaFileProcedurePrivate +typedef struct _PikaFileProcedurePrivate { gchar *format_name; gchar *mime_types; @@ -37,7 +37,7 @@ struct _PikaFileProcedurePrivate gchar *magics; gint priority; gboolean handles_remote; -}; +} PikaFileProcedurePrivate; static void pika_file_procedure_constructed (GObject *object); @@ -62,7 +62,6 @@ pika_file_procedure_class_init (PikaFileProcedureClass *klass) static void pika_file_procedure_init (PikaFileProcedure *procedure) { - procedure->priv = pika_file_procedure_get_instance_private (procedure); } static void @@ -83,13 +82,17 @@ pika_file_procedure_constructed (GObject *object) static void pika_file_procedure_finalize (GObject *object) { - PikaFileProcedure *procedure = PIKA_FILE_PROCEDURE (object); + PikaFileProcedure *procedure; + PikaFileProcedurePrivate *priv; - g_clear_pointer (&procedure->priv->format_name, g_free); - g_clear_pointer (&procedure->priv->mime_types, g_free); - g_clear_pointer (&procedure->priv->extensions, g_free); - g_clear_pointer (&procedure->priv->prefixes, g_free); - g_clear_pointer (&procedure->priv->magics, g_free); + procedure = PIKA_FILE_PROCEDURE (object); + priv = pika_file_procedure_get_instance_private (procedure); + + g_clear_pointer (&priv->format_name, g_free); + g_clear_pointer (&priv->mime_types, g_free); + g_clear_pointer (&priv->extensions, g_free); + g_clear_pointer (&priv->prefixes, g_free); + g_clear_pointer (&priv->magics, g_free); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -125,10 +128,13 @@ void pika_file_procedure_set_format_name (PikaFileProcedure *procedure, const gchar *format_name) { + PikaFileProcedurePrivate *priv; + g_return_if_fail (PIKA_IS_FILE_PROCEDURE (procedure)); - g_free (procedure->priv->format_name); - procedure->priv->format_name = g_strdup (format_name); + priv = pika_file_procedure_get_instance_private (procedure); + g_free (priv->format_name); + priv->format_name = g_strdup (format_name); } /** @@ -145,9 +151,13 @@ pika_file_procedure_set_format_name (PikaFileProcedure *procedure, const gchar * pika_file_procedure_get_format_name (PikaFileProcedure *procedure) { + PikaFileProcedurePrivate *priv; + g_return_val_if_fail (PIKA_IS_FILE_PROCEDURE (procedure), NULL); - return procedure->priv->format_name; + priv = pika_file_procedure_get_instance_private (procedure); + + return priv->format_name; } /** @@ -170,10 +180,13 @@ void pika_file_procedure_set_mime_types (PikaFileProcedure *procedure, const gchar *mime_types) { + PikaFileProcedurePrivate *priv; + g_return_if_fail (PIKA_IS_FILE_PROCEDURE (procedure)); - g_free (procedure->priv->mime_types); - procedure->priv->mime_types = g_strdup (mime_types); + priv = pika_file_procedure_get_instance_private (procedure); + g_free (priv->mime_types); + priv->mime_types = g_strdup (mime_types); } /** @@ -190,9 +203,13 @@ pika_file_procedure_set_mime_types (PikaFileProcedure *procedure, const gchar * pika_file_procedure_get_mime_types (PikaFileProcedure *procedure) { + PikaFileProcedurePrivate *priv; + g_return_val_if_fail (PIKA_IS_FILE_PROCEDURE (procedure), NULL); - return procedure->priv->mime_types; + priv = pika_file_procedure_get_instance_private (procedure); + + return priv->mime_types; } /** @@ -210,10 +227,13 @@ void pika_file_procedure_set_extensions (PikaFileProcedure *procedure, const gchar *extensions) { + PikaFileProcedurePrivate *priv; + g_return_if_fail (PIKA_IS_FILE_PROCEDURE (procedure)); - g_free (procedure->priv->extensions); - procedure->priv->extensions = g_strdup (extensions); + priv = pika_file_procedure_get_instance_private (procedure); + g_free (priv->extensions); + priv->extensions = g_strdup (extensions); } /** @@ -230,9 +250,13 @@ pika_file_procedure_set_extensions (PikaFileProcedure *procedure, const gchar * pika_file_procedure_get_extensions (PikaFileProcedure *procedure) { + PikaFileProcedurePrivate *priv; + g_return_val_if_fail (PIKA_IS_FILE_PROCEDURE (procedure), NULL); - return procedure->priv->extensions; + priv = pika_file_procedure_get_instance_private (procedure); + + return priv->extensions; } /** @@ -250,10 +274,13 @@ void pika_file_procedure_set_prefixes (PikaFileProcedure *procedure, const gchar *prefixes) { + PikaFileProcedurePrivate *priv; + g_return_if_fail (PIKA_IS_FILE_PROCEDURE (procedure)); - g_free (procedure->priv->prefixes); - procedure->priv->prefixes = g_strdup (prefixes); + priv = pika_file_procedure_get_instance_private (procedure); + g_free (priv->prefixes); + priv->prefixes = g_strdup (prefixes); } /** @@ -270,9 +297,13 @@ pika_file_procedure_set_prefixes (PikaFileProcedure *procedure, const gchar * pika_file_procedure_get_prefixes (PikaFileProcedure *procedure) { + PikaFileProcedurePrivate *priv; + g_return_val_if_fail (PIKA_IS_FILE_PROCEDURE (procedure), NULL); - return procedure->priv->prefixes; + priv = pika_file_procedure_get_instance_private (procedure); + + return priv->prefixes; } /** @@ -288,10 +319,13 @@ void pika_file_procedure_set_magics (PikaFileProcedure *procedure, const gchar *magics) { + PikaFileProcedurePrivate *priv; + g_return_if_fail (PIKA_IS_FILE_PROCEDURE (procedure)); - g_free (procedure->priv->magics); - procedure->priv->magics = g_strdup (magics); + priv = pika_file_procedure_get_instance_private (procedure); + g_free (priv->magics); + priv->magics = g_strdup (magics); } /** @@ -307,9 +341,13 @@ pika_file_procedure_set_magics (PikaFileProcedure *procedure, const gchar * pika_file_procedure_get_magics (PikaFileProcedure *procedure) { + PikaFileProcedurePrivate *priv; + g_return_val_if_fail (PIKA_IS_FILE_PROCEDURE (procedure), NULL); - return procedure->priv->magics; + priv = pika_file_procedure_get_instance_private (procedure); + + return priv->magics; } /** @@ -330,9 +368,12 @@ void pika_file_procedure_set_priority (PikaFileProcedure *procedure, gint priority) { + PikaFileProcedurePrivate *priv; + g_return_if_fail (PIKA_IS_FILE_PROCEDURE (procedure)); - procedure->priv->priority = priority; + priv = pika_file_procedure_get_instance_private (procedure); + priv->priority = priority; } /** @@ -349,9 +390,13 @@ pika_file_procedure_set_priority (PikaFileProcedure *procedure, gint pika_file_procedure_get_priority (PikaFileProcedure *procedure) { + PikaFileProcedurePrivate *priv; + g_return_val_if_fail (PIKA_IS_FILE_PROCEDURE (procedure), 0); - return procedure->priv->priority; + priv = pika_file_procedure_get_instance_private (procedure); + + return priv->priority; } /** @@ -376,9 +421,12 @@ void pika_file_procedure_set_handles_remote (PikaFileProcedure *procedure, gint handles_remote) { + PikaFileProcedurePrivate *priv; + g_return_if_fail (PIKA_IS_FILE_PROCEDURE (procedure)); - procedure->priv->handles_remote = handles_remote; + priv = pika_file_procedure_get_instance_private (procedure); + priv->handles_remote = handles_remote; } /** @@ -395,7 +443,10 @@ pika_file_procedure_set_handles_remote (PikaFileProcedure *procedure, gint pika_file_procedure_get_handles_remote (PikaFileProcedure *procedure) { + PikaFileProcedurePrivate *priv; + g_return_val_if_fail (PIKA_IS_FILE_PROCEDURE (procedure), 0); - return procedure->priv->handles_remote; + priv = pika_file_procedure_get_instance_private (procedure); + return priv->handles_remote; } diff --git a/libpika/pikafileprocedure.h b/libpika/pikafileprocedure.h index 3ecb04f..d271199 100644 --- a/libpika/pikafileprocedure.h +++ b/libpika/pikafileprocedure.h @@ -33,33 +33,26 @@ G_BEGIN_DECLS /* For information look into the C source or the html documentation */ -#define PIKA_TYPE_FILE_PROCEDURE (pika_file_procedure_get_type ()) -#define PIKA_FILE_PROCEDURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIKA_TYPE_FILE_PROCEDURE, PikaFileProcedure)) -#define PIKA_FILE_PROCEDURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PIKA_TYPE_FILE_PROCEDURE, PikaFileProcedureClass)) -#define PIKA_IS_FILE_PROCEDURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIKA_TYPE_FILE_PROCEDURE)) -#define PIKA_IS_FILE_PROCEDURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PIKA_TYPE_FILE_PROCEDURE)) -#define PIKA_FILE_PROCEDURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PIKA_TYPE_FILE_PROCEDURE, PikaFileProcedureClass)) - - -typedef struct _PikaFileProcedure PikaFileProcedure; -typedef struct _PikaFileProcedureClass PikaFileProcedureClass; -typedef struct _PikaFileProcedurePrivate PikaFileProcedurePrivate; - -struct _PikaFileProcedure -{ - PikaProcedure parent_instance; - - PikaFileProcedurePrivate *priv; -}; +#define PIKA_TYPE_FILE_PROCEDURE (pika_file_procedure_get_type ()) +G_DECLARE_DERIVABLE_TYPE (PikaFileProcedure, pika_file_procedure, PIKA, FILE_PROCEDURE, PikaProcedure) struct _PikaFileProcedureClass { PikaProcedureClass parent_class; + + /* Padding for future expansion */ + void (*_pika_reserved1) (void); + void (*_pika_reserved2) (void); + void (*_pika_reserved3) (void); + void (*_pika_reserved4) (void); + void (*_pika_reserved5) (void); + void (*_pika_reserved6) (void); + void (*_pika_reserved7) (void); + void (*_pika_reserved8) (void); + void (*_pika_reserved9) (void); }; -GType pika_file_procedure_get_type (void) G_GNUC_CONST; - void pika_file_procedure_set_format_name (PikaFileProcedure *procedure, const gchar *format_name); const gchar * pika_file_procedure_get_format_name (PikaFileProcedure *procedure); diff --git a/libpika/pikafloatingsel_pdb.c b/libpika/pikafloatingsel_pdb.c index b15559b..296ebe3 100644 --- a/libpika/pikafloatingsel_pdb.c +++ b/libpika/pikafloatingsel_pdb.c @@ -59,9 +59,9 @@ pika_floating_sel_remove (PikaLayer *floating_sel) PIKA_TYPE_LAYER, floating_sel, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-floating-sel-remove", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-floating-sel-remove", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -95,9 +95,9 @@ pika_floating_sel_anchor (PikaLayer *floating_sel) PIKA_TYPE_LAYER, floating_sel, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-floating-sel-anchor", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-floating-sel-anchor", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -135,9 +135,9 @@ pika_floating_sel_to_layer (PikaLayer *floating_sel) PIKA_TYPE_LAYER, floating_sel, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-floating-sel-to-layer", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-floating-sel-to-layer", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -172,9 +172,9 @@ pika_floating_sel_attach (PikaLayer *layer, PIKA_TYPE_DRAWABLE, drawable, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-floating-sel-attach", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-floating-sel-attach", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikafont_pdb.c b/libpika/pikafont_pdb.c index ba55a7f..55110a5 100644 --- a/libpika/pikafont_pdb.c +++ b/libpika/pikafont_pdb.c @@ -40,9 +40,14 @@ * pika_font_get_by_name: * @name: The name of the font. * - * Returns the font with the given name. + * Returns a font with the given name. * - * Returns the font with the given name. + * If several fonts are named identically, the one which is returned by + * this function should be considered random. This can be used when you + * know you won't have multiple fonts of this name or that you don't + * want to choose (non-interactive scripts, etc.). + * If you need more control, you should use pika_fonts_get_by_name() + * instead. * * Returns: (transfer none): The font. * @@ -59,9 +64,9 @@ pika_font_get_by_name (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-font-get-by-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-font-get-by-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -71,3 +76,48 @@ pika_font_get_by_name (const gchar *name) return font; } + +/** + * pika_fonts_get_by_name: + * @name: The name of the font. + * @num_fonts: (out): The number of fonts with the given name. + * + * Returns the fonts with the given name. + * + * Returns the fonts with the given name. There may be more than one. + * + * Returns: (array length=num_fonts) (element-type PikaFont) (transfer container): + * The fonts with the given name. + * The returned value must be freed with g_free(). + * + * Since: 3.0 + **/ +PikaFont ** +pika_fonts_get_by_name (const gchar *name, + gint *num_fonts) +{ + PikaValueArray *args; + PikaValueArray *return_vals; + PikaFont **fonts = NULL; + + args = pika_value_array_new_from_types (NULL, + G_TYPE_STRING, name, + G_TYPE_NONE); + + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-fonts-get-by-name", + args); + pika_value_array_unref (args); + + *num_fonts = 0; + + if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) + { + *num_fonts = PIKA_VALUES_GET_INT (return_vals, 1); + { PikaObjectArray *a = g_value_get_boxed (pika_value_array_index (return_vals, 2)); if (a) fonts = g_memdup2 (a->data, a->length * sizeof (gpointer)); }; + } + + pika_value_array_unref (return_vals); + + return fonts; +} diff --git a/libpika/pikafont_pdb.h b/libpika/pikafont_pdb.h index 51a7838..7077bd3 100644 --- a/libpika/pikafont_pdb.h +++ b/libpika/pikafont_pdb.h @@ -32,7 +32,9 @@ G_BEGIN_DECLS /* For information look into the C source or the html documentation */ -PikaFont* pika_font_get_by_name (const gchar *name); +PikaFont* pika_font_get_by_name (const gchar *name); +PikaFont** pika_fonts_get_by_name (const gchar *name, + gint *num_fonts); G_END_DECLS diff --git a/libpika/pikafonts_pdb.c b/libpika/pikafonts_pdb.c index 8334e20..884e8fc 100644 --- a/libpika/pikafonts_pdb.c +++ b/libpika/pikafonts_pdb.c @@ -57,9 +57,9 @@ pika_fonts_refresh (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-fonts-refresh", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-fonts-refresh", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -92,9 +92,9 @@ pika_fonts_get_list (const gchar *filter) G_TYPE_STRING, filter, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-fonts-get-list", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-fonts-get-list", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikafontselect_pdb.c b/libpika/pikafontselect_pdb.c index c76f47e..75e18f8 100644 --- a/libpika/pikafontselect_pdb.c +++ b/libpika/pikafontselect_pdb.c @@ -49,7 +49,8 @@ * pika_fonts_popup: * @font_callback: The callback PDB proc to call when user chooses a font. * @popup_title: Title of the font selection dialog. - * @initial_font_name: The name of the initial font choice. + * @initial_font: The name of the initial font choice. + * @parent_window: An optional parent window handle for the popup to be set transient to. * * Invokes the Pika font selection dialog. * @@ -60,7 +61,8 @@ gboolean pika_fonts_popup (const gchar *font_callback, const gchar *popup_title, - const gchar *initial_font_name) + PikaFont *initial_font, + GBytes *parent_window) { PikaValueArray *args; PikaValueArray *return_vals; @@ -69,12 +71,13 @@ pika_fonts_popup (const gchar *font_callback, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, font_callback, G_TYPE_STRING, popup_title, - G_TYPE_STRING, initial_font_name, + PIKA_TYPE_FONT, initial_font, + G_TYPE_BYTES, parent_window, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-fonts-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-fonts-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -105,9 +108,9 @@ pika_fonts_close_popup (const gchar *font_callback) G_TYPE_STRING, font_callback, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-fonts-close-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-fonts-close-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -120,7 +123,7 @@ pika_fonts_close_popup (const gchar *font_callback) /** * pika_fonts_set_popup: * @font_callback: The name of the callback registered in the PDB for the dialog. - * @font_name: The name of the font to set as selected. + * @font: The font to set as selected. * * Sets the current font in a font selection dialog. * @@ -130,7 +133,7 @@ pika_fonts_close_popup (const gchar *font_callback) **/ gboolean pika_fonts_set_popup (const gchar *font_callback, - const gchar *font_name) + PikaFont *font) { PikaValueArray *args; PikaValueArray *return_vals; @@ -138,12 +141,12 @@ pika_fonts_set_popup (const gchar *font_callback, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, font_callback, - G_TYPE_STRING, font_name, + PIKA_TYPE_FONT, font, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-fonts-set-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-fonts-set-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikafontselect_pdb.h b/libpika/pikafontselect_pdb.h index 1395342..9fe84f1 100644 --- a/libpika/pikafontselect_pdb.h +++ b/libpika/pikafontselect_pdb.h @@ -34,10 +34,11 @@ G_BEGIN_DECLS gboolean pika_fonts_popup (const gchar *font_callback, const gchar *popup_title, - const gchar *initial_font_name); + PikaFont *initial_font, + GBytes *parent_window); gboolean pika_fonts_close_popup (const gchar *font_callback); gboolean pika_fonts_set_popup (const gchar *font_callback, - const gchar *font_name); + PikaFont *font); G_END_DECLS diff --git a/libpika/pikagpparams-body.c b/libpika/pikagpparams-body.c index 6a87643..eb47288 100644 --- a/libpika/pikagpparams-body.c +++ b/libpika/pikagpparams-body.c @@ -74,6 +74,17 @@ _pika_gp_param_def_to_param_spec (const GPParamDef *param_def) break; + case GP_PARAM_DEF_TYPE_CHOICE: + if (! strcmp (param_def->type_name, "PikaParamChoice")) + { + return pika_param_spec_choice (name, nick, blurb, + g_object_ref (param_def->meta.m_choice.choice), + param_def->meta.m_choice.default_val, + flags); + } + + break; + case GP_PARAM_DEF_TYPE_INT: if (! strcmp (param_def->type_name, "GParamInt")) return g_param_spec_int (name, nick, blurb, @@ -203,6 +214,10 @@ _pika_gp_param_def_to_param_spec (const GPParamDef *param_def) param_def->meta.m_id.none_ok, flags); + if (! strcmp (param_def->type_name, "PikaParamResource")) + return pika_param_spec_resource (name, nick, blurb, + param_def->meta.m_id.none_ok, flags); + if (! strcmp (param_def->type_name, "PikaParamBrush")) return pika_param_spec_brush (name, nick, blurb, param_def->meta.m_id.none_ok, flags); @@ -302,6 +317,15 @@ _pika_param_spec_to_gp_param_def (GParamSpec *pspec, param_def->meta.m_enum.default_val = espec->default_value; } + else if (pspec_type == PIKA_TYPE_PARAM_CHOICE) + { + PikaParamSpecChoice *cspec = PIKA_PARAM_SPEC_CHOICE (pspec); + + param_def->param_def_type = GP_PARAM_DEF_TYPE_CHOICE; + + param_def->meta.m_choice.default_val = cspec->default_value; + param_def->meta.m_choice.choice = cspec->choice; + } else if (pspec_type == G_TYPE_PARAM_BOOLEAN) { GParamSpecBoolean *bspec = G_PARAM_SPEC_BOOLEAN (pspec); @@ -365,39 +389,7 @@ _pika_param_spec_to_gp_param_def (GParamSpec *pspec, param_def->meta.m_id.none_ok = ispec->none_ok; } - else if (PIKA_IS_PARAM_SPEC_BRUSH (pspec)) - { - PikaParamSpecResource *rspec = PIKA_PARAM_SPEC_RESOURCE (pspec); - - param_def->param_def_type = GP_PARAM_DEF_TYPE_ID; - - param_def->meta.m_id.none_ok = rspec->none_ok; - } - else if (PIKA_IS_PARAM_SPEC_PATTERN (pspec)) - { - PikaParamSpecResource *rspec = PIKA_PARAM_SPEC_RESOURCE (pspec); - - param_def->param_def_type = GP_PARAM_DEF_TYPE_ID; - - param_def->meta.m_id.none_ok = rspec->none_ok; - } - else if (PIKA_IS_PARAM_SPEC_GRADIENT (pspec)) - { - PikaParamSpecResource *rspec = PIKA_PARAM_SPEC_RESOURCE (pspec); - - param_def->param_def_type = GP_PARAM_DEF_TYPE_ID; - - param_def->meta.m_id.none_ok = rspec->none_ok; - } - else if (PIKA_IS_PARAM_SPEC_PALETTE (pspec)) - { - PikaParamSpecResource *rspec = PIKA_PARAM_SPEC_RESOURCE (pspec); - - param_def->param_def_type = GP_PARAM_DEF_TYPE_ID; - - param_def->meta.m_id.none_ok = rspec->none_ok; - } - else if (PIKA_IS_PARAM_SPEC_FONT (pspec)) + else if (PIKA_IS_PARAM_SPEC_RESOURCE (pspec)) { PikaParamSpecResource *rspec = PIKA_PARAM_SPEC_RESOURCE (pspec); @@ -455,6 +447,10 @@ _pika_param_spec_to_gp_param_def (GParamSpec *pspec, { type_name = "PikaParamVectors"; } + else if (value_type == PIKA_TYPE_RESOURCE) + { + type_name = "PikaParamResource"; + } else if (value_type == PIKA_TYPE_BRUSH) { type_name = "PikaParamBrush"; @@ -557,6 +553,7 @@ static void pika_gp_param_to_value (gpointer pika, const GPParam *param, GType type, + GParamSpec *pspec, GValue *value) { g_return_if_fail (param != NULL); @@ -613,7 +610,7 @@ pika_gp_param_to_value (gpointer pika, { g_value_set_boxed (value, param->data.d_bytes); } - else if (G_VALUE_TYPE (value) == G_TYPE_FILE) + else if (g_type_is_a (G_VALUE_TYPE (value), G_TYPE_FILE)) { g_value_take_object (value, (param->data.d_string ? g_file_new_for_uri (param->data.d_string) : @@ -656,7 +653,15 @@ pika_gp_param_to_value (gpointer pika, GObject **objects; gint i; - object_type = g_type_from_name (param->data.d_id_array.type_name); + if (param->data.d_id_array.type_name == NULL) + { + g_return_if_fail (param->data.d_id_array.size == 0 && pspec != NULL); + object_type = PIKA_PARAM_SPEC_OBJECT_ARRAY (pspec)->object_type; + } + else + { + object_type = g_type_from_name (param->data.d_id_array.type_name); + } objects = g_new (GObject *, param->data.d_id_array.size); @@ -676,6 +681,10 @@ pika_gp_param_to_value (gpointer pika, { objects[i] = (GObject *) get_display_by_id (pika, id); } + else if (g_type_is_a (object_type, PIKA_TYPE_RESOURCE)) + { + objects[i] = (GObject *) get_resource_by_id (id); + } if (objects[i]) g_object_ref (objects[i]); @@ -732,8 +741,9 @@ _pika_gp_params_to_value_array (gpointer pika, for (i = 0; i < n_params; i++) { - GValue value = G_VALUE_INIT; - GType type; + GParamSpec *pspec = NULL; + GValue value = G_VALUE_INIT; + GType type; /* first get the GType from the passed GPParam */ type = g_type_from_name (params[i].type_name); @@ -754,6 +764,8 @@ _pika_gp_params_to_value_array (gpointer pika, { GType pspec_type = G_PARAM_SPEC_VALUE_TYPE (pspecs[pspec_index]); + pspec = pspecs[pspec_index]; + if (type != pspec_type) { if (g_type_is_a (pspec_type, type)) @@ -786,7 +798,7 @@ _pika_gp_params_to_value_array (gpointer pika, } } - pika_gp_param_to_value (pika, ¶ms[i], type, &value); + pika_gp_param_to_value (pika, ¶ms[i], type, pspec, &value); pika_value_array_append (args, &value); g_value_unset (&value); @@ -860,7 +872,7 @@ pika_value_to_gp_param (const GValue *value, else param->data.d_string = (gchar *) g_value_get_string (value); } - else if (G_VALUE_TYPE (value) == G_TYPE_FILE) + else if (g_type_is_a (G_VALUE_TYPE (value), G_TYPE_FILE)) { GFile *file = g_value_get_object (value); @@ -997,6 +1009,10 @@ pika_value_to_gp_param (const GValue *value, param->data.d_id_array.data[i] = pika_display_get_id (PIKA_DISPLAY (array->data[i])); } + else if (PIKA_IS_RESOURCE (array->data[i])) + { + param->data.d_id_array.data[i] = get_resource_id (array->data[i]); + } else { param->data.d_id_array.data[i] = -1; diff --git a/libpika/pikagradient_pdb.c b/libpika/pikagradient_pdb.c index 41d611d..7752403 100644 --- a/libpika/pikagradient_pdb.c +++ b/libpika/pikagradient_pdb.c @@ -59,9 +59,9 @@ pika_gradient_new (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -95,9 +95,9 @@ pika_gradient_get_by_name (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-get-by-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-get-by-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -131,9 +131,9 @@ pika_gradient_get_number_of_segments (PikaGradient *gradient) PIKA_TYPE_GRADIENT, gradient, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-get-number-of-segments", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-get-number-of-segments", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -182,9 +182,9 @@ pika_gradient_get_uniform_samples (PikaGradient *gradient, G_TYPE_BOOLEAN, reverse, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-get-uniform-samples", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-get-uniform-samples", + args); pika_value_array_unref (args); *num_color_samples = 0; @@ -243,9 +243,9 @@ pika_gradient_get_custom_samples (PikaGradient *gradient, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), positions, num_samples); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-get-custom-samples", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-get-custom-samples", + args); pika_value_array_unref (args); *num_color_samples = 0; @@ -295,9 +295,9 @@ pika_gradient_segment_get_left_color (PikaGradient *gradient, G_TYPE_INT, segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-get-left-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-get-left-color", + args); pika_value_array_unref (args); *opacity = 0.0; @@ -350,9 +350,9 @@ pika_gradient_segment_set_left_color (PikaGradient *gradient, G_TYPE_DOUBLE, opacity, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-set-left-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-set-left-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -394,9 +394,9 @@ pika_gradient_segment_get_right_color (PikaGradient *gradient, G_TYPE_INT, segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-get-right-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-get-right-color", + args); pika_value_array_unref (args); *opacity = 0.0; @@ -448,9 +448,9 @@ pika_gradient_segment_set_right_color (PikaGradient *gradient, G_TYPE_DOUBLE, opacity, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-set-right-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-set-right-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -490,9 +490,9 @@ pika_gradient_segment_get_left_pos (PikaGradient *gradient, G_TYPE_INT, segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-get-left-pos", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-get-left-pos", + args); pika_value_array_unref (args); *pos = 0.0; @@ -542,9 +542,9 @@ pika_gradient_segment_set_left_pos (PikaGradient *gradient, G_TYPE_DOUBLE, pos, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-set-left-pos", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-set-left-pos", + args); pika_value_array_unref (args); *final_pos = 0.0; @@ -588,9 +588,9 @@ pika_gradient_segment_get_middle_pos (PikaGradient *gradient, G_TYPE_INT, segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-get-middle-pos", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-get-middle-pos", + args); pika_value_array_unref (args); *pos = 0.0; @@ -640,9 +640,9 @@ pika_gradient_segment_set_middle_pos (PikaGradient *gradient, G_TYPE_DOUBLE, pos, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-set-middle-pos", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-set-middle-pos", + args); pika_value_array_unref (args); *final_pos = 0.0; @@ -687,9 +687,9 @@ pika_gradient_segment_get_right_pos (PikaGradient *gradient, G_TYPE_INT, segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-get-right-pos", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-get-right-pos", + args); pika_value_array_unref (args); *pos = 0.0; @@ -739,9 +739,9 @@ pika_gradient_segment_set_right_pos (PikaGradient *gradient, G_TYPE_DOUBLE, pos, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-set-right-pos", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-set-right-pos", + args); pika_value_array_unref (args); *final_pos = 0.0; @@ -785,9 +785,9 @@ pika_gradient_segment_get_blending_function (PikaGradient *gradient, G_TYPE_INT, segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-get-blending-function", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-get-blending-function", + args); pika_value_array_unref (args); *blend_func = 0; @@ -831,9 +831,9 @@ pika_gradient_segment_get_coloring_type (PikaGradient *gradient, G_TYPE_INT, segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-get-coloring-type", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-get-coloring-type", + args); pika_value_array_unref (args); *coloring_type = 0; @@ -882,9 +882,9 @@ pika_gradient_segment_range_set_blending_function (PikaGradient *grad PIKA_TYPE_GRADIENT_SEGMENT_TYPE, blending_function, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-set-blending-function", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-set-blending-function", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -928,9 +928,9 @@ pika_gradient_segment_range_set_coloring_type (PikaGradient *gradien PIKA_TYPE_GRADIENT_SEGMENT_COLOR, coloring_type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-set-coloring-type", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-set-coloring-type", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -973,9 +973,9 @@ pika_gradient_segment_range_flip (PikaGradient *gradient, G_TYPE_INT, end_segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-flip", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-flip", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1021,9 +1021,9 @@ pika_gradient_segment_range_replicate (PikaGradient *gradient, G_TYPE_INT, replicate_times, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-replicate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-replicate", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1064,9 +1064,9 @@ pika_gradient_segment_range_split_midpoint (PikaGradient *gradient, G_TYPE_INT, end_segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-split-midpoint", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-split-midpoint", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1111,9 +1111,9 @@ pika_gradient_segment_range_split_uniform (PikaGradient *gradient, G_TYPE_INT, split_parts, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-split-uniform", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-split-uniform", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1154,9 +1154,9 @@ pika_gradient_segment_range_delete (PikaGradient *gradient, G_TYPE_INT, end_segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-delete", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-delete", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1199,9 +1199,9 @@ pika_gradient_segment_range_redistribute_handles (PikaGradient *gradient, G_TYPE_INT, end_segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-redistribute-handles", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-redistribute-handles", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1243,9 +1243,9 @@ pika_gradient_segment_range_blend_colors (PikaGradient *gradient, G_TYPE_INT, end_segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-blend-colors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-blend-colors", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1287,9 +1287,9 @@ pika_gradient_segment_range_blend_opacity (PikaGradient *gradient, G_TYPE_INT, end_segment, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-blend-opacity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-blend-opacity", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1338,9 +1338,9 @@ pika_gradient_segment_range_move (PikaGradient *gradient, G_TYPE_BOOLEAN, control_compress, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradient-segment-range-move", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradient-segment-range-move", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikagradients_pdb.c b/libpika/pikagradients_pdb.c index 89a2dd2..bcacc05 100644 --- a/libpika/pikagradients_pdb.c +++ b/libpika/pikagradients_pdb.c @@ -56,9 +56,9 @@ pika_gradients_refresh (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradients-refresh", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradients-refresh", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -93,9 +93,9 @@ pika_gradients_get_list (const gchar *filter) G_TYPE_STRING, filter, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradients-get-list", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradients-get-list", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikagradientselect_pdb.c b/libpika/pikagradientselect_pdb.c index 9c62d64..8cc7be2 100644 --- a/libpika/pikagradientselect_pdb.c +++ b/libpika/pikagradientselect_pdb.c @@ -41,7 +41,8 @@ * pika_gradients_popup: * @gradient_callback: The callback PDB proc to call when user chooses a gradient. * @popup_title: Title of the gradient selection dialog. - * @initial_gradient_name: The name of the initial gradient choice. + * @initial_gradient: The initial gradient choice. + * @parent_window: An optional parent window handle for the popup to be set transient to. * * Invokes the Pika gradients selection dialog. * @@ -50,9 +51,10 @@ * Returns: TRUE on success. **/ gboolean -pika_gradients_popup (const gchar *gradient_callback, - const gchar *popup_title, - const gchar *initial_gradient_name) +pika_gradients_popup (const gchar *gradient_callback, + const gchar *popup_title, + PikaGradient *initial_gradient, + GBytes *parent_window) { PikaValueArray *args; PikaValueArray *return_vals; @@ -61,12 +63,13 @@ pika_gradients_popup (const gchar *gradient_callback, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, gradient_callback, G_TYPE_STRING, popup_title, - G_TYPE_STRING, initial_gradient_name, + PIKA_TYPE_GRADIENT, initial_gradient, + G_TYPE_BYTES, parent_window, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradients-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradients-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -97,9 +100,9 @@ pika_gradients_close_popup (const gchar *gradient_callback) G_TYPE_STRING, gradient_callback, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradients-close-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradients-close-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -112,7 +115,7 @@ pika_gradients_close_popup (const gchar *gradient_callback) /** * pika_gradients_set_popup: * @gradient_callback: The name of the callback registered for this pop-up. - * @gradient_name: The name of the gradient to set as selected. + * @gradient: The gradient to set as selected. * * Sets the current gradient in a gradient selection dialog. * @@ -121,8 +124,8 @@ pika_gradients_close_popup (const gchar *gradient_callback) * Returns: TRUE on success. **/ gboolean -pika_gradients_set_popup (const gchar *gradient_callback, - const gchar *gradient_name) +pika_gradients_set_popup (const gchar *gradient_callback, + PikaGradient *gradient) { PikaValueArray *args; PikaValueArray *return_vals; @@ -130,12 +133,12 @@ pika_gradients_set_popup (const gchar *gradient_callback, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, gradient_callback, - G_TYPE_STRING, gradient_name, + PIKA_TYPE_GRADIENT, gradient, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-gradients-set-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-gradients-set-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikagradientselect_pdb.h b/libpika/pikagradientselect_pdb.h index 7086778..65ede1b 100644 --- a/libpika/pikagradientselect_pdb.h +++ b/libpika/pikagradientselect_pdb.h @@ -32,12 +32,13 @@ G_BEGIN_DECLS /* For information look into the C source or the html documentation */ -gboolean pika_gradients_popup (const gchar *gradient_callback, - const gchar *popup_title, - const gchar *initial_gradient_name); -gboolean pika_gradients_close_popup (const gchar *gradient_callback); -gboolean pika_gradients_set_popup (const gchar *gradient_callback, - const gchar *gradient_name); +gboolean pika_gradients_popup (const gchar *gradient_callback, + const gchar *popup_title, + PikaGradient *initial_gradient, + GBytes *parent_window); +gboolean pika_gradients_close_popup (const gchar *gradient_callback); +gboolean pika_gradients_set_popup (const gchar *gradient_callback, + PikaGradient *gradient); G_END_DECLS diff --git a/libpika/pikahelp_pdb.c b/libpika/pikahelp_pdb.c index aab66ef..9085235 100644 --- a/libpika/pikahelp_pdb.c +++ b/libpika/pikahelp_pdb.c @@ -65,9 +65,9 @@ pika_help (const gchar *help_domain, G_TYPE_STRING, help_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-help", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-help", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikaimage.c b/libpika/pikaimage.c index f4ac2fd..0e55e4f 100644 --- a/libpika/pikaimage.c +++ b/libpika/pikaimage.c @@ -641,33 +641,25 @@ pika_image_set_colormap (PikaImage *image, * are returned in RGB[A] or GRAY[A] format. The bpp return value * gives the number of bytes per pixel in the image. * - * Returns: (array) (transfer full): the thumbnail data. + * Returns: (transfer full): the thumbnail data. **/ -guchar * +GBytes * pika_image_get_thumbnail_data (PikaImage *image, gint *width, gint *height, gint *bpp) { - gint ret_width; - gint ret_height; GBytes *image_bytes; - guchar *image_data; - gsize data_size; _pika_image_thumbnail (image, *width, *height, - &ret_width, - &ret_height, + width, + height, bpp, &image_bytes); - image_data = g_bytes_unref_to_data (image_bytes, &data_size); - *width = ret_width; - *height = ret_height; - - return image_data; + return image_bytes; } /** @@ -693,7 +685,8 @@ pika_image_get_thumbnail (PikaImage *image, gint thumb_width = width; gint thumb_height = height; gint thumb_bpp; - guchar *data; + GBytes *data; + gsize data_size; g_return_val_if_fail (width > 0 && width <= 1024, NULL); g_return_val_if_fail (height > 0 && height <= 1024, NULL); @@ -703,7 +696,7 @@ pika_image_get_thumbnail (PikaImage *image, &thumb_height, &thumb_bpp); if (data) - return _pika_pixbuf_from_data (data, + return _pika_pixbuf_from_data (g_bytes_unref_to_data (data, &data_size), thumb_width, thumb_height, thumb_bpp, alpha); else diff --git a/libpika/pikaimage.h b/libpika/pikaimage.h index 6291de4..06b61f8 100644 --- a/libpika/pikaimage.h +++ b/libpika/pikaimage.h @@ -65,7 +65,7 @@ gboolean pika_image_set_colormap (PikaImage *image, const guchar *colormap, gint num_colors); -guchar * pika_image_get_thumbnail_data (PikaImage *image, +GBytes * pika_image_get_thumbnail_data (PikaImage *image, gint *width, gint *height, gint *bpp); diff --git a/libpika/pikaimage_pdb.c b/libpika/pikaimage_pdb.c index b01d730..b67f27c 100644 --- a/libpika/pikaimage_pdb.c +++ b/libpika/pikaimage_pdb.c @@ -61,9 +61,9 @@ pika_image_id_is_valid (gint image_id) G_TYPE_INT, image_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-id-is-valid", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-id-is-valid", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -96,9 +96,9 @@ pika_get_images (gint *num_images) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-get-images", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-get-images", + args); pika_value_array_unref (args); *num_images = 0; @@ -150,9 +150,9 @@ pika_image_new (gint width, PIKA_TYPE_IMAGE_BASE_TYPE, type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -199,9 +199,9 @@ pika_image_new_with_precision (gint width, PIKA_TYPE_PRECISION, precision, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-new-with-precision", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-new-with-precision", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -234,9 +234,9 @@ pika_image_duplicate (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-duplicate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-duplicate", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -273,9 +273,9 @@ pika_image_delete (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-delete", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-delete", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -307,9 +307,9 @@ pika_image_get_base_type (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-base-type", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-base-type", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -343,9 +343,9 @@ pika_image_get_precision (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-precision", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-precision", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -379,9 +379,9 @@ pika_image_get_default_new_layer_mode (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-default-new-layer-mode", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-default-new-layer-mode", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -414,9 +414,9 @@ pika_image_get_width (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-width", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-width", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -449,9 +449,9 @@ pika_image_get_height (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-height", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-height", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -494,9 +494,9 @@ pika_image_get_layers (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-layers", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-layers", + args); pika_value_array_unref (args); *num_layers = 0; @@ -541,9 +541,9 @@ pika_image_get_channels (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-channels", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-channels", + args); pika_value_array_unref (args); *num_channels = 0; @@ -587,9 +587,9 @@ pika_image_get_vectors (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-vectors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-vectors", + args); pika_value_array_unref (args); *num_vectors = 0; @@ -629,9 +629,9 @@ pika_image_unset_active_channel (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-unset-active-channel", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-unset-active-channel", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -663,9 +663,9 @@ pika_image_get_floating_sel (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-floating-sel", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-floating-sel", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -700,9 +700,9 @@ pika_image_floating_sel_attached_to (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-floating-sel-attached-to", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-floating-sel-attached-to", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -772,9 +772,9 @@ pika_image_pick_color (PikaImage *image, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 2), PIKA_TYPE_ITEM, (GObject **) drawables, num_drawables); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-pick-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-pick-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -818,9 +818,9 @@ pika_image_pick_correlate_layer (PikaImage *image, G_TYPE_INT, y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-pick-correlate-layer", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-pick-correlate-layer", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -871,9 +871,9 @@ pika_image_insert_layer (PikaImage *image, G_TYPE_INT, position, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-insert-layer", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-insert-layer", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -911,9 +911,9 @@ pika_image_remove_layer (PikaImage *image, PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-remove-layer", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-remove-layer", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -952,9 +952,9 @@ pika_image_freeze_layers (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-freeze-layers", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-freeze-layers", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -991,9 +991,9 @@ pika_image_thaw_layers (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-thaw-layers", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-thaw-layers", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1038,9 +1038,9 @@ pika_image_insert_channel (PikaImage *image, G_TYPE_INT, position, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-insert-channel", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-insert-channel", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1075,9 +1075,9 @@ pika_image_remove_channel (PikaImage *image, PIKA_TYPE_CHANNEL, channel, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-remove-channel", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-remove-channel", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1117,9 +1117,9 @@ pika_image_freeze_channels (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-freeze-channels", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-freeze-channels", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1156,9 +1156,9 @@ pika_image_thaw_channels (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-thaw-channels", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-thaw-channels", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1203,9 +1203,9 @@ pika_image_insert_vectors (PikaImage *image, G_TYPE_INT, position, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-insert-vectors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-insert-vectors", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1242,9 +1242,9 @@ pika_image_remove_vectors (PikaImage *image, PIKA_TYPE_VECTORS, vectors, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-remove-vectors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-remove-vectors", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1284,9 +1284,9 @@ pika_image_freeze_vectors (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-freeze-vectors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-freeze-vectors", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1323,9 +1323,9 @@ pika_image_thaw_vectors (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-thaw-vectors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-thaw-vectors", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1364,9 +1364,9 @@ pika_image_get_item_position (PikaImage *image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-item-position", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-item-position", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1404,9 +1404,9 @@ pika_image_raise_item (PikaImage *image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-raise-item", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-raise-item", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1443,9 +1443,9 @@ pika_image_lower_item (PikaImage *image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-lower-item", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-lower-item", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1482,9 +1482,9 @@ pika_image_raise_item_to_top (PikaImage *image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-raise-item-to-top", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-raise-item-to-top", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1522,9 +1522,9 @@ pika_image_lower_item_to_bottom (PikaImage *image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-lower-item-to-bottom", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-lower-item-to-bottom", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1566,9 +1566,9 @@ pika_image_reorder_item (PikaImage *image, G_TYPE_INT, position, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-reorder-item", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-reorder-item", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1602,9 +1602,9 @@ pika_image_flatten (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-flatten", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-flatten", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1644,9 +1644,9 @@ pika_image_merge_visible_layers (PikaImage *image, PIKA_TYPE_MERGE_TYPE, merge_type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-merge-visible-layers", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-merge-visible-layers", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1690,9 +1690,9 @@ pika_image_merge_down (PikaImage *image, PIKA_TYPE_MERGE_TYPE, merge_type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-merge-down", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-merge-down", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1730,9 +1730,9 @@ pika_image_merge_layer_group (PikaImage *image, PIKA_TYPE_LAYER, layer_group, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-merge-layer-group", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-merge-layer-group", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1768,9 +1768,9 @@ _pika_image_get_colormap (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-colormap", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-colormap", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1809,9 +1809,9 @@ _pika_image_set_colormap (PikaImage *image, G_TYPE_BYTES, colormap, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-colormap", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-colormap", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1821,6 +1821,43 @@ _pika_image_set_colormap (PikaImage *image, return success; } +/** + * pika_image_get_palette: + * @image: The image. + * + * Returns the image's colormap + * + * This procedure returns the image's colormap as a PikaPalette. If the + * image is not in Indexed color mode, %NULL is returned. + * + * Returns: (transfer none): The image's colormap. + * + * Since: 3.0 + **/ +PikaPalette * +pika_image_get_palette (PikaImage *image) +{ + PikaValueArray *args; + PikaValueArray *return_vals; + PikaPalette *colormap = NULL; + + args = pika_value_array_new_from_types (NULL, + PIKA_TYPE_IMAGE, image, + G_TYPE_NONE); + + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-palette", + args); + pika_value_array_unref (args); + + if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) + colormap = PIKA_VALUES_GET_PALETTE (return_vals, 1); + + pika_value_array_unref (return_vals); + + return colormap; +} + /** * _pika_image_get_metadata: * @image: The image. @@ -1843,9 +1880,9 @@ _pika_image_get_metadata (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-metadata", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-metadata", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1880,9 +1917,9 @@ _pika_image_set_metadata (PikaImage *image, G_TYPE_STRING, metadata_string, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-metadata", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-metadata", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1918,9 +1955,9 @@ pika_image_clean_all (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-clean-all", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-clean-all", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1954,9 +1991,9 @@ pika_image_is_dirty (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-is-dirty", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-is-dirty", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2005,9 +2042,9 @@ _pika_image_thumbnail (PikaImage *image, G_TYPE_INT, height, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-thumbnail", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-thumbnail", + args); pika_value_array_unref (args); *actual_width = 0; @@ -2058,9 +2095,9 @@ pika_image_get_selected_layers (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-selected-layers", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-selected-layers", + args); pika_value_array_unref (args); *num_layers = 0; @@ -2109,9 +2146,9 @@ pika_image_set_selected_layers (PikaImage *image, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 2), PIKA_TYPE_LAYER, (GObject **) layers, num_layers); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-selected-layers", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-selected-layers", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2149,9 +2186,9 @@ pika_image_get_selected_channels (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-selected-channels", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-selected-channels", + args); pika_value_array_unref (args); *num_channels = 0; @@ -2200,9 +2237,9 @@ pika_image_set_selected_channels (PikaImage *image, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 2), PIKA_TYPE_CHANNEL, (GObject **) channels, num_channels); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-selected-channels", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-selected-channels", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2240,9 +2277,9 @@ pika_image_get_selected_vectors (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-selected-vectors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-selected-vectors", + args); pika_value_array_unref (args); *num_vectors = 0; @@ -2288,9 +2325,9 @@ pika_image_set_selected_vectors (PikaImage *image, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 2), PIKA_TYPE_VECTORS, (GObject **) vectors, num_vectors); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-selected-vectors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-selected-vectors", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2333,9 +2370,9 @@ pika_image_get_selected_drawables (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-selected-drawables", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-selected-drawables", + args); pika_value_array_unref (args); *num_drawables = 0; @@ -2373,9 +2410,9 @@ pika_image_get_selection (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-selection", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-selection", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2413,9 +2450,9 @@ pika_image_get_component_active (PikaImage *image, PIKA_TYPE_CHANNEL_TYPE, component, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-component-active", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-component-active", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2456,9 +2493,9 @@ pika_image_set_component_active (PikaImage *image, G_TYPE_BOOLEAN, active, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-component-active", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-component-active", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2496,9 +2533,9 @@ pika_image_get_component_visible (PikaImage *image, PIKA_TYPE_CHANNEL_TYPE, component, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-component-visible", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-component-visible", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2539,9 +2576,9 @@ pika_image_set_component_visible (PikaImage *image, G_TYPE_BOOLEAN, visible, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-component-visible", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-component-visible", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2580,9 +2617,9 @@ pika_image_get_file (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-file", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2620,9 +2657,9 @@ pika_image_set_file (PikaImage *image, G_TYPE_FILE, file, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-file", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2656,9 +2693,9 @@ pika_image_get_xcf_file (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-xcf-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-xcf-file", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2695,9 +2732,9 @@ pika_image_get_imported_file (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-imported-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-imported-file", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2733,9 +2770,9 @@ pika_image_get_exported_file (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-exported-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-exported-file", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2774,9 +2811,9 @@ pika_image_get_name (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2813,9 +2850,9 @@ pika_image_get_resolution (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-resolution", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-resolution", + args); pika_value_array_unref (args); *xresolution = 0.0; @@ -2863,9 +2900,9 @@ pika_image_set_resolution (PikaImage *image, G_TYPE_DOUBLE, yresolution, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-resolution", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-resolution", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2899,9 +2936,9 @@ pika_image_get_unit (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-unit", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-unit", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -2940,9 +2977,9 @@ pika_image_set_unit (PikaImage *image, PIKA_TYPE_UNIT, unit, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-unit", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-unit", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -2975,9 +3012,9 @@ pika_image_get_tattoo_state (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-tattoo-state", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-tattoo-state", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3023,9 +3060,9 @@ pika_image_set_tattoo_state (PikaImage *image, G_TYPE_UINT, tattoo_state, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-tattoo-state", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-tattoo-state", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3060,9 +3097,9 @@ pika_image_get_layer_by_tattoo (PikaImage *image, G_TYPE_UINT, tattoo, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-layer-by-tattoo", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-layer-by-tattoo", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3098,9 +3135,9 @@ pika_image_get_channel_by_tattoo (PikaImage *image, G_TYPE_UINT, tattoo, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-channel-by-tattoo", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-channel-by-tattoo", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3138,9 +3175,9 @@ pika_image_get_vectors_by_tattoo (PikaImage *image, G_TYPE_UINT, tattoo, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-vectors-by-tattoo", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-vectors-by-tattoo", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3178,9 +3215,9 @@ pika_image_get_layer_by_name (PikaImage *image, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-layer-by-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-layer-by-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3218,9 +3255,9 @@ pika_image_get_channel_by_name (PikaImage *image, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-channel-by-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-channel-by-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3258,9 +3295,9 @@ pika_image_get_vectors_by_name (PikaImage *image, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-vectors-by-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-vectors-by-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3298,9 +3335,9 @@ pika_image_attach_parasite (PikaImage *image, PIKA_TYPE_PARASITE, parasite, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-attach-parasite", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-attach-parasite", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3337,9 +3374,9 @@ pika_image_detach_parasite (PikaImage *image, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-detach-parasite", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-detach-parasite", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3376,9 +3413,9 @@ pika_image_get_parasite (PikaImage *image, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-parasite", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-parasite", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3416,9 +3453,9 @@ pika_image_get_parasite_list (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-parasite-list", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-parasite-list", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -3467,9 +3504,9 @@ pika_image_policy_rotate (PikaImage *image, G_TYPE_BOOLEAN, interactive, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-policy-rotate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-policy-rotate", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -3521,9 +3558,9 @@ pika_image_policy_color_profile (PikaImage *image, G_TYPE_BOOLEAN, interactive, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-policy-color-profile", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-policy-color-profile", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikaimage_pdb.h b/libpika/pikaimage_pdb.h index f88258b..82b4818 100644 --- a/libpika/pikaimage_pdb.h +++ b/libpika/pikaimage_pdb.h @@ -118,6 +118,7 @@ PikaLayer* pika_image_merge_layer_group (PikaImage G_GNUC_INTERNAL GBytes* _pika_image_get_colormap (PikaImage *image); G_GNUC_INTERNAL gboolean _pika_image_set_colormap (PikaImage *image, GBytes *colormap); +PikaPalette* pika_image_get_palette (PikaImage *image); G_GNUC_INTERNAL gchar* _pika_image_get_metadata (PikaImage *image); G_GNUC_INTERNAL gboolean _pika_image_set_metadata (PikaImage *image, const gchar *metadata_string); diff --git a/libpika/pikaimagecolorprofile_pdb.c b/libpika/pikaimagecolorprofile_pdb.c index 8e085de..19de30e 100644 --- a/libpika/pikaimagecolorprofile_pdb.c +++ b/libpika/pikaimagecolorprofile_pdb.c @@ -60,9 +60,9 @@ _pika_image_get_color_profile (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-color-profile", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-color-profile", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -100,9 +100,9 @@ _pika_image_get_effective_color_profile (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-effective-color-profile", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-effective-color-profile", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -143,9 +143,9 @@ _pika_image_set_color_profile (PikaImage *image, G_TYPE_BYTES, color_profile, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-color-profile", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-color-profile", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -186,9 +186,9 @@ pika_image_set_color_profile_from_file (PikaImage *image, G_TYPE_FILE, file, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-color-profile-from-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-color-profile-from-file", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -222,9 +222,9 @@ _pika_image_get_simulation_profile (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-simulation-profile", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-simulation-profile", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -263,9 +263,9 @@ _pika_image_set_simulation_profile (PikaImage *image, G_TYPE_BYTES, color_profile, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-simulation-profile", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-simulation-profile", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -303,9 +303,9 @@ pika_image_set_simulation_profile_from_file (PikaImage *image, G_TYPE_FILE, file, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-simulation-profile-from-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-simulation-profile-from-file", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -338,9 +338,9 @@ pika_image_get_simulation_intent (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-simulation-intent", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-simulation-intent", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -377,9 +377,9 @@ pika_image_set_simulation_intent (PikaImage *image, PIKA_TYPE_COLOR_RENDERING_INTENT, intent, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-simulation-intent", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-simulation-intent", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -414,9 +414,9 @@ pika_image_get_simulation_bpc (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-simulation-bpc", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-simulation-bpc", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -455,9 +455,9 @@ pika_image_set_simulation_bpc (PikaImage *image, G_TYPE_BOOLEAN, bpc, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-set-simulation-bpc", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-set-simulation-bpc", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -502,9 +502,9 @@ _pika_image_convert_color_profile (PikaImage *image, G_TYPE_BOOLEAN, bpc, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-convert-color-profile", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-convert-color-profile", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -549,9 +549,9 @@ pika_image_convert_color_profile_from_file (PikaImage *image, G_TYPE_BOOLEAN, bpc, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-convert-color-profile-from-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-convert-color-profile-from-file", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikaimageconvert_pdb.c b/libpika/pikaimageconvert_pdb.c index 4c10c20..29645f0 100644 --- a/libpika/pikaimageconvert_pdb.c +++ b/libpika/pikaimageconvert_pdb.c @@ -60,9 +60,9 @@ pika_image_convert_rgb (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-convert-rgb", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-convert-rgb", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -94,9 +94,9 @@ pika_image_convert_grayscale (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-convert-grayscale", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-convert-grayscale", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -157,9 +157,9 @@ pika_image_convert_indexed (PikaImage *image, G_TYPE_STRING, palette, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-convert-indexed", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-convert-indexed", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -199,9 +199,9 @@ pika_image_convert_set_dither_matrix (gint width, G_TYPE_BYTES, matrix, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-convert-set-dither-matrix", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-convert-set-dither-matrix", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -239,9 +239,9 @@ pika_image_convert_precision (PikaImage *image, PIKA_TYPE_PRECISION, precision, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-convert-precision", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-convert-precision", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikaimagegrid_pdb.c b/libpika/pikaimagegrid_pdb.c index 7394cfe..ab8f739 100644 --- a/libpika/pikaimagegrid_pdb.c +++ b/libpika/pikaimagegrid_pdb.c @@ -64,9 +64,9 @@ pika_image_grid_get_spacing (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-grid-get-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-grid-get-spacing", + args); pika_value_array_unref (args); *xspacing = 0.0; @@ -115,9 +115,9 @@ pika_image_grid_set_spacing (PikaImage *image, G_TYPE_DOUBLE, yspacing, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-grid-set-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-grid-set-spacing", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -155,9 +155,9 @@ pika_image_grid_get_offset (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-grid-get-offset", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-grid-get-offset", + args); pika_value_array_unref (args); *xoffset = 0.0; @@ -206,9 +206,9 @@ pika_image_grid_set_offset (PikaImage *image, G_TYPE_DOUBLE, yoffset, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-grid-set-offset", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-grid-set-offset", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -243,9 +243,9 @@ pika_image_grid_get_foreground_color (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-grid-get-foreground-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-grid-get-foreground-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -284,9 +284,9 @@ pika_image_grid_set_foreground_color (PikaImage *image, PIKA_TYPE_RGB, fgcolor, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-grid-set-foreground-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-grid-set-foreground-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -321,9 +321,9 @@ pika_image_grid_get_background_color (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-grid-get-background-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-grid-get-background-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -362,9 +362,9 @@ pika_image_grid_set_background_color (PikaImage *image, PIKA_TYPE_RGB, bgcolor, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-grid-set-background-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-grid-set-background-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -397,9 +397,9 @@ pika_image_grid_get_style (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-grid-get-style", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-grid-get-style", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -437,9 +437,9 @@ pika_image_grid_set_style (PikaImage *image, PIKA_TYPE_GRID_STYLE, style, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-grid-set-style", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-grid-set-style", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikaimageguides_pdb.c b/libpika/pikaimageguides_pdb.c index 2954cb7..5d9e52d 100644 --- a/libpika/pikaimageguides_pdb.c +++ b/libpika/pikaimageguides_pdb.c @@ -62,9 +62,9 @@ pika_image_add_hguide (PikaImage *image, G_TYPE_INT, yposition, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-add-hguide", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-add-hguide", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -101,9 +101,9 @@ pika_image_add_vguide (PikaImage *image, G_TYPE_INT, xposition, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-add-vguide", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-add-vguide", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -139,9 +139,9 @@ pika_image_delete_guide (PikaImage *image, G_TYPE_UINT, guide, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-delete-guide", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-delete-guide", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -179,9 +179,9 @@ pika_image_find_next_guide (PikaImage *image, G_TYPE_UINT, guide, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-find-next-guide", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-find-next-guide", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -217,9 +217,9 @@ pika_image_get_guide_orientation (PikaImage *image, G_TYPE_UINT, guide, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-guide-orientation", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-guide-orientation", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -255,9 +255,9 @@ pika_image_get_guide_position (PikaImage *image, G_TYPE_UINT, guide, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-guide-position", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-guide-position", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikaimagemetadata-save.c b/libpika/pikaimagemetadata-save.c index 8efb000..9a6faa4 100644 --- a/libpika/pikaimagemetadata-save.c +++ b/libpika/pikaimagemetadata-save.c @@ -887,6 +887,11 @@ pika_image_metadata_save_filter (PikaImage *image, thumbw = EXIF_THUMBNAIL_SIZE * image_width / image_height; } + /* TODO: currently our exported thumbnails are always RGB because + * GdkPixbuf only supports RGB so far. While RGB thumbnail may make sense, + * even for CMYK images or other color spaces, grayscale images would be + * better served with a grayscale thumbnail too. + */ thumb_pixbuf = pika_image_get_thumbnail (image, thumbw, thumbh, PIKA_PIXBUF_KEEP_ALPHA); diff --git a/libpika/pikaimagemetadata.c b/libpika/pikaimagemetadata.c index 2b77635..6a31c85 100644 --- a/libpika/pikaimagemetadata.c +++ b/libpika/pikaimagemetadata.c @@ -121,7 +121,6 @@ pika_image_metadata_load_finish (PikaImage *image, PikaMetadataLoadFlags flags) { g_return_if_fail (PIKA_IS_IMAGE (image)); - g_return_if_fail (mime_type != NULL); g_return_if_fail (GEXIV2_IS_METADATA (metadata)); if (flags & PIKA_METADATA_LOAD_COMMENT) diff --git a/libpika/pikaimageprocedure.c b/libpika/pikaimageprocedure.c index d46b62a..d864852 100644 --- a/libpika/pikaimageprocedure.c +++ b/libpika/pikaimageprocedure.c @@ -26,7 +26,11 @@ #include "pika.h" +#include "libpikabase/pikawire.h" /* FIXME kill this include */ + #include "pikaimageprocedure.h" +#include "pikaplugin-private.h" +#include "pikaprocedureconfig-private.h" /** @@ -148,14 +152,17 @@ static PikaValueArray * pika_image_procedure_run (PikaProcedure *procedure, const PikaValueArray *args) { - PikaImageProcedure *image_proc = PIKA_IMAGE_PROCEDURE (procedure); - PikaValueArray *remaining; - PikaValueArray *return_values; - PikaRunMode run_mode; - PikaImage *image; - PikaDrawable **drawables; - gint n_drawables; - gint i; + PikaPlugIn *plug_in; + PikaImageProcedure *image_proc = PIKA_IMAGE_PROCEDURE (procedure); + PikaPDBStatusType status = PIKA_PDB_EXECUTION_ERROR; + PikaProcedureConfig *config; + PikaValueArray *remaining; + PikaValueArray *return_values; + PikaRunMode run_mode; + PikaImage *image; + PikaDrawable **drawables; + gint n_drawables; + gint i; run_mode = PIKA_VALUES_GET_ENUM (args, 0); image = PIKA_VALUES_GET_IMAGE (args, 1); @@ -171,12 +178,32 @@ pika_image_procedure_run (PikaProcedure *procedure, pika_value_array_append (remaining, value); } + config = pika_procedure_create_config (procedure); + _pika_procedure_config_begin_run (config, image, run_mode, remaining); + return_values = image_proc->priv->run_func (procedure, run_mode, image, n_drawables, drawables, - remaining, + config, image_proc->priv->run_data); + if (return_values != NULL && + pika_value_array_length (return_values) > 0 && + G_VALUE_HOLDS_ENUM (pika_value_array_index (return_values, 0))) + status = PIKA_VALUES_GET_ENUM (return_values, 0); + + _pika_procedure_config_end_run (config, status); + + /* This is debug printing to help plug-in developers figure out best + * practices. + */ + plug_in = pika_procedure_get_plug_in (procedure); + if (G_OBJECT (config)->ref_count > 1 && + _pika_plug_in_manage_memory_manually (plug_in)) + g_printerr ("%s: ERROR: the PikaProcedureConfig object was refed " + "by plug-in, it MUST NOT do that!\n", G_STRFUNC); + + g_object_unref (config); pika_value_array_unref (remaining); return return_values; @@ -242,7 +269,7 @@ pika_image_procedure_set_sensitivity (PikaProcedure *procedure, * * Since: 3.0 **/ -PikaProcedure * +PikaProcedure * pika_image_procedure_new (PikaPlugIn *plug_in, const gchar *name, PikaPDBProcType proc_type, diff --git a/libpika/pikaimageprocedure.h b/libpika/pikaimageprocedure.h index b28839f..d55d46f 100644 --- a/libpika/pikaimageprocedure.h +++ b/libpika/pikaimageprocedure.h @@ -40,7 +40,7 @@ G_BEGIN_DECLS * @image: the #PikaImage. * @n_drawables: the number of #PikaDrawable-s. * @drawables: (array length=n_drawables): the input #PikaDrawable-s. - * @args: the @procedure's remaining arguments. + * @config: the @procedure's remaining arguments. * @run_data: (closure): the run_data given in pika_image_procedure_new(). * * The image function is run during the lifetime of the PIKA session, @@ -55,7 +55,7 @@ typedef PikaValueArray * (* PikaRunImageFunc) (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); diff --git a/libpika/pikaimagesamplepoints_pdb.c b/libpika/pikaimagesamplepoints_pdb.c index 417def9..27a2b1a 100644 --- a/libpika/pikaimagesamplepoints_pdb.c +++ b/libpika/pikaimagesamplepoints_pdb.c @@ -67,9 +67,9 @@ pika_image_add_sample_point (PikaImage *image, G_TYPE_INT, position_y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-add-sample-point", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-add-sample-point", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -107,9 +107,9 @@ pika_image_delete_sample_point (PikaImage *image, G_TYPE_UINT, sample_point, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-delete-sample-point", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-delete-sample-point", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -150,9 +150,9 @@ pika_image_find_next_sample_point (PikaImage *image, G_TYPE_UINT, sample_point, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-find-next-sample-point", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-find-next-sample-point", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -193,9 +193,9 @@ pika_image_get_sample_point_position (PikaImage *image, G_TYPE_UINT, sample_point, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-get-sample-point-position", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-get-sample-point-position", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikaimageselect_pdb.c b/libpika/pikaimageselect_pdb.c index cc8875a..ba6659b 100644 --- a/libpika/pikaimageselect_pdb.c +++ b/libpika/pikaimageselect_pdb.c @@ -84,9 +84,9 @@ pika_image_select_color (PikaImage *image, PIKA_TYPE_RGB, color, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-select-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-select-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -156,9 +156,9 @@ pika_image_select_contiguous_color (PikaImage *image, G_TYPE_DOUBLE, y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-select-contiguous-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-select-contiguous-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -211,9 +211,9 @@ pika_image_select_rectangle (PikaImage *image, G_TYPE_DOUBLE, height, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-select-rectangle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-select-rectangle", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -275,9 +275,9 @@ pika_image_select_round_rectangle (PikaImage *image, G_TYPE_DOUBLE, corner_radius_y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-select-round-rectangle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-select-round-rectangle", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -331,9 +331,9 @@ pika_image_select_ellipse (PikaImage *image, G_TYPE_DOUBLE, height, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-select-ellipse", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-select-ellipse", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -387,9 +387,9 @@ pika_image_select_polygon (PikaImage *image, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 3), segs, num_segs); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-select-polygon", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-select-polygon", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -435,9 +435,9 @@ pika_image_select_item (PikaImage *image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-select-item", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-select-item", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikaimagetransform_pdb.c b/libpika/pikaimagetransform_pdb.c index f9cb3e6..7b73199 100644 --- a/libpika/pikaimagetransform_pdb.c +++ b/libpika/pikaimagetransform_pdb.c @@ -75,9 +75,9 @@ pika_image_resize (PikaImage *image, G_TYPE_INT, offy, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-resize", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-resize", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -113,9 +113,9 @@ pika_image_resize_to_layers (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-resize-to-layers", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-resize-to-layers", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -156,9 +156,9 @@ pika_image_scale (PikaImage *image, G_TYPE_INT, new_height, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-scale", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-scale", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -206,9 +206,9 @@ pika_image_crop (PikaImage *image, G_TYPE_INT, offy, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-crop", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-crop", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -242,9 +242,9 @@ pika_image_flip (PikaImage *image, PIKA_TYPE_ORIENTATION_TYPE, flip_type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-flip", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-flip", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -278,9 +278,9 @@ pika_image_rotate (PikaImage *image, PIKA_TYPE_ROTATION_TYPE, rotate_type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-rotate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-rotate", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikaimageundo_pdb.c b/libpika/pikaimageundo_pdb.c index e89f429..637274d 100644 --- a/libpika/pikaimageundo_pdb.c +++ b/libpika/pikaimageundo_pdb.c @@ -60,9 +60,9 @@ pika_image_undo_group_start (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-undo-group-start", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-undo-group-start", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -94,9 +94,9 @@ pika_image_undo_group_end (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-undo-group-end", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-undo-group-end", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -130,9 +130,9 @@ pika_image_undo_is_enabled (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-undo-is-enabled", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-undo-is-enabled", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -168,9 +168,9 @@ pika_image_undo_disable (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-undo-disable", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-undo-disable", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -205,9 +205,9 @@ pika_image_undo_enable (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-undo-enable", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-undo-enable", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -249,9 +249,9 @@ pika_image_undo_freeze (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-undo-freeze", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-undo-freeze", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -292,9 +292,9 @@ pika_image_undo_thaw (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-image-undo-thaw", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-image-undo-thaw", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikaitem_pdb.c b/libpika/pikaitem_pdb.c index ef1e63b..42cbed9 100644 --- a/libpika/pikaitem_pdb.c +++ b/libpika/pikaitem_pdb.c @@ -60,9 +60,9 @@ pika_item_id_is_valid (gint item_id) G_TYPE_INT, item_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-id-is-valid", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-id-is-valid", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -96,9 +96,9 @@ pika_item_id_is_drawable (gint item_id) G_TYPE_INT, item_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-id-is-drawable", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-id-is-drawable", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -132,9 +132,9 @@ pika_item_id_is_layer (gint item_id) G_TYPE_INT, item_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-id-is-layer", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-id-is-layer", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -169,9 +169,9 @@ pika_item_id_is_text_layer (gint item_id) G_TYPE_INT, item_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-id-is-text-layer", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-id-is-text-layer", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -205,9 +205,9 @@ pika_item_id_is_channel (gint item_id) G_TYPE_INT, item_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-id-is-channel", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-id-is-channel", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -242,9 +242,9 @@ pika_item_id_is_layer_mask (gint item_id) G_TYPE_INT, item_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-id-is-layer-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-id-is-layer-mask", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -278,9 +278,9 @@ pika_item_id_is_selection (gint item_id) G_TYPE_INT, item_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-id-is-selection", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-id-is-selection", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -314,9 +314,9 @@ pika_item_id_is_vectors (gint item_id) G_TYPE_INT, item_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-id-is-vectors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-id-is-vectors", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -350,9 +350,9 @@ pika_item_get_image (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-image", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-image", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -390,9 +390,9 @@ pika_item_delete (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-delete", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-delete", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -426,9 +426,9 @@ pika_item_is_group (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-is-group", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-is-group", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -462,9 +462,9 @@ pika_item_get_parent (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-parent", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-parent", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -503,9 +503,9 @@ pika_item_get_children (PikaItem *item, PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-children", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-children", + args); pika_value_array_unref (args); *num_children = 0; @@ -544,9 +544,9 @@ pika_item_get_expanded (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-expanded", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-expanded", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -583,9 +583,9 @@ pika_item_set_expanded (PikaItem *item, G_TYPE_BOOLEAN, expanded, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-set-expanded", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-set-expanded", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -619,9 +619,9 @@ pika_item_get_name (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -658,9 +658,9 @@ pika_item_set_name (PikaItem *item, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-set-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-set-name", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -693,9 +693,9 @@ pika_item_get_visible (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-visible", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-visible", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -732,9 +732,9 @@ pika_item_set_visible (PikaItem *item, G_TYPE_BOOLEAN, visible, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-set-visible", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-set-visible", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -767,9 +767,9 @@ pika_item_get_lock_content (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-lock-content", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-lock-content", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -806,9 +806,9 @@ pika_item_set_lock_content (PikaItem *item, G_TYPE_BOOLEAN, lock_content, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-set-lock-content", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-set-lock-content", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -841,9 +841,9 @@ pika_item_get_lock_position (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-lock-position", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-lock-position", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -880,9 +880,9 @@ pika_item_set_lock_position (PikaItem *item, G_TYPE_BOOLEAN, lock_position, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-set-lock-position", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-set-lock-position", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -915,9 +915,9 @@ pika_item_get_lock_visibility (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-lock-visibility", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-lock-visibility", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -954,9 +954,9 @@ pika_item_set_lock_visibility (PikaItem *item, G_TYPE_BOOLEAN, lock_visibility, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-set-lock-visibility", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-set-lock-visibility", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -989,9 +989,9 @@ pika_item_get_color_tag (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-color-tag", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-color-tag", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1028,9 +1028,9 @@ pika_item_set_color_tag (PikaItem *item, PIKA_TYPE_COLOR_TAG, color_tag, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-set-color-tag", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-set-color-tag", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1065,9 +1065,9 @@ pika_item_get_tattoo (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-tattoo", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-tattoo", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1106,9 +1106,9 @@ pika_item_set_tattoo (PikaItem *item, G_TYPE_UINT, tattoo, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-set-tattoo", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-set-tattoo", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1145,9 +1145,9 @@ pika_item_attach_parasite (PikaItem *item, PIKA_TYPE_PARASITE, parasite, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-attach-parasite", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-attach-parasite", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1184,9 +1184,9 @@ pika_item_detach_parasite (PikaItem *item, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-detach-parasite", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-detach-parasite", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1222,9 +1222,9 @@ pika_item_get_parasite (PikaItem *item, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-parasite", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-parasite", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1260,9 +1260,9 @@ pika_item_get_parasite_list (PikaItem *item) PIKA_TYPE_ITEM, item, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-get-parasite-list", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-get-parasite-list", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikaitemtransform_pdb.c b/libpika/pikaitemtransform_pdb.c index 88cf095..a54267b 100644 --- a/libpika/pikaitemtransform_pdb.c +++ b/libpika/pikaitemtransform_pdb.c @@ -68,9 +68,9 @@ pika_item_transform_translate (PikaItem *item, G_TYPE_DOUBLE, off_y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-transform-translate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-transform-translate", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -128,9 +128,9 @@ pika_item_transform_flip_simple (PikaItem *item, G_TYPE_DOUBLE, axis, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-transform-flip-simple", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-transform-flip-simple", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -191,9 +191,9 @@ pika_item_transform_flip (PikaItem *item, G_TYPE_DOUBLE, y1, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-transform-flip", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-transform-flip", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -275,9 +275,9 @@ pika_item_transform_perspective (PikaItem *item, G_TYPE_DOUBLE, y3, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-transform-perspective", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-transform-perspective", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -341,9 +341,9 @@ pika_item_transform_rotate_simple (PikaItem *item, G_TYPE_DOUBLE, center_y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-transform-rotate-simple", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-transform-rotate-simple", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -409,9 +409,9 @@ pika_item_transform_rotate (PikaItem *item, G_TYPE_DOUBLE, center_y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-transform-rotate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-transform-rotate", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -474,9 +474,9 @@ pika_item_transform_scale (PikaItem *item, G_TYPE_DOUBLE, y1, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-transform-scale", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-transform-scale", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -535,9 +535,9 @@ pika_item_transform_shear (PikaItem *item, G_TYPE_DOUBLE, magnitude, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-transform-shear", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-transform-shear", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -612,9 +612,9 @@ pika_item_transform_2d (PikaItem *item, G_TYPE_DOUBLE, dest_y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-transform-2d", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-transform-2d", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -693,9 +693,9 @@ pika_item_transform_matrix (PikaItem *item, G_TYPE_DOUBLE, coeff_2_2, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-item-transform-matrix", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-item-transform-matrix", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikalayer_pdb.c b/libpika/pikalayer_pdb.c index 4d29955..deb6a61 100644 --- a/libpika/pikalayer_pdb.c +++ b/libpika/pikalayer_pdb.c @@ -80,9 +80,9 @@ _pika_layer_new (PikaImage *image, PIKA_TYPE_LAYER_MODE, mode, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -126,9 +126,9 @@ pika_layer_new_from_visible (PikaImage *image, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-new-from-visible", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-new-from-visible", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -167,9 +167,9 @@ pika_layer_new_from_drawable (PikaDrawable *drawable, PIKA_TYPE_IMAGE, dest_image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-new-from-drawable", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-new-from-drawable", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -209,9 +209,9 @@ pika_layer_group_new (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-group-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-group-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -251,9 +251,9 @@ _pika_layer_copy (PikaLayer *layer, G_TYPE_BOOLEAN, add_alpha, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-copy", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-copy", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -289,9 +289,9 @@ pika_layer_add_alpha (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-add-alpha", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-add-alpha", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -327,9 +327,9 @@ pika_layer_flatten (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-flatten", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-flatten", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -374,9 +374,9 @@ pika_layer_scale (PikaLayer *layer, G_TYPE_BOOLEAN, local_origin, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-scale", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-scale", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -422,9 +422,9 @@ pika_layer_resize (PikaLayer *layer, G_TYPE_INT, offy, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-resize", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-resize", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -456,9 +456,9 @@ pika_layer_resize_to_image_size (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-resize-to-image-size", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-resize-to-image-size", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -497,9 +497,9 @@ pika_layer_set_offsets (PikaLayer *layer, G_TYPE_INT, offy, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-set-offsets", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-set-offsets", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -552,9 +552,9 @@ pika_layer_create_mask (PikaLayer *layer, PIKA_TYPE_ADD_MASK_TYPE, mask_type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-create-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-create-mask", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -587,9 +587,9 @@ pika_layer_get_mask (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-get-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-get-mask", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -624,9 +624,9 @@ pika_layer_from_mask (PikaLayerMask *mask) PIKA_TYPE_LAYER_MASK, mask, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-from-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-from-mask", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -667,9 +667,9 @@ pika_layer_add_mask (PikaLayer *layer, PIKA_TYPE_LAYER_MASK, mask, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-add-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-add-mask", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -704,9 +704,9 @@ pika_layer_remove_mask (PikaLayer *layer, PIKA_TYPE_MASK_APPLY_MODE, mode, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-remove-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-remove-mask", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -739,9 +739,9 @@ pika_layer_is_floating_sel (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-is-floating-sel", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-is-floating-sel", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -774,9 +774,9 @@ pika_layer_get_lock_alpha (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-get-lock-alpha", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-get-lock-alpha", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -812,9 +812,9 @@ pika_layer_set_lock_alpha (PikaLayer *layer, G_TYPE_BOOLEAN, lock_alpha, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-set-lock-alpha", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-set-lock-alpha", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -847,9 +847,9 @@ pika_layer_get_apply_mask (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-get-apply-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-get-apply-mask", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -887,9 +887,9 @@ pika_layer_set_apply_mask (PikaLayer *layer, G_TYPE_BOOLEAN, apply_mask, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-set-apply-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-set-apply-mask", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -923,9 +923,9 @@ pika_layer_get_show_mask (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-get-show-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-get-show-mask", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -963,9 +963,9 @@ pika_layer_set_show_mask (PikaLayer *layer, G_TYPE_BOOLEAN, show_mask, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-set-show-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-set-show-mask", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -998,9 +998,9 @@ pika_layer_get_edit_mask (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-get-edit-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-get-edit-mask", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1038,9 +1038,9 @@ pika_layer_set_edit_mask (PikaLayer *layer, G_TYPE_BOOLEAN, edit_mask, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-set-edit-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-set-edit-mask", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1071,9 +1071,9 @@ pika_layer_get_opacity (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-get-opacity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-get-opacity", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1108,9 +1108,9 @@ pika_layer_set_opacity (PikaLayer *layer, G_TYPE_DOUBLE, opacity, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-set-opacity", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-set-opacity", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1141,9 +1141,9 @@ pika_layer_get_mode (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-get-mode", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-get-mode", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1178,9 +1178,9 @@ pika_layer_set_mode (PikaLayer *layer, PIKA_TYPE_LAYER_MODE, mode, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-set-mode", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-set-mode", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1213,9 +1213,9 @@ pika_layer_get_blend_space (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-get-blend-space", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-get-blend-space", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1252,9 +1252,9 @@ pika_layer_set_blend_space (PikaLayer *layer, PIKA_TYPE_LAYER_COLOR_SPACE, blend_space, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-set-blend-space", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-set-blend-space", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1287,9 +1287,9 @@ pika_layer_get_composite_space (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-get-composite-space", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-get-composite-space", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1326,9 +1326,9 @@ pika_layer_set_composite_space (PikaLayer *layer, PIKA_TYPE_LAYER_COLOR_SPACE, composite_space, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-set-composite-space", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-set-composite-space", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1361,9 +1361,9 @@ pika_layer_get_composite_mode (PikaLayer *layer) PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-get-composite-mode", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-get-composite-mode", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1400,9 +1400,9 @@ pika_layer_set_composite_mode (PikaLayer *layer, PIKA_TYPE_LAYER_COMPOSITE_MODE, composite_mode, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-layer-set-composite-mode", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-layer-set-composite-mode", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikaloadprocedure.c b/libpika/pikaloadprocedure.c index 5e4bfa5..6c6e00e 100644 --- a/libpika/pikaloadprocedure.c +++ b/libpika/pikaloadprocedure.c @@ -26,8 +26,14 @@ #include "pika.h" +#include "libpikabase/pikawire.h" /* FIXME kill this include */ + #include "pikaloadprocedure.h" #include "pikapdb_pdb.h" +#include "pikaplugin-private.h" +#include "pikaprocedureconfig-private.h" + +#include "libpika-intl.h" /** @@ -178,12 +184,19 @@ static PikaValueArray * pika_load_procedure_run (PikaProcedure *procedure, const PikaValueArray *args) { - PikaLoadProcedure *load_proc = PIKA_LOAD_PROCEDURE (procedure); - PikaValueArray *remaining; - PikaValueArray *return_values; - PikaRunMode run_mode; - GFile *file; - gint i; + PikaPlugIn *plug_in; + PikaLoadProcedure *load_proc = PIKA_LOAD_PROCEDURE (procedure); + PikaValueArray *remaining; + PikaValueArray *return_values; + PikaProcedureConfig *config; + PikaImage *image = NULL; + PikaMetadata *metadata = NULL; + gchar *mimetype = NULL; + PikaMetadataLoadFlags flags = PIKA_METADATA_LOAD_ALL; + PikaPDBStatusType status = PIKA_PDB_EXECUTION_ERROR; + PikaRunMode run_mode; + GFile *file; + gint i; run_mode = PIKA_VALUES_GET_ENUM (args, 0); file = PIKA_VALUES_GET_FILE (args, 1); @@ -197,12 +210,89 @@ pika_load_procedure_run (PikaProcedure *procedure, pika_value_array_append (remaining, value); } + config = pika_procedure_create_config (procedure); + mimetype = (gchar *) pika_file_procedure_get_mime_types (PIKA_FILE_PROCEDURE (procedure)); + + if (mimetype != NULL) + { + char *delim; + + mimetype = g_strdup (mimetype); + mimetype = g_strstrip (mimetype); + delim = strstr (mimetype, ","); + if (delim) + *delim = '\0'; + /* Though docs only writes about the list being comma-separated, our + * code apparently also split by spaces. + */ + delim = strstr (mimetype, " "); + if (delim) + *delim = '\0'; + delim = strstr (mimetype, "\t"); + if (delim) + *delim = '\0'; + + metadata = pika_metadata_load_from_file (file, NULL); + g_free (mimetype); + } + else + { + flags = PIKA_METADATA_LOAD_NONE; + } + + if (metadata == NULL) + metadata = pika_metadata_new (); + + _pika_procedure_config_begin_run (config, image, run_mode, remaining); + return_values = load_proc->priv->run_func (procedure, run_mode, file, - remaining, + metadata, &flags, + config, load_proc->priv->run_data); + if (return_values != NULL && + pika_value_array_length (return_values) > 0 && + G_VALUE_HOLDS_ENUM (pika_value_array_index (return_values, 0))) + status = PIKA_VALUES_GET_ENUM (return_values, 0); + + _pika_procedure_config_end_run (config, status); + + if (status == PIKA_PDB_SUCCESS) + { + if (pika_value_array_length (return_values) < 2 || + ! PIKA_VALUE_HOLDS_IMAGE (pika_value_array_index (return_values, 1))) + { + GError *error = NULL; + + status = PIKA_PDB_EXECUTION_ERROR; + g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, + _("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.")); + pika_value_array_unref (return_values); + return_values = pika_procedure_new_return_values (procedure, status, error); + } + else + { + image = PIKA_VALUES_GET_IMAGE (return_values, 1); + } + } + + if (image != NULL && metadata != NULL && flags != PIKA_METADATA_LOAD_NONE) + pika_image_metadata_load_finish (image, NULL, metadata, flags); + + /* This is debug printing to help plug-in developers figure out best + * practices. + */ + plug_in = pika_procedure_get_plug_in (procedure); + if (G_OBJECT (config)->ref_count > 1 && + _pika_plug_in_manage_memory_manually (plug_in)) + g_printerr ("%s: ERROR: the PikaSaveProcedureConfig object was refed " + "by plug-in, it MUST NOT do that!\n", G_STRFUNC); + + g_object_unref (config); + g_clear_object (&metadata); pika_value_array_unref (remaining); return return_values; diff --git a/libpika/pikaloadprocedure.h b/libpika/pikaloadprocedure.h index bf706b7..629c63d 100644 --- a/libpika/pikaloadprocedure.h +++ b/libpika/pikaloadprocedure.h @@ -35,24 +35,36 @@ G_BEGIN_DECLS /** * PikaRunLoadFunc: - * @procedure: the #PikaProcedure that runs. - * @run_mode: the #PikaRunMode. - * @file: the #GFile to load from. - * @args: the @procedure's remaining arguments. + * @procedure: the [class@Gimp.Procedure] that runs. + * @run_mode: the [enum@RunMode]. + * @file: the [iface@Gio.File] to load from. + * @metadata: the [class@Gimp.Metadata] which will be added to the new image. + * @flags: (inout): flags to filter which metadata will be added.. + * @config: the @procedure's remaining arguments. * @run_data: (closure): the run_data given in pika_load_procedure_new(). * - * The load function is run during the lifetime of the PIKA session, - * each time a plug-in load procedure is called. + * The load function is run during the lifetime of the PIKA session, each time a + * plug-in load procedure is called. + * + * You are expected to read @file and create a [class@Gimp.Image] out of its + * data. This image will be the first return value. + * @metadata will be filled from metadata from @file if our infrastructure + * supports this format. You may tweak this object, for instance adding metadata + * specific to the format. You can also edit @flags if you need to filter out + * some specific common fields. For instance, it is customary to remove a + * colorspace field with [flags@MetadataLoadFlags] when a profile was added. * * Returns: (transfer full): the @procedure's return values. * * Since: 3.0 **/ -typedef PikaValueArray * (* PikaRunLoadFunc) (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +typedef PikaValueArray * (* PikaRunLoadFunc) (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); #define PIKA_TYPE_LOAD_PROCEDURE (pika_load_procedure_get_type ()) diff --git a/libpika/pikamessage_pdb.c b/libpika/pikamessage_pdb.c index 8bf05a5..f66311f 100644 --- a/libpika/pikamessage_pdb.c +++ b/libpika/pikamessage_pdb.c @@ -58,9 +58,9 @@ pika_message (const gchar *message) G_TYPE_STRING, message, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-message", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-message", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -91,9 +91,9 @@ pika_message_get_handler (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-message-get-handler", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-message-get-handler", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -127,9 +127,9 @@ pika_message_set_handler (PikaMessageHandlerType handler) PIKA_TYPE_MESSAGE_HANDLER_TYPE, handler, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-message-set-handler", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-message-set-handler", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikapainttools_pdb.c b/libpika/pikapainttools_pdb.c index 5f76b3b..c344e3c 100644 --- a/libpika/pikapainttools_pdb.c +++ b/libpika/pikapainttools_pdb.c @@ -71,9 +71,9 @@ pika_airbrush (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 3), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-airbrush", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-airbrush", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -115,9 +115,9 @@ pika_airbrush_default (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-airbrush-default", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-airbrush-default", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -178,9 +178,9 @@ pika_clone (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 6), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-clone", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-clone", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -223,9 +223,9 @@ pika_clone_default (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-clone-default", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-clone-default", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -272,9 +272,9 @@ pika_convolve (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 4), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-convolve", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-convolve", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -316,9 +316,9 @@ pika_convolve_default (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-convolve-default", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-convolve-default", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -365,9 +365,9 @@ pika_dodgeburn (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 5), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-dodgeburn", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-dodgeburn", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -408,9 +408,9 @@ pika_dodgeburn_default (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-dodgeburn-default", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-dodgeburn-default", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -458,9 +458,9 @@ pika_eraser (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-eraser", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-eraser", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -502,9 +502,9 @@ pika_eraser_default (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-eraser-default", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-eraser-default", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -558,9 +558,9 @@ pika_heal (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 5), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-heal", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-heal", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -605,9 +605,9 @@ pika_heal_default (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-heal-default", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-heal-default", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -663,9 +663,9 @@ pika_paintbrush (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 3), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-paintbrush", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-paintbrush", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -716,9 +716,9 @@ pika_paintbrush_default (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-paintbrush-default", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-paintbrush-default", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -761,9 +761,9 @@ pika_pencil (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pencil", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pencil", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -806,9 +806,9 @@ pika_smudge (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 3), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-smudge", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-smudge", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -849,9 +849,9 @@ pika_smudge_default (PikaDrawable *drawable, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 2), strokes, num_strokes); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-smudge-default", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-smudge-default", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikapalette_pdb.c b/libpika/pikapalette_pdb.c index 92c8a8d..af1b698 100644 --- a/libpika/pikapalette_pdb.c +++ b/libpika/pikapalette_pdb.c @@ -62,9 +62,9 @@ pika_palette_new (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -98,9 +98,9 @@ pika_palette_get_by_name (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-get-by-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-get-by-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -134,9 +134,9 @@ pika_palette_get_color_count (PikaPalette *palette) PIKA_TYPE_PALETTE, palette, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-get-color-count", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-get-color-count", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -174,9 +174,9 @@ pika_palette_get_colors (PikaPalette *palette, PIKA_TYPE_PALETTE, palette, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-get-colors", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-get-colors", + args); pika_value_array_unref (args); *num_colors = 0; @@ -215,9 +215,9 @@ pika_palette_get_columns (PikaPalette *palette) PIKA_TYPE_PALETTE, palette, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-get-columns", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-get-columns", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -256,9 +256,9 @@ pika_palette_set_columns (PikaPalette *palette, G_TYPE_INT, columns, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-set-columns", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-set-columns", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -302,9 +302,9 @@ pika_palette_add_entry (PikaPalette *palette, PIKA_TYPE_RGB, color, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-add-entry", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-add-entry", + args); pika_value_array_unref (args); *entry_num = 0; @@ -326,8 +326,10 @@ pika_palette_add_entry (PikaPalette *palette, * * Deletes an entry from the palette. * - * Deletes an entry from the palette. Returns an error if the index is - * out or range. Returns an error if the palette is not editable. + * This function will fail and return %FALSE if the index is out or + * range or if the palette is not editable. + * Additionally if the palette belongs to an indexed image, it will + * only be possible to delete palette colors not in use in the image. * * Returns: TRUE on success. * @@ -346,9 +348,9 @@ pika_palette_delete_entry (PikaPalette *palette, G_TYPE_INT, entry_num, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-delete-entry", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-delete-entry", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -387,9 +389,9 @@ pika_palette_entry_get_color (PikaPalette *palette, G_TYPE_INT, entry_num, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-entry-get-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-entry-get-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -433,9 +435,9 @@ pika_palette_entry_set_color (PikaPalette *palette, PIKA_TYPE_RGB, color, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-entry-set-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-entry-set-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -474,9 +476,9 @@ pika_palette_entry_get_name (PikaPalette *palette, G_TYPE_INT, entry_num, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-entry-get-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-entry-get-name", + args); pika_value_array_unref (args); *entry_name = NULL; @@ -522,9 +524,9 @@ pika_palette_entry_set_name (PikaPalette *palette, G_TYPE_STRING, entry_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palette-entry-set-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palette-entry-set-name", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikapalettes_pdb.c b/libpika/pikapalettes_pdb.c index d3391a4..230e3b0 100644 --- a/libpika/pikapalettes_pdb.c +++ b/libpika/pikapalettes_pdb.c @@ -56,9 +56,9 @@ pika_palettes_refresh (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palettes-refresh", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palettes-refresh", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -93,9 +93,9 @@ pika_palettes_get_list (const gchar *filter) G_TYPE_STRING, filter, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palettes-get-list", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palettes-get-list", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikapaletteselect_pdb.c b/libpika/pikapaletteselect_pdb.c index ae54bf7..05d0072 100644 --- a/libpika/pikapaletteselect_pdb.c +++ b/libpika/pikapaletteselect_pdb.c @@ -41,7 +41,8 @@ * pika_palettes_popup: * @palette_callback: The callback PDB proc to call when user chooses a palette. * @popup_title: Title of the palette selection dialog. - * @initial_palette_name: The name of the palette to set as the initial choice. + * @initial_palette: The palette to set as the initial choice. + * @parent_window: An optional parent window handle for the popup to be set transient to. * * Invokes the Pika palette selection dialog. * @@ -52,7 +53,8 @@ gboolean pika_palettes_popup (const gchar *palette_callback, const gchar *popup_title, - const gchar *initial_palette_name) + PikaPalette *initial_palette, + GBytes *parent_window) { PikaValueArray *args; PikaValueArray *return_vals; @@ -61,12 +63,13 @@ pika_palettes_popup (const gchar *palette_callback, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, palette_callback, G_TYPE_STRING, popup_title, - G_TYPE_STRING, initial_palette_name, + PIKA_TYPE_PALETTE, initial_palette, + G_TYPE_BYTES, parent_window, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palettes-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palettes-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -97,9 +100,9 @@ pika_palettes_close_popup (const gchar *palette_callback) G_TYPE_STRING, palette_callback, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palettes-close-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palettes-close-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -112,7 +115,7 @@ pika_palettes_close_popup (const gchar *palette_callback) /** * pika_palettes_set_popup: * @palette_callback: The name of the callback registered for this pop-up. - * @palette_name: The name of the palette to set as selected. + * @palette: The palette to set as selected. * * Sets the current palette in a palette selection dialog. * @@ -122,7 +125,7 @@ pika_palettes_close_popup (const gchar *palette_callback) **/ gboolean pika_palettes_set_popup (const gchar *palette_callback, - const gchar *palette_name) + PikaPalette *palette) { PikaValueArray *args; PikaValueArray *return_vals; @@ -130,12 +133,12 @@ pika_palettes_set_popup (const gchar *palette_callback, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, palette_callback, - G_TYPE_STRING, palette_name, + PIKA_TYPE_PALETTE, palette, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-palettes-set-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-palettes-set-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikapaletteselect_pdb.h b/libpika/pikapaletteselect_pdb.h index a5544c6..b672b38 100644 --- a/libpika/pikapaletteselect_pdb.h +++ b/libpika/pikapaletteselect_pdb.h @@ -34,10 +34,11 @@ G_BEGIN_DECLS gboolean pika_palettes_popup (const gchar *palette_callback, const gchar *popup_title, - const gchar *initial_palette_name); + PikaPalette *initial_palette, + GBytes *parent_window); gboolean pika_palettes_close_popup (const gchar *palette_callback); gboolean pika_palettes_set_popup (const gchar *palette_callback, - const gchar *palette_name); + PikaPalette *palette); G_END_DECLS diff --git a/libpika/pikaparamspecs-desc.c b/libpika/pikaparamspecs-desc.c index 76cb101..407b24d 100644 --- a/libpika/pikaparamspecs-desc.c +++ b/libpika/pikaparamspecs-desc.c @@ -29,70 +29,124 @@ #include "pika.h" #include "pikaparamspecs-desc.h" +#include "libpika-intl.h" + static gchar * pika_param_spec_boolean_desc (GParamSpec *pspec) { GParamSpecBoolean *bspec = G_PARAM_SPEC_BOOLEAN (pspec); - return g_strdup_printf ("(TRUE or FALSE, default %s)", + return g_strdup_printf ("(TRUE or FALSE, default %s)", bspec->default_value ? "TRUE" : "FALSE"); } +static gchar * +pika_param_spec_choice_desc (GParamSpec *pspec) +{ + PikaParamSpecChoice *cspec = PIKA_PARAM_SPEC_CHOICE (pspec); + GList *choices; + GString *desc; + + choices = pika_choice_list_nicks (cspec->choice); + desc = g_string_new ("\n"); + + g_string_append_printf (desc, "%s", _("Allowed values:")); + + for (GList *iter = choices; iter; iter = iter->next) + { + gchar *nick = iter->data; + gchar *label = NULL; + gchar *help = NULL; + + pika_choice_get_documentation (cspec->choice, (const gchar *) nick, (const gchar **) &label, (const gchar **) &help); + nick = g_markup_escape_text (nick, -1); + label = g_markup_escape_text (label, -1); + help = (help != NULL ? g_markup_escape_text (help, -1) : NULL); + if (help != NULL) + /* \xe2\x80\xa2 is the UTF-8 for the bullet point. */ + g_string_append_printf (desc, "\n\xe2\x80\xa2 %s: %s\n\t%s", nick, label, help); + else + g_string_append_printf (desc, "\n\xe2\x80\xa2 %s: %s", nick, label); + + g_free (nick); + g_free (label); + g_free (help); + } + + return g_string_free (desc, FALSE); +} + static gchar * pika_param_spec_int_desc (GParamSpec *pspec) { - GParamSpecInt *ispec = G_PARAM_SPEC_INT (pspec); + GParamSpecInt *ispec = G_PARAM_SPEC_INT (pspec); + gchar *bare_text = NULL; + gchar *markup; if (ispec->minimum == G_MININT32 && ispec->maximum == G_MAXINT32) - return g_strdup_printf ("(default %d)", - ispec->default_value); + bare_text = g_strdup_printf ("(default %d)", + ispec->default_value); if (ispec->minimum == G_MININT32) - return g_strdup_printf ("(%s <= %d, default %d)", - g_param_spec_get_name (pspec), - ispec->maximum, - ispec->default_value); + bare_text = g_strdup_printf ("(%s <= %d, default %d)", + g_param_spec_get_name (pspec), + ispec->maximum, + ispec->default_value); if (ispec->maximum == G_MAXINT32) - return g_strdup_printf ("(%s >= %d, default %d)", - g_param_spec_get_name (pspec), - ispec->minimum, - ispec->default_value); + bare_text = g_strdup_printf ("(%s >= %d, default %d)", + g_param_spec_get_name (pspec), + ispec->minimum, + ispec->default_value); - return g_strdup_printf ("(%d <= %s <= %d, default %d)", - ispec->minimum, - g_param_spec_get_name (pspec), - ispec->maximum, - ispec->default_value); + if (bare_text == NULL) + bare_text = g_strdup_printf ("(%d <= %s <= %d, default %d)", + ispec->minimum, + g_param_spec_get_name (pspec), + ispec->maximum, + ispec->default_value); + + markup = g_markup_printf_escaped ("%s", bare_text); + g_free (bare_text); + + return markup; } static gchar * pika_param_spec_double_desc (GParamSpec *pspec) { - GParamSpecDouble *dspec = G_PARAM_SPEC_DOUBLE (pspec); + GParamSpecDouble *dspec = G_PARAM_SPEC_DOUBLE (pspec); + gchar *bare_text = NULL; + gchar *markup; if (dspec->minimum == - G_MAXDOUBLE && dspec->maximum == G_MAXDOUBLE) - return g_strdup_printf ("(default %g)", - dspec->default_value); + bare_text = g_strdup_printf ("(default %g)", + dspec->default_value); if (dspec->minimum == - G_MAXDOUBLE) - return g_strdup_printf ("(%s <= %g, default %g)", - g_param_spec_get_name (pspec), - dspec->maximum, - dspec->default_value); + bare_text = g_strdup_printf ("(%s <= %g, default %g)", + g_param_spec_get_name (pspec), + dspec->maximum, + dspec->default_value); if (dspec->maximum == G_MAXDOUBLE) - return g_strdup_printf ("(%s >= %g, default %g)", - g_param_spec_get_name (pspec), - dspec->minimum, - dspec->default_value); + bare_text = g_strdup_printf ("(%s >= %g, default %g)", + g_param_spec_get_name (pspec), + dspec->minimum, + dspec->default_value); - return g_strdup_printf ("(%g <= %s <= %g, default %g)", - dspec->minimum, - g_param_spec_get_name (pspec), - dspec->maximum, - dspec->default_value); + if (bare_text == NULL) + bare_text = g_strdup_printf ("(%g <= %s <= %g, default %g)", + dspec->minimum, + g_param_spec_get_name (pspec), + dspec->maximum, + dspec->default_value); + + markup = g_markup_printf_escaped ("%s", bare_text); + g_free (bare_text); + + return markup; } static gchar * @@ -113,7 +167,7 @@ pika_param_spec_enum_desc (GParamSpec *pspec) #endif excluded = NULL; - g_string_append (str, "{ "); + g_string_append (str, "{ "); for (i = 0, n = 0, enum_value = enum_class->values; i < enum_class->n_values; @@ -152,7 +206,7 @@ pika_param_spec_enum_desc (GParamSpec *pspec) n++; } - g_string_append (str, " }"); + g_string_append (str, " }"); if (default_name) { @@ -168,10 +222,10 @@ pika_param_spec_enum_desc (GParamSpec *pspec) * pika_param_spec_get_desc: * @pspec: a #GParamSpec * - * This function creates a description of the passed @pspec, which is - * suitable for use in the PDB. Actually, it currently only deals with - * parameter types used in the PDB and should not be used for anything - * else. + * This function creates a description of the passed @pspec type restrictions. + * It currently only deals with parameter types used in the PDB and should not + * be used for anything else. + * The returned string is pango-markup formatted. * * Returns: A newly allocated string describing the parameter. * @@ -185,6 +239,10 @@ pika_param_spec_get_desc (GParamSpec *pspec) if (PIKA_IS_PARAM_SPEC_UNIT (pspec)) { } + else if (PIKA_IS_PARAM_SPEC_CHOICE (pspec)) + { + return pika_param_spec_choice_desc (pspec); + } else if (G_IS_PARAM_SPEC_INT (pspec)) { return pika_param_spec_int_desc (pspec); diff --git a/libpika/pikapattern_pdb.c b/libpika/pikapattern_pdb.c index c974724..9f83a25 100644 --- a/libpika/pikapattern_pdb.c +++ b/libpika/pikapattern_pdb.c @@ -59,9 +59,9 @@ pika_pattern_get_by_name (const gchar *name) G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pattern-get-by-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pattern-get-by-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -102,9 +102,9 @@ pika_pattern_get_info (PikaPattern *pattern, PIKA_TYPE_PATTERN, pattern, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pattern-get-info", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pattern-get-info", + args); pika_value_array_unref (args); *width = 0; @@ -126,7 +126,7 @@ pika_pattern_get_info (PikaPattern *pattern, } /** - * pika_pattern_get_pixels: + * _pika_pattern_get_pixels: * @pattern: The pattern. * @width: (out): The pattern width. * @height: (out): The pattern height. @@ -136,19 +136,18 @@ pika_pattern_get_info (PikaPattern *pattern, * Gets information about the pattern (including pixels). * * Gets information about the pattern: the pattern extents (width and - * height), its bpp, and its pixel data. The pixel data is an array in - * C or a list in some languages. + * height), its bpp, and its pixel data. * * Returns: TRUE on success. * * Since: 2.2 **/ gboolean -pika_pattern_get_pixels (PikaPattern *pattern, - gint *width, - gint *height, - gint *bpp, - GBytes **color_bytes) +_pika_pattern_get_pixels (PikaPattern *pattern, + gint *width, + gint *height, + gint *bpp, + GBytes **color_bytes) { PikaValueArray *args; PikaValueArray *return_vals; @@ -158,9 +157,9 @@ pika_pattern_get_pixels (PikaPattern *pattern, PIKA_TYPE_PATTERN, pattern, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pattern-get-pixels", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pattern-get-pixels", + args); pika_value_array_unref (args); *width = 0; diff --git a/libpika/pikapattern_pdb.h b/libpika/pikapattern_pdb.h index 5a73e7c..daea72b 100644 --- a/libpika/pikapattern_pdb.h +++ b/libpika/pikapattern_pdb.h @@ -32,16 +32,16 @@ G_BEGIN_DECLS /* For information look into the C source or the html documentation */ -PikaPattern* pika_pattern_get_by_name (const gchar *name); -gboolean pika_pattern_get_info (PikaPattern *pattern, - gint *width, - gint *height, - gint *bpp); -gboolean pika_pattern_get_pixels (PikaPattern *pattern, - gint *width, - gint *height, - gint *bpp, - GBytes **color_bytes); +PikaPattern* pika_pattern_get_by_name (const gchar *name); +gboolean pika_pattern_get_info (PikaPattern *pattern, + gint *width, + gint *height, + gint *bpp); +G_GNUC_INTERNAL gboolean _pika_pattern_get_pixels (PikaPattern *pattern, + gint *width, + gint *height, + gint *bpp, + GBytes **color_bytes); G_END_DECLS diff --git a/libpika/pikapatterns_pdb.c b/libpika/pikapatterns_pdb.c index 926d413..89ded1f 100644 --- a/libpika/pikapatterns_pdb.c +++ b/libpika/pikapatterns_pdb.c @@ -56,9 +56,9 @@ pika_patterns_refresh (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-patterns-refresh", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-patterns-refresh", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -93,9 +93,9 @@ pika_patterns_get_list (const gchar *filter) G_TYPE_STRING, filter, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-patterns-get-list", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-patterns-get-list", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikapatternselect_pdb.c b/libpika/pikapatternselect_pdb.c index 2d632c2..65bb0e4 100644 --- a/libpika/pikapatternselect_pdb.c +++ b/libpika/pikapatternselect_pdb.c @@ -41,7 +41,8 @@ * pika_patterns_popup: * @pattern_callback: The callback PDB proc to call when the user chooses a pattern. * @popup_title: Title of the pattern selection dialog. - * @initial_pattern_name: The name of the pattern to set as the initial choice. + * @initial_pattern: The pattern to set as the initial choice. + * @parent_window: An optional parent window handle for the popup to be set transient to. * * Invokes the Pika pattern selection. * @@ -52,7 +53,8 @@ gboolean pika_patterns_popup (const gchar *pattern_callback, const gchar *popup_title, - const gchar *initial_pattern_name) + PikaPattern *initial_pattern, + GBytes *parent_window) { PikaValueArray *args; PikaValueArray *return_vals; @@ -61,12 +63,13 @@ pika_patterns_popup (const gchar *pattern_callback, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, pattern_callback, G_TYPE_STRING, popup_title, - G_TYPE_STRING, initial_pattern_name, + PIKA_TYPE_PATTERN, initial_pattern, + G_TYPE_BYTES, parent_window, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-patterns-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-patterns-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -97,9 +100,9 @@ pika_patterns_close_popup (const gchar *pattern_callback) G_TYPE_STRING, pattern_callback, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-patterns-close-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-patterns-close-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -112,7 +115,7 @@ pika_patterns_close_popup (const gchar *pattern_callback) /** * pika_patterns_set_popup: * @pattern_callback: The name of the callback registered for this pop-up. - * @pattern_name: The name of the pattern to set as selected. + * @pattern: The pattern to set as selected. * * Sets the current pattern in a pattern selection dialog. * @@ -122,7 +125,7 @@ pika_patterns_close_popup (const gchar *pattern_callback) **/ gboolean pika_patterns_set_popup (const gchar *pattern_callback, - const gchar *pattern_name) + PikaPattern *pattern) { PikaValueArray *args; PikaValueArray *return_vals; @@ -130,12 +133,12 @@ pika_patterns_set_popup (const gchar *pattern_callback, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, pattern_callback, - G_TYPE_STRING, pattern_name, + PIKA_TYPE_PATTERN, pattern, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-patterns-set-popup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-patterns-set-popup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikapatternselect_pdb.h b/libpika/pikapatternselect_pdb.h index e6a8c0d..0d0c515 100644 --- a/libpika/pikapatternselect_pdb.h +++ b/libpika/pikapatternselect_pdb.h @@ -34,10 +34,11 @@ G_BEGIN_DECLS gboolean pika_patterns_popup (const gchar *pattern_callback, const gchar *popup_title, - const gchar *initial_pattern_name); + PikaPattern *initial_pattern, + GBytes *parent_window); gboolean pika_patterns_close_popup (const gchar *pattern_callback); gboolean pika_patterns_set_popup (const gchar *pattern_callback, - const gchar *pattern_name); + PikaPattern *pattern); G_END_DECLS diff --git a/libpika/pikapdb-private.h b/libpika/pikapdb-private.h index 174f072..7d70261 100644 --- a/libpika/pikapdb-private.h +++ b/libpika/pikapdb-private.h @@ -45,10 +45,14 @@ typedef enum GQuark _pika_pdb_error_quark (void) G_GNUC_CONST; -PikaPDB * _pika_pdb_new (PikaPlugIn *plug_in); +PikaPDB * _pika_pdb_new (PikaPlugIn *plug_in); -PikaPlugIn * _pika_pdb_get_plug_in (PikaPDB *pdb); +PikaPlugIn * _pika_pdb_get_plug_in (PikaPDB *pdb); +gboolean pika_pdb_get_data (const gchar *identifier, + GBytes **data); +gboolean pika_pdb_set_data (const gchar *identifier, + GBytes *data); G_END_DECLS diff --git a/libpika/pikapdb.c b/libpika/pikapdb.c index 3125af7..f2db44a 100644 --- a/libpika/pikapdb.c +++ b/libpika/pikapdb.c @@ -29,7 +29,6 @@ #include "libpikabase/pikaprotocol.h" #include "libpikabase/pikawire.h" -#include "pika-private.h" #include "pikagpparams.h" #include "pikapdb-private.h" #include "pikapdb_pdb.h" @@ -191,221 +190,6 @@ pika_pdb_lookup_procedure (PikaPDB *pdb, return procedure; } -/** - * pika_pdb_run_procedure: (skip) - * @pdb: the #PikaPDB object. - * @procedure_name: the procedure registered name. - * @first_type: the #GType of the first argument, or #G_TYPE_NONE. - * @...: the call arguments. - * - * Runs the procedure named @procedure_name with arguments given as - * list of (#GType, value) pairs, terminated by #G_TYPE_NONE. - * - * Returns: (transfer full): the return values for the procedure call. - * - * Since: 3.0 - */ -PikaValueArray * -pika_pdb_run_procedure (PikaPDB *pdb, - const gchar *procedure_name, - GType first_type, - ...) -{ - PikaValueArray *return_values; - va_list args; - - g_return_val_if_fail (PIKA_IS_PDB (pdb), NULL); - g_return_val_if_fail (pika_is_canonical_identifier (procedure_name), NULL); - - va_start (args, first_type); - - return_values = pika_pdb_run_procedure_valist (pdb, procedure_name, - first_type, args); - - va_end (args); - - return return_values; -} - -/** - * pika_pdb_run_procedure_valist: (skip) - * @pdb: the #PikaPDB object. - * @procedure_name: the procedure registered name. - * @first_type: the #GType of the first argument, or #G_TYPE_NONE. - * @args: the call arguments. - * - * Runs the procedure named @procedure_name with @args given in the - * order as passed to [method@PDB.run_procedure]. - * - * Returns: (transfer full): the return values for the procedure call. - * - * Since: 3.0 - */ -PikaValueArray * -pika_pdb_run_procedure_valist (PikaPDB *pdb, - const gchar *procedure_name, - GType first_type, - va_list args) -{ - PikaValueArray *arguments; - PikaValueArray *return_values; - gchar *error_msg = NULL; - - g_return_val_if_fail (PIKA_IS_PDB (pdb), NULL); - g_return_val_if_fail (pika_is_canonical_identifier (procedure_name), NULL); - - arguments = pika_value_array_new_from_types_valist (&error_msg, - first_type, - args); - - if (! arguments) - { - GError *error = g_error_new_literal (PIKA_PDB_ERROR, - PIKA_PDB_ERROR_INTERNAL_ERROR, - error_msg); - g_printerr ("%s: %s", G_STRFUNC, error_msg); - g_free (error_msg); - - return pika_procedure_new_return_values (NULL, - PIKA_PDB_CALLING_ERROR, - error); - } - - return_values = pika_pdb_run_procedure_array (pdb, procedure_name, - arguments); - pika_value_array_unref (arguments); - - return return_values; -} - -/** - * pika_pdb_run_procedure_argv: (rename-to pika_pdb_run_procedure) - * @pdb: the #PikaPDB object. - * @procedure_name: the registered name to call. - * @arguments: (array length=n_arguments) (nullable): the call arguments or %NULL. - * @n_arguments: the number of arguments. - * - * Runs the procedure named @procedure_name with @arguments. - * - * Returns: (transfer full): the return values for the procedure call. - * - * Since: 3.0 - */ -PikaValueArray * -pika_pdb_run_procedure_argv (PikaPDB *pdb, - const gchar *procedure_name, - const GValue *arguments, - gint n_arguments) -{ - PikaValueArray *args; - PikaValueArray *return_values; - - g_return_val_if_fail (PIKA_IS_PDB (pdb), NULL); - g_return_val_if_fail (pika_is_canonical_identifier (procedure_name), NULL); - /* Not require arguments != NULL. - * pika_value_array_new_from_values(NULL, 0) will return empty GValueArray. - */ - - args = pika_value_array_new_from_values (arguments, n_arguments); - return_values = pika_pdb_run_procedure_array (pdb, procedure_name, args); - pika_value_array_unref (args); - - return return_values; -} - -/** - * pika_pdb_run_procedure_array: - * @pdb: the #PikaPDB object. - * @procedure_name: the procedure registered name. - * @arguments: the call arguments. - * - * Runs the procedure named @procedure_name with @arguments. - * - * Returns: (transfer full): the return values for the procedure call. - * - * Since: 3.0 - */ -PikaValueArray * -pika_pdb_run_procedure_array (PikaPDB *pdb, - const gchar *procedure_name, - const PikaValueArray *arguments) -{ - GPProcRun proc_run; - GPProcReturn *proc_return; - PikaWireMessage msg; - PikaValueArray *return_values; - - g_return_val_if_fail (PIKA_IS_PDB (pdb), NULL); - g_return_val_if_fail (pika_is_canonical_identifier (procedure_name), NULL); - g_return_val_if_fail (arguments != NULL, NULL); - - proc_run.name = (gchar *) procedure_name; - proc_run.n_params = pika_value_array_length (arguments); - proc_run.params = _pika_value_array_to_gp_params (arguments, FALSE); - - if (! gp_proc_run_write (_pika_plug_in_get_write_channel (pdb->priv->plug_in), - &proc_run, pdb->priv->plug_in)) - pika_quit (); - - _pika_gp_params_free (proc_run.params, proc_run.n_params, FALSE); - - _pika_plug_in_read_expect_msg (pdb->priv->plug_in, &msg, GP_PROC_RETURN); - - proc_return = msg.data; - - return_values = _pika_gp_params_to_value_array (NULL, - NULL, 0, - proc_return->params, - proc_return->n_params, - TRUE); - - pika_wire_destroy (&msg); - - pika_pdb_set_error (pdb, return_values); - - return return_values; -} - -/** - * pika_pdb_run_procedure_config: - * @pdb: the #PikaPDB object. - * @procedure_name: the registered name to call. - * @config: a config object obtained with pika_procedure_create_config(). - * - * Runs the procedure named @procedure_name with @config. - * - * Returns: (transfer full): the return values for the procedure call. - * - * Since: 3.0 - */ -PikaValueArray * -pika_pdb_run_procedure_config (PikaPDB *pdb, - const gchar *procedure_name, - PikaProcedureConfig *config) -{ - PikaProcedure *procedure; - PikaValueArray *args; - PikaValueArray *return_values; - - g_return_val_if_fail (PIKA_IS_PDB (pdb), NULL); - g_return_val_if_fail (pika_is_canonical_identifier (procedure_name), NULL); - g_return_val_if_fail (PIKA_IS_PROCEDURE_CONFIG (config), NULL); - - procedure = pika_pdb_lookup_procedure (pdb, procedure_name); - - g_return_val_if_fail (pika_procedure_config_get_procedure (config) == procedure, - NULL); - - args = pika_procedure_new_arguments (procedure); - - pika_procedure_config_get_values (config, args); - return_values = pika_pdb_run_procedure_array (pdb, procedure_name, args); - - pika_value_array_unref (args); - - return return_values; -} - /** * pika_pdb_temp_procedure_name: * @pdb: the #PikaPDB object. @@ -603,43 +387,19 @@ pika_pdb_get_last_status (PikaPDB *pdb) * the specified identifier. The data is copied into the given memory * location. * + * WARNING: this function is exported in the library so that it can be used by + * libpikawidgets. Nevertheless it is considered internal, and is not declared + * in any public header on purpose. It should not be considered part of the API + * and therefore should not be used in plug-ins. It may disappear at any time. + * * Returns: TRUE on success, FALSE if no data has been associated with * the identifier */ gboolean -pika_pdb_get_data (const gchar *identifier, - gpointer data) +pika_pdb_get_data (const gchar *identifier, + GBytes **data) { - GBytes *hack = NULL; - gboolean success; - - success = _pika_pdb_get_data (identifier, &hack); - - if (hack) - { - memcpy (data, g_bytes_get_data (hack, NULL), g_bytes_get_size (hack)); - g_free (hack); - } - - return success; -} - -/** - * pika_pdb_get_data_size: - * @identifier: The identifier associated with data. - * - * Returns size of data associated with the specified identifier. - * - * This procedure returns the size of any data which may have been - * associated with the specified identifier. If no data has been - * associated with the identifier, an error is returned. - * - * Returns: The number of bytes in the data. - **/ -gint -pika_pdb_get_data_size (const gchar *identifier) -{ - return _pika_pdb_get_data_size (identifier); + return _pika_pdb_get_data (identifier, data); } /** @@ -652,23 +412,74 @@ pika_pdb_get_data_size (const gchar *identifier) * * This procedure associates the supplied data with the provided * identifier. The data may be subsequently retrieved by a call to - * 'procedural-db-get-data'. + * 'procedural-db-get-data'. This storage is global within the session, even + * shareable between plug-ins, though it won't survive a restart of PIKA. * + * WARNING: this function is exported in the library so that it can be used by + * libpikawidgets. Nevertheless it is considered internal, and is not declared + * in any public header on purpose. It should not be considered part of the API + * and therefore should not be used in plug-ins. It may disappear at any time. + * Returns: TRUE on success. */ gboolean -pika_pdb_set_data (const gchar *identifier, - gconstpointer data, - guint32 data_len) +pika_pdb_set_data (const gchar *identifier, + GBytes *data) { - GBytes *bytes; - gboolean ret; + return _pika_pdb_set_data (identifier, data); +} - bytes = g_bytes_new_static (data, data_len); - ret = _pika_pdb_set_data (identifier, bytes); - g_bytes_unref (bytes); +/** + * _pika_pdb_run_procedure_array: + * @pdb: the #PikaPDB object. + * @procedure_name: the procedure registered name. + * @arguments: the call arguments. + * + * Runs the procedure named @procedure_name with @arguments. + * + * Returns: (transfer full): the return values for the procedure call. + * + * Since: 3.0 + */ +PikaValueArray * +_pika_pdb_run_procedure_array (PikaPDB *pdb, + const gchar *procedure_name, + const PikaValueArray *arguments) +{ + GPProcRun proc_run; + GPProcReturn *proc_return; + PikaWireMessage msg; + PikaValueArray *return_values; - return ret; + g_return_val_if_fail (PIKA_IS_PDB (pdb), NULL); + g_return_val_if_fail (pika_is_canonical_identifier (procedure_name), NULL); + g_return_val_if_fail (arguments != NULL, NULL); + + proc_run.name = (gchar *) procedure_name; + proc_run.n_params = pika_value_array_length (arguments); + proc_run.params = _pika_value_array_to_gp_params (arguments, FALSE); + + if (! gp_proc_run_write (_pika_plug_in_get_write_channel (pdb->priv->plug_in), + &proc_run, pdb->priv->plug_in)) + pika_quit (); + + _pika_gp_params_free (proc_run.params, proc_run.n_params, FALSE); + + _pika_plug_in_read_expect_msg (pdb->priv->plug_in, &msg, GP_PROC_RETURN); + + proc_return = msg.data; + + return_values = _pika_gp_params_to_value_array (NULL, + NULL, 0, + proc_return->params, + proc_return->n_params, + TRUE); + + pika_wire_destroy (&msg); + + pika_pdb_set_error (pdb, return_values); + + return return_values; } diff --git a/libpika/pikapdb.h b/libpika/pikapdb.h index 84f60c3..6a05004 100644 --- a/libpika/pikapdb.h +++ b/libpika/pikapdb.h @@ -77,25 +77,6 @@ gboolean pika_pdb_procedure_exists (PikaPDB *pdb, PikaProcedure * pika_pdb_lookup_procedure (PikaPDB *pdb, const gchar *procedure_name); -PikaValueArray * pika_pdb_run_procedure (PikaPDB *pdb, - const gchar *procedure_name, - GType first_type, - ...); -PikaValueArray * pika_pdb_run_procedure_valist (PikaPDB *pdb, - const gchar *procedure_name, - GType first_type, - va_list args); -PikaValueArray * pika_pdb_run_procedure_argv (PikaPDB *pdb, - const gchar *procedure_name, - const GValue *arguments, - gint n_arguments); -PikaValueArray * pika_pdb_run_procedure_array (PikaPDB *pdb, - const gchar *procedure_name, - const PikaValueArray *arguments); -PikaValueArray * pika_pdb_run_procedure_config (PikaPDB *pdb, - const gchar *procedure_name, - PikaProcedureConfig *config); - gchar * pika_pdb_temp_procedure_name (PikaPDB *pdb); gboolean pika_pdb_dump_to_file (PikaPDB *pdb, @@ -114,14 +95,11 @@ const gchar * pika_pdb_get_last_error (PikaPDB *pdb); PikaPDBStatusType pika_pdb_get_last_status (PikaPDB *pdb); -/* Cruft API */ +/* Internal use */ -gboolean pika_pdb_get_data (const gchar *identifier, - gpointer data); -gint pika_pdb_get_data_size (const gchar *identifier); -gboolean pika_pdb_set_data (const gchar *identifier, - gconstpointer data, - guint32 data_len); +G_GNUC_INTERNAL PikaValueArray * _pika_pdb_run_procedure_array (PikaPDB *pdb, + const gchar *procedure_name, + const PikaValueArray *arguments); G_END_DECLS diff --git a/libpika/pikapdb_pdb.c b/libpika/pikapdb_pdb.c index b88e493..b443d8c 100644 --- a/libpika/pikapdb_pdb.c +++ b/libpika/pikapdb_pdb.c @@ -48,9 +48,9 @@ _pika_pdb_temp_name (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-temp-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-temp-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -84,9 +84,9 @@ _pika_pdb_dump (GFile *file) G_TYPE_FILE, file, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-dump", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-dump", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -149,9 +149,9 @@ _pika_pdb_query (const gchar *name, G_TYPE_STRING, proc_type, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-query", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-query", + args); pika_value_array_unref (args); *procedure_names = NULL; @@ -190,9 +190,9 @@ _pika_pdb_proc_exists (const gchar *procedure_name) G_TYPE_STRING, procedure_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-proc-exists", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-proc-exists", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -235,9 +235,9 @@ _pika_pdb_get_proc_info (const gchar *procedure_name, G_TYPE_STRING, procedure_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-get-proc-info", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-get-proc-info", + args); pika_value_array_unref (args); *proc_type = 0; @@ -286,9 +286,9 @@ _pika_pdb_get_proc_argument (const gchar *procedure_name, G_TYPE_INT, arg_num, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-get-proc-argument", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-get-proc-argument", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -328,9 +328,9 @@ _pika_pdb_get_proc_return_value (const gchar *procedure_name, G_TYPE_INT, val_num, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-get-proc-return-value", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-get-proc-return-value", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -368,9 +368,9 @@ _pika_pdb_set_proc_image_types (const gchar *procedure_name, G_TYPE_STRING, image_types, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-proc-image-types", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-proc-image-types", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -406,9 +406,9 @@ _pika_pdb_get_proc_image_types (const gchar *procedure_name) G_TYPE_STRING, procedure_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-get-proc-image-types", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-get-proc-image-types", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -445,9 +445,9 @@ _pika_pdb_set_proc_sensitivity_mask (const gchar *procedure_name, G_TYPE_INT, mask, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-proc-sensitivity-mask", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-proc-sensitivity-mask", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -483,9 +483,9 @@ _pika_pdb_set_proc_menu_label (const gchar *procedure_name, G_TYPE_STRING, menu_label, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-proc-menu-label", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-proc-menu-label", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -519,9 +519,9 @@ _pika_pdb_get_proc_menu_label (const gchar *procedure_name) G_TYPE_STRING, procedure_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-get-proc-menu-label", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-get-proc-menu-label", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -559,9 +559,9 @@ _pika_pdb_add_proc_menu_path (const gchar *procedure_name, G_TYPE_STRING, menu_path, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-add-proc-menu-path", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-add-proc-menu-path", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -596,9 +596,9 @@ _pika_pdb_get_proc_menu_paths (const gchar *procedure_name) G_TYPE_STRING, procedure_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-get-proc-menu-paths", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-get-proc-menu-paths", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -638,9 +638,9 @@ _pika_pdb_set_proc_icon (const gchar *procedure_name, G_TYPE_BYTES, icon_data, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-proc-icon", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-proc-icon", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -682,9 +682,9 @@ _pika_pdb_set_proc_documentation (const gchar *procedure_name, G_TYPE_STRING, help_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-proc-documentation", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-proc-documentation", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -725,9 +725,9 @@ _pika_pdb_get_proc_documentation (const gchar *procedure_name, G_TYPE_STRING, procedure_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-get-proc-documentation", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-get-proc-documentation", + args); pika_value_array_unref (args); *blurb = NULL; @@ -780,9 +780,9 @@ _pika_pdb_set_proc_attribution (const gchar *procedure_name, G_TYPE_STRING, date, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-proc-attribution", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-proc-attribution", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -823,9 +823,9 @@ _pika_pdb_get_proc_attribution (const gchar *procedure_name, G_TYPE_STRING, procedure_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-get-proc-attribution", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-get-proc-attribution", + args); pika_value_array_unref (args); *authors = NULL; @@ -877,9 +877,9 @@ _pika_pdb_set_file_proc_load_handler (const gchar *procedure_name, G_TYPE_STRING, magics, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-file-proc-load-handler", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-file-proc-load-handler", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -917,9 +917,9 @@ _pika_pdb_set_file_proc_save_handler (const gchar *procedure_name, G_TYPE_STRING, prefixes, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-file-proc-save-handler", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-file-proc-save-handler", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -959,9 +959,9 @@ _pika_pdb_set_file_proc_priority (const gchar *procedure_name, G_TYPE_INT, priority, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-file-proc-priority", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-file-proc-priority", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1002,9 +1002,9 @@ _pika_pdb_set_file_proc_mime_types (const gchar *procedure_name, G_TYPE_STRING, mime_types, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-file-proc-mime-types", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-file-proc-mime-types", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1040,9 +1040,9 @@ _pika_pdb_set_file_proc_handles_remote (const gchar *procedure_name) G_TYPE_STRING, procedure_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-file-proc-handles-remote", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-file-proc-handles-remote", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1078,9 +1078,9 @@ _pika_pdb_set_file_proc_handles_raw (const gchar *procedure_name) G_TYPE_STRING, procedure_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-file-proc-handles-raw", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-file-proc-handles-raw", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1121,9 +1121,9 @@ _pika_pdb_set_file_proc_thumbnail_loader (const gchar *load_proc, G_TYPE_STRING, thumb_proc, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-file-proc-thumbnail-loader", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-file-proc-thumbnail-loader", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1160,9 +1160,9 @@ _pika_pdb_set_batch_interpreter (const gchar *procedure_name, G_TYPE_STRING, interpreter_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-batch-interpreter", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-batch-interpreter", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1198,9 +1198,9 @@ _pika_pdb_get_data (const gchar *identifier, G_TYPE_STRING, identifier, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-get-data", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-get-data", + args); pika_value_array_unref (args); *data = NULL; @@ -1215,42 +1215,6 @@ _pika_pdb_get_data (const gchar *identifier, return success; } -/** - * _pika_pdb_get_data_size: - * @identifier: The identifier associated with data. - * - * Returns size of data associated with the specified identifier. - * - * This procedure returns the size of any data which may have been - * associated with the specified identifier. If no data has been - * associated with the identifier, an error is returned. - * - * Returns: The number of bytes in the data. - **/ -gint -_pika_pdb_get_data_size (const gchar *identifier) -{ - PikaValueArray *args; - PikaValueArray *return_vals; - gint bytes = 0; - - args = pika_value_array_new_from_types (NULL, - G_TYPE_STRING, identifier, - G_TYPE_NONE); - - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-get-data-size", - args); - pika_value_array_unref (args); - - if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) - bytes = PIKA_VALUES_GET_INT (return_vals, 1); - - pika_value_array_unref (return_vals); - - return bytes; -} - /** * _pika_pdb_set_data: * @identifier: The identifier associated with data. @@ -1277,9 +1241,9 @@ _pika_pdb_set_data (const gchar *identifier, G_TYPE_BYTES, data, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pdb-set-data", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pdb-set-data", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikapdb_pdb.h b/libpika/pikapdb_pdb.h index 14af81f..92561da 100644 --- a/libpika/pikapdb_pdb.h +++ b/libpika/pikapdb_pdb.h @@ -100,7 +100,6 @@ G_GNUC_INTERNAL gboolean _pika_pdb_set_batch_interpreter (const gcha const gchar *interpreter_name); G_GNUC_INTERNAL gboolean _pika_pdb_get_data (const gchar *identifier, GBytes **data); -G_GNUC_INTERNAL gint _pika_pdb_get_data_size (const gchar *identifier); G_GNUC_INTERNAL gboolean _pika_pdb_set_data (const gchar *identifier, GBytes *data); diff --git a/libpika/pikapdbprocedure.c b/libpika/pikapdbprocedure.c index e40f6a7..416eab3 100644 --- a/libpika/pikapdbprocedure.c +++ b/libpika/pikapdbprocedure.c @@ -181,9 +181,9 @@ pika_pdb_procedure_run (PikaProcedure *procedure, { PikaPDBProcedure *pdb_procedure = PIKA_PDB_PROCEDURE (procedure); - return pika_pdb_run_procedure_array (pdb_procedure->priv->pdb, - pika_procedure_get_name (procedure), - (PikaValueArray *) args); + return _pika_pdb_run_procedure_array (pdb_procedure->priv->pdb, + pika_procedure_get_name (procedure), + (PikaValueArray *) args); } diff --git a/libpika/pikapikarc_pdb.c b/libpika/pikapikarc_pdb.c index 5185696..ea764d6 100644 --- a/libpika/pikapikarc_pdb.c +++ b/libpika/pikapikarc_pdb.c @@ -66,9 +66,9 @@ pika_pikarc_query (const gchar *token) G_TYPE_STRING, token, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pikarc-query", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pikarc-query", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -107,9 +107,9 @@ pika_pikarc_set (const gchar *token, G_TYPE_STRING, value, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-pikarc-set", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-pikarc-set", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -139,9 +139,9 @@ pika_get_default_comment (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-get-default-comment", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-get-default-comment", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -173,9 +173,9 @@ pika_get_default_unit (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-get-default-unit", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-get-default-unit", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -211,9 +211,9 @@ pika_get_monitor_resolution (gdouble *xres, args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-get-monitor-resolution", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-get-monitor-resolution", + args); pika_value_array_unref (args); *xres = 0.0; @@ -255,9 +255,9 @@ _pika_get_color_configuration (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-get-color-configuration", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-get-color-configuration", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -288,9 +288,9 @@ pika_get_module_load_inhibit (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-get-module-load-inhibit", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-get-module-load-inhibit", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikaplugin-private.h b/libpika/pikaplugin-private.h index d422546..9340191 100644 --- a/libpika/pikaplugin-private.h +++ b/libpika/pikaplugin-private.h @@ -25,36 +25,38 @@ G_BEGIN_DECLS -void _pika_plug_in_query (PikaPlugIn *plug_in); -void _pika_plug_in_init (PikaPlugIn *plug_in); -void _pika_plug_in_run (PikaPlugIn *plug_in); -void _pika_plug_in_quit (PikaPlugIn *plug_in); +void _pika_plug_in_query (PikaPlugIn *plug_in); +void _pika_plug_in_init (PikaPlugIn *plug_in); +void _pika_plug_in_run (PikaPlugIn *plug_in); +void _pika_plug_in_quit (PikaPlugIn *plug_in); -GIOChannel * _pika_plug_in_get_read_channel (PikaPlugIn *plug_in); -GIOChannel * _pika_plug_in_get_write_channel (PikaPlugIn *plug_in); +GIOChannel * _pika_plug_in_get_read_channel (PikaPlugIn *plug_in); +GIOChannel * _pika_plug_in_get_write_channel (PikaPlugIn *plug_in); -void _pika_plug_in_read_expect_msg (PikaPlugIn *plug_in, - PikaWireMessage *msg, - gint type); +void _pika_plug_in_read_expect_msg (PikaPlugIn *plug_in, + PikaWireMessage *msg, + gint type); -gboolean _pika_plug_in_set_i18n (PikaPlugIn *plug_in, - const gchar *procedure_name, - gchar **gettext_domain, - gchar **catalog_dir); +gboolean _pika_plug_in_set_i18n (PikaPlugIn *plug_in, + const gchar *procedure_name, + gchar **gettext_domain, + gchar **catalog_dir); -PikaProcedure * _pika_plug_in_create_procedure (PikaPlugIn *plug_in, - const gchar *procedure_name); +PikaProcedure * _pika_plug_in_create_procedure (PikaPlugIn *plug_in, + const gchar *procedure_name); -PikaProcedure * _pika_plug_in_get_procedure (PikaPlugIn *plug_in); +PikaProcedure * _pika_plug_in_get_procedure (PikaPlugIn *plug_in); -PikaDisplay * _pika_plug_in_get_display (PikaPlugIn *plug_in, - gint32 display_id); -PikaImage * _pika_plug_in_get_image (PikaPlugIn *plug_in, - gint32 image_id); -PikaItem * _pika_plug_in_get_item (PikaPlugIn *plug_in, - gint32 item_id); -PikaResource * _pika_plug_in_get_resource (PikaPlugIn *plug_in, - gint32 resource_id); +PikaDisplay * _pika_plug_in_get_display (PikaPlugIn *plug_in, + gint32 display_id); +PikaImage * _pika_plug_in_get_image (PikaPlugIn *plug_in, + gint32 image_id); +PikaItem * _pika_plug_in_get_item (PikaPlugIn *plug_in, + gint32 item_id); +PikaResource * _pika_plug_in_get_resource (PikaPlugIn *plug_in, + gint32 resource_id); + +gboolean _pika_plug_in_manage_memory_manually (PikaPlugIn *plug_in); G_END_DECLS diff --git a/libpika/pikaplugin.c b/libpika/pikaplugin.c index 2d9b1aa..c56a8cd 100644 --- a/libpika/pikaplugin.c +++ b/libpika/pikaplugin.c @@ -114,6 +114,7 @@ G_DEFINE_QUARK (pika-plug-in-error-quark, pika_plug_in_error) enum { PROP_0, + PROP_PROGRAM_NAME, PROP_READ_CHANNEL, PROP_WRITE_CHANNEL, N_PROPS @@ -130,6 +131,8 @@ struct _PikaPlugInMenuBranch struct _PikaPlugInPrivate { + gchar *program_name; + GIOChannel *read_channel; GIOChannel *write_channel; @@ -207,7 +210,9 @@ static void pika_plug_in_push_procedure (PikaPlugIn *plug_in, static void pika_plug_in_pop_procedure (PikaPlugIn *plug_in, PikaProcedure *procedure); static void pika_plug_in_destroy_hashes (PikaPlugIn *plug_in); -static void pika_plug_in_destroy_proxies (GHashTable *hash_table, +static void pika_plug_in_destroy_proxies (PikaPlugIn *plug_in, + GHashTable *hash_table, + const gchar *type, gboolean destroy_all); static void pika_plug_in_init_i18n (PikaPlugIn *plug_in); @@ -233,6 +238,19 @@ pika_plug_in_class_init (PikaPlugInClass *klass) klass->set_i18n = pika_plug_in_real_set_i18n; + /** + * PikaPlugIn:program-name: + * + * The program name as usually found on argv[0] + */ + props[PROP_PROGRAM_NAME] = + g_param_spec_string ("program-name", + "The plug-in executable", + "The executable name as usually found on argv[0]", + NULL, + PIKA_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY); + /** * PikaPlugIn:read-channel: * @@ -310,6 +328,7 @@ pika_plug_in_finalize (GObject *object) PikaPlugIn *plug_in = PIKA_PLUG_IN (object); GList *list; + g_clear_pointer (&plug_in->priv->program_name, g_free); g_clear_pointer (&plug_in->priv->translation_domain_name, g_free); g_clear_object (&plug_in->priv->translation_domain_path); @@ -327,10 +346,10 @@ pika_plug_in_finalize (GObject *object) g_clear_pointer (&plug_in->priv->menu_branches, g_list_free); - pika_plug_in_destroy_proxies (plug_in->priv->displays, TRUE); - pika_plug_in_destroy_proxies (plug_in->priv->images, TRUE); - pika_plug_in_destroy_proxies (plug_in->priv->items, TRUE); - pika_plug_in_destroy_proxies (plug_in->priv->resources, TRUE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->displays, "display", TRUE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->images, "image", TRUE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->items, "item", TRUE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->resources, "resource", TRUE); pika_plug_in_destroy_hashes (plug_in); @@ -347,6 +366,10 @@ pika_plug_in_set_property (GObject *object, switch (property_id) { + case PROP_PROGRAM_NAME: + plug_in->priv->program_name = g_value_dup_string (value); + break; + case PROP_READ_CHANNEL: plug_in->priv->read_channel = g_value_get_boxed (value); break; @@ -1387,7 +1410,7 @@ pika_plug_in_proc_run_internal (PikaPlugIn *plug_in, proc_run->n_params, FALSE); - return_values = pika_procedure_run (procedure, arguments); + return_values = _pika_procedure_run_array (procedure, arguments); pika_value_array_unref (arguments); @@ -1441,17 +1464,17 @@ pika_plug_in_pop_procedure (PikaPlugIn *plug_in, _pika_procedure_destroy_proxies (procedure); - pika_plug_in_destroy_proxies (plug_in->priv->displays, FALSE); - pika_plug_in_destroy_proxies (plug_in->priv->images, FALSE); - pika_plug_in_destroy_proxies (plug_in->priv->items, FALSE); - pika_plug_in_destroy_proxies (plug_in->priv->resources, FALSE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->displays, "display", FALSE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->images, "image", FALSE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->items, "item", FALSE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->resources, "resource", FALSE); if (! plug_in->priv->procedure_stack) { - pika_plug_in_destroy_proxies (plug_in->priv->displays, TRUE); - pika_plug_in_destroy_proxies (plug_in->priv->images, TRUE); - pika_plug_in_destroy_proxies (plug_in->priv->items, TRUE); - pika_plug_in_destroy_proxies (plug_in->priv->resources, TRUE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->displays, "display", TRUE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->images, "image", TRUE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->items, "item", TRUE); + pika_plug_in_destroy_proxies (plug_in, plug_in->priv->resources, "resource", TRUE); pika_plug_in_destroy_hashes (plug_in); } @@ -1483,7 +1506,7 @@ _pika_plug_in_get_display (PikaPlugIn *plug_in, g_hash_table_insert (plug_in->priv->displays, GINT_TO_POINTER (display_id), - g_object_ref (display) /* add debug ref */); + display); } return display; @@ -1515,7 +1538,7 @@ _pika_plug_in_get_image (PikaPlugIn *plug_in, g_hash_table_insert (plug_in->priv->images, GINT_TO_POINTER (image_id), - g_object_ref (image) /* add debug ref */); + image); } return image; @@ -1581,7 +1604,7 @@ _pika_plug_in_get_item (PikaPlugIn *plug_in, if (item) g_hash_table_insert (plug_in->priv->items, GINT_TO_POINTER (item_id), - g_object_ref (item) /* add debug ref */); + item); } return item; @@ -1641,12 +1664,48 @@ _pika_plug_in_get_resource (PikaPlugIn *plug_in, if (resource) g_hash_table_insert (plug_in->priv->resources, GINT_TO_POINTER (resource_id), - g_object_ref (resource) /* add debug ref */); + resource); } return resource; } +gboolean +_pika_plug_in_manage_memory_manually (PikaPlugIn *plug_in) +{ + gboolean manual_management = TRUE; + + if (plug_in->priv->program_name) + { + GFile *file = g_file_new_for_path (plug_in->priv->program_name); + + /* Limitations: + * 1. Checking a file extension (and trusting argv[0] in general) is not + * the best idea. I thought about the possibility of passing through + * the name of the used interpreter from core to plug-in, but even this + * should not be trusted because it is configurable. + * 2. An alternative could be to pass the information if a plug-in is + * interpreted (i.e. it has an interp file). Though I'm unsure if there + * might be some interpreted language out there with manual memory + * management. + * 3. This list only contains the bindings we actually tested with (and + * have demo plug-ins for). Much more bindings are possible. + * + * So in the end, this test is just worth so far, but it's + * acceptable for the officially supported bindings at least. + */ + if (pika_file_has_extension (file, ".lua") || + pika_file_has_extension (file, ".py") || + pika_file_has_extension (file, ".js") || + pika_file_has_extension (file, ".gjs")) + manual_management = FALSE; + + g_object_unref (file); + } + + return manual_management; +} + static void pika_plug_in_destroy_hashes (PikaPlugIn *plug_in) { @@ -1657,8 +1716,10 @@ pika_plug_in_destroy_hashes (PikaPlugIn *plug_in) } static void -pika_plug_in_destroy_proxies (GHashTable *hash_table, - gboolean destroy_all) +pika_plug_in_destroy_proxies (PikaPlugIn *plug_in, + GHashTable *hash_table, + const gchar *type, + gboolean destroy_all) { GHashTableIter iter; gpointer key, value; @@ -1672,52 +1733,56 @@ pika_plug_in_destroy_proxies (GHashTable *hash_table, { GObject *object = value; - if (object->ref_count == 2) + if (object->ref_count == 1) { - /* this is the normal case for an unused proxy */ - - g_object_unref (object); + /* this is the normal case for an unused proxy, since we already + * destroyed the only other reference in procedure with + * _pika_procedure_destroy_proxies(). + */ g_hash_table_iter_remove (&iter); } - else if (object->ref_count == 1) + else if (! G_IS_OBJECT (object)) { - /* this is debug code, a plug-in MUST NOT unref a proxy, we - * only catch one unref here, more then one will crash right - * in this function + /* this is debug code, a plug-in MUST NOT unref a proxy. To be nice, + * we steal the object from the table, as removing it normally would + * crash, since the object is not valid anymore. */ - - gint id; - - g_object_get (object, "id", &id, NULL); - - g_printerr ("%s: ERROR: %s proxy with ID %d was unrefed " + g_printerr ("%s: ERROR: %s proxy was unrefed " "by plug-in, it MUST NOT do that!\n", - G_STRFUNC, G_OBJECT_TYPE_NAME (object), id); + G_STRFUNC, type); - g_hash_table_iter_remove (&iter); + g_hash_table_iter_steal (&iter); } else if (destroy_all) { /* this is debug code, a plug-in MUST NOT ref a proxy */ - gint id; g_object_get (object, "id", &id, NULL); - g_printerr ("%s: ERROR: %s proxy with ID %d was refed " - "by plug-in, it MUST NOT do that!\n", - G_STRFUNC, G_OBJECT_TYPE_NAME (object), id); + /* Some bindings are always keeping a reference to objects, in + * particular this is the behavior of lua and gjs bindings where + * object->ref_count == 2 at this point. + * As for the Python binding, it is only true for global + * variables (scoped variables are properly freed before the + * plug-in ends), which anyway is not the best practice. + * In any case, it's not something which the plug-in developer can do + * anything about so this error is only confusing. + * See #3912. + */ + if (_pika_plug_in_manage_memory_manually (plug_in)) + g_printerr ("%s: ERROR: %s proxy with ID %d was refed " + "by plug-in, it MUST NOT do that!\n", + G_STRFUNC, G_OBJECT_TYPE_NAME (object), id); #if 0 - /* the code used to do this, but it appears that some bindings - * keep references around until later, let's keep this for - * reference and as a reminder to figure if we can do anything - * generic about it that works for all bindings. + /* The code used to do this, which is only meaningful when the bug is + * really in the plug-in code. If it's one of the cases where the + * reference is actually held by a bindings, it's unwise and will + * likely end up in double-free crashes. */ while (object->ref_count > 1) g_object_unref (object); -#else - g_object_unref (object); #endif g_hash_table_iter_remove (&iter); } diff --git a/libpika/pikaplugin_pdb.c b/libpika/pikaplugin_pdb.c index 8668c9d..2b14e55 100644 --- a/libpika/pikaplugin_pdb.c +++ b/libpika/pikaplugin_pdb.c @@ -55,9 +55,9 @@ _pika_plug_in_help_register (const gchar *domain_name, G_TYPE_FILE, domain_file, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-plug-in-help-register", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-plug-in-help-register", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -96,9 +96,9 @@ _pika_plug_in_menu_branch_register (const gchar *menu_path, G_TYPE_STRING, menu_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-plug-in-menu-branch-register", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-plug-in-menu-branch-register", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -138,9 +138,9 @@ _pika_plug_in_set_pdb_error_handler (PikaPDBErrorHandler handler) PIKA_TYPE_PDB_ERROR_HANDLER, handler, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-plug-in-set-pdb-error-handler", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-plug-in-set-pdb-error-handler", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -173,9 +173,9 @@ _pika_plug_in_get_pdb_error_handler (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-plug-in-get-pdb-error-handler", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-plug-in-get-pdb-error-handler", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikaprocedure-params.h b/libpika/pikaprocedure-params.h index 78855ad..3b1971a 100644 --- a/libpika/pikaprocedure-params.h +++ b/libpika/pikaprocedure-params.h @@ -224,6 +224,33 @@ G_BEGIN_DECLS g_value_set_enum (pika_value_array_index (args, n), value) +/* choice */ + +#define PIKA_PROC_ARG_CHOICE(procedure, name, nick, blurb, choice, default, flags) \ + pika_procedure_add_argument (procedure,\ + pika_param_spec_choice (name, nick, blurb,\ + choice, default,\ + flags)) + +#define PIKA_PROC_AUX_ARG_CHOICE(procedure, name, nick, blurb, choice, default, flags) \ + pika_procedure_add_aux_argument (procedure,\ + pika_param_spec_choice (name, nick, blurb,\ + choice, default,\ + flags)) + +#define PIKA_PROC_VAL_CHOICE(procedure, name, nick, blurb, enum_type, default, flags) \ + pika_procedure_add_return_value (procedure,\ + pika_param_spec_choice (name, nick, blurb,\ + choice, default,\ + flags)) + +#define PIKA_VALUES_GET_CHOICE(args, n) \ + g_value_get_int (pika_value_array_index (args, n)) + +#define PIKA_VALUES_SET_CHOICE(args, n, value) \ + g_value_set_int (pika_value_array_index (args, n), value) + + /* string */ #define PIKA_PROC_ARG_STRING(procedure, name, nick, blurb, default, flags) \ @@ -367,7 +394,7 @@ G_BEGIN_DECLS #define PIKA_VALUES_DUP_BYTES(args, n) \ g_value_dup_boxed (pika_value_array_index (args, n)) -#define PIKA_VALUES_SET_BYTES(args, n, value, length) \ +#define PIKA_VALUES_SET_BYTES(args, n, value) \ g_value_set_boxed (pika_value_array_index (args, n), value) #define PIKA_VALUES_TAKE_BYTES(args, n, value, length) \ @@ -861,6 +888,12 @@ G_BEGIN_DECLS /* Resource */ +#define PIKA_PROC_ARG_RESOURCE(procedure, name, nick, blurb, flags) \ + pika_procedure_add_argument (procedure,\ + pika_param_spec_resource (name, nick, blurb,\ + PIKA_TYPE_RESOURCE,\ + flags)) + #define PIKA_PROC_ARG_BRUSH(procedure, name, nick, blurb, flags) \ pika_procedure_add_argument (procedure,\ pika_param_spec_brush (name, nick, blurb,\ diff --git a/libpika/pikaprocedure.c b/libpika/pikaprocedure.c index cc44fae..72b53b4 100644 --- a/libpika/pikaprocedure.c +++ b/libpika/pikaprocedure.c @@ -27,6 +27,8 @@ #include #include +#include + #include "pika.h" #include "libpikabase/pikaprotocol.h" @@ -36,6 +38,7 @@ #include "pikapdb-private.h" #include "pikaplugin-private.h" #include "pikapdb_pdb.h" +#include "pikaplugin-private.h" #include "pikaplugin_pdb.h" #include "pikaprocedure-private.h" #include "pikaprocedureconfig-private.h" @@ -100,38 +103,36 @@ struct _PikaProcedurePrivate }; -static void pika_procedure_constructed (GObject *object); -static void pika_procedure_finalize (GObject *object); -static void pika_procedure_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); -static void pika_procedure_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); +static void pika_procedure_constructed (GObject *object); +static void pika_procedure_finalize (GObject *object); +static void pika_procedure_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void pika_procedure_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); -static void pika_procedure_real_install (PikaProcedure *procedure); -static void pika_procedure_real_uninstall (PikaProcedure *procedure); -static PikaValueArray * - pika_procedure_real_run (PikaProcedure *procedure, - const PikaValueArray *args); -static PikaProcedureConfig * - pika_procedure_real_create_config - (PikaProcedure *procedure, - GParamSpec **args, - gint n_args); +static void pika_procedure_real_install (PikaProcedure *procedure); +static void pika_procedure_real_uninstall (PikaProcedure *procedure); +static PikaValueArray * pika_procedure_real_run (PikaProcedure *procedure, + const PikaValueArray *args); +static PikaProcedureConfig * pika_procedure_real_create_config (PikaProcedure *procedure, + GParamSpec **args, + gint n_args); -static gboolean pika_procedure_validate_args (PikaProcedure *procedure, - GParamSpec **param_specs, - gint n_param_specs, - PikaValueArray *args, - gboolean return_vals, - GError **error); +static PikaValueArray * pika_procedure_new_arguments (PikaProcedure *procedure); +static gboolean pika_procedure_validate_args (PikaProcedure *procedure, + GParamSpec **param_specs, + gint n_param_specs, + PikaValueArray *args, + gboolean return_vals, + GError **error); -static void pika_procedure_set_icon (PikaProcedure *procedure, - PikaIconType icon_type, - gconstpointer icon_data); +static void pika_procedure_set_icon (PikaProcedure *procedure, + PikaIconType icon_type, + gconstpointer icon_data); G_DEFINE_TYPE_WITH_PRIVATE (PikaProcedure, pika_procedure, G_TYPE_OBJECT) @@ -484,8 +485,47 @@ static PikaValueArray * pika_procedure_real_run (PikaProcedure *procedure, const PikaValueArray *args) { - return procedure->priv->run_func (procedure, args, - procedure->priv->run_data); + PikaPlugIn *plug_in; + PikaProcedureConfig *config; + PikaImage *image = NULL; + PikaRunMode run_mode = PIKA_RUN_NONINTERACTIVE; + PikaValueArray *retvals; + PikaPDBStatusType status = PIKA_PDB_EXECUTION_ERROR; + + if (pika_value_array_length (args) > 0 && + G_VALUE_HOLDS_ENUM (pika_value_array_index (args, 0))) + { + run_mode = PIKA_VALUES_GET_ENUM (args, 0); + + if (pika_value_array_length (args) > 1 && + PIKA_VALUE_HOLDS_IMAGE (pika_value_array_index (args, 1))) + image = PIKA_VALUES_GET_IMAGE (args, 1); + } + + config = pika_procedure_create_config (procedure); + _pika_procedure_config_begin_run (config, image, run_mode, args); + + retvals = procedure->priv->run_func (procedure, config, + procedure->priv->run_data); + if (retvals != NULL && + pika_value_array_length (retvals) > 0 && + G_VALUE_HOLDS_ENUM (pika_value_array_index (retvals, 0))) + status = PIKA_VALUES_GET_ENUM (retvals, 0); + + _pika_procedure_config_end_run (config, status); + + /* This is debug printing to help plug-in developers figure out best + * practices. + */ + plug_in = pika_procedure_get_plug_in (procedure); + if (G_OBJECT (config)->ref_count > 1 && + _pika_plug_in_manage_memory_manually (plug_in)) + g_printerr ("%s: ERROR: the PikaProcedureConfig object was refed " + "by plug-in, it MUST NOT do that!\n", G_STRFUNC); + + g_object_unref (config); + + return retvals; } static PikaProcedureConfig * @@ -582,12 +622,12 @@ pika_procedure_real_create_config (PikaProcedure *procedure, * Since: 3.0 **/ PikaProcedure * -pika_procedure_new (PikaPlugIn *plug_in, - const gchar *name, - PikaPDBProcType proc_type, - PikaRunFunc run_func, - gpointer run_data, - GDestroyNotify run_data_destroy) +pika_procedure_new (PikaPlugIn *plug_in, + const gchar *name, + PikaPDBProcType proc_type, + PikaRunFunc run_func, + gpointer run_data, + GDestroyNotify run_data_destroy) { PikaProcedure *procedure; @@ -608,7 +648,6 @@ pika_procedure_new (PikaPlugIn *plug_in, return procedure; } - /** * pika_procedure_get_plug_in: * @procedure: A #PikaProcedure. @@ -1630,10 +1669,9 @@ pika_procedure_get_return_values (PikaProcedure *procedure, * @arg_name: the name of one of @procedure's arguments or auxiliary arguments. * @sync: how to sync the argument or auxiliary argument. * - * When using #PikaProcedureConfig, pika_procedure_config_begin_run() - * and pika_procedure_config_end_run(), a #PikaProcedure's arguments - * or auxiliary arguments can be automatically synced with a - * #PikaParasite of the #PikaImage the procedure is running on. + * When the procedure's run() function exits, a #PikaProcedure's arguments + * or auxiliary arguments can be automatically synced with a #PikaParasite of + * the #PikaImage the procedure is running on. * * In order to enable this, set @sync to %PIKA_ARGUMENT_SYNC_PARASITE. * @@ -1711,43 +1749,6 @@ pika_procedure_get_argument_sync (PikaProcedure *procedure, return sync; } -/** - * pika_procedure_new_arguments: - * @procedure: the #PikaProcedure. - * - * Format the expected argument values of procedures, in the order as - * added with [method@Procedure.add_argument]. - * - * Returns: (transfer full): the expected #PikaValueArray which could be given as - * arguments to run @procedure, with all values set to - * defaults. Free with pika_value_array_unref(). - * - * Since: 3.0 - **/ -PikaValueArray * -pika_procedure_new_arguments (PikaProcedure *procedure) -{ - PikaValueArray *args; - GValue value = G_VALUE_INIT; - gint i; - - g_return_val_if_fail (PIKA_IS_PROCEDURE (procedure), NULL); - - args = pika_value_array_new (procedure->priv->n_args); - - for (i = 0; i < procedure->priv->n_args; i++) - { - GParamSpec *pspec = procedure->priv->args[i]; - - g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec)); - g_param_value_set_default (pspec, &value); - pika_value_array_append (args, &value); - g_value_unset (&value); - } - - return args; -} - /** * pika_procedure_new_return_values: * @procedure: the procedure. @@ -1828,19 +1829,146 @@ pika_procedure_new_return_values (PikaProcedure *procedure, } /** - * pika_procedure_run: + * pika_procedure_run: (skip) + * @pdb: the #PikaPDB object. + * @procedure_name: the procedure registered name. + * @first_arg_name: the name of an argument of @procedure_name. + * @...: the call arguments. + * + * Runs the procedure named @procedure_name with arguments given as + * list of `(name, value)` pairs, terminated by %NULL. + * + * The order of arguments does not matter and if any argument is missing, its + * default value will be used. The value type must correspond to the argument + * type as registered for @procedure_name. + * + * Returns: (transfer full): the return values for the procedure call. + * + * Since: 3.0 + */ +PikaValueArray * +pika_procedure_run (PikaProcedure *procedure, + const gchar *first_arg_name, + ...) +{ + PikaValueArray *return_values; + va_list args; + + g_return_val_if_fail (PIKA_IS_PROCEDURE (procedure), NULL); + + va_start (args, first_arg_name); + + return_values = pika_procedure_run_valist (procedure, first_arg_name, args); + + va_end (args); + + return return_values; +} + +/** + * pika_procedure_run_valist: (skip) + * @pdb: the #PikaPDB object. + * @procedure_name: the procedure registered name. + * @first_arg_name: the name of an argument of @procedure_name. + * @args: the call arguments. + * + * Runs @procedure with arguments names and values, given in the order as passed + * to [method@Procedure.run]. + * + * Returns: (transfer full): the return values for the procedure call. + * + * Since: 3.0 + */ +PikaValueArray * +pika_procedure_run_valist (PikaProcedure *procedure, + const gchar *first_arg_name, + va_list args) +{ + PikaValueArray *return_values; + PikaProcedureConfig *config; + const gchar *arg_name; + + g_return_val_if_fail (PIKA_IS_PROCEDURE (procedure), NULL); + + config = pika_procedure_create_config (procedure); + arg_name = first_arg_name; + + while (arg_name != NULL) + { + GParamSpec *pspec; + gchar *error = NULL; + GValue value = G_VALUE_INIT; + + pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), arg_name); + + if (pspec == NULL) + { + g_warning ("%s: %s has no property named '%s'", + G_STRFUNC, + g_type_name (G_TYPE_FROM_INSTANCE (config)), + arg_name); + g_clear_object (&config); + return NULL; + } + + g_value_init (&value, pspec->value_type); + G_VALUE_COLLECT (&value, args, G_VALUE_NOCOPY_CONTENTS, &error); + + if (error) + { + g_warning ("%s: %s", G_STRFUNC, error); + g_free (error); + g_clear_object (&config); + return NULL; + } + + g_object_set_property (G_OBJECT (config), arg_name, &value); + g_value_unset (&value); + + arg_name = va_arg (args, const gchar *); + } + + return_values = pika_procedure_run_config (procedure, config); + g_clear_object (&config); + + return return_values; +} + +/** + * pika_procedure_run_config: (rename-to pika_procedure_run) * @procedure: a @PikaProcedure. * @args: the @procedure's arguments. * - * Runs the procedure, calling the run_func given in [ctor@Procedure.new]. + * Runs @procedure, calling the run_func given in [ctor@Procedure.new]. * * Returns: (transfer full): The @procedure's return values. * * Since: 3.0 **/ PikaValueArray * -pika_procedure_run (PikaProcedure *procedure, - PikaValueArray *args) +pika_procedure_run_config (PikaProcedure *procedure, + PikaProcedureConfig *config) +{ + PikaValueArray *return_vals; + PikaValueArray *args; + + g_return_val_if_fail (PIKA_IS_PROCEDURE (procedure), NULL); + g_return_val_if_fail (PIKA_IS_PROCEDURE_CONFIG (config), NULL); + g_return_val_if_fail (pika_procedure_config_get_procedure (config) == procedure, NULL); + + args = pika_procedure_new_arguments (procedure); + _pika_procedure_config_get_values (config, args); + + return_vals = _pika_procedure_run_array (procedure, args); + + pika_value_array_unref (args); + + return return_vals; +} + +PikaValueArray * +_pika_procedure_run_array (PikaProcedure *procedure, + PikaValueArray *args) { PikaValueArray *return_vals; GError *error = NULL; @@ -1857,8 +1985,6 @@ pika_procedure_run (PikaProcedure *procedure, return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_CALLING_ERROR, error); - g_clear_error (&error); - return return_vals; } @@ -1931,7 +2057,6 @@ pika_procedure_run (PikaProcedure *procedure, return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, error); - g_clear_error (&error); } return return_vals; @@ -1993,6 +2118,43 @@ pika_procedure_create_config (PikaProcedure *procedure) /* private functions */ +/** + * pika_procedure_new_arguments: + * @procedure: the #PikaProcedure. + * + * Format the expected argument values of procedures, in the order as + * added with [method@Procedure.add_argument]. + * + * Returns: (transfer full): the expected #PikaValueArray which could be given as + * arguments to run @procedure, with all values set to + * defaults. Free with pika_value_array_unref(). + * + * Since: 3.0 + **/ +static PikaValueArray * +pika_procedure_new_arguments (PikaProcedure *procedure) +{ + PikaValueArray *args; + GValue value = G_VALUE_INIT; + gint i; + + g_return_val_if_fail (PIKA_IS_PROCEDURE (procedure), NULL); + + args = pika_value_array_new (procedure->priv->n_args); + + for (i = 0; i < procedure->priv->n_args; i++) + { + GParamSpec *pspec = procedure->priv->args[i]; + + g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec)); + g_param_value_set_default (pspec, &value); + pika_value_array_append (args, &value); + g_value_unset (&value); + } + + return args; +} + static gboolean pika_procedure_validate_args (PikaProcedure *procedure, GParamSpec **param_specs, diff --git a/libpika/pikaprocedure.h b/libpika/pikaprocedure.h index 2977f47..0b245ed 100644 --- a/libpika/pikaprocedure.h +++ b/libpika/pikaprocedure.h @@ -38,7 +38,7 @@ G_BEGIN_DECLS /** * PikaRunFunc: * @procedure: the #PikaProcedure that runs. - * @args: the @procedure's arguments. + * @config: the @procedure's arguments in a config object. * @run_data: (closure): the run_data given in pika_procedure_new(). * * The run function is run during the lifetime of the PIKA session, @@ -48,9 +48,9 @@ G_BEGIN_DECLS * * Since: 3.0 **/ -typedef PikaValueArray * (* PikaRunFunc) (PikaProcedure *procedure, - const PikaValueArray *args, - gpointer run_data); +typedef PikaValueArray * (* PikaRunFunc) (PikaProcedure *procedure, + PikaProcedureConfig *config, + gpointer run_data); /** @@ -76,6 +76,7 @@ typedef enum #define PIKA_IS_PROCEDURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PIKA_TYPE_PROCEDURE)) #define PIKA_PROCEDURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PIKA_TYPE_PROCEDURE, PikaProcedureClass)) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (PikaProcedure, g_object_unref); typedef struct _PikaProcedureClass PikaProcedureClass; typedef struct _PikaProcedurePrivate PikaProcedurePrivate; @@ -233,13 +234,18 @@ void pika_procedure_set_argument_sync (PikaProcedure *proced PikaArgumentSync pika_procedure_get_argument_sync (PikaProcedure *procedure, const gchar *arg_name); -PikaValueArray * pika_procedure_new_arguments (PikaProcedure *procedure); PikaValueArray * pika_procedure_new_return_values (PikaProcedure *procedure, PikaPDBStatusType status, GError *error); PikaValueArray * pika_procedure_run (PikaProcedure *procedure, - PikaValueArray *args); + const gchar *first_arg_name, + ...) G_GNUC_NULL_TERMINATED; +PikaValueArray * pika_procedure_run_valist (PikaProcedure *procedure, + const gchar *first_arg_name, + va_list args); +PikaValueArray * pika_procedure_run_config (PikaProcedure *procedure, + PikaProcedureConfig *config); void pika_procedure_extension_ready (PikaProcedure *procedure); @@ -247,6 +253,12 @@ PikaProcedureConfig * pika_procedure_create_config (PikaProcedure *procedure); +/* Internal use */ + +G_GNUC_INTERNAL PikaValueArray * _pika_procedure_run_array (PikaProcedure *procedure, + PikaValueArray *args); + + G_END_DECLS #endif /* __PIKA_PROCEDURE_H__ */ diff --git a/libpika/pikaprocedureconfig-private.h b/libpika/pikaprocedureconfig-private.h index e15d11f..fe4cad6 100644 --- a/libpika/pikaprocedureconfig-private.h +++ b/libpika/pikaprocedureconfig-private.h @@ -22,7 +22,35 @@ #ifndef __PIKA_PROCEDURE_CONFIG_PRIVATE_H__ #define __PIKA_PROCEDURE_CONFIG_PRIVATE_H__ +G_BEGIN_DECLS + +void _pika_procedure_config_get_values (PikaProcedureConfig *config, + PikaValueArray *values); + +void _pika_procedure_config_begin_run (PikaProcedureConfig *config, + PikaImage *image, + PikaRunMode run_mode, + const PikaValueArray *args); +void _pika_procedure_config_end_run (PikaProcedureConfig *config, + PikaPDBStatusType status); + +PikaMetadata * + _pika_procedure_config_begin_export (PikaProcedureConfig *config, + PikaImage *original_image, + PikaRunMode run_mode, + const PikaValueArray *args, + const gchar *mime_type); +void _pika_procedure_config_end_export (PikaProcedureConfig *config, + PikaImage *exported_image, + GFile *file, + PikaPDBStatusType status); + + +/* These 3 functions are not marked internal because they are used in libpikaui. + * The headers is not installed so these functions should be considered not + * existing. Yet they are still exported in the library. + */ gboolean pika_procedure_config_has_default (PikaProcedureConfig *config); gboolean pika_procedure_config_load_default (PikaProcedureConfig *config, @@ -30,17 +58,7 @@ gboolean pika_procedure_config_load_default (PikaProcedureConfig *config, gboolean pika_procedure_config_save_default (PikaProcedureConfig *config, GError **error); -gboolean pika_procedure_config_load_last (PikaProcedureConfig *config, - GError **error); -gboolean pika_procedure_config_save_last (PikaProcedureConfig *config, - GError **error); - -gboolean pika_procedure_config_load_parasite (PikaProcedureConfig *config, - PikaImage *image, - GError **error); -gboolean pika_procedure_config_save_parasite (PikaProcedureConfig *config, - PikaImage *image, - GError **error); +G_END_DECLS #endif /* __PIKA_PROCEDURE_CONFIG_PRIVATE_H__ */ diff --git a/libpika/pikaprocedureconfig.c b/libpika/pikaprocedureconfig.c index b6eb003..d3df31c 100644 --- a/libpika/pikaprocedureconfig.c +++ b/libpika/pikaprocedureconfig.c @@ -68,16 +68,37 @@ struct _PikaProcedureConfigPrivate }; -static void pika_procedure_config_constructed (GObject *object); -static void pika_procedure_config_dispose (GObject *object); -static void pika_procedure_config_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); -static void pika_procedure_config_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); +static void pika_procedure_config_constructed (GObject *object); +static void pika_procedure_config_dispose (GObject *object); +static void pika_procedure_config_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void pika_procedure_config_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + + +static void pika_procedure_config_set_values (PikaProcedureConfig *config, + const PikaValueArray *values); + +static gboolean pika_procedure_config_load_last (PikaProcedureConfig *config, + GError **error); +static gboolean pika_procedure_config_save_last (PikaProcedureConfig *config, + GError **error); + +static gboolean pika_procedure_config_load_parasite (PikaProcedureConfig *config, + PikaImage *image, + GError **error); +static gboolean pika_procedure_config_save_parasite (PikaProcedureConfig *config, + PikaImage *image, + GError **error); + +static GFile * pika_procedure_config_get_file (PikaProcedureConfig *config, + const gchar *extension); +static gchar * pika_procedure_config_parasite_name (PikaProcedureConfig *config, + const gchar *suffix); G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (PikaProcedureConfig, pika_procedure_config, @@ -216,98 +237,6 @@ pika_procedure_config_get_procedure (PikaProcedureConfig *config) return config->priv->procedure; } -/** - * pika_procedure_config_set_values: - * @config: a #PikaProcedureConfig - * @values: a #PikaValueArray - * - * Sets the values from @values on @config's properties. - * - * The number, order and types of values in @values must match the - * number, order and types of @config's properties. - * - * This function is meant to be used on @values which are passed as - * arguments to the run() function of the [class@Procedure] which created - * this @config. See [method@Procedure.create_config]. - * - * Since: 3.0 - **/ -void -pika_procedure_config_set_values (PikaProcedureConfig *config, - const PikaValueArray *values) -{ - GParamSpec **pspecs; - guint n_pspecs; - gint n_aux_args; - gint n_values; - gint i; - - g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (config)); - g_return_if_fail (values != NULL); - - pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), - &n_pspecs); - pika_procedure_get_aux_arguments (config->priv->procedure, &n_aux_args); - n_values = pika_value_array_length (values); - - /* The first property is the procedure, all others are arguments. */ - g_return_if_fail (n_pspecs == n_values + n_aux_args + 1); - - for (i = 0; i < n_values; i++) - { - GParamSpec *pspec = pspecs[i + 1]; - GValue *value = pika_value_array_index (values, i); - - g_object_set_property (G_OBJECT (config), pspec->name, value); - } - - g_free (pspecs); -} - -/** - * pika_procedure_config_get_values: - * @config: a #PikaProcedureConfig - * @values: a #PikaValueArray - * - * Gets the values from @config's properties and stores them in - * @values. - * - * See [method@ProcedureConfig.set_values]. - * - * Since: 3.0 - **/ -void -pika_procedure_config_get_values (PikaProcedureConfig *config, - PikaValueArray *values) -{ - GParamSpec **pspecs; - guint n_pspecs; - gint n_aux_args; - gint n_values; - gint i; - - g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (config)); - g_return_if_fail (values != NULL); - - pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), - &n_pspecs); - pika_procedure_get_aux_arguments (config->priv->procedure, &n_aux_args); - n_values = pika_value_array_length (values); - - /* The config will have 1 additional property: "procedure". */ - g_return_if_fail (n_pspecs == n_values + n_aux_args + 1); - - for (i = 1; i < n_pspecs; i++) - { - GParamSpec *pspec = pspecs[i]; - GValue *value = pika_value_array_index (values, i - 1); - - g_object_get_property (G_OBJECT (config), pspec->name, value); - } - - g_free (pspecs); -} - static void pika_procedure_config_get_parasite (PikaProcedureConfig *config, GParamSpec *pspec) @@ -433,377 +362,6 @@ pika_procedure_config_set_parasite (PikaProcedureConfig *config, g_free (value); } -/** - * pika_procedure_config_begin_run: - * @config: a #PikaProcedureConfig - * @image: (nullable): a #PikaImage or %NULL - * @run_mode: the #PikaRunMode passed to a [class@Procedure]'s run() - * @args: the #PikaValueArray passed to a [class@Procedure]'s run() - * - * Populates @config with values for a [class@Procedure]'s run(), - * depending on @run_mode. - * - * If @run_mode is %PIKA_RUN_INTERACTIVE or %PIKA_RUN_WITH_LAST_VALS, - * the saved values from the procedure's last run() are loaded and set - * on @config. If @image is not %NULL, the last used values for this - * image are tried first, and if no image-specific values are found - * the globally saved last used values are used. If no saved last used - * values are found, the procedure's default argument values are used. - * - * If @run_mode is %PIKA_RUN_NONINTERACTIVE, the contents of @args are - * set on @config using [method@ProcedureConfig.set_values]. - * - * After setting @config's properties like described above, arguments - * and auxiliary arguments are automatically synced from image - * parasites of the same name if they were set to - * %PIKA_ARGUMENT_SYNC_PARASITE with [class@Procedure.set_argument_sync]: - * - * String properties are set to the value of the image parasite if - * @run_mode is %PIKA_RUN_INTERACTIVE or %PIKA_RUN_WITH_LAST_VALS, or - * if the corresponding argument is an auxiliary argument. As a - * special case, a property named "pika-comment" will default to - * [func@get_default_comment] if there is no "pika-comment" parasite. - * - * After calling this function, the @args passed to run() should be - * left alone and @config be treated as the procedure's arguments. - * - * It is possible to get @config's resulting values back into @args by - * calling [method@ProcedureConfig.get_values], as long as modified - * @args are written back to @config using [method@ProcedureConfig.set_values] - * before the call to [method@ProcedureConfig.end_run]. - * - * This function should be used at the beginning of a procedure's - * run() and be paired with a call to [method@ProcedureConfig.end_run] - * at the end of run(). - * - * Since: 3.0 - **/ -void -pika_procedure_config_begin_run (PikaProcedureConfig *config, - PikaImage *image, - PikaRunMode run_mode, - const PikaValueArray *args) -{ - GParamSpec **pspecs; - guint n_pspecs; - gint i; - gboolean loaded = FALSE; - GError *error = NULL; - - g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (config)); - g_return_if_fail (image == NULL || PIKA_IS_IMAGE (image)); - g_return_if_fail (args != NULL); - - config->priv->image = image; - config->priv->run_mode = run_mode; - - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE : - case PIKA_RUN_WITH_LAST_VALS: - if (image) - { - loaded = pika_procedure_config_load_parasite (config, image, - &error); - if (! loaded && error) - { - g_printerr ("Loading last used values from parasite failed: %s\n", - error->message); - g_clear_error (&error); - } - } - - if (! loaded && - ! pika_procedure_config_load_last (config, &error) && error) - { - g_printerr ("Loading last used values from disk failed: %s\n", - error->message); - g_clear_error (&error); - } - break; - - case PIKA_RUN_NONINTERACTIVE: - pika_procedure_config_set_values (config, args); - break; - } - - pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), - &n_pspecs); - - for (i = 0; i < n_pspecs; i++) - { - GParamSpec *pspec = pspecs[i]; - - /* skip our own properties */ - if (pspec->owner_type == PIKA_TYPE_PROCEDURE_CONFIG) - continue; - - switch (pika_procedure_get_argument_sync (config->priv->procedure, - pspec->name)) - { - case PIKA_ARGUMENT_SYNC_PARASITE: - /* we sync the property from the image parasite if it is an - * aux argument, or if we run interactively, because the - * parasite should be global to the image and not depend on - * whatever parasite another image had when last using this - * procedure - */ - if (pika_procedure_find_aux_argument (config->priv->procedure, - pspec->name) || - (run_mode != PIKA_RUN_NONINTERACTIVE)) - { - pika_procedure_config_get_parasite (config, pspec); - } - break; - - default: - break; - } - } - - g_free (pspecs); -} - -/** - * pika_procedure_config_end_run: - * @config: a #PikaProcedureConfig - * @status: the return status of the [class@Procedure]'s run() - * - * This function is the counterpart of - * [method@ProcedureConfig.begin_run] and must always be called in - * pairs in a procedure's run(), before returning return values. - * - * If the @run_mode passed to [method@ProcedureConfig.end_run] was - * %PIKA_RUN_INTERACTIVE, @config is saved as last used values to be - * used when the procedure runs again. Additionally, if the #PikaImage - * passed to [method@ProcedureConfig.begin_run] was not %NULL, @config is - * attached to @image as last used values for this image using a - * #PikaParasite and [method@Image.attach_parasite]. - * - * If @run_mode was not %PIKA_RUN_NONINTERACTIVE, this function also - * conveniently calls [func@displays_flush], which is what most - * procedures want and doesn't do any harm if called redundantly. - * - * After a %PIKA_RUN_INTERACTIVE run, %PIKA_ARGUMENT_SYNC_PARASITE - * values that have been changed are written back to their - * corresponding image parasite. - * - * See [method@ProcedureConfig.begin_run]. - * - * Since: 3.0 - **/ -void -pika_procedure_config_end_run (PikaProcedureConfig *config, - PikaPDBStatusType status) -{ - g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (config)); - - if (config->priv->run_mode != PIKA_RUN_NONINTERACTIVE) - pika_displays_flush (); - - if (status == PIKA_PDB_SUCCESS && - config->priv->run_mode == PIKA_RUN_INTERACTIVE) - { - GParamSpec **pspecs; - guint n_pspecs; - gint i; - GError *error = NULL; - - if (config->priv->image) - pika_procedure_config_save_parasite (config, config->priv->image, - NULL); - - if (! pika_procedure_config_save_last (config, &error)) - { - g_printerr ("Saving last used values to disk failed: %s\n", - error->message); - g_clear_error (&error); - } - - pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), - &n_pspecs); - - for (i = 0; i < n_pspecs; i++) - { - GParamSpec *pspec = pspecs[i]; - - /* skip our own properties */ - if (pspec->owner_type == PIKA_TYPE_PROCEDURE_CONFIG) - continue; - - switch (pika_procedure_get_argument_sync (config->priv->procedure, - pspec->name)) - { - case PIKA_ARGUMENT_SYNC_PARASITE: - pika_procedure_config_set_parasite (config, pspec); - break; - - default: - break; - } - } - - g_free (pspecs); - } - - config->priv->image = NULL; - config->priv->run_mode = -1; -} - -/** - * pika_procedure_config_begin_export: - * @config: a #PikaProcedureConfig - * @original_image: the image passed to run() - * @run_mode: the #PikaRunMode passed to a [class@Procedure]'s run() - * @args: the value array passed to a [class@Procedure]'s run() - * @mime_type: (nullable): exported file format's mime type, or %NULL. - * - * This is a variant of [method@ProcedureConfig.begin_run] to be used - * by file export procedures using [class@SaveProcedure]. It must be - * paired with a call to [method@ProcedureConfig.end_export] at the end - * of run(). - * - * It does everything [method@ProcedureConfig.begin_run] does but - * provides additional features to automate file export: - * - * If @mime_type is non-%NULL, exporting metadata is handled - * automatically, by calling [method@Image.metadata_save_prepare] and - * syncing its returned [flags@MetadataSaveFlags] with @config's - * properties. (The corresponding [method@Image.metadata_save_finish] - * will be called by [method@ProcedureConfig.end_export]). - * - * The following boolean arguments of the used [class@SaveProcedure] are - * synced. The procedure can but must not provide these arguments. - * - * - "save-exif" for %PIKA_METADATA_SAVE_EXIF. - * - "save-xmp" for %PIKA_METADATA_SAVE_XMP. - * - "save-iptc" for %PIKA_METADATA_SAVE_IPTC. - * - "save-thumbnail" for %PIKA_METADATA_SAVE_THUMBNAIL. - * - "save-color-profile" for %PIKA_METADATA_SAVE_COLOR_PROFILE. - * - "save-comment" for %PIKA_METADATA_SAVE_COMMENT. - * - * The values from the [flags@MetadataSaveFlags] will only ever be used - * to set these properties to %FALSE, overriding the user's saved - * default values for the procedure, but NOT overriding the last used - * values from exporting @original_image or the last used values from - * exporting any other image using this procedure. - * - * If @mime_type is %NULL, [class@Metadata] handling is skipped. The - * procedure can still have all of the above listed boolean arguments, - * but must take care of their default values itself. The easiest way - * to do this is by simply using [func@export_comment], [func@export_exif] etc. - * as default values for these arguments when adding them using - * PIKA_PROC_ARG_BOOLEAN() or PIKA_PROC_AUX_ARG_BOOLEAN(). - * - * Returns: (transfer none) (nullable): The metadata to be used - * for this export, or %NULL if @original_image doesn't have - * metadata. - * - * Since: 3.0 - **/ -PikaMetadata * -pika_procedure_config_begin_export (PikaProcedureConfig *config, - PikaImage *original_image, - PikaRunMode run_mode, - const PikaValueArray *args, - const gchar *mime_type) -{ - GObjectClass *object_class; - - g_return_val_if_fail (PIKA_IS_PROCEDURE_CONFIG (config), NULL); - g_return_val_if_fail (PIKA_IS_IMAGE (original_image), NULL); - g_return_val_if_fail (args != NULL, NULL); - - object_class = G_OBJECT_GET_CLASS (config); - - if (mime_type) - { - PikaMetadataSaveFlags metadata_flags; - gint i; - - config->priv->metadata = - pika_image_metadata_save_prepare (original_image, - mime_type, - &metadata_flags); - - if (config->priv->metadata) - { - config->priv->mime_type = g_strdup (mime_type); - config->priv->metadata_flags = metadata_flags; - } - - for (i = 0; i < G_N_ELEMENTS (metadata_properties); i++) - { - /* we only disable properties based on metadata flags here - * and never enable them, so we don't override the user's - * saved default values that are passed to us via "args" - */ - if (! (metadata_flags & metadata_properties[i].flag)) - { - const gchar *prop_name = metadata_properties[i].name; - GParamSpec *pspec; - - pspec = g_object_class_find_property (object_class, prop_name); - if (pspec) - g_object_set (config, - prop_name, FALSE, - NULL); - } - } - } - - pika_procedure_config_begin_run (config, original_image, run_mode, args); - - return config->priv->metadata; -} - -/** - * pika_procedure_config_end_export: - * @config: a #PikaProcedureConfig - * @exported_image: the image that was actually exported - * @file: the #GFile @exported_image was written to - * @status: the return status of the [class@Procedure]'s run() - * - * This is a variant of [method@ProcedureConfig.end_run] to be used by - * file export procedures using [class@SaveProcedure]. It must be paired - * with a call to [method@ProcedureConfig.begin_export] at the - * beginning of run(). - * - * It does everything [method@ProcedureConfig.begin_run] does but - * provides additional features to automate file export: - * - * If @status is %PIKA_PDB_SUCCESS, and - * [method@ProcedureConfig.begin_export] returned a [class@Metadata], this - * function calls [method@ProcedureConfig.save_metadata], which syncs - * back @config's export properties to the metadata's - * [flags@MetadataSaveFlags] and writes metadata to @file using - * [method@Image.metadata_save_finish]. - * - * Since: 3.0 - **/ -void -pika_procedure_config_end_export (PikaProcedureConfig *config, - PikaImage *exported_image, - GFile *file, - PikaPDBStatusType status) -{ - g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (config)); - g_return_if_fail (PIKA_IS_IMAGE (exported_image)); - g_return_if_fail (G_IS_FILE (file)); - - if (status == PIKA_PDB_SUCCESS) - { - pika_procedure_config_save_metadata (config, exported_image, file); - } - - g_clear_object (&config->priv->metadata); - g_clear_pointer (&config->priv->mime_type, g_free); - config->priv->metadata_flags = 0; - config->priv->metadata_saved = FALSE; - - pika_procedure_config_end_run (config, status); -} - /** * pika_procedure_config_save_metadata: * @config: a #PikaProcedureConfig @@ -811,10 +369,10 @@ pika_procedure_config_end_export (PikaProcedureConfig *config, * @file: the file @exported_image was written to * * Note: There is normally no need to call this function because it's - * already called from [method@ProcedureConfig.end_export]. + * already called by [class@SaveProcedure] at the end of the `run()` callback. * - * Only use this function if the [class@Metadata] returned by - * [method@ProcedureConfig.begin_run] needs to be written at a specific + * Only use this function if the [class@Metadata] passed as argument of a + * [class@SaveProcedure]'s run() method needs to be written at a specific * point of the export, other than its end. * * This function syncs back @config's export properties to the @@ -822,8 +380,8 @@ pika_procedure_config_end_export (PikaProcedureConfig *config, * using [method@Image.metadata_save_finish]. * * The metadata is only ever written once. If this function has been - * called explicitly, it will do nothing when called a second time - * from [method@ProcedureConfig.end_export]. + * called explicitly, it will do nothing when called a second time at the end of + * the `run()` callback. * * Since: 3.0 **/ @@ -888,21 +446,484 @@ pika_procedure_config_save_metadata (PikaProcedureConfig *config, } } - -/* private functions */ - -static GFile * -pika_procedure_config_get_file (PikaProcedureConfig *config, - const gchar *extension) +/** + * pika_procedure_config_get_choice_id: + * @config: a #PikaProcedureConfig + * @property_name: the name of a [struct@ParamSpecChoice] property. + * + * A utility function which will get the current string value of a + * [struct@ParamSpecChoice] property in @config and convert it to the integer ID + * mapped to this value. + * This makes it easy to work with an Enum type locally, within a plug-in code. + * + * Since: 3.0 + **/ +gint +pika_procedure_config_get_choice_id (PikaProcedureConfig *config, + const gchar *property_name) { - GFile *file; - gchar *basename; + GParamSpec *param_spec; + PikaParamSpecChoice *cspec; + gchar *value = NULL; + gint id; - basename = g_strconcat (G_OBJECT_TYPE_NAME (config), extension, NULL); - file = pika_directory_file ("plug-in-settings", basename, NULL); - g_free (basename); + param_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), + property_name); - return file; + if (! param_spec) + { + g_warning ("%s: %s has no property named '%s'", + G_STRFUNC, + g_type_name (G_TYPE_FROM_INSTANCE (config)), + property_name); + return 0; + } + + if (! g_type_is_a (G_TYPE_FROM_INSTANCE (param_spec), PIKA_TYPE_PARAM_CHOICE)) + { + g_warning ("%s: property '%s' of %s is not a PikaParamSpecChoice.", + G_STRFUNC, + param_spec->name, + g_type_name (param_spec->owner_type)); + return 0; + } + + cspec = PIKA_PARAM_SPEC_CHOICE (param_spec); + g_object_get (config, + property_name, &value, + NULL); + id = pika_choice_get_id (cspec->choice, value); + + g_free (value); + + return id; +} + + +/* Functions only used by PikaProcedure classes */ + +/** + * _pika_procedure_config_get_values: + * @config: a #PikaProcedureConfig + * @values: a #PikaValueArray + * + * Gets the values from @config's properties and stores them in + * @values. + * + * See [method@ProcedureConfig.set_values]. + * + * Since: 3.0 + **/ +void +_pika_procedure_config_get_values (PikaProcedureConfig *config, + PikaValueArray *values) +{ + GParamSpec **pspecs; + guint n_pspecs; + gint n_aux_args; + gint n_values; + gint i; + + g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (config)); + g_return_if_fail (values != NULL); + + pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), + &n_pspecs); + pika_procedure_get_aux_arguments (config->priv->procedure, &n_aux_args); + n_values = pika_value_array_length (values); + + /* The config will have 1 additional property: "procedure". */ + g_return_if_fail (n_pspecs == n_values + n_aux_args + 1); + + for (i = 1; i < n_pspecs; i++) + { + GParamSpec *pspec = pspecs[i]; + GValue *value = pika_value_array_index (values, i - 1); + + g_object_get_property (G_OBJECT (config), pspec->name, value); + } + + g_free (pspecs); +} + +/** + * _pika_procedure_config_begin_run: + * @config: a #PikaProcedureConfig + * @image: (nullable): a #PikaImage or %NULL + * @run_mode: the #PikaRunMode passed to a [class@Procedure]'s run() + * @args: the #PikaValueArray passed to a [class@Procedure]'s run() + * + * Populates @config with values for a [class@Procedure]'s run(), + * depending on @run_mode. + * + * If @run_mode is %PIKA_RUN_INTERACTIVE or %PIKA_RUN_WITH_LAST_VALS, + * the saved values from the procedure's last run() are loaded and set + * on @config. If @image is not %NULL, the last used values for this + * image are tried first, and if no image-specific values are found + * the globally saved last used values are used. If no saved last used + * values are found, the procedure's default argument values are used. + * + * If @run_mode is %PIKA_RUN_NONINTERACTIVE, the contents of @args are + * set on @config using [method@ProcedureConfig.set_values]. + * + * After setting @config's properties like described above, arguments + * and auxiliary arguments are automatically synced from image + * parasites of the same name if they were set to + * %PIKA_ARGUMENT_SYNC_PARASITE with [class@Procedure.set_argument_sync]: + * + * String properties are set to the value of the image parasite if + * @run_mode is %PIKA_RUN_INTERACTIVE or %PIKA_RUN_WITH_LAST_VALS, or + * if the corresponding argument is an auxiliary argument. As a + * special case, a property named "pika-comment" will default to + * [func@get_default_comment] if there is no "pika-comment" parasite. + * + * After calling this function, the @args passed to run() should be + * left alone and @config be treated as the procedure's arguments. + * + * It is possible to get @config's resulting values back into @args by + * calling [method@ProcedureConfig.get_values], as long as modified + * @args are written back to @config using [method@ProcedureConfig.set_values] + * before the call to [method@ProcedureConfig.end_run]. + * + * This function should be used at the beginning of a procedure's + * run() and be paired with a call to [method@ProcedureConfig.end_run] + * at the end of run(). + * + * Since: 3.0 + **/ +void +_pika_procedure_config_begin_run (PikaProcedureConfig *config, + PikaImage *image, + PikaRunMode run_mode, + const PikaValueArray *args) +{ + GParamSpec *run_mode_pspec; + GParamSpec **pspecs; + guint n_pspecs; + gint i; + gboolean loaded = FALSE; + GError *error = NULL; + + g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (config)); + g_return_if_fail (image == NULL || PIKA_IS_IMAGE (image)); + g_return_if_fail (args != NULL); + + config->priv->image = image; + config->priv->run_mode = run_mode; + + pika_procedure_config_set_values (config, args); + + switch (run_mode) + { + case PIKA_RUN_INTERACTIVE : + case PIKA_RUN_WITH_LAST_VALS: + if (image) + { + loaded = pika_procedure_config_load_parasite (config, image, + &error); + if (! loaded && error) + { + g_printerr ("Loading last used values from parasite failed: %s\n", + error->message); + g_clear_error (&error); + } + } + + if (! loaded && + ! pika_procedure_config_load_last (config, &error) && error) + { + g_printerr ("Loading last used values from disk failed: %s\n", + error->message); + g_clear_error (&error); + } + break; + + case PIKA_RUN_NONINTERACTIVE: + break; + } + + pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), + &n_pspecs); + + for (i = 0; i < n_pspecs; i++) + { + GParamSpec *pspec = pspecs[i]; + + /* skip our own properties */ + if (pspec->owner_type == PIKA_TYPE_PROCEDURE_CONFIG) + continue; + + switch (pika_procedure_get_argument_sync (config->priv->procedure, + pspec->name)) + { + case PIKA_ARGUMENT_SYNC_PARASITE: + /* we sync the property from the image parasite if it is an + * aux argument, or if we run interactively, because the + * parasite should be global to the image and not depend on + * whatever parasite another image had when last using this + * procedure + */ + if (pika_procedure_find_aux_argument (config->priv->procedure, + pspec->name) || + (run_mode != PIKA_RUN_NONINTERACTIVE)) + { + pika_procedure_config_get_parasite (config, pspec); + } + break; + + default: + break; + } + } + + /* Always set the run-mode in the end, which should be influenced neither by + * the default property value, nor last run's value. + */ + run_mode_pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "run-mode"); + if (run_mode_pspec != NULL && G_IS_PARAM_SPEC_ENUM (run_mode_pspec)) + g_object_set (config, "run-mode", run_mode, NULL); + + g_free (pspecs); +} + +/** + * _pika_procedure_config_end_run: + * @config: a #PikaProcedureConfig + * @status: the return status of the [class@Procedure]'s run() + * + * This function is the counterpart of + * [method@ProcedureConfig.begin_run] and must always be called in + * pairs in a procedure's run(), before returning return values. + * + * If the @run_mode passed to [method@ProcedureConfig.end_run] was + * %PIKA_RUN_INTERACTIVE, @config is saved as last used values to be + * used when the procedure runs again. Additionally, if the #PikaImage + * passed to [method@ProcedureConfig.begin_run] was not %NULL, @config is + * attached to @image as last used values for this image using a + * #PikaParasite and [method@Image.attach_parasite]. + * + * If @run_mode was not %PIKA_RUN_NONINTERACTIVE, this function also + * conveniently calls [func@displays_flush], which is what most + * procedures want and doesn't do any harm if called redundantly. + * + * After a %PIKA_RUN_INTERACTIVE run, %PIKA_ARGUMENT_SYNC_PARASITE + * values that have been changed are written back to their + * corresponding image parasite. + * + * See [method@ProcedureConfig.begin_run]. + * + * Since: 3.0 + **/ +void +_pika_procedure_config_end_run (PikaProcedureConfig *config, + PikaPDBStatusType status) +{ + g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (config)); + + if (config->priv->run_mode != PIKA_RUN_NONINTERACTIVE) + pika_displays_flush (); + + if (status == PIKA_PDB_SUCCESS && + config->priv->run_mode == PIKA_RUN_INTERACTIVE) + { + GParamSpec **pspecs; + guint n_pspecs; + gint i; + GError *error = NULL; + + if (config->priv->image) + pika_procedure_config_save_parasite (config, config->priv->image, + NULL); + + if (! pika_procedure_config_save_last (config, &error)) + { + g_printerr ("Saving last used values to disk failed: %s\n", + error->message); + g_clear_error (&error); + } + + pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), + &n_pspecs); + + for (i = 0; i < n_pspecs; i++) + { + GParamSpec *pspec = pspecs[i]; + + /* skip our own properties */ + if (pspec->owner_type == PIKA_TYPE_PROCEDURE_CONFIG) + continue; + + switch (pika_procedure_get_argument_sync (config->priv->procedure, + pspec->name)) + { + case PIKA_ARGUMENT_SYNC_PARASITE: + pika_procedure_config_set_parasite (config, pspec); + break; + + default: + break; + } + } + + g_free (pspecs); + } + + config->priv->image = NULL; + config->priv->run_mode = -1; +} + +/** + * _pika_procedure_config_begin_export: + * @config: a #PikaProcedureConfig + * @original_image: the image passed to run() + * @run_mode: the #PikaRunMode passed to a [class@Procedure]'s run() + * @args: the value array passed to a [class@Procedure]'s run() + * @mime_type: (nullable): exported file format's mime type, or %NULL. + * + * This is a variant of [method@ProcedureConfig.begin_run] to be used + * by file export procedures using [class@SaveProcedure]. It must be + * paired with a call to [method@ProcedureConfig.end_export] at the end + * of run(). + * + * It does everything [method@ProcedureConfig.begin_run] does but + * provides additional features to automate file export: + * + * If @mime_type is non-%NULL, exporting metadata is handled + * automatically, by calling [method@Image.metadata_save_prepare] and + * syncing its returned [flags@MetadataSaveFlags] with @config's + * properties. (The corresponding [method@Image.metadata_save_finish] + * will be called by [method@ProcedureConfig.end_export]). + * + * The following boolean arguments of the used [class@SaveProcedure] are + * synced. The procedure can but must not provide these arguments. + * + * - "save-exif" for %PIKA_METADATA_SAVE_EXIF. + * - "save-xmp" for %PIKA_METADATA_SAVE_XMP. + * - "save-iptc" for %PIKA_METADATA_SAVE_IPTC. + * - "save-thumbnail" for %PIKA_METADATA_SAVE_THUMBNAIL. + * - "save-color-profile" for %PIKA_METADATA_SAVE_COLOR_PROFILE. + * - "save-comment" for %PIKA_METADATA_SAVE_COMMENT. + * + * The values from the [flags@MetadataSaveFlags] will only ever be used + * to set these properties to %FALSE, overriding the user's saved + * default values for the procedure, but NOT overriding the last used + * values from exporting @original_image or the last used values from + * exporting any other image using this procedure. + * + * If @mime_type is %NULL, [class@Metadata] handling is skipped. The + * procedure can still have all of the above listed boolean arguments, + * but must take care of their default values itself. The easiest way + * to do this is by simply using [func@export_comment], [func@export_exif] etc. + * as default values for these arguments when adding them using + * PIKA_PROC_ARG_BOOLEAN() or PIKA_PROC_AUX_ARG_BOOLEAN(). + * + * Returns: (transfer none) (nullable): The metadata to be used + * for this export, or %NULL if @original_image doesn't have + * metadata. + * + * Since: 3.0 + **/ +PikaMetadata * +_pika_procedure_config_begin_export (PikaProcedureConfig *config, + PikaImage *original_image, + PikaRunMode run_mode, + const PikaValueArray *args, + const gchar *mime_type) +{ + GObjectClass *object_class; + + g_return_val_if_fail (PIKA_IS_PROCEDURE_CONFIG (config), NULL); + g_return_val_if_fail (PIKA_IS_IMAGE (original_image), NULL); + g_return_val_if_fail (args != NULL, NULL); + + object_class = G_OBJECT_GET_CLASS (config); + + if (mime_type) + { + PikaMetadataSaveFlags metadata_flags; + gint i; + + config->priv->metadata = + pika_image_metadata_save_prepare (original_image, + mime_type, + &metadata_flags); + + if (config->priv->metadata) + { + config->priv->mime_type = g_strdup (mime_type); + config->priv->metadata_flags = metadata_flags; + } + + for (i = 0; i < G_N_ELEMENTS (metadata_properties); i++) + { + /* we only disable properties based on metadata flags here + * and never enable them, so we don't override the user's + * saved default values that are passed to us via "args" + */ + if (! (metadata_flags & metadata_properties[i].flag)) + { + const gchar *prop_name = metadata_properties[i].name; + GParamSpec *pspec; + + pspec = g_object_class_find_property (object_class, prop_name); + if (pspec) + g_object_set (config, + prop_name, FALSE, + NULL); + } + } + } + + _pika_procedure_config_begin_run (config, original_image, run_mode, args); + + return config->priv->metadata; +} + +/** + * _pika_procedure_config_end_export: + * @config: a #PikaProcedureConfig + * @exported_image: the image that was actually exported + * @file: the #GFile @exported_image was written to + * @status: the return status of the [class@Procedure]'s run() + * + * This is a variant of [method@ProcedureConfig.end_run] to be used by + * file export procedures using [class@SaveProcedure]. It must be paired + * with a call to [method@ProcedureConfig.begin_export] at the + * beginning of run(). + * + * It does everything [method@ProcedureConfig.begin_run] does but + * provides additional features to automate file export: + * + * If @status is %PIKA_PDB_SUCCESS, and + * [method@ProcedureConfig.begin_export] returned a [class@Metadata], this + * function calls [method@ProcedureConfig.save_metadata], which syncs + * back @config's export properties to the metadata's + * [flags@MetadataSaveFlags] and writes metadata to @file using + * [method@Image.metadata_save_finish]. + * + * Since: 3.0 + **/ +void +_pika_procedure_config_end_export (PikaProcedureConfig *config, + PikaImage *exported_image, + GFile *file, + PikaPDBStatusType status) +{ + g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (config)); + g_return_if_fail (PIKA_IS_IMAGE (exported_image)); + g_return_if_fail (G_IS_FILE (file)); + + if (status == PIKA_PDB_SUCCESS) + { + pika_procedure_config_save_metadata (config, exported_image, file); + } + + g_clear_object (&config->priv->metadata); + g_clear_pointer (&config->priv->mime_type, g_free); + config->priv->metadata_flags = 0; + config->priv->metadata_saved = FALSE; + + _pika_procedure_config_end_run (config, status); } gboolean @@ -970,7 +991,58 @@ pika_procedure_config_save_default (PikaProcedureConfig *config, return success; } -gboolean + +/* private functions */ + +/** + * pika_procedure_config_set_values: + * @config: a #PikaProcedureConfig + * @values: a #PikaValueArray + * + * Sets the values from @values on @config's properties. + * + * The number, order and types of values in @values must match the + * number, order and types of @config's properties. + * + * This function is meant to be used on @values which are passed as + * arguments to the run() function of the [class@Procedure] which created + * this @config. See [method@Procedure.create_config]. + * + * Since: 3.0 + **/ +static void +pika_procedure_config_set_values (PikaProcedureConfig *config, + const PikaValueArray *values) +{ + GParamSpec **pspecs; + guint n_pspecs; + gint n_aux_args; + gint n_values; + gint i; + + g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (config)); + g_return_if_fail (values != NULL); + + pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), + &n_pspecs); + pika_procedure_get_aux_arguments (config->priv->procedure, &n_aux_args); + n_values = pika_value_array_length (values); + + /* The first property is the procedure, all others are arguments. */ + g_return_if_fail (n_pspecs == n_values + n_aux_args + 1); + + for (i = 0; i < n_values; i++) + { + GParamSpec *pspec = pspecs[i + 1]; + GValue *value = pika_value_array_index (values, i); + + g_object_set_property (G_OBJECT (config), pspec->name, value); + } + + g_free (pspecs); +} + +static gboolean pika_procedure_config_load_last (PikaProcedureConfig *config, GError **error) { @@ -996,7 +1068,7 @@ pika_procedure_config_load_last (PikaProcedureConfig *config, return success; } -gboolean +static gboolean pika_procedure_config_save_last (PikaProcedureConfig *config, GError **error) { @@ -1019,14 +1091,7 @@ pika_procedure_config_save_last (PikaProcedureConfig *config, return success; } -static gchar * -pika_procedure_config_parasite_name (PikaProcedureConfig *config, - const gchar *suffix) -{ - return g_strconcat (G_OBJECT_TYPE_NAME (config), suffix, NULL); -} - -gboolean +static gboolean pika_procedure_config_load_parasite (PikaProcedureConfig *config, PikaImage *image, GError **error) @@ -1054,7 +1119,7 @@ pika_procedure_config_load_parasite (PikaProcedureConfig *config, return success; } -gboolean +static gboolean pika_procedure_config_save_parasite (PikaProcedureConfig *config, PikaImage *image, GError **error) @@ -1081,3 +1146,24 @@ pika_procedure_config_save_parasite (PikaProcedureConfig *config, return TRUE; } + +static GFile * +pika_procedure_config_get_file (PikaProcedureConfig *config, + const gchar *extension) +{ + GFile *file; + gchar *basename; + + basename = g_strconcat (G_OBJECT_TYPE_NAME (config), extension, NULL); + file = pika_directory_file ("plug-in-settings", basename, NULL); + g_free (basename); + + return file; +} + +static gchar * +pika_procedure_config_parasite_name (PikaProcedureConfig *config, + const gchar *suffix) +{ + return g_strconcat (G_OBJECT_TYPE_NAME (config), suffix, NULL); +} diff --git a/libpika/pikaprocedureconfig.h b/libpika/pikaprocedureconfig.h index 779c2e5..5daa8c0 100644 --- a/libpika/pikaprocedureconfig.h +++ b/libpika/pikaprocedureconfig.h @@ -70,34 +70,18 @@ GType pika_procedure_config_get_type (void) G_GNUC_CONST; PikaProcedure * pika_procedure_config_get_procedure (PikaProcedureConfig *config); -void pika_procedure_config_set_values (PikaProcedureConfig *config, - const PikaValueArray *values); -void pika_procedure_config_get_values (PikaProcedureConfig *config, - PikaValueArray *values); - -void pika_procedure_config_begin_run (PikaProcedureConfig *config, - PikaImage *image, - PikaRunMode run_mode, - const PikaValueArray *args); -void pika_procedure_config_end_run (PikaProcedureConfig *config, - PikaPDBStatusType status); - -PikaMetadata * - pika_procedure_config_begin_export (PikaProcedureConfig *config, - PikaImage *original_image, - PikaRunMode run_mode, - const PikaValueArray *args, - const gchar *mime_type); -void pika_procedure_config_end_export (PikaProcedureConfig *config, - PikaImage *exported_image, - GFile *file, - PikaPDBStatusType status); void pika_procedure_config_save_metadata (PikaProcedureConfig *config, PikaImage *exported_image, GFile *file); +/* Utility functions */ + +gint pika_procedure_config_get_choice_id (PikaProcedureConfig *config, + const gchar *property_name); + + G_END_DECLS #endif /* __PIKA_PROCEDURE_CONFIG_H__ */ diff --git a/libpika/pikaproceduredialog.c b/libpika/pikaproceduredialog.c index 716b16b..d1cf1f2 100644 --- a/libpika/pikaproceduredialog.c +++ b/libpika/pikaproceduredialog.c @@ -30,9 +30,10 @@ #include "libpikawidgets/pikawidgets.h" -#include "libpika/pikapropchooser-private.h" +#include "libpika/pikapropwidgets.h" #include "pika.h" +#include "pikapropwidgets.h" #include "pikaui.h" #include "pikaprocedureconfig-private.h" @@ -61,6 +62,7 @@ struct _PikaProcedureDialogPrivate PikaProcedureConfig *config; PikaProcedureConfig *initial_config; + GtkWidget *ok_button; GtkWidget *reset_popover; GtkWidget *load_settings_button; @@ -81,6 +83,15 @@ typedef struct PikaProcedureDialogSensitiveData gboolean config_invert; } PikaProcedureDialogSensitiveData; +typedef struct PikaProcedureDialogSensitiveData2 +{ + PikaProcedureDialog *dialog; + gchar *widget_property; + + PikaValueArray *values; + gboolean in_values; +} PikaProcedureDialogSensitiveData2; + static GObject * pika_procedure_dialog_constructor (GType type, guint n_construct_properties, @@ -120,7 +131,11 @@ static GtkWidget * GtkContainer *container, GList *properties); -static void pika_procedure_dialog_sensitive_data_free (PikaProcedureDialogSensitiveData *data); +static void pika_procedure_dialog_set_sensitive_if_in_cb (GObject *config, + GParamSpec *param_spec, + PikaProcedureDialogSensitiveData2 *data); +static void pika_procedure_dialog_sensitive_data_free (PikaProcedureDialogSensitiveData *data); +static void pika_procedure_dialog_sensitive_cb_data_free (PikaProcedureDialogSensitiveData2 *data); G_DEFINE_TYPE_WITH_PRIVATE (PikaProcedureDialog, pika_procedure_dialog, @@ -195,9 +210,13 @@ pika_procedure_dialog_constructor (GType type, gboolean use_header_bar_edited = FALSE; gboolean help_func_edited = FALSE; - g_object_get (gtk_settings_get_default (), - "gtk-dialogs-use-header", &use_header_bar, - NULL); + if (gtk_settings_get_default () != NULL) + g_object_get (gtk_settings_get_default (), + "gtk-dialogs-use-header", &use_header_bar, + NULL); + else + g_warning ("%s: no default screen. Did you call pika_ui_init()?", G_STRFUNC); + for (guint i = 0; i < n_construct_properties; i++) { @@ -310,6 +329,7 @@ pika_procedure_dialog_constructed (GObject *object) pika_procedure_dialog_check_mnemonic (PIKA_PROCEDURE_DIALOG (dialog), button, NULL, "cancel"); button = pika_dialog_add_button (PIKA_DIALOG (dialog), ok_label, GTK_RESPONSE_OK); + dialog->priv->ok_button = button; pika_procedure_dialog_check_mnemonic (PIKA_PROCEDURE_DIALOG (dialog), button, NULL, "ok"); /* OK button is the default action and has focus from start. * This allows to just accept quickly whatever default values. @@ -487,11 +507,6 @@ pika_procedure_dialog_real_fill_list (PikaProcedureDialog *dialog, widget = pika_procedure_dialog_get_widget (dialog, iter->data, G_TYPE_NONE); if (widget) { - /* Reference the widget because the hash table will - * unreference it anyway when getting destroyed so we don't - * want to give the only reference to the parent widget. - */ - g_object_ref (widget); gtk_box_pack_start (GTK_BOX (content_area), widget, TRUE, TRUE, 0); gtk_widget_show (widget); } @@ -537,6 +552,34 @@ pika_procedure_dialog_new (PikaProcedure *procedure, NULL); } +/** + * pika_procedure_dialog_set_ok_label: + * @dialog: the associated #PikaProcedureDialog. + * @ok_label: a label to replace the OK button's text. + * + * Changes the "OK" button's label of @dialog to @ok_label. + */ +void +pika_procedure_dialog_set_ok_label (PikaProcedureDialog *dialog, + const gchar *ok_label) +{ + if (ok_label == NULL) + { + PikaProcedure *procedure = dialog->priv->procedure; + + if (PIKA_IS_LOAD_PROCEDURE (procedure)) + ok_label = _("_Open"); + else if (PIKA_IS_SAVE_PROCEDURE (procedure)) + ok_label = _("_Export"); + else + ok_label = _("_OK"); + } + + gtk_button_set_label (GTK_BUTTON (dialog->priv->ok_button), ok_label); + pika_procedure_dialog_check_mnemonic (PIKA_PROCEDURE_DIALOG (dialog), + dialog->priv->ok_button, NULL, "ok"); +} + /** * pika_procedure_dialog_get_widget: * @dialog: the associated #PikaProcedureDialog. @@ -731,27 +774,40 @@ pika_procedure_dialog_get_widget (PikaProcedureDialog *dialog, property, NULL, GTK_FILE_CHOOSER_ACTION_OPEN); } + else if (G_PARAM_SPEC_TYPE (pspec) == PIKA_TYPE_PARAM_CHOICE) + { + widget = pika_prop_choice_combo_box_new (G_OBJECT (dialog->priv->config), property); + gtk_widget_set_vexpand (widget, FALSE); + gtk_widget_set_hexpand (widget, TRUE); + widget = pika_label_string_widget_new (g_param_spec_get_nick (pspec), widget); + } /* PikaResource subclasses */ /* FUTURE: title the chooser more specifically, with a prefix that is the nick of the property. */ else if (G_IS_PARAM_SPEC_OBJECT (pspec) && pspec->value_type == PIKA_TYPE_BRUSH) { - widget = pika_prop_chooser_brush_new (G_OBJECT (dialog->priv->config), property, _("Brush Chooser")); + widget = pika_prop_brush_chooser_new (G_OBJECT (dialog->priv->config), property, _("Brush Chooser")); } else if (G_IS_PARAM_SPEC_OBJECT (pspec) && pspec->value_type == PIKA_TYPE_FONT) { - widget = pika_prop_chooser_font_new (G_OBJECT (dialog->priv->config), property, _("Font Chooser")); + widget = pika_prop_font_chooser_new (G_OBJECT (dialog->priv->config), property, _("Font Chooser")); } else if (G_IS_PARAM_SPEC_OBJECT (pspec) && pspec->value_type == PIKA_TYPE_GRADIENT) { - widget = pika_prop_chooser_gradient_new (G_OBJECT (dialog->priv->config), property, _("Gradient Chooser")); + widget = pika_prop_gradient_chooser_new (G_OBJECT (dialog->priv->config), property, _("Gradient Chooser")); } else if (G_IS_PARAM_SPEC_OBJECT (pspec) && pspec->value_type == PIKA_TYPE_PALETTE) { - widget = pika_prop_chooser_palette_new (G_OBJECT (dialog->priv->config), property, _("Palette Chooser")); + widget = pika_prop_palette_chooser_new (G_OBJECT (dialog->priv->config), property, _("Palette Chooser")); } else if (G_IS_PARAM_SPEC_OBJECT (pspec) && pspec->value_type == PIKA_TYPE_PATTERN) { - widget = pika_prop_chooser_pattern_new (G_OBJECT (dialog->priv->config), property, _("Pattern Chooser")); + widget = pika_prop_pattern_chooser_new (G_OBJECT (dialog->priv->config), property, _("Pattern Chooser")); + } + else if (G_IS_PARAM_SPEC_OBJECT (pspec) && (pspec->value_type == PIKA_TYPE_DRAWABLE || + pspec->value_type == PIKA_TYPE_LAYER || + pspec->value_type == PIKA_TYPE_CHANNEL)) + { + widget = pika_prop_drawable_chooser_new (G_OBJECT (dialog->priv->config), property, NULL); } else if (G_PARAM_SPEC_TYPE (pspec) == G_TYPE_PARAM_ENUM) { @@ -786,15 +842,21 @@ pika_procedure_dialog_get_widget (PikaProcedureDialog *dialog, else { const gchar *tooltip = g_param_spec_get_blurb (pspec); + if (tooltip) pika_help_set_help_data (widget, tooltip, NULL); - if (PIKA_IS_LABELED (widget) || label) - { - if (! label) - label = pika_labeled_get_label (PIKA_LABELED (widget)); - gtk_size_group_add_widget (dialog->priv->label_group, label); + if (label == NULL) + { + if (PIKA_IS_LABELED (widget)) + label = pika_labeled_get_label (PIKA_LABELED (widget)); + else if (PIKA_IS_RESOURCE_CHOOSER (widget)) + label = pika_resource_chooser_get_label (PIKA_RESOURCE_CHOOSER (widget)); + else if (PIKA_IS_DRAWABLE_CHOOSER (widget)) + label = pika_drawable_chooser_get_label (PIKA_DRAWABLE_CHOOSER (widget)); } + if (label != NULL) + gtk_size_group_add_widget (dialog->priv->label_group, label); } if ((binding = g_hash_table_lookup (dialog->priv->sensitive_data, property))) @@ -1317,17 +1379,23 @@ pika_procedure_dialog_get_size_entry (PikaProcedureDialog *dialog, /** * pika_procedure_dialog_get_label: - * @dialog: the #PikaProcedureDialog. - * @label_id: the label for the #GtkLabel. - * @text: the text for the label. + * @dialog: the #PikaProcedureDialog. + * @label_id: the label for the #GtkLabel. + * @text: the text for the label. + * @is_markup: whether @text is formatted with Pango markup. + * @with_mnemonic: whether @text contains a mnemonic character. * * Creates a new #GtkLabel with @text. It can be useful for packing * textual information in between property settings. * - * The @label_id must be a unique ID which is neither the name of a - * property of the #PikaProcedureConfig associated to @dialog, nor is it - * the ID of any previously created label or container. This ID can - * later be used together with property names to be packed in other + * If @label_id is an existing string property of the #PikaProcedureConfig + * associated to @dialog, then it will sync to the property value. In this case, + * @text should be %NULL. + * + * If @label_id is a unique ID which is neither the name of a property of the + * #PikaProcedureConfig associated to @dialog, nor is it the ID of any + * previously created label or container, it will be initialized to @text. This + * ID can later be used together with property names to be packed in other * containers or inside @dialog itself. * * Returns: (transfer none): the #GtkWidget representing @label_id. The @@ -1337,16 +1405,21 @@ pika_procedure_dialog_get_size_entry (PikaProcedureDialog *dialog, GtkWidget * pika_procedure_dialog_get_label (PikaProcedureDialog *dialog, const gchar *label_id, - const gchar *text) + const gchar *text, + gboolean is_markup, + gboolean with_mnemonic) { - GtkWidget *label; + GtkWidget *label; + GParamSpec *pspec; g_return_val_if_fail (label_id != NULL, NULL); - if (g_object_class_find_property (G_OBJECT_GET_CLASS (dialog->priv->config), - label_id)) + pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (dialog->priv->config), + label_id); + if (pspec != NULL && G_PARAM_SPEC_TYPE (pspec) != G_TYPE_PARAM_STRING) { - g_warning ("%s: label identifier '%s' cannot be an existing property name.", + g_warning ("%s: label identifier '%s' must either not already exist or " + "be an existing string property.", G_STRFUNC, label_id); return NULL; } @@ -1358,7 +1431,18 @@ pika_procedure_dialog_get_label (PikaProcedureDialog *dialog, return label; } - label = gtk_label_new (text); + label = gtk_label_new (NULL); + g_object_set (label, + "use-markup", is_markup, + "use-underline", with_mnemonic, + NULL); + if (pspec != NULL) + g_object_bind_property (dialog->priv->config, label_id, + label, "label", + G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); + else + g_object_set (label, "label", text, NULL); + g_hash_table_insert (dialog->priv->widgets, g_strdup (label_id), label); if (g_object_is_floating (label)) g_object_ref_sink (label); @@ -1539,6 +1623,8 @@ pika_procedure_dialog_fill_list (PikaProcedureDialog *dialog, if (properties) free_properties = TRUE; + + g_free (pspecs); } PIKA_PROCEDURE_DIALOG_GET_CLASS (dialog)->fill_list (dialog, @@ -1800,7 +1886,6 @@ pika_procedure_dialog_fill_frame (PikaProcedureDialog *dialog, return frame; } - g_object_ref (contents); gtk_container_add (GTK_CONTAINER (frame), contents); gtk_widget_show (contents); } @@ -1815,7 +1900,6 @@ pika_procedure_dialog_fill_frame (PikaProcedureDialog *dialog, return frame; } - g_object_ref (title); gtk_frame_set_label_widget (GTK_FRAME (frame), title); gtk_widget_show (title); @@ -1905,7 +1989,6 @@ pika_procedure_dialog_fill_expander (PikaProcedureDialog *dialog, return expander; } - g_object_ref (contents); gtk_container_add (GTK_CONTAINER (expander), contents); gtk_widget_show (contents); } @@ -1920,7 +2003,6 @@ pika_procedure_dialog_fill_expander (PikaProcedureDialog *dialog, return expander; } - g_object_ref (title); gtk_expander_set_label_widget (GTK_EXPANDER (expander), title); gtk_expander_set_resize_toplevel (GTK_EXPANDER (expander), TRUE); gtk_widget_show (title); @@ -2002,6 +2084,212 @@ pika_procedure_dialog_fill_scrolled_window (PikaProcedureDialog *dialog, return scrolled_window; } +/** + * pika_procedure_dialog_fill_notebook: + * @dialog: the #PikaProcedureDialog. + * @container_id: a container identifier. + * @label_id: the first page's label. + * @page_id: the first page's contents. + * @...: a %NULL-terminated list of other property names. + * + * Creates and populates a new #GtkNotebook with widgets corresponding to every + * listed properties. + * This is similar of how pika_procedure_dialog_fill() works except that it + * creates a new widget which is not inside @dialog itself. + * + * The @container_id must be a unique ID which is neither the name of a + * property of the #PikaProcedureConfig associated to @dialog, nor is it + * the ID of any previously created container. This ID can later be used + * together with property names to be packed in other containers or + * inside @dialog itself. + * + * Returns: (transfer none): the #GtkNotebook representing @property. The + * object belongs to @dialog and must not be + * freed. + */ +GtkWidget * +pika_procedure_dialog_fill_notebook (PikaProcedureDialog *dialog, + const gchar *container_id, + const gchar *label_id, + const gchar *page_id, + ...) +{ + GtkWidget *notebook; + GList *label_list = NULL; + GList *page_list = NULL; + va_list va_args; + + g_return_val_if_fail (PIKA_IS_PROCEDURE_DIALOG (dialog), NULL); + g_return_val_if_fail (container_id != NULL, NULL); + g_return_val_if_fail (label_id != NULL && page_id != NULL, NULL); + + va_start (va_args, page_id); + + do + { + label_list = g_list_prepend (label_list, (gpointer) label_id); + page_list = g_list_prepend (page_list, (gpointer) page_id); + + label_id = va_arg (va_args, const gchar *); + page_id = va_arg (va_args, const gchar *); + } + while (label_id != NULL && page_id != NULL); + + va_end (va_args); + + label_list = g_list_reverse (label_list); + page_list = g_list_reverse (page_list); + notebook = pika_procedure_dialog_fill_notebook_list (dialog, container_id, label_list, page_list); + g_list_free (label_list); + g_list_free (page_list); + + return notebook; +} + +/** + * pika_procedure_dialog_fill_notebook_list: (rename-to pika_procedure_dialog_fill_notebook) + * @dialog: the #PikaProcedureDialog. + * @container_id: a container identifier. + * @label_list: (not nullable) (element-type gchar*): the list of label IDs. + * @page_list: (not nullable) (element-type gchar*): the list of page IDs. + * + * Creates and populates a new #GtkNotebook with widgets corresponding to every + * listed properties. + * This is similar of how pika_procedure_dialog_fill_list() works except that it + * creates a new widget which is not inside @dialog itself. + * + * The @container_id must be a unique ID which is neither the name of a + * property of the #PikaProcedureConfig associated to @dialog, nor is it + * the ID of any previously created container. This ID can later be used + * together with property names to be packed in other containers or + * inside @dialog itself. + * + * Returns: (transfer none): the #GtkNotebook representing @property. The + * object belongs to @dialog and must not be + * freed. + */ +GtkWidget * +pika_procedure_dialog_fill_notebook_list (PikaProcedureDialog *dialog, + const gchar *container_id, + GList *label_list, + GList *page_list) +{ + GtkWidget *notebook; + GList *iter_label = label_list; + GList *iter_page = page_list; + + g_return_val_if_fail (container_id != NULL, NULL); + g_return_val_if_fail (g_list_length (label_list) > 0 && + g_list_length (label_list) == g_list_length (page_list), NULL); + + if (g_object_class_find_property (G_OBJECT_GET_CLASS (dialog->priv->config), + container_id)) + { + g_warning ("%s: container identifier '%s' cannot be an existing property name.", + G_STRFUNC, container_id); + return NULL; + } + + if (g_hash_table_lookup (dialog->priv->widgets, container_id)) + { + g_warning ("%s: container identifier '%s' was already configured.", + G_STRFUNC, container_id); + return g_hash_table_lookup (dialog->priv->widgets, container_id); + } + + notebook = gtk_notebook_new (); + g_object_ref_sink (notebook); + + for (; iter_label; iter_label = iter_label->next, iter_page = iter_page->next) + { + GtkWidget *label; + GtkWidget *page; + + label = pika_procedure_dialog_get_widget (dialog, iter_label->data, G_TYPE_NONE); + page = pika_procedure_dialog_get_widget (dialog, iter_page->data, G_TYPE_NONE); + if (label != NULL && page != NULL) + { + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label); + gtk_widget_show (label); + gtk_widget_show (page); + } + } + + g_hash_table_insert (dialog->priv->widgets, g_strdup (container_id), notebook); + + return notebook; +} + +/** + * pika_procedure_dialog_fill_paned: + * @dialog: the #PikaProcedureDialog. + * @container_id: a container identifier. + * @child1_id: (nullable): the first child's ID. + * @child2_id: (nullable): the second child's ID. + * + * Creates and populates a new #GtkPaned containing widgets corresponding to + * @child1_id and @child2_id. + * This is similar of how pika_procedure_dialog_fill() works except that it + * creates a new widget which is not inside @dialog itself. + * + * The @container_id must be a unique ID which is neither the name of a + * property of the #PikaProcedureConfig associated to @dialog, nor is it + * the ID of any previously created container. This ID can later be used + * together with property names to be packed in other containers or + * inside @dialog itself. + * + * Returns: (transfer none): the #GtkPaned representing @property. The + * object belongs to @dialog and must not be + * freed. + */ +GtkWidget * +pika_procedure_dialog_fill_paned (PikaProcedureDialog *dialog, + const gchar *container_id, + GtkOrientation orientation, + const gchar *child1_id, + const gchar *child2_id) +{ + GtkWidget *paned; + GtkWidget *child1; + GtkWidget *child2; + + g_return_val_if_fail (container_id != NULL, NULL); + + if (g_object_class_find_property (G_OBJECT_GET_CLASS (dialog->priv->config), + container_id)) + { + g_warning ("%s: container identifier '%s' cannot be an existing property name.", + G_STRFUNC, container_id); + return NULL; + } + + if (g_hash_table_lookup (dialog->priv->widgets, container_id)) + { + g_warning ("%s: container identifier '%s' was already configured.", + G_STRFUNC, container_id); + return g_hash_table_lookup (dialog->priv->widgets, container_id); + } + + paned = gtk_paned_new (orientation); + g_object_ref_sink (paned); + + if (child1_id != NULL) + { + child1 = pika_procedure_dialog_get_widget (dialog, child1_id, G_TYPE_NONE); + gtk_paned_pack1 (GTK_PANED (paned), child1, TRUE, FALSE); + gtk_widget_show (child1); + } + if (child2_id != NULL) + { + child2 = pika_procedure_dialog_get_widget (dialog, child2_id, G_TYPE_NONE); + gtk_paned_pack2 (GTK_PANED (paned), child2, TRUE, FALSE); + gtk_widget_show (child2); + } + + g_hash_table_insert (dialog->priv->widgets, g_strdup (container_id), paned); + + return paned; +} /** * pika_procedure_dialog_set_sensitive: @@ -2093,6 +2381,82 @@ pika_procedure_dialog_set_sensitive (PikaProcedureDialog *dialog, } } +/** + * pika_procedure_dialog_set_sensitive_if_in: + * @dialog: the #PikaProcedureDialog. + * @property: name of a property of the #PikaProcedure @dialog + * has been created for. + * @config: (nullable): an optional config object (if %NULL, + * @property's config will be used). + * @config_property: name of a property of @config. + * @values: (not nullable) (transfer full): + * an array of GValues which could be values of @config_property. + * @in_values: whether @property should be sensitive when @config_property + * is one of @values, or the opposite. + * + * Sets sensitivity of the widget associated to @property in @dialog if the + * value of @config_property in @config is equal to one of @values. + * + * If @config is %NULL, then the configuration object of @dialog is used. + * + * If @in_values is FALSE, then the widget is set sensitive if the value of + * @config_property is **not** in @values. + */ +void +pika_procedure_dialog_set_sensitive_if_in (PikaProcedureDialog *dialog, + const gchar *property, + GObject *config, + const gchar *config_property, + PikaValueArray *values, + gboolean in_values) +{ + PikaProcedureDialogSensitiveData2 *data; + GParamSpec *pspec; + gchar *signal_name; + + g_return_if_fail (PIKA_IS_PROCEDURE_DIALOG (dialog)); + g_return_if_fail (property != NULL); + g_return_if_fail (config_property != NULL); + g_return_if_fail (values != NULL); + + pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (dialog->priv->config), + property); + if (! pspec) + { + g_warning ("%s: parameter %s does not exist on the PikaProcedure.", + G_STRFUNC, property); + return; + } + + if (! config) + config = G_OBJECT (dialog->priv->config); + + pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), + config_property); + if (! pspec) + { + g_warning ("%s: parameter %s does not exist on the config object.", + G_STRFUNC, config_property); + return; + } + + data = g_new (PikaProcedureDialogSensitiveData2, 1); + data->dialog = dialog; + data->widget_property = g_strdup (property); + data->values = values; + data->in_values = in_values; + + signal_name = g_strconcat ("notify::", config_property, NULL); + + g_signal_connect_data (config, signal_name, + G_CALLBACK (pika_procedure_dialog_set_sensitive_if_in_cb), + data, + (GClosureNotify) pika_procedure_dialog_sensitive_cb_data_free, + 0); + pika_procedure_dialog_set_sensitive_if_in_cb (config, pspec, data); + g_free (signal_name); +} + /** * pika_procedure_dialog_run: * @dialog: the #PikaProcedureDialog. @@ -2234,6 +2598,14 @@ pika_procedure_dialog_check_mnemonic (PikaProcedureDialog *dialog, { label = pika_labeled_get_label (PIKA_LABELED (widget)); } + else if (PIKA_IS_RESOURCE_CHOOSER (widget)) + { + label = pika_resource_chooser_get_label (PIKA_RESOURCE_CHOOSER (widget)); + } + else if (PIKA_IS_DRAWABLE_CHOOSER (widget)) + { + label = pika_drawable_chooser_get_label (PIKA_DRAWABLE_CHOOSER (widget)); + } else { GList *labels = gtk_widget_list_mnemonic_labels (widget); @@ -2374,6 +2746,8 @@ pika_procedure_dialog_fill_container_list (PikaProcedureDialog *dialog, if (properties) free_properties = TRUE; + + g_free (pspecs); } sz_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); @@ -2384,11 +2758,6 @@ pika_procedure_dialog_fill_container_list (PikaProcedureDialog *dialog, widget = pika_procedure_dialog_get_widget (dialog, iter->data, G_TYPE_NONE); if (widget) { - /* Reference the widget because the hash table will - * unreference it anyway when getting destroyed so we don't - * want to give the only reference to the parent widget. - */ - g_object_ref (widget); gtk_container_add (container, widget); if (PIKA_IS_LABELED (widget)) { @@ -2411,6 +2780,49 @@ pika_procedure_dialog_fill_container_list (PikaProcedureDialog *dialog, return GTK_WIDGET (container); } +static void +pika_procedure_dialog_set_sensitive_if_in_cb (GObject *config, + GParamSpec *param_spec, + PikaProcedureDialogSensitiveData2 *data) +{ + PikaProcedureDialog *dialog = data->dialog; + GtkWidget *widget; + + widget = g_hash_table_lookup (dialog->priv->widgets, data->widget_property); + + if (widget) + { + GValue param_value = G_VALUE_INIT; + gboolean sensitive; + gint n_values = pika_value_array_length (data->values); + + g_value_init (¶m_value, param_spec->value_type); + g_object_get_property (config, param_spec->name, ¶m_value); + + sensitive = (! data->in_values); + for (gint i = 0; i < n_values; i++) + { + GValue *value; + + value = pika_value_array_index (data->values, i); + + if (g_param_values_cmp (param_spec, ¶m_value, value) == 0) + { + sensitive = data->in_values; + break; + } + } + gtk_widget_set_sensitive (widget, sensitive); + g_value_unset (¶m_value); + } + else + { + g_printerr ("pika_procedure_dialog_set_sensitive_if_in: " + "no widget was created for property \"%s\".\n", + data->widget_property); + } +} + static void pika_procedure_dialog_sensitive_data_free (PikaProcedureDialogSensitiveData *data) { @@ -2419,3 +2831,12 @@ pika_procedure_dialog_sensitive_data_free (PikaProcedureDialogSensitiveData *dat g_slice_free (PikaProcedureDialogSensitiveData, data); } + +static void +pika_procedure_dialog_sensitive_cb_data_free (PikaProcedureDialogSensitiveData2 *data) +{ + g_free (data->widget_property); + pika_value_array_unref (data->values); + + g_free (data); +} diff --git a/libpika/pikaproceduredialog.h b/libpika/pikaproceduredialog.h index d4fe4a0..894e547 100644 --- a/libpika/pikaproceduredialog.h +++ b/libpika/pikaproceduredialog.h @@ -78,6 +78,8 @@ GType pika_procedure_dialog_get_type (void) G_GNUC_CONST; GtkWidget * pika_procedure_dialog_new (PikaProcedure *procedure, PikaProcedureConfig *config, const gchar *title); +void pika_procedure_dialog_set_ok_label (PikaProcedureDialog *dialog, + const gchar *ok_label); GtkWidget * pika_procedure_dialog_get_widget (PikaProcedureDialog *dialog, const gchar *property, @@ -108,7 +110,9 @@ GtkWidget * pika_procedure_dialog_get_size_entry (PikaProcedureDialog *dialog gdouble resolution); GtkWidget * pika_procedure_dialog_get_label (PikaProcedureDialog *dialog, const gchar *label_id, - const gchar *text); + const gchar *text, + gboolean is_markup, + gboolean with_mnemonic); GtkWidget * pika_procedure_dialog_get_file_chooser (PikaProcedureDialog *dialog, const gchar *property, GtkFileChooserAction action); @@ -141,9 +145,26 @@ GtkWidget * pika_procedure_dialog_fill_expander (PikaProcedureDialog *dialog const gchar *contents_id); GtkWidget * pika_procedure_dialog_fill_scrolled_window - (PikaProcedureDialog *dialog, - const gchar *container_id, - const gchar *contents_id); + (PikaProcedureDialog *dialog, + const gchar *container_id, + const gchar *contents_id); + +GtkWidget * pika_procedure_dialog_fill_notebook (PikaProcedureDialog *dialog, + const gchar *container_id, + const gchar *label_id, + const gchar *page_id, + ...) G_GNUC_NULL_TERMINATED; +GtkWidget * pika_procedure_dialog_fill_notebook_list + (PikaProcedureDialog *dialog, + const gchar *container_id, + GList *label_list, + GList *page_list); + +GtkWidget * pika_procedure_dialog_fill_paned (PikaProcedureDialog *dialog, + const gchar *container_id, + GtkOrientation orientation, + const gchar *child1_id, + const gchar *child2_id); void pika_procedure_dialog_fill (PikaProcedureDialog *dialog, ...) G_GNUC_NULL_TERMINATED; @@ -157,6 +178,13 @@ void pika_procedure_dialog_set_sensitive (PikaProcedureDialog *dialog const gchar *config_property, gboolean config_invert); +void pika_procedure_dialog_set_sensitive_if_in (PikaProcedureDialog *dialog, + const gchar *property, + GObject *config, + const gchar *config_property, + PikaValueArray *values, + gboolean in_values); + gboolean pika_procedure_dialog_run (PikaProcedureDialog *dialog); diff --git a/libpika/pikaprocview.c b/libpika/pikaprocview.c index b747c99..02905e6 100644 --- a/libpika/pikaprocview.c +++ b/libpika/pikaprocview.c @@ -365,6 +365,7 @@ pika_proc_view_create_args (PikaProcedure *procedure, /* description */ label = gtk_label_new (blurb); + gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_label_set_selectable (GTK_LABEL (label), TRUE); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.0); diff --git a/libpika/pikaprogress.c b/libpika/pikaprogress.c index d9fde50..32485ea 100644 --- a/libpika/pikaprogress.c +++ b/libpika/pikaprogress.c @@ -40,11 +40,11 @@ typedef struct /* local function prototypes */ -static void pika_progress_data_free (PikaProgressData *data); +static void pika_progress_data_free (PikaProgressData *data); -static PikaValueArray * pika_temp_progress_run (PikaProcedure *procedure, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * pika_temp_progress_run (PikaProcedure *procedure, + PikaProcedureConfig *config, + gpointer run_data); /* private variables */ @@ -89,15 +89,15 @@ pika_progress_install_vtable (const PikaProgressVtable *vtable, progress_data = g_slice_new0 (PikaProgressData); - progress_data->progress_callback = progress_callback; - progress_data->vtable.start = vtable->start; - progress_data->vtable.end = vtable->end; - progress_data->vtable.set_text = vtable->set_text; - progress_data->vtable.set_value = vtable->set_value; - progress_data->vtable.pulse = vtable->pulse; - progress_data->vtable.get_window = vtable->get_window; - progress_data->data = user_data; - progress_data->data_destroy = user_data_destroy; + progress_data->progress_callback = progress_callback; + progress_data->vtable.start = vtable->start; + progress_data->vtable.end = vtable->end; + progress_data->vtable.set_text = vtable->set_text; + progress_data->vtable.set_value = vtable->set_value; + progress_data->vtable.pulse = vtable->pulse; + progress_data->vtable.get_window_handle = vtable->get_window_handle; + progress_data->data = user_data; + progress_data->data_destroy = user_data_destroy; procedure = pika_procedure_new (plug_in, progress_callback, @@ -340,18 +340,20 @@ pika_progress_data_free (PikaProgressData *data) } static PikaValueArray * -pika_temp_progress_run (PikaProcedure *procedure, - const PikaValueArray *args, - gpointer run_data) +pika_temp_progress_run (PikaProcedure *procedure, + PikaProcedureConfig *config, + gpointer run_data) { PikaProgressData *progress_data = run_data; PikaProgressCommand command; - const gchar *text; + gchar *text; gdouble value; - command = PIKA_VALUES_GET_ENUM (args, 0); - text = PIKA_VALUES_GET_STRING (args, 1); - value = PIKA_VALUES_GET_DOUBLE (args, 2); + g_object_get (config, + "command", &command, + "text", &text, + "value", &value, + NULL); switch (command) { @@ -382,25 +384,30 @@ pika_temp_progress_run (PikaProcedure *procedure, case PIKA_PROGRESS_COMMAND_GET_WINDOW: { PikaValueArray *return_vals; - guint64 window_id = 0; + GBytes *window_handle = NULL; - if (progress_data->vtable.get_window) - window_id = progress_data->vtable.get_window (progress_data->data); + if (progress_data->vtable.get_window_handle) + window_handle = progress_data->vtable.get_window_handle (progress_data->data); return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); - PIKA_VALUES_SET_DOUBLE (return_vals, 1, window_id); + PIKA_VALUES_SET_BYTES (return_vals, 1, window_handle); + g_bytes_unref (window_handle); + g_free (text); return return_vals; } break; default: + g_free (text); return pika_procedure_new_return_values (procedure, PIKA_PDB_CALLING_ERROR, NULL); } + g_free (text); + return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } diff --git a/libpika/pikaprogress.h b/libpika/pikaprogress.h index 2ce3f2f..5b6cea7 100644 --- a/libpika/pikaprogress.h +++ b/libpika/pikaprogress.h @@ -79,9 +79,9 @@ typedef void (* PikaProgressVtablePulseFunc) (gpointer user_data); * PikaProgressVtableGetWindowFunc: * @user_data: (closure): User data * - * Returns: the ID of the window where the progress is displayed. + * Returns: the handle of the window where the progress is displayed. */ -typedef guint64 (* PikaProgressVtableGetWindowFunc) (gpointer user_data); +typedef GBytes * (* PikaProgressVtableGetWindowFunc) (gpointer user_data); typedef struct _PikaProgressVtable PikaProgressVtable; @@ -93,7 +93,7 @@ typedef struct _PikaProgressVtable PikaProgressVtable; * @set_text: sets a new text on the progress. * @set_value: sets a new percentage on the progress. * @pulse: makes the progress pulse. - * @get_window: returns the ID of the window where the progress is displayed. + * @get_window_handle: returns the handle of the window where the progress is displayed. * @_pika_reserved1: reserved pointer for future expansion. * @_pika_reserved2: reserved pointer for future expansion. * @_pika_reserved3: reserved pointer for future expansion. @@ -110,7 +110,7 @@ struct _PikaProgressVtable PikaProgressVtableSetTextFunc set_text; PikaProgressVtableSetValueFunc set_value; PikaProgressVtablePulseFunc pulse; - PikaProgressVtableGetWindowFunc get_window; + PikaProgressVtableGetWindowFunc get_window_handle; /* Padding for future expansion. Must be initialized with NULL! */ void (* _pika_reserved1) (void); diff --git a/libpika/pikaprogress_pdb.c b/libpika/pikaprogress_pdb.c index 8803a4e..45e5cfa 100644 --- a/libpika/pikaprogress_pdb.c +++ b/libpika/pikaprogress_pdb.c @@ -61,9 +61,9 @@ _pika_progress_init (const gchar *message, PIKA_TYPE_DISPLAY, gdisplay, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-progress-init", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-progress-init", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -95,9 +95,9 @@ _pika_progress_update (gdouble percentage) G_TYPE_DOUBLE, percentage, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-progress-update", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-progress-update", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -132,9 +132,9 @@ pika_progress_pulse (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-progress-pulse", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-progress-pulse", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -169,9 +169,9 @@ pika_progress_set_text (const gchar *message) G_TYPE_STRING, message, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-progress-set-text", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-progress-set-text", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -204,9 +204,9 @@ pika_progress_end (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-progress-end", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-progress-end", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -219,37 +219,40 @@ pika_progress_end (void) /** * pika_progress_get_window_handle: * - * Returns the native window ID of the toplevel window this plug-in's + * Returns the native handle of the toplevel window this plug-in's * progress is displayed in. * - * This function returns the native window ID of the toplevel window - * this plug-in\'s progress is displayed in. + * This function returns the native handle allowing to identify the + * toplevel window this plug-in's progress is displayed in. + * This handle can be of various types (integer, string, etc.) + * depending on the platform you are running on which is why it returns + * a GBytes. There are usually no reasons to call this directly. * - * Returns: The progress bar's toplevel window. + * Returns: (transfer full): The progress bar's toplevel window's handle. * * Since: 2.2 **/ -gint +GBytes * pika_progress_get_window_handle (void) { PikaValueArray *args; PikaValueArray *return_vals; - gint window = 0; + GBytes *handle = NULL; args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-progress-get-window-handle", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-progress-get-window-handle", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) - window = PIKA_VALUES_GET_INT (return_vals, 1); + handle = PIKA_VALUES_DUP_BYTES (return_vals, 1); pika_value_array_unref (return_vals); - return window; + return handle; } /** @@ -278,9 +281,9 @@ _pika_progress_install (const gchar *progress_callback) G_TYPE_STRING, progress_callback, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-progress-install", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-progress-install", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -314,9 +317,9 @@ _pika_progress_uninstall (const gchar *progress_callback) G_TYPE_STRING, progress_callback, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-progress-uninstall", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-progress-uninstall", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -349,9 +352,9 @@ pika_progress_cancel (const gchar *progress_callback) G_TYPE_STRING, progress_callback, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-progress-cancel", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-progress-cancel", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikaprogress_pdb.h b/libpika/pikaprogress_pdb.h index 6576019..3808bec 100644 --- a/libpika/pikaprogress_pdb.h +++ b/libpika/pikaprogress_pdb.h @@ -38,7 +38,7 @@ G_GNUC_INTERNAL gboolean _pika_progress_update (gdouble percentag gboolean pika_progress_pulse (void); gboolean pika_progress_set_text (const gchar *message); gboolean pika_progress_end (void); -gint pika_progress_get_window_handle (void); +GBytes* pika_progress_get_window_handle (void); G_GNUC_INTERNAL gboolean _pika_progress_install (const gchar *progress_callback); G_GNUC_INTERNAL gboolean _pika_progress_uninstall (const gchar *progress_callback); gboolean pika_progress_cancel (const gchar *progress_callback); diff --git a/libpika/pikaprogressbar.c b/libpika/pikaprogressbar.c index 8ba0210..7207106 100644 --- a/libpika/pikaprogressbar.c +++ b/libpika/pikaprogressbar.c @@ -21,6 +21,7 @@ #include "config.h" +#include #include #ifdef GDK_WINDOWING_WIN32 @@ -35,6 +36,8 @@ #include #endif +#include "libpikawidgets/pikawidgets.h" + #include "pikauitypes.h" #include "pika.h" @@ -52,21 +55,27 @@ **/ -static void pika_progress_bar_dispose (GObject *object); - -static void pika_progress_bar_start (const gchar *message, - gboolean cancelable, - gpointer user_data); -static void pika_progress_bar_end (gpointer user_data); -static void pika_progress_bar_set_text (const gchar *message, - gpointer user_data); -static void pika_progress_bar_set_value (gdouble percentage, - gpointer user_data); -static void pika_progress_bar_pulse (gpointer user_data); -static guint64 pika_progress_bar_get_window (gpointer user_data); +typedef struct _PikaProgressBarPrivate +{ + GBytes *window_handle; +} PikaProgressBarPrivate; -G_DEFINE_TYPE (PikaProgressBar, pika_progress_bar, GTK_TYPE_PROGRESS_BAR) +static void pika_progress_bar_dispose (GObject *object); + +static void pika_progress_bar_start (const gchar *message, + gboolean cancelable, + gpointer user_data); +static void pika_progress_bar_end (gpointer user_data); +static void pika_progress_bar_set_text (const gchar *message, + gpointer user_data); +static void pika_progress_bar_set_value (gdouble percentage, + gpointer user_data); +static void pika_progress_bar_pulse (gpointer user_data); +static GBytes * pika_progress_bar_get_window_handle (gpointer user_data); + + +G_DEFINE_TYPE_WITH_PRIVATE (PikaProgressBar, pika_progress_bar, GTK_TYPE_PROGRESS_BAR) #define parent_class pika_progress_bar_parent_class @@ -82,25 +91,29 @@ pika_progress_bar_class_init (PikaProgressBarClass *klass) static void pika_progress_bar_init (PikaProgressBar *bar) { - PikaProgressVtable vtable = { 0, }; + PikaProgressVtable vtable = { 0, }; + PikaProgressBarPrivate *priv = pika_progress_bar_get_instance_private (bar); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (bar), " "); gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (bar), PANGO_ELLIPSIZE_END); - vtable.start = pika_progress_bar_start; - vtable.end = pika_progress_bar_end; - vtable.set_text = pika_progress_bar_set_text; - vtable.set_value = pika_progress_bar_set_value; - vtable.pulse = pika_progress_bar_pulse; - vtable.get_window = pika_progress_bar_get_window; + vtable.start = pika_progress_bar_start; + vtable.end = pika_progress_bar_end; + vtable.set_text = pika_progress_bar_set_text; + vtable.set_value = pika_progress_bar_set_value; + vtable.pulse = pika_progress_bar_pulse; + vtable.get_window_handle = pika_progress_bar_get_window_handle; bar->progress_callback = pika_progress_install_vtable (&vtable, bar, NULL); + + pika_widget_set_native_handle (GTK_WIDGET (bar), &priv->window_handle); } static void pika_progress_bar_dispose (GObject *object) { - PikaProgressBar *bar = PIKA_PROGRESS_BAR (object); + PikaProgressBar *bar = PIKA_PROGRESS_BAR (object); + PikaProgressBarPrivate *priv = pika_progress_bar_get_instance_private (bar); if (bar->progress_callback) { @@ -108,6 +121,17 @@ pika_progress_bar_dispose (GObject *object) bar->progress_callback = NULL; } + if (priv->window_handle != NULL) + { +#ifdef GDK_WINDOWING_WAYLAND + if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ()) && + /* The GdkWindow is likely already destroyed. */ + gtk_widget_get_window (GTK_WIDGET (bar)) != NULL) + gdk_wayland_window_unexport_handle (gtk_widget_get_window (GTK_WIDGET (bar))); +#endif + g_clear_pointer (&priv->window_handle, g_bytes_unref); + } + G_OBJECT_CLASS (parent_class)->dispose (object); } @@ -180,47 +204,13 @@ pika_progress_bar_pulse (gpointer user_data) gtk_main_iteration (); } -static guint64 -pika_window_get_native_id (GtkWindow *window) +static GBytes * +pika_progress_bar_get_window_handle (gpointer user_data) { - GdkWindow *surface; + PikaProgressBar *bar = PIKA_PROGRESS_BAR (user_data); + PikaProgressBarPrivate *priv = pika_progress_bar_get_instance_private (bar); - g_return_val_if_fail (GTK_IS_WINDOW (window), 0); - - surface = gtk_widget_get_window (GTK_WIDGET (window)); - if (!surface) /* aka window is not yet realized */ - return 0; - -#ifdef GDK_WINDOWING_WIN32 - if (GDK_IS_WIN32_WINDOW (surface)) - return GPOINTER_TO_INT (GDK_WINDOW_HWND (gtk_widget_get_window (GTK_WIDGET (window)))); -#endif - -#ifdef GDK_WINDOWING_X11 - if (GDK_IS_X11_WINDOW (surface)) - return GPOINTER_TO_INT (GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (window)))); -#endif - -#ifdef GDK_WINDOWING_WAYLAND - if (GDK_IS_WAYLAND_WINDOW (surface)) - g_debug ("Getting window ID for progress not supported on Wayland yet"); -#endif - - return 0; -} - -static guint64 -pika_progress_bar_get_window (gpointer user_data) -{ - PikaProgressBar *bar = PIKA_PROGRESS_BAR (user_data); - GtkWidget *toplevel; - - toplevel = gtk_widget_get_toplevel (GTK_WIDGET (bar)); - - if (GTK_IS_WINDOW (toplevel)) - return pika_window_get_native_id (GTK_WINDOW (toplevel)); - - return 0; + return g_bytes_ref (priv->window_handle); } /** diff --git a/libpika/pikaresource.c b/libpika/pikaresource.c index e56c213..5415a7c 100644 --- a/libpika/pikaresource.c +++ b/libpika/pikaresource.c @@ -458,58 +458,3 @@ pika_resource_is_font (PikaResource *resource) { return pika_resource_id_is_font (pika_resource_get_id (resource)); } - - -struct _PikaBrush -{ - PikaResource parent_instance; -}; - -G_DEFINE_TYPE (PikaBrush, pika_brush, PIKA_TYPE_RESOURCE); - -static void pika_brush_class_init (PikaBrushClass *klass) {} -static void pika_brush_init (PikaBrush *self) {} - - -struct _PikaPattern -{ - PikaResource parent_instance; -}; - -G_DEFINE_TYPE (PikaPattern, pika_pattern, PIKA_TYPE_RESOURCE); - -static void pika_pattern_class_init (PikaPatternClass *klass) {} -static void pika_pattern_init (PikaPattern *self) {} - - -struct _PikaGradient -{ - PikaResource parent_instance; -}; - -G_DEFINE_TYPE (PikaGradient, pika_gradient, PIKA_TYPE_RESOURCE); - -static void pika_gradient_class_init (PikaGradientClass *klass) {} -static void pika_gradient_init (PikaGradient *self) {} - - -struct _PikaPalette -{ - PikaResource parent_instance; -}; - -G_DEFINE_TYPE (PikaPalette, pika_palette, PIKA_TYPE_RESOURCE); - -static void pika_palette_class_init (PikaPaletteClass *klass) {} -static void pika_palette_init (PikaPalette *self) {} - - -struct _PikaFont -{ - PikaResource parent_instance; -}; - -G_DEFINE_TYPE (PikaFont, pika_font, PIKA_TYPE_RESOURCE); - -static void pika_font_class_init (PikaFontClass *klass) {} -static void pika_font_init (PikaFont *self) {} diff --git a/libpika/pikaresource.h b/libpika/pikaresource.h index 870bf46..dd4d810 100644 --- a/libpika/pikaresource.h +++ b/libpika/pikaresource.h @@ -60,22 +60,6 @@ gboolean pika_resource_is_palette (PikaResource *resource); gboolean pika_resource_is_font (PikaResource *resource); -#define PIKA_TYPE_BRUSH (pika_brush_get_type ()) -G_DECLARE_FINAL_TYPE (PikaBrush, pika_brush, PIKA, BRUSH, PikaResource) - -#define PIKA_TYPE_PATTERN (pika_pattern_get_type ()) -G_DECLARE_FINAL_TYPE (PikaPattern, pika_pattern, PIKA, PATTERN, PikaResource) - -#define PIKA_TYPE_GRADIENT (pika_gradient_get_type ()) -G_DECLARE_FINAL_TYPE (PikaGradient, pika_gradient, PIKA, GRADIENT, PikaResource) - -#define PIKA_TYPE_PALETTE (pika_palette_get_type ()) -G_DECLARE_FINAL_TYPE (PikaPalette, pika_palette, PIKA, PALETTE, PikaResource) - -#define PIKA_TYPE_FONT (pika_font_get_type ()) -G_DECLARE_FINAL_TYPE (PikaFont, pika_font, PIKA, FONT, PikaResource) - - G_END_DECLS #endif /* __PIKA_RESOURCE_H__ */ diff --git a/libpika/pikaresource_pdb.c b/libpika/pikaresource_pdb.c index fa30b2a..2040c36 100644 --- a/libpika/pikaresource_pdb.c +++ b/libpika/pikaresource_pdb.c @@ -62,9 +62,9 @@ _pika_resource_get_by_name (const gchar *type_name, G_TYPE_STRING, resource_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-get-by-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-get-by-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -109,9 +109,9 @@ _pika_resource_get_by_identifiers (const gchar *type_name, G_TYPE_BOOLEAN, is_internal, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-get-by-identifiers", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-get-by-identifiers", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -146,9 +146,9 @@ pika_resource_id_is_valid (gint resource_id) G_TYPE_INT, resource_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-id-is-valid", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-id-is-valid", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -182,9 +182,9 @@ pika_resource_id_is_brush (gint resource_id) G_TYPE_INT, resource_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-id-is-brush", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-id-is-brush", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -219,9 +219,9 @@ pika_resource_id_is_pattern (gint resource_id) G_TYPE_INT, resource_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-id-is-pattern", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-id-is-pattern", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -256,9 +256,9 @@ pika_resource_id_is_gradient (gint resource_id) G_TYPE_INT, resource_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-id-is-gradient", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-id-is-gradient", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -293,9 +293,9 @@ pika_resource_id_is_palette (gint resource_id) G_TYPE_INT, resource_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-id-is-palette", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-id-is-palette", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -329,9 +329,9 @@ pika_resource_id_is_font (gint resource_id) G_TYPE_INT, resource_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-id-is-font", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-id-is-font", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -366,9 +366,9 @@ pika_resource_get_name (PikaResource *resource) PIKA_TYPE_RESOURCE, resource, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-get-name", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-get-name", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -416,9 +416,9 @@ _pika_resource_get_identifiers (PikaResource *resource, PIKA_TYPE_RESOURCE, resource, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-get-identifiers", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-get-identifiers", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -456,9 +456,9 @@ pika_resource_is_editable (PikaResource *resource) PIKA_TYPE_RESOURCE, resource, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-is-editable", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-is-editable", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -492,9 +492,9 @@ pika_resource_duplicate (PikaResource *resource) PIKA_TYPE_RESOURCE, resource, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-duplicate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-duplicate", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -533,9 +533,9 @@ pika_resource_rename (PikaResource *resource, G_TYPE_STRING, new_name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-rename", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-rename", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -570,9 +570,9 @@ pika_resource_delete (PikaResource *resource) PIKA_TYPE_RESOURCE, resource, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-resource-delete", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-resource-delete", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikaresourceselect.c b/libpika/pikaresourceselect.c index 0d4077c..5a2050b 100644 --- a/libpika/pikaresourceselect.c +++ b/libpika/pikaresourceselect.c @@ -20,27 +20,9 @@ #include "pika.h" -/* Data bounced back and forth to/from core and libpika, - * and here from the temp PDB procedure to the idle func. - * But it is opaque to core, passed and returned unaltered. - * - * Not all fields are meaningful in each direction or transfer. - * !!! We don't pass resource to core in this struct, - * only from the temp callback to the idle func. - * - * Lifetime is as long as the remote dialog is open. - * Closing the chooser dialog frees the adaption struct. - */ typedef struct { - /* This portion is passed to and from idle. */ - guint idle_id; - gint resource_id; - GType resource_type; - gboolean closing; - - /* This portion is passed to and from core, and to idle. */ - gchar *temp_PDB_callback_name; + GType resource_type; PikaResourceChoosedCallback callback; gpointer owner_data; GDestroyNotify data_destroy; @@ -49,12 +31,12 @@ typedef struct /* local */ -static void pika_resource_data_free (PikaResourceAdaption *adaption); +static void pika_resource_data_free (PikaResourceAdaption *adaption); -static PikaValueArray * pika_temp_resource_run (PikaProcedure *procedure, - const PikaValueArray *args, - gpointer run_data); -static gboolean pika_temp_resource_idle (PikaResourceAdaption *adaption); +static PikaValueArray * pika_temp_resource_run (PikaProcedure *procedure, + PikaProcedureConfig *config, + gpointer run_data); +static gboolean pika_resource_select_remove_after_run (const gchar *procedure_name); /* public */ @@ -131,11 +113,10 @@ static void create_callback_PDB_procedure_params (PikaProcedure *procedure, GType resource_type) { - PIKA_PROC_ARG_STRING (procedure, "resource-name", - "Resource name", - "The resource name", - NULL, - G_PARAM_READWRITE); + PIKA_PROC_ARG_RESOURCE (procedure, "resource", + "Resource", + "The resource", + G_PARAM_READWRITE); /* Create args for the extra, superfluous args that core is passing.*/ if (g_type_is_a (resource_type, PIKA_TYPE_FONT)) @@ -245,35 +226,32 @@ create_callback_PDB_procedure_params (PikaProcedure *procedure, */ static gboolean popup_remote_chooser (const gchar *title, + GBytes *parent_handle, PikaResource *resource, - gchar *temp_PDB_callback_name, + const gchar *temp_PDB_callback_name, GType resource_type) { gboolean result = FALSE; - gchar *resource_name; - - /* The PDB procedure still takes a name */ - resource_name = pika_resource_get_name (resource); if (g_type_is_a (resource_type, PIKA_TYPE_BRUSH)) { - result = pika_brushes_popup (temp_PDB_callback_name, title, resource_name); + result = pika_brushes_popup (temp_PDB_callback_name, title, PIKA_BRUSH (resource), parent_handle); } else if (g_type_is_a (resource_type, PIKA_TYPE_FONT)) { - result = pika_fonts_popup (temp_PDB_callback_name, title, resource_name); + result = pika_fonts_popup (temp_PDB_callback_name, title, PIKA_FONT (resource), parent_handle); } else if (g_type_is_a (resource_type, PIKA_TYPE_GRADIENT)) { - result = pika_gradients_popup (temp_PDB_callback_name, title, resource_name); + result = pika_gradients_popup (temp_PDB_callback_name, title, PIKA_GRADIENT (resource), parent_handle); } else if (g_type_is_a (resource_type, PIKA_TYPE_PALETTE)) { - result = pika_palettes_popup (temp_PDB_callback_name, title, resource_name); + result = pika_palettes_popup (temp_PDB_callback_name, title, PIKA_PALETTE (resource), parent_handle); } else if (g_type_is_a (resource_type, PIKA_TYPE_PATTERN)) { - result = pika_patterns_popup (temp_PDB_callback_name, title, resource_name); + result = pika_patterns_popup (temp_PDB_callback_name, title, PIKA_PATTERN (resource), parent_handle); } else { @@ -283,86 +261,19 @@ popup_remote_chooser (const gchar *title, return result; } -/*Does nothing, quietly, when the remote dialog is not open. */ -static void -close_remote_chooser (gchar *temp_PDB_callback_name, - GType resource_type) -{ - if (g_type_is_a (resource_type, PIKA_TYPE_FONT)) - { - pika_fonts_close_popup (temp_PDB_callback_name); - } - else if (g_type_is_a (resource_type, PIKA_TYPE_GRADIENT)) - { - pika_gradients_close_popup (temp_PDB_callback_name); - } - else if (g_type_is_a (resource_type, PIKA_TYPE_BRUSH)) - { - pika_brushes_close_popup (temp_PDB_callback_name); - } - else if (g_type_is_a (resource_type, PIKA_TYPE_PALETTE)) - { - pika_palettes_close_popup (temp_PDB_callback_name); - } - else if (g_type_is_a (resource_type, PIKA_TYPE_PATTERN)) - { - pika_patterns_close_popup (temp_PDB_callback_name); - } - else - { - g_warning ("%s: unhandled resource type", G_STRFUNC); - } -} - -/* Get the index of the is_closing arg in a PikaValueArray of the tempPDBproc. - * Count the extra args above, and add that to 1. - */ -static gint -index_of_is_closing_arg (GType resource_type) -{ - if (g_type_is_a (resource_type, PIKA_TYPE_FONT)) - { - return 1; - } - else if (g_type_is_a (resource_type, PIKA_TYPE_GRADIENT)) - { - return 3; - } - else if (g_type_is_a (resource_type, PIKA_TYPE_BRUSH)) - { - return 7; - } - else if (g_type_is_a (resource_type, PIKA_TYPE_PALETTE)) - { - return 2; - } - else if (g_type_is_a (resource_type, PIKA_TYPE_PATTERN)) - { - return 5; - } - else - { - g_warning ("%s: unhandled resource type", G_STRFUNC); - return 0; - } -} - - /** * pika_resource_select_new: - * @title: Title of the resource selection dialog. - * @resource: The resource to set as the initial choice. - * @resource_type: The type of the subclass of resource. - * @callback: (scope notified): The callback function to call when a user chooses a resource. + * @title: Title of the resource selection dialog. + * @resource: The resource to set as the initial choice. + * @resource_type: The type of the subclass of [class@Resource]. + * @callback: (scope notified): The callback function to call when the user chooses a resource. * @owner_data: (closure callback): The run_data given to @callback. * @data_destroy: (destroy owner_data): The destroy function for @owner_data. * * Invoke a resource chooser dialog which may call @callback with the chosen - * resource and owner's @data. + * @resource and @owner_data. * - * A proxy to a remote dialog in core, which knows the model i.e. installed resources. - * - * Generic on type of #PikaResource subclass passed in @resource_type. + * A proxy to a remote dialog in core, which knows the installed resources. * * Returns: (transfer none): the name of a temporary PDB procedure. The * string belongs to the resource selection dialog and will be @@ -370,6 +281,7 @@ index_of_is_closing_arg (GType resource_type) **/ const gchar * pika_resource_select_new (const gchar *title, + GBytes *parent_handle, PikaResource *resource, GType resource_type, PikaResourceChoosedCallback callback, @@ -381,23 +293,18 @@ pika_resource_select_new (const gchar *title, gchar *temp_PDB_callback_name; PikaResourceAdaption *adaption; - g_debug ("%s", G_STRFUNC); - g_return_val_if_fail (resource != NULL, NULL); g_return_val_if_fail (callback != NULL, NULL); - g_return_val_if_fail (resource_type != 0, NULL); + g_return_val_if_fail (g_type_is_a (resource_type, PIKA_TYPE_RESOURCE), NULL); temp_PDB_callback_name = pika_pdb_temp_procedure_name (pika_get_pdb ()); adaption = g_slice_new0 (PikaResourceAdaption); - adaption->temp_PDB_callback_name = temp_PDB_callback_name; - adaption->callback = callback; - adaption->owner_data = owner_data; - adaption->data_destroy = data_destroy; - adaption->resource_type = resource_type; - - /* !!! Only part of the adaption has been initialized. */ + adaption->callback = callback; + adaption->owner_data = owner_data; + adaption->data_destroy = data_destroy; + adaption->resource_type = resource_type; procedure = pika_procedure_new (plug_in, temp_PDB_callback_name, @@ -410,14 +317,14 @@ pika_resource_select_new (const gchar *title, pika_plug_in_add_temp_procedure (plug_in, procedure); g_object_unref (procedure); + g_free (temp_PDB_callback_name); - if (popup_remote_chooser (title, resource, temp_PDB_callback_name, - resource_type)) + if (popup_remote_chooser (title, parent_handle, resource, pika_procedure_get_name (procedure), resource_type)) { /* Allow callbacks to be watched */ pika_plug_in_extension_enable (plug_in); - return temp_PDB_callback_name; + return pika_procedure_get_name (procedure); } else { @@ -428,85 +335,42 @@ pika_resource_select_new (const gchar *title, } -void -pika_resource_select_destroy (const gchar *temp_PDB_callback_name) -{ - PikaPlugIn *plug_in = pika_get_plug_in (); - - g_return_if_fail (temp_PDB_callback_name != NULL); - - pika_plug_in_remove_temp_procedure (plug_in, temp_PDB_callback_name); -} - - -/* Set currently selected resource in remote chooser. +/* pika_resource_select_set: + * @callback_name: a callback name as returned by [func@resource_select_new]. + * @resource: a [class@Resource] of type @resource_type. * - * Calls a PDB procedure. - * - * Note core is still using string name of resource, - * so pdb/groups/_select.pdb, _set_popup must have type string. + * Set currently selected resource in remote chooser. */ void -pika_resource_select_set (const gchar *temp_pdb_callback, - PikaResource *resource, - GType resource_type) +pika_resource_select_set (const gchar *callback_name, + PikaResource *resource) { - gchar *resource_name; + GType resource_type; - /* The remote setter is e.g. pika_fonts_set_popup, a PDB procedure. - * It still takes a name aka ID instead of a resource object. - */ - resource_name = pika_resource_get_name (resource); + g_return_if_fail (resource != NULL); + + resource_type = G_TYPE_FROM_INSTANCE (resource); + g_return_if_fail (g_type_is_a (resource_type, PIKA_TYPE_RESOURCE)); if (g_type_is_a (resource_type, PIKA_TYPE_FONT)) - { - pika_fonts_set_popup (temp_pdb_callback, resource_name); - } + pika_fonts_set_popup (callback_name, PIKA_FONT (resource)); else if (g_type_is_a (resource_type, PIKA_TYPE_GRADIENT)) - { - pika_gradients_set_popup (temp_pdb_callback, resource_name); - } + pika_gradients_set_popup (callback_name, PIKA_GRADIENT (resource)); else if (g_type_is_a (resource_type, PIKA_TYPE_BRUSH)) - { - pika_brushes_set_popup (temp_pdb_callback, resource_name); - } + pika_brushes_set_popup (callback_name, PIKA_BRUSH (resource)); else if (g_type_is_a (resource_type, PIKA_TYPE_PALETTE)) - { - pika_palettes_set_popup (temp_pdb_callback, resource_name); - } + pika_palettes_set_popup (callback_name, PIKA_PALETTE (resource)); else if (g_type_is_a (resource_type, PIKA_TYPE_PATTERN)) - { - pika_patterns_set_popup (temp_pdb_callback, resource_name); - } + pika_patterns_set_popup (callback_name, PIKA_PATTERN (resource)); else - { - g_warning ("%s: unhandled resource type", G_STRFUNC); - } + g_return_if_reached (); } /* private functions */ -/* Free a PikaResourceAdaption struct. - * A PikaResourceAdaption and this func are passed to a PikaProcedure - * and this func is called back when the procedure is removed. - * - * This can be called for the exception: failed to open remote dialog. - * - * Each allocated field must be safely freed (not assuming it is valid pointer.) - */ static void pika_resource_data_free (PikaResourceAdaption *adaption) { - if (adaption->idle_id) - g_source_remove (adaption->idle_id); - - if (adaption->temp_PDB_callback_name) - { - close_remote_chooser (adaption->temp_PDB_callback_name, - adaption->resource_type); - g_free (adaption->temp_PDB_callback_name); - } - if (adaption->data_destroy) adaption->data_destroy (adaption->owner_data); @@ -517,50 +381,38 @@ pika_resource_data_free (PikaResourceAdaption *adaption) * Called when user chooses a resource in remote dialog. */ static PikaValueArray * -pika_temp_resource_run (PikaProcedure *procedure, - const PikaValueArray *args, - gpointer run_data) +pika_temp_resource_run (PikaProcedure *procedure, + PikaProcedureConfig *config, + gpointer run_data) { PikaResourceAdaption *adaption = run_data; - const gchar *resource_name; PikaResource *resource; + gboolean closing; - resource_name = PIKA_VALUES_GET_STRING (args, 0); + g_object_get (config, + "resource", &resource, + "closing", &closing, + NULL); - resource = pika_resource_get_by_name (adaption->resource_type, - resource_name); + if (adaption->callback) + adaption->callback (resource, closing, + adaption->owner_data); - adaption->resource_id = pika_resource_get_id (resource); + if (closing) + g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc) pika_resource_select_remove_after_run, + g_strdup (pika_procedure_get_name (procedure)), + g_free); - adaption->closing = PIKA_VALUES_GET_BOOLEAN (args, index_of_is_closing_arg (adaption->resource_type)); - - if (! adaption->idle_id) - adaption->idle_id = g_idle_add ((GSourceFunc) pika_temp_resource_idle, - adaption); + g_object_unref (resource); return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } static gboolean -pika_temp_resource_idle (PikaResourceAdaption *adaption) +pika_resource_select_remove_after_run (const gchar *procedure_name) { - adaption->idle_id = 0; - - if (adaption->callback) - adaption->callback (pika_resource_get_by_id (adaption->resource_id), - adaption->closing, - adaption->owner_data); - - adaption->resource_id = 0; - - if (adaption->closing) - { - gchar *temp_PDB_callback_name = adaption->temp_PDB_callback_name; - - adaption->temp_PDB_callback_name = NULL; - pika_resource_select_destroy (temp_PDB_callback_name); - g_free (temp_PDB_callback_name); - } + pika_plug_in_remove_temp_procedure (pika_get_plug_in (), procedure_name); return G_SOURCE_REMOVE; } diff --git a/libpika/pikaresourceselect.h b/libpika/pikaresourceselect.h index da7023b..8d6fc84 100644 --- a/libpika/pikaresourceselect.h +++ b/libpika/pikaresourceselect.h @@ -38,17 +38,15 @@ typedef void (* PikaResourceChoosedCallback) (PikaResource *resource, gpointer owner_data); const gchar * pika_resource_select_new (const gchar *title, + GBytes *parent_handle, PikaResource *resource, GType resource_type, PikaResourceChoosedCallback callback, gpointer owner_data, GDestroyNotify data_destroy); -void pika_resource_select_destroy (const gchar *temp_pdb_callback); - -void pika_resource_select_set (const gchar *temp_pdb_callback, - PikaResource *resource, - GType resource_type); +void pika_resource_select_set (const gchar *callback_name, + PikaResource *resource); G_END_DECLS diff --git a/libpika/pikasaveprocedure.c b/libpika/pikasaveprocedure.c index e72e7f9..9ff1371 100644 --- a/libpika/pikasaveprocedure.c +++ b/libpika/pikasaveprocedure.c @@ -26,8 +26,12 @@ #include "pika.h" -#include "pikasaveprocedure.h" +#include "libpikabase/pikawire.h" /* FIXME kill this include */ + #include "pikapdb_pdb.h" +#include "pikaplugin-private.h" +#include "pikasaveprocedure.h" +#include "pikaprocedureconfig-private.h" #include "libpika-intl.h" @@ -45,16 +49,18 @@ enum struct _PikaSaveProcedurePrivate { - PikaRunSaveFunc run_func; - gpointer run_data; - GDestroyNotify run_data_destroy; + PikaRunSaveFunc run_func; + gpointer run_data; + GDestroyNotify run_data_destroy; - gboolean supports_exif; - gboolean supports_iptc; - gboolean supports_xmp; - gboolean supports_profile; - gboolean supports_thumbnail; - gboolean supports_comment; + gboolean supports_exif; + gboolean supports_iptc; + gboolean supports_xmp; + gboolean supports_profile; + gboolean supports_thumbnail; + gboolean supports_comment; + + gboolean export_metadata; }; @@ -189,6 +195,8 @@ static void pika_save_procedure_init (PikaSaveProcedure *procedure) { procedure->priv = pika_save_procedure_get_instance_private (procedure); + + procedure->priv->export_metadata = FALSE; } static void @@ -337,15 +345,19 @@ static PikaValueArray * pika_save_procedure_run (PikaProcedure *procedure, const PikaValueArray *args) { - PikaSaveProcedure *save_proc = PIKA_SAVE_PROCEDURE (procedure); - PikaValueArray *remaining; - PikaValueArray *return_values; - PikaRunMode run_mode; - PikaImage *image; - PikaDrawable **drawables; - GFile *file; - gint n_drawables; - gint i; + PikaPlugIn *plug_in; + PikaSaveProcedure *save_proc = PIKA_SAVE_PROCEDURE (procedure); + PikaValueArray *remaining; + PikaValueArray *return_values; + PikaProcedureConfig *config; + PikaRunMode run_mode; + PikaImage *image; + PikaDrawable **drawables; + GFile *file; + gint n_drawables; + PikaMetadata *metadata; + gchar *mimetype = NULL; + PikaPDBStatusType status = PIKA_PDB_EXECUTION_ERROR; run_mode = PIKA_VALUES_GET_ENUM (args, 0); image = PIKA_VALUES_GET_IMAGE (args, 1); @@ -355,21 +367,68 @@ pika_save_procedure_run (PikaProcedure *procedure, remaining = pika_value_array_new (pika_value_array_length (args) - ARG_OFFSET); - for (i = ARG_OFFSET; i < pika_value_array_length (args); i++) + for (gint i = ARG_OFFSET; i < pika_value_array_length (args); i++) { GValue *value = pika_value_array_index (args, i); pika_value_array_append (remaining, value); } - return_values = save_proc->priv->run_func (procedure, - run_mode, - image, - n_drawables, - drawables, - file, - remaining, + config = pika_procedure_create_config (procedure); + if (save_proc->priv->export_metadata) + { + mimetype = (gchar *) pika_file_procedure_get_mime_types (PIKA_FILE_PROCEDURE (procedure)); + if (mimetype == NULL) + { + g_printerr ("%s: ERROR: the PikaSaveProcedureConfig object was created " + "with export_metadata but you didn't set any MimeType with pika_file_procedure_set_mime_types()!\n", + G_STRFUNC); + } + else + { + char *delim; + + mimetype = g_strdup (mimetype); + mimetype = g_strstrip (mimetype); + delim = strstr (mimetype, ","); + if (delim) + *delim = '\0'; + /* Though docs only writes about the list being comma-separated, our + * code apparently also split by spaces. + */ + delim = strstr (mimetype, " "); + if (delim) + *delim = '\0'; + delim = strstr (mimetype, "\t"); + if (delim) + *delim = '\0'; + } + } + metadata = _pika_procedure_config_begin_export (config, image, run_mode, remaining, mimetype); + g_free (mimetype); + + return_values = save_proc->priv->run_func (procedure, run_mode, + image, n_drawables, drawables, + file, metadata, config, save_proc->priv->run_data); + + if (return_values != NULL && + pika_value_array_length (return_values) > 0 && + G_VALUE_HOLDS_ENUM (pika_value_array_index (return_values, 0))) + status = PIKA_VALUES_GET_ENUM (return_values, 0); + + _pika_procedure_config_end_export (config, image, file, status); + + /* This is debug printing to help plug-in developers figure out best + * practices. + */ + plug_in = pika_procedure_get_plug_in (procedure); + if (G_OBJECT (config)->ref_count > 1 && + _pika_plug_in_manage_memory_manually (plug_in)) + g_printerr ("%s: ERROR: the PikaSaveProcedureConfig object was refed " + "by plug-in, it MUST NOT do that!\n", G_STRFUNC); + + g_object_unref (config); pika_value_array_unref (remaining); return return_values; @@ -465,6 +524,7 @@ pika_save_procedure_add_metadata (PikaSaveProcedure *save_procedure) * @plug_in: a #PikaPlugIn. * @name: the new procedure's name. * @proc_type: the new procedure's #PikaPDBProcType. + * @export_metadata: whether PIKA should handle metadata exporting. * @run_func: the run function for the new procedure. * @run_data: user data passed to @run_func. * @run_data_destroy: (nullable): free function for @run_data, or %NULL. @@ -486,17 +546,22 @@ pika_save_procedure_add_metadata (PikaSaveProcedure *save_procedure) * * When invoked via pika_procedure_run(), it unpacks these standard * arguments and calls @run_func which is a #PikaRunSaveFunc. The - * "args" #PikaValueArray of #PikaRunSaveFunc only contains - * additionally added arguments. + * #PikaProcedureConfig of #PikaRunSaveFunc only contains additionally added + * arguments. + * + * If @export_metadata is TRUE, then the class will also handle the metadata + * export if the format is supported by our backend. This requires you to also + * set appropriate MimeType with pika_file_procedure_set_mime_types(). * * Returns: a new #PikaProcedure. * * Since: 3.0 **/ -PikaProcedure * +PikaProcedure * pika_save_procedure_new (PikaPlugIn *plug_in, const gchar *name, PikaPDBProcType proc_type, + gboolean export_metadata, PikaRunSaveFunc run_func, gpointer run_data, GDestroyNotify run_data_destroy) @@ -516,6 +581,7 @@ pika_save_procedure_new (PikaPlugIn *plug_in, NULL); procedure->priv->run_func = run_func; + procedure->priv->export_metadata = export_metadata; procedure->priv->run_data = run_data; procedure->priv->run_data_destroy = run_data_destroy; diff --git a/libpika/pikasaveprocedure.h b/libpika/pikasaveprocedure.h index 25442d0..bce14c6 100644 --- a/libpika/pikasaveprocedure.h +++ b/libpika/pikasaveprocedure.h @@ -41,12 +41,20 @@ G_BEGIN_DECLS * @n_drawables: the number of drawables to save. * @drawables: (array length=n_drawables): the drawables to save. * @file: the #GFile to save to. - * @args: the @procedure's remaining arguments. + * @metadata: metadata object prepared for the mimetype passed in + * pika_file_procedure_set_mime_types() if export_metadata + * argument was set in pika_save_procedure_new(). + * @config: the @procedure's remaining arguments. * @run_data: (closure): the run_data given in pika_save_procedure_new(). * * The save function is run during the lifetime of the PIKA session, * each time a plug-in save procedure is called. * + * If a MimeType was passed in pika_save_procedure_new(), then @metadata will be + * non-%NULL and can be tweaked by the run() function if needed. Otherwise you + * can let it as-is and it will be stored back into the exported @file according + * to rules on metadata export shared across formats. + * * Returns: (transfer full): the @procedure's return values. * * Since: 3.0 @@ -57,7 +65,8 @@ typedef PikaValueArray * (* PikaRunSaveFunc) (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); @@ -86,14 +95,15 @@ struct _PikaSaveProcedureClass }; -GType pika_save_procedure_get_type (void) G_GNUC_CONST; +GType pika_save_procedure_get_type (void) G_GNUC_CONST; -PikaProcedure * pika_save_procedure_new (PikaPlugIn *plug_in, - const gchar *name, - PikaPDBProcType proc_type, - PikaRunSaveFunc run_func, - gpointer run_data, - GDestroyNotify run_data_destroy); +PikaProcedure * pika_save_procedure_new (PikaPlugIn *plug_in, + const gchar *name, + PikaPDBProcType proc_type, + gboolean export_metadata, + PikaRunSaveFunc run_func, + gpointer run_data, + GDestroyNotify run_data_destroy); void pika_save_procedure_set_support_exif (PikaSaveProcedure *procedure, gboolean supports); diff --git a/libpika/pikasaveproceduredialog.c b/libpika/pikasaveproceduredialog.c index 8ccf21f..916d4b8 100644 --- a/libpika/pikasaveproceduredialog.c +++ b/libpika/pikasaveproceduredialog.c @@ -262,7 +262,6 @@ pika_save_procedure_dialog_fill_list (PikaProcedureDialog *dialog, for (iter = save_dialog->priv->additional_metadata; iter; iter = iter->next) { widget = pika_procedure_dialog_get_widget (dialog, iter->data, G_TYPE_NONE); - g_object_ref (widget); gtk_grid_attach (GTK_GRID (grid), widget, left, top, 6 / n_metadata, 1); left += 6 / n_metadata; if (left >= 6) @@ -333,11 +332,13 @@ static gpointer pika_save_procedure_dialog_edit_metadata_thread (gpointer data) { PikaSaveProcedureDialog *dialog = data; + PikaProcedure *procedure; - pika_pdb_run_procedure (pika_get_pdb (), "plug-in-metadata-editor", - PIKA_TYPE_RUN_MODE, PIKA_RUN_INTERACTIVE, - PIKA_TYPE_IMAGE, dialog->priv->image, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), "plug-in-metadata-editor"); + pika_procedure_run (procedure, + "run-mode", PIKA_RUN_INTERACTIVE, + "image", dialog->priv->image, + NULL); g_mutex_lock (&dialog->priv->metadata_thread_mutex); g_thread_unref (dialog->priv->metadata_thread); diff --git a/libpika/pikaselection_pdb.c b/libpika/pikaselection_pdb.c index 91bc96b..55458a3 100644 --- a/libpika/pikaselection_pdb.c +++ b/libpika/pikaselection_pdb.c @@ -74,9 +74,9 @@ pika_selection_bounds (PikaImage *image, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-bounds", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-bounds", + args); pika_value_array_unref (args); *non_empty = FALSE; @@ -129,9 +129,9 @@ pika_selection_value (PikaImage *image, G_TYPE_INT, y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-value", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-value", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -164,9 +164,9 @@ pika_selection_is_empty (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-is-empty", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-is-empty", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -208,9 +208,9 @@ pika_selection_translate (PikaImage *image, G_TYPE_INT, offy, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-translate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-translate", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -256,9 +256,9 @@ _pika_selection_float (gint num_drawables, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 1), PIKA_TYPE_ITEM, (GObject **) drawables, num_drawables); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-float", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-float", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -291,9 +291,9 @@ pika_selection_invert (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-invert", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-invert", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -327,9 +327,9 @@ pika_selection_sharpen (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-sharpen", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-sharpen", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -361,9 +361,9 @@ pika_selection_all (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-all", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-all", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -395,9 +395,9 @@ pika_selection_none (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-none", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-none", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -432,9 +432,9 @@ pika_selection_feather (PikaImage *image, G_TYPE_DOUBLE, radius, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-feather", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-feather", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -470,9 +470,9 @@ pika_selection_border (PikaImage *image, G_TYPE_INT, radius, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-border", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-border", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -507,9 +507,9 @@ pika_selection_grow (PikaImage *image, G_TYPE_INT, steps, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-grow", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-grow", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -545,9 +545,9 @@ pika_selection_shrink (PikaImage *image, G_TYPE_INT, steps, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-shrink", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-shrink", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -583,9 +583,9 @@ pika_selection_flood (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-flood", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-flood", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -618,9 +618,9 @@ pika_selection_save (PikaImage *image) PIKA_TYPE_IMAGE, image, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-selection-save", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-selection-save", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikatextlayer.c b/libpika/pikatextlayer.c index c3fa025..9127bdb 100644 --- a/libpika/pikatextlayer.c +++ b/libpika/pikatextlayer.c @@ -82,11 +82,11 @@ pika_text_layer_get_by_id (gint32 layer_id) /** * pika_text_layer_new: - * @image: The image to which to add the layer. - * @text: The text to generate (in UTF-8 encoding). - * @fontname: The name of the font. - * @size: The size of text in either pixels or points. - * @unit: The units of specified size. + * @image: The image to which to add the layer. + * @text: The text to generate (in UTF-8 encoding). + * @font: The name of the font. + * @size: The size of text in either pixels or points. + * @unit: The units of specified size. * * Create a new layer. * @@ -107,11 +107,11 @@ pika_text_layer_get_by_id (gint32 layer_id) PikaTextLayer * pika_text_layer_new (PikaImage *image, const gchar *text, - const gchar *fontname, + PikaFont *font, gdouble size, PikaUnit unit) { - return _pika_text_layer_new (image, text, fontname, size, unit); + return _pika_text_layer_new (image, text, font, size, unit); } @@ -122,19 +122,18 @@ pika_text_layer_copy (PikaLayer *layer) { PikaTextLayer *new_layer; gchar *text; - gchar *fontname; + PikaFont *font; gdouble size; PikaUnit unit; g_return_val_if_fail (PIKA_IS_TEXT_LAYER (layer), NULL); text = pika_text_layer_get_text (PIKA_TEXT_LAYER (layer)); - fontname = pika_text_layer_get_font (PIKA_TEXT_LAYER (layer)); + font = pika_text_layer_get_font (PIKA_TEXT_LAYER (layer)); size = pika_text_layer_get_font_size (PIKA_TEXT_LAYER (layer), &unit); new_layer = pika_text_layer_new (pika_item_get_image (PIKA_ITEM (layer)), - text, fontname, size, unit); + text, font, size, unit); g_free (text); - g_free (fontname); return PIKA_LAYER (new_layer); } diff --git a/libpika/pikatextlayer.h b/libpika/pikatextlayer.h index d51295a..68a3192 100644 --- a/libpika/pikatextlayer.h +++ b/libpika/pikatextlayer.h @@ -39,7 +39,7 @@ PikaTextLayer * pika_text_layer_get_by_id (gint32 layer_id); PikaTextLayer * pika_text_layer_new (PikaImage *image, const gchar *text, - const gchar *fontname, + PikaFont *font, gdouble size, PikaUnit unit); diff --git a/libpika/pikatextlayer_pdb.c b/libpika/pikatextlayer_pdb.c index f0baa52..96bcbb0 100644 --- a/libpika/pikatextlayer_pdb.c +++ b/libpika/pikatextlayer_pdb.c @@ -40,7 +40,7 @@ * _pika_text_layer_new: * @image: The image. * @text: The text to generate (in UTF-8 encoding). - * @fontname: The name of the font. + * @font: The font to write the text with. * @size: The size of text in either pixels or points. * @unit: The units of specified size. * @@ -60,7 +60,7 @@ PikaTextLayer * _pika_text_layer_new (PikaImage *image, const gchar *text, - const gchar *fontname, + PikaFont *font, gdouble size, PikaUnit unit) { @@ -71,14 +71,14 @@ _pika_text_layer_new (PikaImage *image, args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_STRING, text, - G_TYPE_STRING, fontname, + PIKA_TYPE_FONT, font, G_TYPE_DOUBLE, size, PIKA_TYPE_UNIT, unit, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -113,9 +113,9 @@ pika_text_layer_get_text (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-text", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-text", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -152,9 +152,9 @@ pika_text_layer_set_text (PikaTextLayer *layer, G_TYPE_STRING, text, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-text", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-text", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -192,9 +192,9 @@ pika_text_layer_get_markup (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-markup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-markup", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -236,9 +236,9 @@ pika_text_layer_set_markup (PikaTextLayer *layer, G_TYPE_STRING, markup, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-markup", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-markup", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -254,32 +254,31 @@ pika_text_layer_set_markup (PikaTextLayer *layer, * * Get the font from a text layer as string. * - * This procedure returns the name of the font from a text layer. + * This procedure returns the font from a text layer. * - * Returns: (transfer full): + * Returns: (transfer none): * The font which is used in the specified text layer. - * The returned value must be freed with g_free(). * * Since: 2.6 **/ -gchar * +PikaFont * pika_text_layer_get_font (PikaTextLayer *layer) { PikaValueArray *args; PikaValueArray *return_vals; - gchar *font = NULL; + PikaFont *font = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-font", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-font", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) - font = PIKA_VALUES_DUP_STRING (return_vals, 1); + font = PIKA_VALUES_GET_FONT (return_vals, 1); pika_value_array_unref (return_vals); @@ -301,7 +300,7 @@ pika_text_layer_get_font (PikaTextLayer *layer) **/ gboolean pika_text_layer_set_font (PikaTextLayer *layer, - const gchar *font) + PikaFont *font) { PikaValueArray *args; PikaValueArray *return_vals; @@ -309,12 +308,12 @@ pika_text_layer_set_font (PikaTextLayer *layer, args = pika_value_array_new_from_types (NULL, PIKA_TYPE_TEXT_LAYER, layer, - G_TYPE_STRING, font, + PIKA_TYPE_FONT, font, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-font", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-font", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -351,9 +350,9 @@ pika_text_layer_get_font_size (PikaTextLayer *layer, PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-font-size", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-font-size", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -397,9 +396,9 @@ pika_text_layer_set_font_size (PikaTextLayer *layer, PIKA_TYPE_UNIT, unit, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-font-size", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-font-size", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -433,9 +432,9 @@ pika_text_layer_get_antialias (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-antialias", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-antialias", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -473,9 +472,9 @@ pika_text_layer_set_antialias (PikaTextLayer *layer, G_TYPE_BOOLEAN, antialias, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-antialias", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-antialias", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -510,9 +509,9 @@ pika_text_layer_get_hint_style (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-hint-style", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-hint-style", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -551,9 +550,9 @@ pika_text_layer_set_hint_style (PikaTextLayer *layer, PIKA_TYPE_TEXT_HINT_STYLE, style, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-hint-style", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-hint-style", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -587,9 +586,9 @@ pika_text_layer_get_kerning (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-kerning", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-kerning", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -626,9 +625,9 @@ pika_text_layer_set_kerning (PikaTextLayer *layer, G_TYPE_BOOLEAN, kerning, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-kerning", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-kerning", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -663,9 +662,9 @@ pika_text_layer_get_language (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-language", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-language", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -703,9 +702,9 @@ pika_text_layer_set_language (PikaTextLayer *layer, G_TYPE_STRING, language, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-language", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-language", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -739,9 +738,9 @@ pika_text_layer_get_base_direction (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-base-direction", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-base-direction", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -779,9 +778,9 @@ pika_text_layer_set_base_direction (PikaTextLayer *layer, PIKA_TYPE_TEXT_DIRECTION, direction, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-base-direction", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-base-direction", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -815,9 +814,9 @@ pika_text_layer_get_justification (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-justification", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-justification", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -855,9 +854,9 @@ pika_text_layer_set_justification (PikaTextLayer *layer, PIKA_TYPE_TEXT_JUSTIFICATION, justify, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-justification", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-justification", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -892,9 +891,9 @@ pika_text_layer_get_color (PikaTextLayer *layer, PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -933,9 +932,9 @@ pika_text_layer_set_color (PikaTextLayer *layer, PIKA_TYPE_RGB, color, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-color", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-color", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -969,9 +968,9 @@ pika_text_layer_get_indent (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-indent", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-indent", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1009,9 +1008,9 @@ pika_text_layer_set_indent (PikaTextLayer *layer, G_TYPE_DOUBLE, indent, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-indent", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-indent", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1045,9 +1044,9 @@ pika_text_layer_get_line_spacing (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-line-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-line-spacing", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1085,9 +1084,9 @@ pika_text_layer_set_line_spacing (PikaTextLayer *layer, G_TYPE_DOUBLE, line_spacing, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-line-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-line-spacing", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1121,9 +1120,9 @@ pika_text_layer_get_letter_spacing (PikaTextLayer *layer) PIKA_TYPE_TEXT_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-get-letter-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-get-letter-spacing", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1161,9 +1160,9 @@ pika_text_layer_set_letter_spacing (PikaTextLayer *layer, G_TYPE_DOUBLE, letter_spacing, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-set-letter-spacing", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-set-letter-spacing", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1204,9 +1203,9 @@ pika_text_layer_resize (PikaTextLayer *layer, G_TYPE_DOUBLE, height, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-layer-resize", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-layer-resize", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; diff --git a/libpika/pikatextlayer_pdb.h b/libpika/pikatextlayer_pdb.h index bf929de..994eb15 100644 --- a/libpika/pikatextlayer_pdb.h +++ b/libpika/pikatextlayer_pdb.h @@ -34,7 +34,7 @@ G_BEGIN_DECLS G_GNUC_INTERNAL PikaTextLayer* _pika_text_layer_new (PikaImage *image, const gchar *text, - const gchar *fontname, + PikaFont *font, gdouble size, PikaUnit unit); gchar* pika_text_layer_get_text (PikaTextLayer *layer); @@ -43,9 +43,9 @@ gboolean pika_text_layer_set_text (PikaTextLayer gchar* pika_text_layer_get_markup (PikaTextLayer *layer); gboolean pika_text_layer_set_markup (PikaTextLayer *layer, const gchar *markup); -gchar* pika_text_layer_get_font (PikaTextLayer *layer); +PikaFont* pika_text_layer_get_font (PikaTextLayer *layer); gboolean pika_text_layer_set_font (PikaTextLayer *layer, - const gchar *font); + PikaFont *font); gdouble pika_text_layer_get_font_size (PikaTextLayer *layer, PikaUnit *unit); gboolean pika_text_layer_set_font_size (PikaTextLayer *layer, diff --git a/libpika/pikatexttool_pdb.c b/libpika/pikatexttool_pdb.c index e8ae5fb..6d997af 100644 --- a/libpika/pikatexttool_pdb.c +++ b/libpika/pikatexttool_pdb.c @@ -37,7 +37,7 @@ /** - * pika_text_fontname: + * pika_text_font: * @image: The image. * @drawable: (nullable): The affected drawable: (%NULL for a new text layer). * @x: The x coordinate for the left of the text bounding box. @@ -45,41 +45,36 @@ * @text: The text to generate (in UTF-8 encoding). * @border: The size of the border. * @antialias: Antialiasing. - * @size: The size of text in either pixels or points. - * @size_type: The units of specified size. - * @fontname: The name of the font. + * @size: The size of text in pixels. + * @font: The font. * * Add text at the specified location as a floating selection or a new * layer. * - * This tool requires a fontname matching an installed PangoFT2 font. - * You can specify the fontsize in units of pixels or points, and the - * appropriate metric is specified using the size_type argument. The x - * and y parameters together control the placement of the new text by - * specifying the upper left corner of the text bounding box. If the - * specified drawable parameter is valid, the text will be created as a - * floating selection attached to the drawable. If the drawable - * parameter is not valid (%NULL), the text will appear as a new layer. - * Finally, a border can be specified around the final rendered text. - * The border is measured in pixels. Parameter size-type is not used - * and is currently ignored. If you need to display a font in points, - * divide the size in points by 72.0 and multiply it by the image's - * vertical resolution. + * The x and y parameters together control the placement of the new + * text by specifying the upper left corner of the text bounding box. + * If the specified drawable parameter is valid, the text will be + * created as a floating selection attached to the drawable. If the + * drawable parameter is not valid (%NULL), the text will appear as a + * new layer. Finally, a border can be specified around the final + * rendered text. The border is measured in pixels. + * The size is always in pixels. If you need to display a font in + * points, divide the size in points by 72.0 and multiply it by the + * image's vertical resolution. * * Returns: (nullable) (transfer none): * The new text layer or %NULL if no layer was created. **/ PikaLayer * -pika_text_fontname (PikaImage *image, - PikaDrawable *drawable, - gdouble x, - gdouble y, - const gchar *text, - gint border, - gboolean antialias, - gdouble size, - PikaSizeType size_type, - const gchar *fontname) +pika_text_font (PikaImage *image, + PikaDrawable *drawable, + gdouble x, + gdouble y, + const gchar *text, + gint border, + gboolean antialias, + gdouble size, + PikaFont *font) { PikaValueArray *args; PikaValueArray *return_vals; @@ -94,13 +89,12 @@ pika_text_fontname (PikaImage *image, G_TYPE_INT, border, G_TYPE_BOOLEAN, antialias, G_TYPE_DOUBLE, size, - PIKA_TYPE_SIZE_TYPE, size_type, - G_TYPE_STRING, fontname, + PIKA_TYPE_FONT, font, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-fontname", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-font", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -112,37 +106,39 @@ pika_text_fontname (PikaImage *image, } /** - * pika_text_get_extents_fontname: + * pika_text_get_extents_font: * @text: The text to generate (in UTF-8 encoding). * @size: The size of text in either pixels or points. - * @size_type: The units of specified size. - * @fontname: The name of the font. - * @width: (out): The width of the specified font. - * @height: (out): The height of the specified font. - * @ascent: (out): The ascent of the specified font. - * @descent: (out): The descent of the specified font. + * @font: The name of the font. + * @width: (out): The width of the glyph extents. + * @height: (out): The height of the glyph extents. + * @ascent: (out): The ascent of the glyph extents. + * @descent: (out): The descent of the glyph extents. * * Get extents of the bounding box for the specified text. * * This tool returns the width and height of a bounding box for the - * specified text string with the specified font information. Ascent - * and descent for the specified font are returned as well. Parameter - * size-type is not used and is currently ignored. If you need to - * display a font in points, divide the size in points by 72.0 and - * multiply it by the vertical resolution of the image you are taking - * into account. + * specified text rendered with the specified font information. Ascent + * and descent of the glyph extents are returned as well. + * The ascent is the distance from the baseline to the highest point of + * the character. This is positive if the glyph ascends above the + * baseline. The descent is the distance from the baseline to the + * lowest point of the character. This is positive if the glyph + * descends below the baseline. + * The size is always in pixels. If you need to set a font in points, + * divide the size in points by 72.0 and multiply it by the vertical + * resolution of the image you are taking into account. * * Returns: TRUE on success. **/ gboolean -pika_text_get_extents_fontname (const gchar *text, - gdouble size, - PikaSizeType size_type, - const gchar *fontname, - gint *width, - gint *height, - gint *ascent, - gint *descent) +pika_text_get_extents_font (const gchar *text, + gdouble size, + PikaFont *font, + gint *width, + gint *height, + gint *ascent, + gint *descent) { PikaValueArray *args; PikaValueArray *return_vals; @@ -151,13 +147,12 @@ pika_text_get_extents_fontname (const gchar *text, args = pika_value_array_new_from_types (NULL, G_TYPE_STRING, text, G_TYPE_DOUBLE, size, - PIKA_TYPE_SIZE_TYPE, size_type, - G_TYPE_STRING, fontname, + PIKA_TYPE_FONT, font, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-text-get-extents-fontname", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-text-get-extents-font", + args); pika_value_array_unref (args); *width = 0; diff --git a/libpika/pikatexttool_pdb.h b/libpika/pikatexttool_pdb.h index 598cd9c..c220800 100644 --- a/libpika/pikatexttool_pdb.h +++ b/libpika/pikatexttool_pdb.h @@ -32,24 +32,22 @@ G_BEGIN_DECLS /* For information look into the C source or the html documentation */ -PikaLayer* pika_text_fontname (PikaImage *image, - PikaDrawable *drawable, - gdouble x, - gdouble y, - const gchar *text, - gint border, - gboolean antialias, - gdouble size, - PikaSizeType size_type, - const gchar *fontname); -gboolean pika_text_get_extents_fontname (const gchar *text, - gdouble size, - PikaSizeType size_type, - const gchar *fontname, - gint *width, - gint *height, - gint *ascent, - gint *descent); +PikaLayer* pika_text_font (PikaImage *image, + PikaDrawable *drawable, + gdouble x, + gdouble y, + const gchar *text, + gint border, + gboolean antialias, + gdouble size, + PikaFont *font); +gboolean pika_text_get_extents_font (const gchar *text, + gdouble size, + PikaFont *font, + gint *width, + gint *height, + gint *ascent, + gint *descent); G_END_DECLS diff --git a/libpika/pikathumbnailprocedure.c b/libpika/pikathumbnailprocedure.c index 704c25a..efa9ca8 100644 --- a/libpika/pikathumbnailprocedure.c +++ b/libpika/pikathumbnailprocedure.c @@ -26,7 +26,11 @@ #include "pika.h" +#include "libpikabase/pikawire.h" /* FIXME kill this include */ + +#include "pikaplugin-private.h" #include "pikathumbnailprocedure.h" +#include "pikaprocedureconfig-private.h" struct _PikaThumbnailProcedurePrivate @@ -142,11 +146,14 @@ static PikaValueArray * pika_thumbnail_procedure_run (PikaProcedure *procedure, const PikaValueArray *args) { + PikaPlugIn *plug_in; PikaThumbnailProcedure *thumbnail_proc = PIKA_THUMBNAIL_PROCEDURE (procedure); PikaValueArray *remaining; PikaValueArray *return_values; + PikaProcedureConfig *config; GFile *file; gint size; + PikaPDBStatusType status = PIKA_PDB_EXECUTION_ERROR; gint i; file = PIKA_VALUES_GET_FILE (args, 0); @@ -161,13 +168,32 @@ pika_thumbnail_procedure_run (PikaProcedure *procedure, pika_value_array_append (remaining, value); } + config = pika_procedure_create_config (procedure); + _pika_procedure_config_begin_run (config, NULL, PIKA_RUN_NONINTERACTIVE, remaining); + pika_value_array_unref (remaining); + return_values = thumbnail_proc->priv->run_func (procedure, file, size, - remaining, + config, thumbnail_proc->priv->run_data); - pika_value_array_unref (remaining); + if (return_values != NULL && + pika_value_array_length (return_values) > 0 && + G_VALUE_HOLDS_ENUM (pika_value_array_index (return_values, 0))) + status = PIKA_VALUES_GET_ENUM (return_values, 0); + + _pika_procedure_config_end_run (config, status); + /* This is debug printing to help plug-in developers figure out best + * practices. + */ + plug_in = pika_procedure_get_plug_in (procedure); + if (G_OBJECT (config)->ref_count > 1 && + _pika_plug_in_manage_memory_manually (plug_in)) + g_printerr ("%s: ERROR: the PikaThumbnailProcedure config object was refed " + "by plug-in, it MUST NOT do that!\n", G_STRFUNC); + + g_object_unref (config); return return_values; } diff --git a/libpika/pikathumbnailprocedure.h b/libpika/pikathumbnailprocedure.h index 945c018..61fc5c0 100644 --- a/libpika/pikathumbnailprocedure.h +++ b/libpika/pikathumbnailprocedure.h @@ -38,12 +38,24 @@ G_BEGIN_DECLS * @procedure: the #PikaProcedure that runs. * @file: the #GFile to load the thumbnail from. * @size: the requested thumbnail size. - * @args: the @procedure's remaining arguments. + * @config: the @procedure's remaining arguments. * @run_data: (closure): the run_data given in pika_thumbnail_procedure_new(). * * The thumbnail function is run during the lifetime of the PIKA session, * each time a plug-in thumbnail procedure is called. * + * [class@ThumbnailProcedure] are always run non-interactively. + * + * On success, the returned array must contain: + * 1. a [class@Image]: this is the only mandatory return value. It should + * ideally be a simple image whose dimensions are closest to @size and meant + * to be displayed as a small static image. + * 2. (optional) the full image's width (not the thumbnail's image's), or 0 if + * unknown. + * 3. (optional) the full image's height, or 0 if unknown. + * 4. (optional) the [enum@ImageType] of the full image. + * 5. (optional) the number of layers in the full image. + * * Returns: (transfer full): the @procedure's return values. * * Since: 3.0 @@ -51,7 +63,7 @@ G_BEGIN_DECLS typedef PikaValueArray * (* PikaRunThumbnailFunc) (PikaProcedure *procedure, GFile *file, gint size, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); diff --git a/libpika/pikatypes.h b/libpika/pikatypes.h index 7b3b6cf..3e09294 100644 --- a/libpika/pikatypes.h +++ b/libpika/pikatypes.h @@ -45,6 +45,13 @@ typedef struct _PikaVectors PikaVectors; typedef struct _PikaDisplay PikaDisplay; +typedef struct _PikaResource PikaResource; +typedef struct _PikaBrush PikaBrush; +typedef struct _PikaFont PikaFont; +typedef struct _PikaGradient PikaGradient; +typedef struct _PikaPattern PikaPattern; +typedef struct _PikaPalette PikaPalette; + /* FIXME move somewhere else */ diff --git a/libpika/pikaui.c b/libpika/pikaui.c index f9880a7..b8b56a5 100644 --- a/libpika/pikaui.c +++ b/libpika/pikaui.c @@ -32,6 +32,10 @@ #include #endif +#ifdef GDK_WINDOWING_WAYLAND +#include +#endif + #include "pika.h" #include "pikaui.h" @@ -55,25 +59,26 @@ /* local function prototypes */ -static void pika_ui_help_func (const gchar *help_id, - gpointer help_data); -static void pika_ui_theme_changed (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - GtkCssProvider *css_provider); -static void pika_ensure_modules (void); -#ifndef GDK_WINDOWING_WIN32 -static void pika_window_transient_realized (GtkWidget *window, - GdkWindow *parent); -#endif -static gboolean pika_window_set_transient_for (GtkWindow *window, - GdkWindow *parent); +static void pika_ui_help_func (const gchar *help_id, + gpointer help_data); +static void pika_ui_theme_changed (GFileMonitor *monitor, + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + GtkCssProvider *css_provider); +static void pika_ensure_modules (void); #ifdef GDK_WINDOWING_QUARTZ -static gboolean pika_osx_focus_window (gpointer); +static gboolean pika_osx_focus_window (gpointer); #endif +#ifndef GDK_WINDOWING_WIN32 +static GdkWindow * pika_ui_get_foreign_window (gpointer window); +#endif +static gboolean pika_window_transient_on_mapped (GtkWidget *window, + GdkEventAny *event, + PikaDisplay *display); + static gboolean pika_ui_initialized = FALSE; @@ -171,87 +176,12 @@ pika_ui_init (const gchar *prog_name) g_idle_add (pika_osx_focus_window, NULL); #endif + /* Some widgets use GEGL buffers for thumbnails, previews, etc. */ + gegl_init (NULL, NULL); + pika_ui_initialized = TRUE; } -static GdkWindow * -pika_ui_get_foreign_window (guint32 window) -{ -#ifdef GDK_WINDOWING_X11 - if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) - return gdk_x11_window_foreign_new_for_display (gdk_display_get_default (), - window); -#endif - -#ifdef GDK_WINDOWING_WIN32 - return gdk_win32_window_foreign_new_for_display (gdk_display_get_default (), - (HWND) (uintptr_t) window); -#endif - - return NULL; -} - -/** - * pika_ui_get_display_window: - * @display: a #PikaDisplay. - * - * Returns the #GdkWindow of a display window. The purpose is to allow - * to make plug-in dialogs transient to the image display as explained - * with gdk_window_set_transient_for(). - * - * You shouldn't have to call this function directly. Use - * pika_window_set_transient_for_display() instead. - * - * Returns: (nullable) (transfer full): A reference to a #GdkWindow or %NULL. - * You should unref the window using g_object_unref() as - * soon as you don't need it any longer. - * - * Since: 2.4 - */ -GdkWindow * -pika_ui_get_display_window (PikaDisplay *display) -{ - guint32 window; - - g_return_val_if_fail (pika_ui_initialized, NULL); - - window = pika_display_get_window_handle (display); - if (window) - return pika_ui_get_foreign_window (window); - - return NULL; -} - -/** - * pika_ui_get_progress_window: - * - * Returns the #GdkWindow of the window this plug-in's progress bar is - * shown in. Use it to make plug-in dialogs transient to this window - * as explained with gdk_window_set_transient_for(). - * - * You shouldn't have to call this function directly. Use - * pika_window_set_transient() instead. - * - * Returns: (transfer full): A reference to a #GdkWindow or %NULL. - * You should unref the window using g_object_unref() as - * soon as you don't need it any longer. - * - * Since: 2.4 - */ -GdkWindow * -pika_ui_get_progress_window (void) -{ - guint32 window; - - g_return_val_if_fail (pika_ui_initialized, NULL); - - window = pika_progress_get_window_handle (); - if (window) - return pika_ui_get_foreign_window (window); - - return NULL; -} - #ifdef GDK_WINDOWING_QUARTZ static void pika_window_transient_show (GtkWidget *window) @@ -269,8 +199,8 @@ pika_window_transient_show (GtkWidget *window) * @display: display of the image window that should become the parent * * Indicates to the window manager that @window is a transient dialog - * associated with the PIKA image window that is identified by it's - * display ID. See gdk_window_set_transient_for () for more information. + * associated with the PIKA image window that is identified by its + * display. See gdk_window_set_transient_for () for more information. * * Most of the time you will want to use the convenience function * pika_window_set_transient(). @@ -283,22 +213,14 @@ pika_window_set_transient_for_display (GtkWindow *window, { g_return_if_fail (pika_ui_initialized); g_return_if_fail (GTK_IS_WINDOW (window)); + g_return_if_fail (PIKA_IS_DISPLAY (display)); - if (! pika_window_set_transient_for (window, - pika_ui_get_display_window (display))) - { - /* if setting the window transient failed, at least set - * WIN_POS_CENTER, which will center the window on the screen - * where the mouse is (see bug #684003). - */ - gtk_window_set_position (window, GTK_WIN_POS_CENTER); + g_signal_connect_after (window, "map-event", + G_CALLBACK (pika_window_transient_on_mapped), + display); -#ifdef GDK_WINDOWING_QUARTZ - g_signal_connect (window, "show", - G_CALLBACK (pika_window_transient_show), - NULL); -#endif - } + if (gtk_widget_get_mapped (GTK_WIDGET (window))) + pika_window_transient_on_mapped (GTK_WIDGET (window), NULL, display); } /** @@ -317,17 +239,12 @@ pika_window_set_transient (GtkWindow *window) g_return_if_fail (pika_ui_initialized); g_return_if_fail (GTK_IS_WINDOW (window)); - if (! pika_window_set_transient_for (window, pika_ui_get_progress_window ())) - { - /* see above */ - gtk_window_set_position (window, GTK_WIN_POS_CENTER); + g_signal_connect_after (window, "map-event", + G_CALLBACK (pika_window_transient_on_mapped), + NULL); -#ifdef GDK_WINDOWING_QUARTZ - g_signal_connect (window, "show", - G_CALLBACK (pika_window_transient_show), - NULL); -#endif - } + if (gtk_widget_get_mapped (GTK_WIDGET (window))) + pika_window_transient_on_mapped (GTK_WIDGET (window), NULL, NULL); } @@ -401,49 +318,6 @@ pika_ensure_modules (void) } } -#ifndef GDK_WINDOWING_WIN32 -static void -pika_window_transient_realized (GtkWidget *window, - GdkWindow *parent) -{ - if (gtk_widget_get_realized (window)) - gdk_window_set_transient_for (gtk_widget_get_window (window), parent); -} -#endif - -static gboolean -pika_window_set_transient_for (GtkWindow *window, - GdkWindow *parent) -{ - gtk_window_set_transient_for (window, NULL); - - /* To know why it is disabled on Win32, see - * pika_window_set_transient_for() in app/widgets/pikawidgets-utils.c. - */ -#ifndef GDK_WINDOWING_WIN32 - g_signal_handlers_disconnect_matched (window, G_SIGNAL_MATCH_FUNC, - 0, 0, NULL, - pika_window_transient_realized, - NULL); - - if (! parent) - return FALSE; - - if (gtk_widget_get_realized (GTK_WIDGET (window))) - gdk_window_set_transient_for (gtk_widget_get_window (GTK_WIDGET (window)), - parent); - - g_signal_connect_object (window, "realize", - G_CALLBACK (pika_window_transient_realized), - parent, 0); - g_object_unref (parent); - - return TRUE; -#endif - - return FALSE; -} - #ifdef GDK_WINDOWING_QUARTZ static gboolean pika_osx_focus_window (gpointer user_data) @@ -452,3 +326,112 @@ pika_osx_focus_window (gpointer user_data) return FALSE; } #endif + +static GdkWindow * +pika_ui_get_foreign_window (gpointer window) +{ +#ifdef GDK_WINDOWING_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) + return gdk_x11_window_foreign_new_for_display (gdk_display_get_default (), + (Window) window); +#endif + +#ifdef GDK_WINDOWING_WIN32 + return gdk_win32_window_foreign_new_for_display (gdk_display_get_default (), + (HWND) window); +#endif + + return NULL; +} + +static gboolean +pika_window_transient_on_mapped (GtkWidget *window, + GdkEventAny *event, + PikaDisplay *display) +{ + GBytes *handle; + gboolean transient_set = FALSE; + + if (display != NULL) + handle = pika_display_get_window_handle (display); + else + handle = pika_progress_get_window_handle (); + + if (handle == NULL) + return FALSE; + +#ifdef GDK_WINDOWING_WAYLAND + if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) + { + char *wayland_handle; + + wayland_handle = (char *) g_bytes_get_data (handle, NULL); + gdk_wayland_window_set_transient_for_exported (gtk_widget_get_window (window), + wayland_handle); + transient_set = TRUE; + } +#endif + +#ifdef GDK_WINDOWING_X11 + if (! transient_set && GDK_IS_X11_DISPLAY (gdk_display_get_default ())) + { + GdkWindow *parent; + Window *handle_data; + Window parent_ID; + gsize handle_size; + + handle_data = (Window *) g_bytes_get_data (handle, &handle_size); + g_return_val_if_fail (handle_size == sizeof (Window), FALSE); + parent_ID = *handle_data; + + parent = pika_ui_get_foreign_window ((gpointer) parent_ID); + + if (parent) + gdk_window_set_transient_for (gtk_widget_get_window (window), parent); + + transient_set = TRUE; + } +#endif + /* To know why it is disabled on Win32, see pika_window_set_transient_cb() in + * app/widgets/pikawidgets-utils.c. + */ +#if 0 && defined (GDK_WINDOWING_WIN32) + if (! transient_set) + { + GdkWindow *parent; + HANDLE *handle_data; + HANDLE parent_ID; + gsize handle_size; + + handle_data = (HANDLE *) g_bytes_get_data (handle, &handle_size); + g_return_val_if_fail (handle_size == sizeof (HANDLE), FALSE); + parent_ID = *handle_data; + + parent = pika_ui_get_foreign_window ((gpointer) parent_ID); + + if (parent) + gdk_window_set_transient_for (gtk_widget_get_window (window), parent); + + transient_set = TRUE; + } +#endif + + if (! transient_set) + { + /* if setting the window transient failed, at least set + * WIN_POS_CENTER, which will center the window on the screen + * where the mouse is (see bug #684003). + */ + gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); + +#ifdef GDK_WINDOWING_QUARTZ + g_signal_connect (window, "show", + G_CALLBACK (pika_window_transient_show), + NULL); +#endif + } + + g_bytes_unref (handle); + + return FALSE; +} diff --git a/libpika/pikaui.def b/libpika/pikaui.def index acc977a..3f7112f 100644 --- a/libpika/pikaui.def +++ b/libpika/pikaui.def @@ -1,10 +1,15 @@ EXPORTS pika_aspect_preview_get_type pika_aspect_preview_new_from_drawable - pika_brush_select_button_get_type - pika_brush_select_button_new + pika_brush_chooser_get_type + pika_brush_chooser_new pika_channel_combo_box_get_type pika_channel_combo_box_new + pika_drawable_chooser_get_drawable + pika_drawable_chooser_get_label + pika_drawable_chooser_get_type + pika_drawable_chooser_new + pika_drawable_chooser_set_drawable pika_drawable_combo_box_get_type pika_drawable_combo_box_new pika_drawable_preview_get_drawable @@ -13,18 +18,18 @@ EXPORTS pika_export_dialog_get_content_area pika_export_dialog_new pika_export_image - pika_font_select_button_get_type - pika_font_select_button_new - pika_gradient_select_button_get_type - pika_gradient_select_button_new + pika_font_chooser_get_type + pika_font_chooser_new + pika_gradient_chooser_get_type + pika_gradient_chooser_new pika_image_combo_box_get_type pika_image_combo_box_new pika_layer_combo_box_get_type pika_layer_combo_box_new - pika_palette_select_button_get_type - pika_palette_select_button_new - pika_pattern_select_button_get_type - pika_pattern_select_button_new + pika_palette_chooser_get_type + pika_palette_chooser_new + pika_pattern_chooser_get_type + pika_pattern_chooser_new pika_proc_browser_dialog_get_selected pika_proc_browser_dialog_get_type pika_proc_browser_dialog_new @@ -37,6 +42,9 @@ EXPORTS pika_procedure_dialog_fill_flowbox_list pika_procedure_dialog_fill_frame pika_procedure_dialog_fill_list + pika_procedure_dialog_fill_notebook + pika_procedure_dialog_fill_notebook_list + pika_procedure_dialog_fill_paned pika_procedure_dialog_fill_scrolled_window pika_procedure_dialog_get_color_widget pika_procedure_dialog_get_file_chooser @@ -50,26 +58,26 @@ EXPORTS pika_procedure_dialog_get_widget pika_procedure_dialog_new pika_procedure_dialog_run + pika_procedure_dialog_set_ok_label pika_procedure_dialog_set_sensitive + pika_procedure_dialog_set_sensitive_if_in pika_progress_bar_get_type pika_progress_bar_new - pika_prop_chooser_brush_new - pika_prop_chooser_factory - pika_prop_chooser_font_new - pika_prop_chooser_gradient_new - pika_prop_chooser_palette_new - pika_prop_chooser_pattern_new - pika_resource_select_button_close_popup - pika_resource_select_button_get_resource - pika_resource_select_button_get_type - pika_resource_select_button_set_clickable - pika_resource_select_button_set_drag_target - pika_resource_select_button_set_resource + pika_prop_brush_chooser_new + pika_prop_drawable_chooser_new + pika_prop_font_chooser_new + pika_prop_gradient_chooser_new + pika_prop_palette_chooser_new + pika_prop_pattern_chooser_new + pika_resource_chooser_get_label + pika_resource_chooser_get_resource + pika_resource_chooser_get_type + pika_resource_chooser_set_clickable + pika_resource_chooser_set_drag_target + pika_resource_chooser_set_resource pika_save_procedure_dialog_add_metadata pika_save_procedure_dialog_get_type pika_save_procedure_dialog_new - pika_ui_get_display_window - pika_ui_get_progress_window pika_ui_init pika_vectors_combo_box_get_type pika_vectors_combo_box_new diff --git a/libpika/pikaui.h b/libpika/pikaui.h index ef3d5cf..d0d1d29 100644 --- a/libpika/pikaui.h +++ b/libpika/pikaui.h @@ -30,21 +30,22 @@ #include #include -#include +#include +#include #include #include -#include -#include -#include +#include +#include #include #include -#include -#include +#include +#include #include #include #include #include -#include +#include +#include #include #include @@ -57,11 +58,7 @@ G_BEGIN_DECLS void pika_ui_init (const gchar *prog_name); -GdkWindow * pika_ui_get_progress_window (void); - void pika_window_set_transient (GtkWindow *window); - -GdkWindow * pika_ui_get_display_window (PikaDisplay *display); void pika_window_set_transient_for_display (GtkWindow *window, PikaDisplay *display); diff --git a/libpika/pikauitypes.h b/libpika/pikauitypes.h index d85ed18..e32e280 100644 --- a/libpika/pikauitypes.h +++ b/libpika/pikauitypes.h @@ -43,12 +43,14 @@ typedef struct _PikaLayerComboBox PikaLayerComboBox; typedef struct _PikaVectorsComboBox PikaVectorsComboBox; typedef struct _PikaImageComboBox PikaImageComboBox; -typedef struct _PikaSelectButton PikaSelectButton; -typedef struct _PikaBrushSelectButton PikaBrushSelectButton; -typedef struct _PikaFontSelectButton PikaFontSelectButton; -typedef struct _PikaGradientSelectButton PikaGradientSelectButton; -typedef struct _PikaPaletteSelectButton PikaPaletteSelectButton; -typedef struct _PikaPatternSelectButton PikaPatternSelectButton; +typedef struct _PikaDrawableChooser PikaDrawableChooser; + +typedef struct _PikaResourceChooser PikaResourceChooser; +typedef struct _PikaBrushChooser PikaBrushChooser; +typedef struct _PikaFontChooser PikaFontChooser; +typedef struct _PikaGradientChooser PikaGradientChooser; +typedef struct _PikaPaletteChooser PikaPaletteChooser; +typedef struct _PikaPatternChooser PikaPatternChooser; G_END_DECLS diff --git a/libpika/pikaunit_pdb.c b/libpika/pikaunit_pdb.c index d89b972..d476d2d 100644 --- a/libpika/pikaunit_pdb.c +++ b/libpika/pikaunit_pdb.c @@ -46,9 +46,9 @@ _pika_unit_get_number_of_units (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-get-number-of-units", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-get-number-of-units", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -78,9 +78,9 @@ _pika_unit_get_number_of_built_in_units (void) args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-get-number-of-built-in-units", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-get-number-of-built-in-units", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -133,9 +133,9 @@ _pika_unit_new (const gchar *identifier, G_TYPE_STRING, plural, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -169,9 +169,9 @@ _pika_unit_get_deletion_flag (PikaUnit unit_id) PIKA_TYPE_UNIT, unit_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-get-deletion-flag", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-get-deletion-flag", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -208,9 +208,9 @@ _pika_unit_set_deletion_flag (PikaUnit unit_id, G_TYPE_BOOLEAN, deletion_flag, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-set-deletion-flag", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-set-deletion-flag", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -244,9 +244,9 @@ _pika_unit_get_identifier (PikaUnit unit_id) PIKA_TYPE_UNIT, unit_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-get-identifier", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-get-identifier", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -280,9 +280,9 @@ _pika_unit_get_factor (PikaUnit unit_id) PIKA_TYPE_UNIT, unit_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-get-factor", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-get-factor", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -317,9 +317,9 @@ _pika_unit_get_digits (PikaUnit unit_id) PIKA_TYPE_UNIT, unit_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-get-digits", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-get-digits", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -352,9 +352,9 @@ _pika_unit_get_symbol (PikaUnit unit_id) PIKA_TYPE_UNIT, unit_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-get-symbol", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-get-symbol", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -388,9 +388,9 @@ _pika_unit_get_abbreviation (PikaUnit unit_id) PIKA_TYPE_UNIT, unit_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-get-abbreviation", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-get-abbreviation", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -423,9 +423,9 @@ _pika_unit_get_singular (PikaUnit unit_id) PIKA_TYPE_UNIT, unit_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-get-singular", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-get-singular", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -458,9 +458,9 @@ _pika_unit_get_plural (PikaUnit unit_id) PIKA_TYPE_UNIT, unit_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-unit-get-plural", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-unit-get-plural", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikavectors_pdb.c b/libpika/pikavectors_pdb.c index 2fa791f..5ebbb7e 100644 --- a/libpika/pikavectors_pdb.c +++ b/libpika/pikavectors_pdb.c @@ -64,9 +64,9 @@ pika_vectors_new (PikaImage *image, G_TYPE_STRING, name, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-new", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-new", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -104,9 +104,9 @@ pika_vectors_new_from_text_layer (PikaImage *image, PIKA_TYPE_LAYER, layer, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-new-from-text-layer", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-new-from-text-layer", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -141,9 +141,9 @@ pika_vectors_copy (PikaVectors *vectors) PIKA_TYPE_VECTORS, vectors, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-copy", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-copy", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -182,9 +182,9 @@ pika_vectors_get_strokes (PikaVectors *vectors, PIKA_TYPE_VECTORS, vectors, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-get-strokes", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-get-strokes", + args); pika_value_array_unref (args); *num_strokes = 0; @@ -229,9 +229,9 @@ pika_vectors_stroke_get_length (PikaVectors *vectors, G_TYPE_DOUBLE, precision, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-get-length", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-get-length", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -287,9 +287,9 @@ pika_vectors_stroke_get_point_at_dist (PikaVectors *vectors, G_TYPE_DOUBLE, precision, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-get-point-at-dist", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-get-point-at-dist", + args); pika_value_array_unref (args); *x_point = 0.0; @@ -338,9 +338,9 @@ pika_vectors_remove_stroke (PikaVectors *vectors, G_TYPE_INT, stroke_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-remove-stroke", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-remove-stroke", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -376,9 +376,9 @@ pika_vectors_stroke_close (PikaVectors *vectors, G_TYPE_INT, stroke_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-close", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-close", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -414,9 +414,9 @@ pika_vectors_stroke_reverse (PikaVectors *vectors, G_TYPE_INT, stroke_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-reverse", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-reverse", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -458,9 +458,9 @@ pika_vectors_stroke_translate (PikaVectors *vectors, G_TYPE_DOUBLE, off_y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-translate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-translate", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -502,9 +502,9 @@ pika_vectors_stroke_scale (PikaVectors *vectors, G_TYPE_DOUBLE, scale_y, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-scale", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-scale", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -549,9 +549,9 @@ pika_vectors_stroke_rotate (PikaVectors *vectors, G_TYPE_DOUBLE, angle, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-rotate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-rotate", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -593,9 +593,9 @@ pika_vectors_stroke_flip (PikaVectors *vectors, G_TYPE_DOUBLE, axis, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-flip", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-flip", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -645,9 +645,9 @@ pika_vectors_stroke_flip_free (PikaVectors *vectors, G_TYPE_DOUBLE, y2, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-flip-free", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-flip-free", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -692,9 +692,9 @@ pika_vectors_stroke_get_points (PikaVectors *vectors, G_TYPE_INT, stroke_id, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-get-points", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-get-points", + args); pika_value_array_unref (args); *num_points = 0; @@ -755,9 +755,9 @@ pika_vectors_stroke_new_from_points (PikaVectors *vectors, G_TYPE_NONE); pika_value_set_float_array (pika_value_array_index (args, 3), controlpoints, num_points); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-new-from-points", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-new-from-points", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -803,9 +803,9 @@ pika_vectors_stroke_interpolate (PikaVectors *vectors, G_TYPE_DOUBLE, precision, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-stroke-interpolate", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-stroke-interpolate", + args); pika_value_array_unref (args); *num_coords = 0; @@ -851,9 +851,9 @@ pika_vectors_bezier_stroke_new_moveto (PikaVectors *vectors, G_TYPE_DOUBLE, y0, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-bezier-stroke-new-moveto", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-bezier-stroke-new-moveto", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -896,9 +896,9 @@ pika_vectors_bezier_stroke_lineto (PikaVectors *vectors, G_TYPE_DOUBLE, y0, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-bezier-stroke-lineto", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-bezier-stroke-lineto", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -948,9 +948,9 @@ pika_vectors_bezier_stroke_conicto (PikaVectors *vectors, G_TYPE_DOUBLE, y1, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-bezier-stroke-conicto", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-bezier-stroke-conicto", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1004,9 +1004,9 @@ pika_vectors_bezier_stroke_cubicto (PikaVectors *vectors, G_TYPE_DOUBLE, y2, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-bezier-stroke-cubicto", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-bezier-stroke-cubicto", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1054,9 +1054,9 @@ pika_vectors_bezier_stroke_new_ellipse (PikaVectors *vectors, G_TYPE_DOUBLE, angle, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-bezier-stroke-new-ellipse", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-bezier-stroke-new-ellipse", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) @@ -1104,9 +1104,9 @@ pika_vectors_import_from_file (PikaImage *image, G_TYPE_BOOLEAN, scale, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-import-from-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-import-from-file", + args); pika_value_array_unref (args); *num_vectors = 0; @@ -1166,9 +1166,9 @@ pika_vectors_import_from_string (PikaImage *image, G_TYPE_BOOLEAN, scale, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-import-from-string", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-import-from-string", + args); pika_value_array_unref (args); *num_vectors = 0; @@ -1219,9 +1219,9 @@ pika_vectors_export_to_file (PikaImage *image, PIKA_TYPE_VECTORS, vectors, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-export-to-file", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-export-to-file", + args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; @@ -1262,9 +1262,9 @@ pika_vectors_export_to_string (PikaImage *image, PIKA_TYPE_VECTORS, vectors, G_TYPE_NONE); - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-vectors-export-to-string", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-vectors-export-to-string", + args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) diff --git a/libpika/pikazoompreview.c b/libpika/pikazoompreview.c index 3c5cd53..6393530 100644 --- a/libpika/pikazoompreview.c +++ b/libpika/pikazoompreview.c @@ -29,6 +29,7 @@ #include "pikauitypes.h" #include "pika.h" +#include "pikapdb-private.h" #include "pikadrawablepreview.h" #include "pikazoompreview.h" @@ -212,6 +213,7 @@ pika_zoom_preview_constructed (GObject *object) PikaZoomPreviewPrivate *priv = GET_PRIVATE (object); gchar *data_name; PreviewSettings settings; + GBytes *settings_bytes = NULL; G_OBJECT_CLASS (parent_class)->constructed (object); @@ -219,10 +221,13 @@ pika_zoom_preview_constructed (GObject *object) g_get_prgname (), pika_zoom_preview_counter++); - if (pika_get_data (data_name, &settings)) + if (pika_pdb_get_data (data_name, &settings_bytes) && + g_bytes_get_size (settings_bytes) == sizeof (PreviewSettings)) { + settings = *((PreviewSettings *) g_bytes_get_data (settings_bytes, NULL)); pika_preview_set_update (PIKA_PREVIEW (object), settings.update); } + g_bytes_unref (settings_bytes); g_object_set_data_full (object, "pika-zoom-preview-data-name", data_name, (GDestroyNotify) g_free); @@ -260,11 +265,14 @@ pika_zoom_preview_dispose (GObject *object) if (data_name) { PikaPreview *preview = PIKA_PREVIEW (object); + GBytes *bytes; PreviewSettings settings; settings.update = pika_preview_get_update (preview); - pika_set_data (data_name, &settings, sizeof (PreviewSettings)); + bytes = g_bytes_new_static (&settings, sizeof (PreviewSettings)); + pika_pdb_set_data (data_name, bytes); + g_bytes_unref (bytes); } G_OBJECT_CLASS (parent_class)->dispose (object); diff --git a/libpikabase/meson.build b/libpikabase/meson.build index d2148e2..5b3c0f2 100644 --- a/libpikabase/meson.build +++ b/libpikabase/meson.build @@ -51,6 +51,7 @@ stamp_compat_enums = custom_target('stamp-pikacompatenums.h', libpikabase_sources_introspectable = files( 'pikabasetypes.c', 'pikachecks.c', + 'pikachoice.c', 'pikacpuaccel.c', 'pikaenv.c', 'pikamemsize.c', diff --git a/libpikabase/pikabase.def b/libpikabase/pikabase.def index 5f76ef5..4f2d883 100644 --- a/libpikabase/pikabase.def +++ b/libpikabase/pikabase.def @@ -31,6 +31,17 @@ EXPORTS pika_check_size_get_type pika_check_type_get_type pika_checks_get_colors + pika_choice_add + pika_choice_get_documentation + pika_choice_get_help + pika_choice_get_id + pika_choice_get_label + pika_choice_get_type + pika_choice_is_valid + pika_choice_list_nicks + pika_choice_new + pika_choice_new_with_values + pika_choice_set_sensitive pika_clone_type_get_type pika_color_tag_get_type pika_component_type_get_type @@ -121,6 +132,7 @@ EXPORTS pika_orientation_type_get_type pika_paint_application_mode_get_type pika_param_array_get_type + pika_param_choice_get_type pika_param_float_array_get_type pika_param_int32_array_get_type pika_param_memsize_get_type @@ -128,6 +140,7 @@ EXPORTS pika_param_parasite_get_type pika_param_rgb_array_get_type pika_param_spec_array + pika_param_spec_choice pika_param_spec_float_array pika_param_spec_int32_array pika_param_spec_memsize diff --git a/libpikabase/pikabase.h b/libpikabase/pikabase.h index 387bade..faf0497 100644 --- a/libpikabase/pikabase.h +++ b/libpikabase/pikabase.h @@ -24,6 +24,7 @@ #include #include +#include #include #include #include diff --git a/libpikabase/pikabasetypes.h b/libpikabase/pikabasetypes.h index 2841141..cbf198d 100644 --- a/libpikabase/pikabasetypes.h +++ b/libpikabase/pikabasetypes.h @@ -44,6 +44,7 @@ G_BEGIN_DECLS #endif +typedef struct _PikaChoice PikaChoice; typedef struct _PikaParasite PikaParasite; typedef struct _PikaEnumDesc PikaEnumDesc; typedef struct _PikaFlagsDesc PikaFlagsDesc; diff --git a/libpikabase/pikametadata.h b/libpikabase/pikametadata.h index 9c595fa..edf78e7 100644 --- a/libpikabase/pikametadata.h +++ b/libpikabase/pikametadata.h @@ -34,6 +34,7 @@ G_BEGIN_DECLS /** * PikaMetadataLoadFlags: + * @PIKA_METADATA_LOAD_NONE: Do not load the metadata * @PIKA_METADATA_LOAD_COMMENT: Load the comment * @PIKA_METADATA_LOAD_RESOLUTION: Load the resolution * @PIKA_METADATA_LOAD_ORIENTATION: Load the orientation (rotation) @@ -44,6 +45,7 @@ G_BEGIN_DECLS **/ typedef enum { + PIKA_METADATA_LOAD_NONE = 0, PIKA_METADATA_LOAD_COMMENT = 1 << 0, PIKA_METADATA_LOAD_RESOLUTION = 1 << 1, PIKA_METADATA_LOAD_ORIENTATION = 1 << 2, diff --git a/libpikabase/pikaparamspecs.c b/libpikabase/pikaparamspecs.c index 4c0d25f..6e90c55 100644 --- a/libpikabase/pikaparamspecs.c +++ b/libpikabase/pikaparamspecs.c @@ -25,6 +25,169 @@ #include "pikabase.h" +/* + * PIKA_TYPE_PARAM_CHOICE + */ + +static void pika_param_choice_class_init (GParamSpecClass *klass); +static void pika_param_choice_init (GParamSpec *pspec); +static void pika_param_choice_value_set_default (GParamSpec *pspec, + GValue *value); +static void pika_param_choice_finalize (GParamSpec *pspec); +static gboolean pika_param_choice_validate (GParamSpec *pspec, + GValue *value); +static gint pika_param_choice_values_cmp (GParamSpec *pspec, + const GValue *value1, + const GValue *value2); + +GType +pika_param_choice_get_type (void) +{ + static GType type = 0; + + if (! type) + { + const GTypeInfo info = + { + sizeof (GParamSpecClass), + NULL, NULL, + (GClassInitFunc) pika_param_choice_class_init, + NULL, NULL, + sizeof (PikaParamSpecChoice), + 0, + (GInstanceInitFunc) pika_param_choice_init + }; + + type = g_type_register_static (G_TYPE_PARAM_BOXED, + "PikaParamChoice", &info, 0); + } + + return type; +} + +static void +pika_param_choice_class_init (GParamSpecClass *klass) +{ + klass->value_type = G_TYPE_STRING; + klass->value_set_default = pika_param_choice_value_set_default; + klass->finalize = pika_param_choice_finalize; + klass->value_validate = pika_param_choice_validate; + klass->values_cmp = pika_param_choice_values_cmp; +} + +static void +pika_param_choice_init (GParamSpec *pspec) +{ + PikaParamSpecChoice *choice = PIKA_PARAM_SPEC_CHOICE (pspec); + + choice->choice = NULL; + choice->default_value = NULL; +} + +static void +pika_param_choice_value_set_default (GParamSpec *pspec, + GValue *value) +{ + PikaParamSpecChoice *cspec = PIKA_PARAM_SPEC_CHOICE (pspec); + + g_value_set_string (value, cspec->default_value); +} + +static void +pika_param_choice_finalize (GParamSpec *pspec) +{ + PikaParamSpecChoice *spec_choice = PIKA_PARAM_SPEC_CHOICE (pspec); + + g_free (spec_choice->default_value); + g_object_unref (spec_choice->choice); +} + +static gboolean +pika_param_choice_validate (GParamSpec *pspec, + GValue *value) +{ + PikaParamSpecChoice *spec_choice = PIKA_PARAM_SPEC_CHOICE (pspec); + PikaChoice *choice = spec_choice->choice; + const gchar *strval = g_value_get_string (value); + + if (! pika_choice_is_valid (choice, strval)) + { + if (pika_choice_is_valid (choice, spec_choice->default_value)) + { + g_value_set_string (value, spec_choice->default_value); + } + else + { + /* This might happen if the default value is set insensitive. Then we + * should just set any valid random nick. + */ + GList *nicks; + + nicks = pika_choice_list_nicks (choice); + for (GList *iter = nicks; iter; iter = iter->next) + if (pika_choice_is_valid (choice, (gchar *) iter->data)) + { + g_value_set_string (value, (gchar *) iter->data); + break; + } + } + return TRUE; + } + + return FALSE; +} + +static gint +pika_param_choice_values_cmp (GParamSpec *pspec, + const GValue *value1, + const GValue *value2) +{ + const gchar *choice1 = g_value_get_string (value1); + const gchar *choice2 = g_value_get_string (value2); + + return g_strcmp0 (choice1, choice2); +} + +/** + * pika_param_spec_choice: + * @name: Canonical name of the property specified. + * @nick: Nick name of the property specified. + * @blurb: Description of the property specified. + * @choice: (transfer full): the %PikaChoice describing allowed choices. + * @flags: Flags for the property specified. + * + * Creates a new #PikaParamSpecChoice specifying a + * #G_TYPE_STRING property. + * This %PikaParamSpecChoice takes ownership of the reference on @choice. + * + * See g_param_spec_internal() for details on property names. + * + * Returns: (transfer full): The newly created #PikaParamSpecChoice. + * + * Since: 3.0 + **/ +GParamSpec * +pika_param_spec_choice (const gchar *name, + const gchar *nick, + const gchar *blurb, + PikaChoice *choice, + const gchar *default_value, + GParamFlags flags) +{ + PikaParamSpecChoice *choice_spec; + + choice_spec = g_param_spec_internal (PIKA_TYPE_PARAM_CHOICE, + name, nick, blurb, flags); + + g_return_val_if_fail (choice_spec, NULL); + + choice_spec->choice = choice; + choice_spec->default_value = g_strdup (default_value); + + return G_PARAM_SPEC (choice_spec); +} + + /* * PIKA_TYPE_ARRAY */ diff --git a/libpikabase/pikaparamspecs.h b/libpikabase/pikaparamspecs.h index ae38c7d..45e0c37 100644 --- a/libpikabase/pikaparamspecs.h +++ b/libpikabase/pikaparamspecs.h @@ -74,6 +74,34 @@ G_BEGIN_DECLS PIKA_PARAM_STATIC_STRINGS) +/* + * PIKA_TYPE_PARAM_CHOICE + */ + +#define PIKA_TYPE_PARAM_CHOICE (pika_param_choice_get_type ()) +#define PIKA_PARAM_SPEC_CHOICE(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), PIKA_TYPE_PARAM_CHOICE, PikaParamSpecChoice)) +#define PIKA_IS_PARAM_SPEC_CHOICE(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), PIKA_TYPE_PARAM_CHOICE)) + +typedef struct _PikaParamSpecChoice PikaParamSpecChoice; + +struct _PikaParamSpecChoice +{ + GParamSpecBoxed parent_instance; + + gchar *default_value; + PikaChoice *choice; +}; + +GType pika_param_choice_get_type (void) G_GNUC_CONST; + +GParamSpec * pika_param_spec_choice (const gchar *name, + const gchar *nick, + const gchar *blurb, + PikaChoice *choice, + const gchar *default_value, + GParamFlags flags); + + /* * PIKA_TYPE_ARRAY */ diff --git a/libpikabase/pikaprotocol.c b/libpikabase/pikaprotocol.c index 28ca8d7..67ba81d 100644 --- a/libpikabase/pikaprotocol.c +++ b/libpikabase/pikaprotocol.c @@ -22,6 +22,7 @@ #include "pikabasetypes.h" +#include "pikachoice.h" #include "pikaparamspecs.h" #include "pikaparasite.h" #include "pikaprotocol.h" @@ -1100,6 +1101,47 @@ _gp_param_def_read (GIOChannel *channel, return FALSE; break; + case GP_PARAM_DEF_TYPE_CHOICE: + { + PikaChoice *choice; + guint32 size; + gchar *nick; + + if (! _pika_wire_read_string (channel, &nick, (int) 1, user_data)) + return FALSE; + + param_def->meta.m_choice.default_val = g_strdup (nick); + + if (! _pika_wire_read_int32 (channel, &size, 1, user_data)) + return FALSE; + + choice = pika_choice_new (); + + for (gint i = 0; i < size; i++) + { + gchar *label; + gchar *help; + gint id; + + if (! _pika_wire_read_string (channel, &nick, + (int) 1, user_data) || + ! _pika_wire_read_int32 (channel, (guint32 *) &id, + 1, user_data) || + ! _pika_wire_read_string (channel, &label, + (int) 1, user_data) || + ! _pika_wire_read_string (channel, &help, + (int) 1, user_data)) + { + g_object_unref (choice); + return FALSE; + } + + pika_choice_add (choice, nick, id, label, help); + } + param_def->meta.m_choice.choice = choice; + } + break; + case GP_PARAM_DEF_TYPE_UNIT: if (! _pika_wire_read_int32 (channel, (guint32 *) ¶m_def->meta.m_unit.allow_pixels, 1, @@ -1196,6 +1238,11 @@ _gp_param_def_destroy (GPParamDef *param_def) case GP_PARAM_DEF_TYPE_FLOAT: break; + case GP_PARAM_DEF_TYPE_CHOICE: + g_free (param_def->meta.m_choice.default_val); + g_object_unref (param_def->meta.m_choice.choice); + break; + case GP_PARAM_DEF_TYPE_STRING: g_free (param_def->meta.m_string.default_val); break; @@ -1342,6 +1389,51 @@ _gp_param_def_write (GIOChannel *channel, return FALSE; break; + case GP_PARAM_DEF_TYPE_CHOICE: + { + GList *values; + gint size; + + if (! _pika_wire_write_string (channel, + ¶m_def->meta.m_choice.default_val, + 1, user_data)) + return FALSE; + + values = pika_choice_list_nicks (param_def->meta.m_choice.choice); + size = g_list_length (values); + + if (! _pika_wire_write_int32 (channel, + (guint32 *) &size, 1, + user_data)) + return FALSE; + + for (GList *iter = values; iter; iter = iter->next) + { + const gchar *label; + const gchar *help; + gint id; + + pika_choice_get_documentation (param_def->meta.m_choice.choice, + iter->data, &label, &help); + id = pika_choice_get_id (param_def->meta.m_choice.choice, + iter->data); + if (! _pika_wire_write_string (channel, + (gchar **) &iter->data, + 1, user_data) || + ! _pika_wire_write_int32 (channel, + (guint32 *) &id, 1, + user_data) || + ! _pika_wire_write_string (channel, + (gchar **) &label, + 1, user_data) || + ! _pika_wire_write_string (channel, + (gchar **) &help, + 1, user_data)) + return FALSE; + } + } + break; + case GP_PARAM_DEF_TYPE_UNIT: if (! _pika_wire_write_int32 (channel, (guint32 *) ¶m_def->meta.m_unit.allow_pixels, 1, diff --git a/libpikabase/pikaprotocol.h b/libpikabase/pikaprotocol.h index 3cc4f94..7acb39c 100644 --- a/libpikabase/pikaprotocol.h +++ b/libpikabase/pikaprotocol.h @@ -26,7 +26,7 @@ G_BEGIN_DECLS /* Increment every time the protocol changes */ -#define PIKA_PROTOCOL_VERSION 0x010F +#define PIKA_PROTOCOL_VERSION 0x0110 enum @@ -52,6 +52,7 @@ typedef enum GP_PARAM_DEF_TYPE_INT, GP_PARAM_DEF_TYPE_UNIT, GP_PARAM_DEF_TYPE_ENUM, + GP_PARAM_DEF_TYPE_CHOICE, GP_PARAM_DEF_TYPE_BOOLEAN, GP_PARAM_DEF_TYPE_FLOAT, GP_PARAM_DEF_TYPE_STRING, @@ -87,6 +88,7 @@ typedef struct _GPParamDefEnum GPParamDefEnum; typedef struct _GPParamDefBoolean GPParamDefBoolean; typedef struct _GPParamDefFloat GPParamDefFloat; typedef struct _GPParamDefString GPParamDefString; +typedef struct _GPParamDefChoice GPParamDefChoice; typedef struct _GPParamStrv GPParamStrv; typedef struct _GPParamDefColor GPParamDefColor; typedef struct _GPParamDefID GPParamDefID; @@ -203,6 +205,12 @@ struct _GPParamDefIDArray gchar *type_name; }; +struct _GPParamDefChoice +{ + PikaChoice *choice; + gchar *default_val; +}; + struct _GPParamDef { GPParamDefType param_def_type; @@ -224,6 +232,7 @@ struct _GPParamDef GPParamDefColor m_color; GPParamDefID m_id; GPParamDefIDArray m_id_array; + GPParamDefChoice m_choice; } meta; }; diff --git a/libpikaconfig/pikaconfig-deserialize.c b/libpikaconfig/pikaconfig-deserialize.c index 0d36933..67568e7 100644 --- a/libpikaconfig/pikaconfig-deserialize.c +++ b/libpikaconfig/pikaconfig-deserialize.c @@ -98,6 +98,9 @@ static GTokenType pika_config_deserialize_file_value (GValue *value, static GTokenType pika_config_deserialize_parasite_value (GValue *value, GParamSpec *prop_spec, GScanner *scanner); +static GTokenType pika_config_deserialize_bytes (GValue *value, + GParamSpec *prop_spec, + GScanner *scanner); static GTokenType pika_config_deserialize_any (GValue *value, GParamSpec *prop_spec, GScanner *scanner); @@ -389,6 +392,10 @@ pika_config_deserialize_value (GValue *value, { return pika_config_deserialize_parasite_value (value, prop_spec, scanner); } + else if (prop_spec->value_type == G_TYPE_BYTES) + { + return pika_config_deserialize_bytes (value, prop_spec, scanner); + } /* This fallback will only work for value_types that * can be transformed from a string value. @@ -1030,6 +1037,52 @@ pika_config_deserialize_parasite_value (GValue *value, return G_TOKEN_RIGHT_PAREN; } +static GTokenType +pika_config_deserialize_bytes (GValue *value, + GParamSpec *prop_spec, + GScanner *scanner) +{ + GTokenType token; + GBytes *bytes; + guint8 *data; + gint data_length; + + token = g_scanner_peek_next_token (scanner); + + if (token == G_TOKEN_IDENTIFIER) + { + g_scanner_get_next_token (scanner); + + if (g_ascii_strcasecmp (scanner->value.v_identifier, "null") != 0) + /* Do not fail the whole file parsing. Just output to stderr and assume + * a NULL bytes property. + */ + g_printerr ("%s: expected NULL identifier for bytes token '%s', got '%s'. " + "Assuming NULL instead.\n", + G_STRFUNC, prop_spec->name, scanner->value.v_identifier); + + g_value_set_boxed (value, NULL); + } + else if (token == G_TOKEN_INT) + { + if (! pika_scanner_parse_int (scanner, &data_length)) + return G_TOKEN_INT; + + if (! pika_scanner_parse_data (scanner, data_length, &data)) + return G_TOKEN_STRING; + + bytes = g_bytes_new (data, data_length); + + g_value_take_boxed (value, bytes); + } + else + { + return G_TOKEN_INT; + } + + return G_TOKEN_RIGHT_PAREN; +} + static GTokenType pika_config_deserialize_any (GValue *value, GParamSpec *prop_spec, diff --git a/libpikaconfig/pikaconfig-params.c b/libpikaconfig/pikaconfig-params.c index 1bbe21e..c167d84 100644 --- a/libpikaconfig/pikaconfig-params.c +++ b/libpikaconfig/pikaconfig-params.c @@ -240,6 +240,15 @@ pika_config_param_spec_duplicate (GParamSpec *pspec) flags); } } + else if (PIKA_IS_PARAM_SPEC_CHOICE (pspec)) + { + PikaParamSpecChoice *spec = PIKA_PARAM_SPEC_CHOICE (pspec); + + copy = pika_param_spec_choice (name, nick, blurb, + g_object_ref (spec->choice), + spec->default_value, + flags); + } else if (PIKA_IS_PARAM_SPEC_RGB (pspec)) { PikaRGB color; @@ -344,8 +353,12 @@ pika_config_param_spec_duplicate (GParamSpec *pspec) g_strcmp0 (type_name, "PikaImage") == 0 || g_strcmp0 (type_name, "PikaDrawable") == 0 || g_strcmp0 (type_name, "PikaLayer") == 0 || + g_strcmp0 (type_name, "PikaTextLayer") == 0 || g_strcmp0 (type_name, "PikaChannel") == 0 || + g_strcmp0 (type_name, "PikaItem") == 0 || + g_strcmp0 (type_name, "PikaLayerMask") == 0 || g_strcmp0 (type_name, "PikaSelection") == 0 || + g_strcmp0 (type_name, "PikaResource") == 0 || g_strcmp0 (type_name, "PikaBrush") == 0 || g_strcmp0 (type_name, "PikaFont") == 0 || g_strcmp0 (type_name, "PikaGradient") == 0 || diff --git a/libpikaconfig/pikaconfig-serialize.c b/libpikaconfig/pikaconfig-serialize.c index 6510592..6f5cd96 100644 --- a/libpikaconfig/pikaconfig-serialize.c +++ b/libpikaconfig/pikaconfig-serialize.c @@ -275,6 +275,30 @@ pika_config_serialize_property (PikaConfig *config, else pika_config_writer_revert (writer); } + else if (G_VALUE_TYPE (&value) == G_TYPE_BYTES) + { + GBytes *bytes = g_value_get_boxed (&value); + + pika_config_writer_open (writer, param_spec->name); + + if (bytes) + { + gconstpointer data; + gsize data_length; + + data = g_bytes_get_data (bytes, &data_length); + + pika_config_writer_printf (writer, "%lu", data_length); + pika_config_writer_data (writer, data_length, data); + } + else + { + pika_config_writer_printf (writer, "%s", "NULL"); + } + + success = TRUE; + pika_config_writer_close (writer); + } else if (G_VALUE_HOLDS_OBJECT (&value) && G_VALUE_TYPE (&value) != G_TYPE_FILE) { diff --git a/libpikawidgets/meson.build b/libpikawidgets/meson.build index 1a2484d..529977d 100644 --- a/libpikawidgets/meson.build +++ b/libpikawidgets/meson.build @@ -62,6 +62,7 @@ libpikawidgets_sources_introspectable = files( 'pikalabeled.c', 'pikalabelintwidget.c', 'pikalabelspin.c', + 'pikalabelstringwidget.c', 'pikalabelentry.c', 'pikamemsizeentry.c', 'pikanumberpairentry.c', diff --git a/libpikawidgets/pikadialog.c b/libpikawidgets/pikadialog.c index 3a7cc96..0735ea5 100644 --- a/libpikawidgets/pikadialog.c +++ b/libpikawidgets/pikadialog.c @@ -21,6 +21,7 @@ #include "config.h" +#include #include #include "libpikabase/pikabase.h" @@ -29,9 +30,18 @@ #include "pikadialog.h" #include "pikahelpui.h" +#include "pikawidgetsutils.h" #include "libpika/libpika-intl.h" +#ifdef G_OS_WIN32 +#include +#include + +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif +#endif /** * SECTION: pikadialog @@ -58,32 +68,35 @@ struct _PikaDialogPrivate PikaHelpFunc help_func; gchar *help_id; GtkWidget *help_button; + + GBytes *window_handle; }; #define GET_PRIVATE(obj) (((PikaDialog *) (obj))->priv) -static void pika_dialog_constructed (GObject *object); -static void pika_dialog_dispose (GObject *object); -static void pika_dialog_finalize (GObject *object); -static void pika_dialog_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); -static void pika_dialog_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); +static void pika_dialog_constructed (GObject *object); +static void pika_dialog_dispose (GObject *object); +static void pika_dialog_finalize (GObject *object); +static void pika_dialog_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void pika_dialog_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); -static void pika_dialog_hide (GtkWidget *widget); -static gboolean pika_dialog_delete_event (GtkWidget *widget, - GdkEventAny *event); +static void pika_dialog_hide (GtkWidget *widget); +static gboolean pika_dialog_delete_event (GtkWidget *widget, + GdkEventAny *event); -static void pika_dialog_close (GtkDialog *dialog); +static void pika_dialog_close (GtkDialog *dialog); -static void pika_dialog_response (GtkDialog *dialog, - gint response_id); +static void pika_dialog_response (GtkDialog *dialog, + gint response_id); +static void pika_dialog_set_title_bar_theme (GtkWidget *dialog); G_DEFINE_TYPE_WITH_PRIVATE (PikaDialog, pika_dialog, GTK_TYPE_DIALOG) @@ -157,6 +170,12 @@ pika_dialog_init (PikaDialog *dialog) g_signal_connect (dialog, "response", G_CALLBACK (pika_dialog_response), NULL); + +#ifdef G_OS_WIN32 + g_signal_connect (GTK_WIDGET (dialog), "map", + G_CALLBACK (pika_dialog_set_title_bar_theme), + NULL); +#endif } static void @@ -177,6 +196,8 @@ pika_dialog_constructed (GObject *object) _("_Help"), GTK_RESPONSE_HELP); } + + pika_widget_set_native_handle (GTK_WIDGET (object), &private->window_handle); } static void @@ -650,6 +671,10 @@ pika_dialog_run (PikaDialog *dialog) gtk_window_present (GTK_WINDOW (dialog)); +#ifdef G_OS_WIN32 + pika_dialog_set_title_bar_theme (GTK_WIDGET (dialog)); +#endif + response_handler = g_signal_connect (dialog, "response", G_CALLBACK (run_response_handler), &ri); @@ -711,6 +736,26 @@ pika_dialog_set_alternative_button_order_from_array (PikaDialog *dialog, G_GNUC_END_IGNORE_DEPRECATIONS; } +/** + * pika_dialog_get_native_handle: + * @dialog: The #PikaDialog + * + * Returns an opaque data handle representing the window in the currently + * running platform. You should not try to use this directly. Usually this is to + * be used in functions such as [func@Gimp.brushes_popup] which will allow the + * core process to set this [class@Dialog] as parent to the newly created popup. + * + * Returns: (transfer none): an opaque [struct@GLib.Bytes] identifying this + * window. + * + * Since: 3.0 + **/ +GBytes * +pika_dialog_get_native_handle (PikaDialog *dialog) +{ + return dialog->priv->window_handle; +} + /** * pika_dialogs_show_help_button: (skip) * @show: whether a help button should be added when creating a PikaDialog @@ -724,3 +769,46 @@ pika_dialogs_show_help_button (gboolean show) { show_help_button = show ? TRUE : FALSE; } + +void +pika_dialog_set_title_bar_theme (GtkWidget *dialog) +{ +#ifdef G_OS_WIN32 + HWND hwnd; + gboolean use_dark_mode = FALSE; + GdkWindow *window = NULL; + + window = gtk_widget_get_window (GTK_WIDGET (dialog)); + if (window) + { + GtkStyleContext *style; + GdkRGBA *color = NULL; + + hwnd = (HWND) gdk_win32_window_get_handle (window); + /* Workaround since we don't have access to PikaGuiConfig. + * If the background color is below the threshold, then we're + * likely in dark mode. + */ + style = gtk_widget_get_style_context (GTK_WIDGET (dialog)); + gtk_style_context_get (style, gtk_style_context_get_state (style), + GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &color, + NULL); + if (color) + { + if (color->red < 0.5 && color->green < 0.5 && color->blue < 0.5) + use_dark_mode = TRUE; + + gdk_rgba_free (color); + } + + DwmSetWindowAttribute (hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE, + &use_dark_mode, sizeof (use_dark_mode)); + UpdateWindow (hwnd); + ShowWindow (hwnd, 5); + + /* Toggle the window's visibility so the title bar change appears */ + gdk_window_hide (window); + gdk_window_show (window); + } +#endif +} diff --git a/libpikawidgets/pikadialog.h b/libpikawidgets/pikadialog.h index fd04719..c2e3006 100644 --- a/libpikawidgets/pikadialog.h +++ b/libpikawidgets/pikadialog.h @@ -98,6 +98,8 @@ void pika_dialog_set_alternative_button_order_from_array gint n_buttons, gint *order); +GBytes * pika_dialog_get_native_handle (PikaDialog *dialog); + /* for internal use only! */ void pika_dialogs_show_help_button (gboolean show); diff --git a/libpikawidgets/pikalabelspin.c b/libpikawidgets/pikalabelspin.c index dd6d8e5..10a7d01 100644 --- a/libpikawidgets/pikalabelspin.c +++ b/libpikawidgets/pikalabelspin.c @@ -461,13 +461,14 @@ pika_label_spin_set_increments (PikaLabelSpin *spin, gdouble upper; g_return_if_fail (PIKA_IS_LABEL_SPIN (spin)); - g_return_if_fail (step < page); + g_return_if_fail (step <= page); spinbutton = GTK_SPIN_BUTTON (priv->spinbutton); gtk_spin_button_get_range (spinbutton, &lower, &upper); g_return_if_fail (upper >= lower); - g_return_if_fail (step < upper - lower && page < upper - lower); + g_return_if_fail ((upper == lower || step <= upper - lower) && + (upper == lower || page <= upper - lower)); g_object_freeze_notify (G_OBJECT (spinbutton)); gtk_adjustment_set_step_increment (gtk_spin_button_get_adjustment (spinbutton), step); diff --git a/libpikawidgets/pikapreviewarea.c b/libpikawidgets/pikapreviewarea.c index 7898607..37642f7 100644 --- a/libpikawidgets/pikapreviewarea.c +++ b/libpikawidgets/pikapreviewarea.c @@ -572,7 +572,7 @@ pika_preview_area_draw (PikaPreviewArea *area, if (! priv->buf) { priv->rowstride = ((priv->width * 3) + 3) & ~3; - priv->buf = g_new (guchar, priv->rowstride * priv->height); + priv->buf = g_new0 (guchar, priv->rowstride * priv->height); } size = 1 << (2 + priv->check_size); @@ -880,7 +880,7 @@ pika_preview_area_blend (PikaPreviewArea *area, if (! priv->buf) { priv->rowstride = ((priv->width * 3) + 3) & ~3; - priv->buf = g_new (guchar, priv->rowstride * priv->height); + priv->buf = g_new0 (guchar, priv->rowstride * priv->height); } size = 1 << (2 + priv->check_size); @@ -1279,7 +1279,7 @@ pika_preview_area_mask (PikaPreviewArea *area, if (! priv->buf) { priv->rowstride = ((priv->width * 3) + 3) & ~3; - priv->buf = g_new (guchar, priv->rowstride * priv->height); + priv->buf = g_new0 (guchar, priv->rowstride * priv->height); } size = 1 << (2 + priv->check_size); @@ -1852,7 +1852,7 @@ pika_preview_area_fill (PikaPreviewArea *area, if (! priv->buf) { priv->rowstride = ((priv->width * 3) + 3) & ~3; - priv->buf = g_new (guchar, priv->rowstride * priv->height); + priv->buf = g_new0 (guchar, priv->rowstride * priv->height); } dest = priv->buf + x * 3 + y * priv->rowstride; @@ -1875,6 +1875,32 @@ pika_preview_area_fill (PikaPreviewArea *area, pika_preview_area_queue_draw (area, x, y, width, height); } +/** + * pika_preview_area_reset: + * @area: a #PikaPreviewArea widget. + * + * Reset any previous drawing done through [class@GimpUi.PreviewArea] functions. + * + * Since: 3.0 + **/ +void +pika_preview_area_reset (PikaPreviewArea *area) +{ + PikaPreviewAreaPrivate *priv = GET_PRIVATE (area); + GtkAllocation allocation; + + if (priv->buf) + { + g_free (priv->buf); + + priv->buf = NULL; + priv->rowstride = 0; + } + + gtk_widget_get_allocation (GTK_WIDGET (area), &allocation); + pika_preview_area_queue_draw (area, 0, 0, allocation.width, allocation.height); +} + /** * pika_preview_area_set_offsets: * @area: a #PikaPreviewArea diff --git a/libpikawidgets/pikapreviewarea.h b/libpikawidgets/pikapreviewarea.h index 86f6e78..1813a51 100644 --- a/libpikawidgets/pikapreviewarea.h +++ b/libpikawidgets/pikapreviewarea.h @@ -103,6 +103,7 @@ void pika_preview_area_fill (PikaPreviewArea *area, guchar red, guchar green, guchar blue); +void pika_preview_area_reset (PikaPreviewArea *area); void pika_preview_area_set_offsets (PikaPreviewArea *area, gint x, diff --git a/libpikawidgets/pikapropwidgets.c b/libpikawidgets/pikapropwidgets.c index 6791df0..0e0afdf 100644 --- a/libpikawidgets/pikapropwidgets.c +++ b/libpikawidgets/pikapropwidgets.c @@ -45,50 +45,49 @@ /* utility function prototypes */ -static void set_param_spec (GObject *object, - GtkWidget *widget, - GParamSpec *param_spec); -static void set_radio_spec (GObject *object, - GParamSpec *param_spec); -static GParamSpec * get_param_spec (GObject *object); +static void set_param_spec (GObject *object, + GtkWidget *widget, + GParamSpec *param_spec); +static void set_radio_spec (GObject *object, + GParamSpec *param_spec); +static GParamSpec * get_param_spec (GObject *object); -static GParamSpec * find_param_spec (GObject *object, - const gchar *property_name, - const gchar *strloc); -static GParamSpec * check_param_spec_quiet ( - GObject *object, - const gchar *property_name, - GType type, - const gchar *strloc); -static GParamSpec * check_param_spec (GObject *object, - const gchar *property_name, - GType type, - const gchar *strloc); -static GParamSpec * check_param_spec_w (GObject *object, - const gchar *property_name, - GType type, - const gchar *strloc); +static GParamSpec * find_param_spec (GObject *object, + const gchar *property_name, + const gchar *strloc); +static GParamSpec * check_param_spec_quiet (GObject *object, + const gchar *property_name, + GType type, + const gchar *strloc); +static GParamSpec * check_param_spec (GObject *object, + const gchar *property_name, + GType type, + const gchar *strloc); +static GParamSpec * check_param_spec_w (GObject *object, + const gchar *property_name, + GType type, + const gchar *strloc); -static gboolean get_numeric_values (GObject *object, - GParamSpec *param_spec, - gdouble *value, - gdouble *lower, - gdouble *upper, - const gchar *strloc); +static gboolean get_numeric_values (GObject *object, + GParamSpec *param_spec, + gdouble *value, + gdouble *lower, + gdouble *upper, + const gchar *strloc); -static void connect_notify (GObject *config, - const gchar *property_name, - GCallback callback, - gpointer callback_data); +static void connect_notify (GObject *config, + const gchar *property_name, + GCallback callback, + gpointer callback_data); -static gboolean pika_prop_widget_double_to_factor (GBinding *binding, - const GValue *from_value, - GValue *to_value, - gpointer user_data); -static gboolean pika_prop_widget_double_from_factor (GBinding *binding, - const GValue *from_value, - GValue *to_value, - gpointer user_data); +static gboolean pika_prop_widget_double_to_factor (GBinding *binding, + const GValue *from_value, + GValue *to_value, + gpointer user_data); +static gboolean pika_prop_widget_double_from_factor (GBinding *binding, + const GValue *from_value, + GValue *to_value, + gpointer user_data); /******************/ @@ -2543,6 +2542,11 @@ static void pika_prop_string_combo_box_notify (GObject *config, GParamSpec *param_spec, GtkWidget *widget); +static gboolean + pika_prop_choice_combo_box_is_sensitive (const gchar *nick, + PikaChoice *choice); + + /** * pika_prop_string_combo_box_new: * @config: Object to which property is attached. @@ -2604,6 +2608,74 @@ pika_prop_string_combo_box_new (GObject *config, return combo_box; } +/** + * pika_prop_choice_combo_box_new: + * @config: Object to which property is attached. + * @property_name: Name of %PikaChoice property controlled by combo box. + * + * Creates a #PikaStringComboBox widget to display and set the + * specified property. + * + * Returns: (transfer full): The newly created #PikaStringComboBox widget. + * + * Since: 2.4 + */ +GtkWidget * +pika_prop_choice_combo_box_new (GObject *config, + const gchar *property_name) +{ + GParamSpec *param_spec; + PikaParamSpecChoice *cspec; + GtkWidget *combo_box; + GtkListStore *store; + GList *values; + GList *iter; + + g_return_val_if_fail (G_IS_OBJECT (config), NULL); + g_return_val_if_fail (property_name != NULL, NULL); + + param_spec = check_param_spec_w (config, property_name, + PIKA_TYPE_PARAM_CHOICE, G_STRFUNC); + if (! param_spec) + return NULL; + + cspec = PIKA_PARAM_SPEC_CHOICE (param_spec); + values = pika_choice_list_nicks (cspec->choice); + store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + + for (iter = values; iter; iter = iter->next) + { + const gchar *nick = iter->data; + const gchar *label = pika_choice_get_label (cspec->choice, nick); + + gtk_list_store_insert_with_values (store, NULL, -1, + 0, nick, + 1, label, + -1); + + } + + combo_box = pika_string_combo_box_new (GTK_TREE_MODEL (store), 0, 1); + g_object_unref (store); + + pika_string_combo_box_set_sensitivity (PIKA_STRING_COMBO_BOX (combo_box), + (PikaStringSensitivityFunc) pika_prop_choice_combo_box_is_sensitive, + cspec->choice, NULL); + g_signal_connect_swapped (cspec->choice, "sensitivity-changed", + G_CALLBACK (gtk_widget_queue_draw), + combo_box); + + g_object_bind_property (config, property_name, + combo_box, "value", + G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); + + pika_widget_set_bound_property (combo_box, config, property_name); + + gtk_widget_show (combo_box); + + return combo_box; +} + static void pika_prop_string_combo_box_callback (GtkWidget *widget, GObject *config) @@ -2651,6 +2723,13 @@ pika_prop_string_combo_box_notify (GObject *config, g_free (value); } +static gboolean +pika_prop_choice_combo_box_is_sensitive (const gchar *nick, + PikaChoice *choice) +{ + return pika_choice_is_valid (choice, nick); +} + /*************************/ /* file chooser button */ diff --git a/libpikawidgets/pikapropwidgets.h b/libpikawidgets/pikapropwidgets.h index 2b45d0c..6fd7195 100644 --- a/libpikawidgets/pikapropwidgets.h +++ b/libpikawidgets/pikapropwidgets.h @@ -23,8 +23,8 @@ #error "Only can be included directly." #endif -#ifndef __PIKA_PROP_WIDGETS_H__ -#define __PIKA_PROP_WIDGETS_H__ +#ifndef __PIKAWIDGETS_PROP_WIDGETS_H__ +#define __PIKAWIDGETS_PROP_WIDGETS_H__ G_BEGIN_DECLS @@ -166,6 +166,8 @@ GtkWidget * pika_prop_string_combo_box_new (GObject *config, GtkTreeModel *model, gint id_column, gint label_column); +GtkWidget * pika_prop_choice_combo_box_new (GObject *config, + const gchar *property_name); /* PikaParamPath */ @@ -250,4 +252,4 @@ GtkWidget * pika_prop_icon_image_new (GObject *config, G_END_DECLS -#endif /* __PIKA_PROP_WIDGETS_H__ */ +#endif /* __PIKAWIDGETS_PROP_WIDGETS_H__ */ diff --git a/libpikawidgets/pikaruler.c b/libpikawidgets/pikaruler.c index 26ed3e5..b7821dd 100644 --- a/libpikawidgets/pikaruler.c +++ b/libpikawidgets/pikaruler.c @@ -390,10 +390,10 @@ pika_ruler_update_position (PikaRuler *ruler, gdouble x, gdouble y) { - PikaRulerPrivate *priv = GET_PRIVATE (ruler); + PikaRulerPrivate *priv = GET_PRIVATE (ruler); GtkAllocation allocation; - gdouble lower; - gdouble upper; + gdouble lower = 0; + gdouble upper = 0; gtk_widget_get_allocation (GTK_WIDGET (ruler), &allocation); pika_ruler_get_range (ruler, &lower, &upper, NULL); @@ -1005,7 +1005,8 @@ pika_ruler_draw_ticks (PikaRuler *ruler) gint i; gint width, height; gint length, ideal_length; - gdouble lower, upper; /* Upper and lower limits, in ruler units */ + gdouble lower = 0; /* Upper and lower limits, in ruler units */ + gdouble upper = 0; gdouble increment; /* Number of pixels per unit */ gint scale; /* Number of units per major unit */ gdouble start, end, cur; @@ -1209,7 +1210,8 @@ pika_ruler_get_pos_rect (PikaRuler *ruler, GtkAllocation allocation; GtkBorder border; gint width, height; - gdouble upper, lower; + gdouble upper = 0; + gdouble lower = 0; gdouble increment; GdkRectangle rect = { 0, }; diff --git a/libpikawidgets/pikastringcombobox.c b/libpikawidgets/pikastringcombobox.c index 058f78d..3be6ea4 100644 --- a/libpikawidgets/pikastringcombobox.c +++ b/libpikawidgets/pikastringcombobox.c @@ -46,29 +46,40 @@ enum PROP_0, PROP_ID_COLUMN, PROP_LABEL_COLUMN, - PROP_ELLIPSIZE + PROP_ELLIPSIZE, + PROP_VALUE }; struct _PikaStringComboBoxPrivate { - gint id_column; - gint label_column; - GtkCellRenderer *text_renderer; + gint id_column; + gint label_column; + GtkCellRenderer *text_renderer; + + PikaStringSensitivityFunc sensitivity_func; + gpointer sensitivity_data; + GDestroyNotify sensitivity_destroy; }; #define GET_PRIVATE(obj) (((PikaStringComboBox *) (obj))->priv) -static void pika_string_combo_box_constructed (GObject *object); -static void pika_string_combo_box_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); -static void pika_string_combo_box_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); +static void pika_string_combo_box_constructed (GObject *object); +static void pika_string_combo_box_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void pika_string_combo_box_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +static void pika_string_combo_box_cell_data_func (GtkCellLayout *cell_layout, + GtkCellRenderer *cell, + GtkTreeModel *tree_model, + GtkTreeIter *iter, + PikaStringComboBoxPrivate *priv); G_DEFINE_TYPE_WITH_PRIVATE (PikaStringComboBox, pika_string_combo_box, @@ -138,6 +149,22 @@ pika_string_combo_box_class_init (PikaStringComboBoxClass *klass) PANGO_TYPE_ELLIPSIZE_MODE, PANGO_ELLIPSIZE_NONE, PIKA_PARAM_READWRITE)); + + /** + * PikaStringComboBox:value: + * + * The active value (different from the "active" property of + * GtkComboBox which is the active index). + * + * Since: 3.0 + */ + g_object_class_install_property (object_class, PROP_VALUE, + g_param_spec_string ("value", + "Value", + "Value of active item", + NULL, + PIKA_PARAM_READWRITE | + G_PARAM_EXPLICIT_NOTIFY)); } static void @@ -160,6 +187,16 @@ pika_string_combo_box_constructed (GObject *object) gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), cell, "text", priv->label_column, NULL); + gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (object), priv->text_renderer, + (GtkCellLayoutDataFunc) pika_string_combo_box_cell_data_func, + priv, NULL); + + /* The "changed" signal of the GtkComboBox also triggers a "value" property + * notification. + */ + g_signal_connect (object, "changed", + G_CALLBACK (g_object_notify), + "value"); } static void @@ -184,6 +221,11 @@ pika_string_combo_box_set_property (GObject *object, g_object_set_property (G_OBJECT (priv->text_renderer), pspec->name, value); break; + case PROP_VALUE: + pika_string_combo_box_set_active (PIKA_STRING_COMBO_BOX (object), + g_value_get_string (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -212,6 +254,15 @@ pika_string_combo_box_get_property (GObject *object, g_object_get_property (G_OBJECT (priv->text_renderer), pspec->name, value); break; + case PROP_VALUE: + { + gchar *v; + + v = pika_string_combo_box_get_active (PIKA_STRING_COMBO_BOX (object)); + g_value_take_string (value, v); + } + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -292,7 +343,7 @@ pika_string_combo_box_new (GtkTreeModel *model, * selected item in the @combo_box. * * Returns: %TRUE on success or %FALSE if there was no item for - * this value. + * this value. * * Since: 2.4 **/ @@ -315,6 +366,7 @@ pika_string_combo_box_set_active (PikaStringComboBox *combo_box, if (pika_string_model_lookup (model, column, id, &iter)) { gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo_box), &iter); + g_object_notify (G_OBJECT (combo_box), "value"); return TRUE; } @@ -323,6 +375,7 @@ pika_string_combo_box_set_active (PikaStringComboBox *combo_box, else { gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), -1); + g_object_notify (G_OBJECT (combo_box), "value"); return TRUE; } @@ -362,3 +415,74 @@ pika_string_combo_box_get_active (PikaStringComboBox *combo_box) return NULL; } + +/** + * pika_string_combo_box_set_sensitivity: + * @combo_box: a #PikaStringComboBox + * @func: a function that returns a boolean value, or %NULL to unset + * @data: data to pass to @func + * @destroy: destroy notification for @data + * + * Sets a function that is used to decide about the sensitivity of + * rows in the @combo_box. Use this if you want to set certain rows + * insensitive. + * + * Calling gtk_widget_queue_draw() on the @combo_box will cause the + * sensitivity to be updated. + * + * Since: 3.0 + **/ +void +pika_string_combo_box_set_sensitivity (PikaStringComboBox *combo_box, + PikaStringSensitivityFunc func, + gpointer data, + GDestroyNotify destroy) +{ + PikaStringComboBoxPrivate *priv; + + g_return_if_fail (PIKA_IS_STRING_COMBO_BOX (combo_box)); + + priv = GET_PRIVATE (combo_box); + + if (priv->sensitivity_destroy) + { + GDestroyNotify d = priv->sensitivity_destroy; + + priv->sensitivity_destroy = NULL; + d (priv->sensitivity_data); + } + + priv->sensitivity_func = func; + priv->sensitivity_data = data; + priv->sensitivity_destroy = destroy; + + gtk_widget_queue_draw (GTK_WIDGET (combo_box)); +} + + +/* Private functions. */ + +static void +pika_string_combo_box_cell_data_func (GtkCellLayout *cell_layout, + GtkCellRenderer *cell, + GtkTreeModel *tree_model, + GtkTreeIter *iter, + PikaStringComboBoxPrivate *priv) +{ + if (priv->sensitivity_func) + { + gchar *id; + gboolean sensitive; + + gtk_tree_model_get (tree_model, iter, + priv->id_column, &id, + -1); + + sensitive = priv->sensitivity_func (id, priv->sensitivity_data); + + g_object_set (cell, + "sensitive", sensitive, + NULL); + g_free (id); + } +} diff --git a/libpikawidgets/pikastringcombobox.h b/libpikawidgets/pikastringcombobox.h index 48e42c5..8e562c3 100644 --- a/libpikawidgets/pikastringcombobox.h +++ b/libpikawidgets/pikastringcombobox.h @@ -29,6 +29,15 @@ G_BEGIN_DECLS +/** + * PikaStringSensitivityFunc: + * @id: the string value from the column @id_column as passed to [ctor@StringComboBox.new]. + * @data: (closure): the data passed in [method@StringComboBox.set_sensitivity]. + */ +typedef gboolean (* PikaStringSensitivityFunc) (const gchar *id, + gpointer data); + + #define PIKA_TYPE_STRING_COMBO_BOX (pika_string_combo_box_get_type ()) #define PIKA_STRING_COMBO_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIKA_TYPE_STRING_COMBO_BOX, PikaStringComboBox)) #define PIKA_STRING_COMBO_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PIKA_TYPE_STRING_COMBO_BOX, PikaStringComboBoxClass)) @@ -63,15 +72,19 @@ struct _PikaStringComboBoxClass }; -GType pika_string_combo_box_get_type (void) G_GNUC_CONST; +GType pika_string_combo_box_get_type (void) G_GNUC_CONST; -GtkWidget * pika_string_combo_box_new (GtkTreeModel *model, - gint id_column, - gint label_column); -gboolean pika_string_combo_box_set_active (PikaStringComboBox *combo_box, - const gchar *id); -gchar * pika_string_combo_box_get_active (PikaStringComboBox *combo_box); +GtkWidget * pika_string_combo_box_new (GtkTreeModel *model, + gint id_column, + gint label_column); +gboolean pika_string_combo_box_set_active (PikaStringComboBox *combo_box, + const gchar *id); +gchar * pika_string_combo_box_get_active (PikaStringComboBox *combo_box); +void pika_string_combo_box_set_sensitivity (PikaStringComboBox *combo_box, + PikaStringSensitivityFunc func, + gpointer data, + GDestroyNotify destroy); G_END_DECLS diff --git a/libpikawidgets/pikawidgets.def b/libpikawidgets/pikawidgets.def index 892e98f..17ea36c 100644 --- a/libpikawidgets/pikawidgets.def +++ b/libpikawidgets/pikawidgets.def @@ -158,6 +158,7 @@ EXPORTS pika_dialog_add_button pika_dialog_add_buttons pika_dialog_add_buttons_valist + pika_dialog_get_native_handle pika_dialog_get_type pika_dialog_new pika_dialog_new_valist @@ -266,6 +267,9 @@ EXPORTS pika_label_spin_set_digits pika_label_spin_set_increments pika_label_spin_set_value + pika_label_string_widget_get_type + pika_label_string_widget_get_widget + pika_label_string_widget_new pika_labeled_get_label pika_labeled_get_text pika_labeled_get_type @@ -332,6 +336,7 @@ EXPORTS pika_preview_area_mask pika_preview_area_menu_popup pika_preview_area_new + pika_preview_area_reset pika_preview_area_set_color_config pika_preview_area_set_colormap pika_preview_area_set_max_size @@ -360,6 +365,7 @@ EXPORTS pika_prop_boolean_combo_box_new pika_prop_boolean_radio_frame_new pika_prop_check_button_new + pika_prop_choice_combo_box_new pika_prop_color_area_new pika_prop_color_select_new pika_prop_coordinates_connect @@ -468,6 +474,7 @@ EXPORTS pika_string_combo_box_get_type pika_string_combo_box_new pika_string_combo_box_set_active + pika_string_combo_box_set_sensitivity pika_toggle_button_update pika_uint_adjustment_update pika_unit_combo_box_get_active @@ -492,6 +499,7 @@ EXPORTS pika_widget_get_monitor pika_widget_set_bound_property pika_widget_set_identifier + pika_widget_set_native_handle pika_widget_track_monitor pika_widgets_error_quark pika_widgets_init diff --git a/libpikawidgets/pikawidgets.h b/libpikawidgets/pikawidgets.h index 9f22ec1..fd62498 100644 --- a/libpikawidgets/pikawidgets.h +++ b/libpikawidgets/pikawidgets.h @@ -67,6 +67,7 @@ #include #include #include +#include #include #include #include diff --git a/libpikawidgets/pikawidgetsutils.c b/libpikawidgets/pikawidgetsutils.c index 5085e1e..7eaf493 100644 --- a/libpikawidgets/pikawidgetsutils.c +++ b/libpikawidgets/pikawidgetsutils.c @@ -26,6 +26,16 @@ #include #include +#ifdef GDK_WINDOWING_WIN32 +#include +#endif +#ifdef GDK_WINDOWING_X11 +#include +#endif +#ifdef GDK_WINDOWING_WAYLAND +#include +#endif + #ifdef G_OS_WIN32 #ifdef _WIN32_WINNT #undef _WIN32_WINNT @@ -61,6 +71,19 @@ **/ +#ifdef GDK_WINDOWING_WAYLAND +static void pika_widget_wayland_window_exported (GdkWindow *window, + const char *handle, + GBytes **phandle); +#endif + +static void pika_widget_set_handle_on_realize (GtkWidget *widget, + GBytes **phandle); +static gboolean pika_widget_set_handle_on_mapped (GtkWidget *widget, + GdkEventAny *event, + GBytes **phandle); + + static GtkWidget * find_mnemonic_widget (GtkWidget *widget, gint level) @@ -1036,3 +1059,145 @@ pika_widget_get_color_transform (GtkWidget *widget, return NULL; } + +/** + * pika_widget_set_native_handle: + * @widget: a #GtkWindow + * @handle: (out): pointer to store the native handle as a #GBytes. + * + * This function is used to store the handle representing @window into + * @handle so that it can later be reused to set other windows as + * transient to this one (even in other processes, such as plug-ins). + * + * Depending on the platform, the actual content of @handle can be + * various types. Moreover it may be filled asynchronously in a + * callback, so you should not assume that @handle is set after running + * this function. + * + * This convenience function is safe to use even before @widget is + * visible as it will set the handle once it is mapped. + */ +void +pika_widget_set_native_handle (GtkWidget *widget, + GBytes **handle) +{ + g_return_if_fail (GTK_IS_WIDGET (widget)); + g_return_if_fail (handle != NULL && *handle == NULL); + + /* This may seem overly complicated but there is a reason: "map-event" can + * only be received by widgets with their own windows (see description of + * gtk_widget_set_events()). Instead we could just use "realize" which is + * received by every widgets (even by the ones whose window actually belongs + * to a parent widget), but this causes process locks on Wayland (see comment + * in pika_widget_set_handle_on_mapped()). + * This is why we do this weird case-based dance. + */ + if (gtk_widget_get_has_window (widget)) + { + gtk_widget_add_events (widget, GDK_STRUCTURE_MASK); + g_signal_connect (widget, "map-event", + G_CALLBACK (pika_widget_set_handle_on_mapped), + handle); + } + else + { + g_signal_connect (widget, "realize", + G_CALLBACK (pika_widget_set_handle_on_realize), + handle); + } + + if (gtk_widget_get_realized (widget)) + pika_widget_set_handle_on_mapped (widget, NULL, handle); +} + + +/* Private functions */ + +#ifdef GDK_WINDOWING_WAYLAND +static void +pika_widget_wayland_window_exported (GdkWindow *window, + const char *handle, + GBytes **phandle) +{ + GBytes *wayland_handle; + + wayland_handle = g_bytes_new (handle, strlen (handle)); + + g_bytes_unref (*phandle); + *phandle = wayland_handle; +} +#endif + +static void +pika_widget_set_handle_on_realize (GtkWidget *widget, + GBytes **phandle) +{ + GtkWidget *toplevel = gtk_widget_get_toplevel (widget); + + gtk_widget_add_events (toplevel, GDK_STRUCTURE_MASK); + g_signal_connect (toplevel, "map-event", + G_CALLBACK (pika_widget_set_handle_on_mapped), + phandle); + + if (gtk_widget_get_mapped (toplevel)) + pika_widget_set_handle_on_mapped (widget, NULL, phandle); +} + +static gboolean +pika_widget_set_handle_on_mapped (GtkWidget *widget, + GdkEventAny *event, + GBytes **phandle) +{ + GdkWindow *surface; + GBytes *handle = NULL; +#if defined (GDK_WINDOWING_WIN32) || defined (GDK_WINDOWING_X11) + GtkWidget *toplevel = gtk_widget_get_toplevel (widget); + + widget = toplevel; +#endif + + g_clear_pointer (phandle, g_bytes_unref); + + surface = gtk_widget_get_window (GTK_WIDGET (widget)); + g_return_val_if_fail (surface != NULL, FALSE); + +#ifdef GDK_WINDOWING_WIN32 + if (GDK_IS_WIN32_WINDOW (surface)) + { + HANDLE id; + + id = GDK_WINDOW_HWND (gtk_widget_get_window (GTK_WIDGET (widget))); + handle = g_bytes_new (&id, sizeof (HANDLE)); + } +#endif + +#ifdef GDK_WINDOWING_X11 + if (GDK_IS_X11_WINDOW (surface)) + { + Window id; + + id = GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (widget))); + handle = g_bytes_new (&id, sizeof (Window)); + } +#endif +#ifdef GDK_WINDOWING_WAYLAND + if (GDK_IS_WAYLAND_WINDOW (surface)) + { + /* I don't run this on "realize" event because somehow it locks + * the whole processus in Wayland. The "map-event" happens + * slightly after the window became visible and I didn't + * experience any lock. + */ + if (! gdk_wayland_window_export_handle (surface, + (GdkWaylandWindowExported) pika_widget_wayland_window_exported, + phandle, NULL)) + g_printerr ("%s: gdk_wayland_window_export_handle() failed. " + "It will not be possible to set windows in other processes as transient to this display shell.\n", + G_STRFUNC); + } +#endif + + *phandle = handle; + + return FALSE; +} diff --git a/libpikawidgets/pikawidgetsutils.h b/libpikawidgets/pikawidgetsutils.h index 03d0603..657674a 100644 --- a/libpikawidgets/pikawidgetsutils.h +++ b/libpikawidgets/pikawidgetsutils.h @@ -65,6 +65,8 @@ PikaColorTransform * pika_widget_get_color_transform (GtkWidget *widget, PikaColorRenderingIntent proof_intent, gboolean proof_bpc); +void pika_widget_set_native_handle (GtkWidget *widget, + GBytes **handle); G_END_DECLS diff --git a/menus/colormap-menu.ui b/menus/colormap-menu.ui index 5376c1d..190c561 100644 --- a/menus/colormap-menu.ui +++ b/menus/colormap-menu.ui @@ -3,6 +3,7 @@ colormap.colormap-edit-color + colormap.colormap-delete-color colormap.colormap-add-color-from-fg colormap.colormap-add-color-from-bg
diff --git a/meson.build b/meson.build index 220ea4a..c4f2e3a 100644 --- a/meson.build +++ b/meson.build @@ -413,7 +413,7 @@ endif conf.set_quoted('MYPAINT_BRUSHES_DIR', mypaint_brushes_dir) pango_minver = '1.50.0' -pangocairo = dependency('pango', version: '>='+pango_minver) +pango = dependency('pango', version: '>='+pango_minver) pangocairo = dependency('pangocairo', version: '>='+pango_minver) pangoft2 = dependency('pangoft2', version: '>='+pango_minver) rsvg_minver = '2.40.6' @@ -1142,13 +1142,16 @@ endif ## Lua -lua = find_program('luajit', required: get_option('lua')) +# At time of writing, lua-lgi works Lua 5.1, Lua 5.2, Lua 5.3 and LuaJIT2. On +# most platforms, we use luajit. On MSYS2, only lua5.1 works with lua-lgi. This +# is why we use this order for lua detection. +lua = find_program('luajit', 'lua5.1', 'lua5.2', 'lua5.3', required: get_option('lua')) have_lua = get_option('lua').enabled() or (lua.found() and get_option('lua').auto()) if not lua.found() and have_lua lua_warning = ''' - Luajit was not found. + Neither Luajit nor Lua was found. Lua plug-ins will be installed anyway but you should make sure that - luajit and LGI are available at installation, otherwise + luajit or lua and that LGI are available at installation, otherwise installed plug-ins won't be usable. ''' warning(lua_warning) @@ -1751,12 +1754,13 @@ custom_target('AUTHORS', ], build_by_default: false, ) +date = run_command('date', '-u', '+"%Y-%m-%dT%H:%M:%SZ"', check: true) custom_target('authors.md', input : [ 'authors4pika-web.xsl', 'authors.xml', ], output: 'authors.md', command: [ xsltproc, - '--stringparam', 'today', '`date --iso-8601=seconds`', + '--stringparam', 'today', date.stdout().strip(), '-o', '@OUTPUT@', '@INPUT@', ], diff --git a/pdb/app.pl b/pdb/app.pl index 3d29974..fc683e3 100644 --- a/pdb/app.pl +++ b/pdb/app.pl @@ -693,6 +693,60 @@ pika_param_spec_object_array ("$name", "$blurb", PIKA_TYPE_VECTORS, $flags) +CODE + } + elsif ($pdbtype eq 'resourcearray') { + $pspec = <) { } $mapping =~ s/,\n\s*$//s; - $ARGV =~ s@(?:(?:..|app)/)*@@; + $ARGV =~ s@($topsrcdir/)?(?:(?:..|app)/)*@@; $code .= < diff --git a/pdb/groups.pl b/pdb/groups.pl index 2ffd42d..8e19f1f 100644 --- a/pdb/groups.pl +++ b/pdb/groups.pl @@ -11,6 +11,7 @@ drawable drawable_color drawable_edit + drawable_select dynamics edit file diff --git a/pdb/groups/brush.pdb b/pdb/groups/brush.pdb index 3b9b3b8..d7b2ed2 100644 --- a/pdb/groups/brush.pdb +++ b/pdb/groups/brush.pdb @@ -167,6 +167,7 @@ The color bpp is zero and pixels empty when the brush is parametric versus raste HELP &mitch_pdb_misc('2004', '2.2'); + $lib_private = 1; @inargs = ( ${brush_arg_spec} diff --git a/pdb/groups/brush_select.pdb b/pdb/groups/brush_select.pdb index 3ba83e0..59930dc 100644 --- a/pdb/groups/brush_select.pdb +++ b/pdb/groups/brush_select.pdb @@ -27,19 +27,23 @@ sub brushes_popup { desc => 'The callback PDB proc to call when user chooses a brush' }, { name => 'popup_title', type => 'string', desc => 'Title of the brush selection dialog' }, - { name => 'initial_brush_name', type => 'string', null_ok => 1, - desc => 'The name of the brush to set as the initial choice' } + { name => 'initial_brush', type => 'brush', null_ok => 1, + desc => 'The brush to set as the initial choice' }, + { name => 'parent_window', type => 'bytes', null_ok => 1, + desc => 'An optional parent window handle for the popup to be set transient to' } ); %invoke = ( code => <<'CODE' { - if (pika->no_interface || + PikaContainer *container = pika_data_factory_get_container (pika->brush_factory); + + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, brush_callback) || ! pika_pdb_dialog_new (pika, context, progress, - pika_data_factory_get_container (pika->brush_factory), - popup_title, brush_callback, initial_brush_name, - NULL)) + pika_container_get_children_type (container), + parent_window, popup_title, brush_callback, + PIKA_OBJECT (initial_brush), NULL)) success = FALSE; } CODE @@ -60,9 +64,12 @@ sub brushes_close_popup { %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->brush_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, brush_callback) || - ! pika_pdb_dialog_close (pika, pika_data_factory_get_container (pika->brush_factory), + ! pika_pdb_dialog_close (pika, + pika_container_get_children_type (container), brush_callback)) success = FALSE; } @@ -79,18 +86,20 @@ sub brushes_set_popup { @inargs = ( { name => 'brush_callback', type => 'string', non_empty => 1, desc => 'The name of the callback registered for this pop-up' }, - { name => 'brush_name', type => 'string', - desc => 'The name of the brush to set as selected' } + { name => 'brush', type => 'brush', + desc => 'The brush to set as selected' } ); %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->brush_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, brush_callback) || - ! pika_pdb_dialog_set (pika, pika_data_factory_get_container (pika->brush_factory), - brush_callback, brush_name, - NULL)) + ! pika_pdb_dialog_set (pika, + pika_container_get_children_type (container), + brush_callback, PIKA_OBJECT (brush), NULL)) success = FALSE; } CODE @@ -99,6 +108,7 @@ CODE @headers = qw("core/pika.h" + "core/pikacontainer.h" "core/pikadatafactory.h"); @procs = qw(brushes_popup diff --git a/pdb/groups/display.pdb b/pdb/groups/display.pdb index 993bbc4..97f20e4 100644 --- a/pdb/groups/display.pdb +++ b/pdb/groups/display.pdb @@ -145,9 +145,13 @@ sub display_get_window_handle { $help = <<'HELP'; This procedure returns a handle to the native window for a given image -display. For example in the X backend of GDK, a native window handle is -an Xlib XID. A value of 0 is returned for an invalid display or if this -function is unimplemented for the windowing system that is being used. +display. + +It can be different types of data depending on the platform you are running on. +For example in the X backend of GDK, a native window handle is an Xlib +XID whereas on Wayland, it is a string handle. A value of NULL is +returned for an invalid display or if this function is unimplemented for +the windowing system that is being used. HELP &neo_pdb_misc('2005', '2.4'); @@ -158,14 +162,14 @@ HELP ); @outargs = ( - { name => 'window', type => 'int32', - desc => 'The native window handle or 0' } + { name => 'handle', type => 'bytes', + desc => 'The native window handle or NULL' } ); %invoke = ( code => <<'CODE' { - window = (gint32) pika_get_display_window_id (pika, display); + handle = pika_get_display_window_id (pika, display); } CODE ); diff --git a/pdb/groups/font.pdb b/pdb/groups/font.pdb index e18ed9f..b6c8e5d 100644 --- a/pdb/groups/font.pdb +++ b/pdb/groups/font.pdb @@ -19,9 +19,61 @@ # The invoke code is compiled on the app side. # The invoke code must assign to each result var +sub fonts_get_by_name { + $blurb = "Returns the fonts with the given name."; + $help = "Returns the fonts with the given name. There may be more than one."; + + &jehan_pdb_misc('2023', '3.0'); + + @inargs = ( + { name => 'name', type => 'string', non_empty => 1, + desc => 'The name of the font' } + ); + + @outargs = ( + { name => 'fonts', type => 'fontarray', non_empty => 0, + desc => 'The fonts with the given name', + array => { name => 'num_fonts', + desc => 'The number of fonts with the given name' } } + ); + + %invoke = ( + code => <<'CODE' +{ + GList *list; + + list = pika_pdb_get_resources (pika, PIKA_TYPE_FONT, name, PIKA_PDB_DATA_ACCESS_READ, error); + + if (list == NULL) + success = FALSE; + + num_fonts = g_list_length (list); + + if (num_fonts > 0) + { + gint i = 0; + + fonts = g_new (PikaFont *, num_fonts); + + for (GList *iter = list; i < num_fonts; i++, iter = g_list_next (iter)) + fonts[i] = g_object_ref (iter->data); + } + g_list_free (list); +} +CODE + ); +} + sub font_get_by_name { - $blurb = "Returns the font with the given name."; - $help = "Returns the font with the given name."; + $blurb = "Returns a font with the given name."; + $help = < [@procs], lib => [@procs]); diff --git a/pdb/groups/font_select.pdb b/pdb/groups/font_select.pdb index e064a09..8acf536 100644 --- a/pdb/groups/font_select.pdb +++ b/pdb/groups/font_select.pdb @@ -28,20 +28,24 @@ sub fonts_popup { desc => 'The callback PDB proc to call when user chooses a font' }, { name => 'popup_title', type => 'string', desc => 'Title of the font selection dialog' }, - { name => 'initial_font_name', type => 'string', null_ok => 1, - desc => 'The name of the initial font choice.' } + { name => 'initial_font', type => 'font', null_ok => 1, + desc => 'The name of the initial font choice.' }, + { name => 'parent_window', type => 'bytes', null_ok => 1, + desc => 'An optional parent window handle for the popup to be set transient to' } ); %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->font_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, font_callback) || ! pika_data_factory_data_wait (pika->font_factory) || ! pika_pdb_dialog_new (pika, context, progress, - pika_data_factory_get_container (pika->font_factory), - popup_title, font_callback, initial_font_name, - NULL)) + pika_container_get_children_type (container), + parent_window, popup_title, font_callback, + PIKA_OBJECT (initial_font), NULL)) success = FALSE; } CODE @@ -62,10 +66,12 @@ sub fonts_close_popup { %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->font_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, font_callback) || ! pika_pdb_dialog_close (pika, - pika_data_factory_get_container (pika->font_factory), + pika_container_get_children_type (container), font_callback)) success = FALSE; } @@ -82,20 +88,21 @@ sub fonts_set_popup { @inargs = ( { name => 'font_callback', type => 'string', non_empty => 1, desc => 'The name of the callback registered in the PDB for the dialog.' }, - { name => 'font_name', type => 'string', - desc => 'The name of the font to set as selected' } + { name => 'font', type => 'font', + desc => 'The font to set as selected' } ); %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->font_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, font_callback) || ! pika_data_factory_data_wait (pika->font_factory) || ! pika_pdb_dialog_set (pika, - pika_data_factory_get_container (pika->font_factory), - font_callback, font_name, - NULL)) + pika_container_get_children_type (container), + font_callback, PIKA_OBJECT (font), NULL)) success = FALSE; } CODE @@ -104,6 +111,7 @@ CODE @headers = qw("core/pika.h" + "core/pikacontainer.h" "core/pikadatafactory.h"); @procs = qw(fonts_popup diff --git a/pdb/groups/gradient_select.pdb b/pdb/groups/gradient_select.pdb index 7608482..1daeae5 100644 --- a/pdb/groups/gradient_select.pdb +++ b/pdb/groups/gradient_select.pdb @@ -28,13 +28,17 @@ sub gradients_popup { desc => 'The callback PDB proc to call when user chooses a gradient' }, { name => 'popup_title', type => 'string', desc => 'Title of the gradient selection dialog' }, - { name => 'initial_gradient_name', type => 'string', null_ok => 1, - desc => 'The name of the initial gradient choice' } + { name => 'initial_gradient', type => 'gradient', null_ok => 1, + desc => 'The initial gradient choice' }, + { name => 'parent_window', type => 'bytes', null_ok => 1, + desc => 'An optional parent window handle for the popup to be set transient to' } ); %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->gradient_factory); + /* Formerly, this procedure had another parameter: * the sample size of the gradient's data passed in the changed callback. * Now the sample size is determined by core, and in the future, @@ -44,9 +48,9 @@ sub gradients_popup { if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, gradient_callback) || ! pika_pdb_dialog_new (pika, context, progress, - pika_data_factory_get_container (pika->gradient_factory), - popup_title, gradient_callback, initial_gradient_name, - NULL)) + pika_container_get_children_type (container), + parent_window, popup_title, gradient_callback, + PIKA_OBJECT (initial_gradient), NULL)) success = FALSE; } CODE @@ -67,9 +71,12 @@ sub gradients_close_popup { %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->gradient_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, gradient_callback) || - ! pika_pdb_dialog_close (pika, pika_data_factory_get_container (pika->gradient_factory), + ! pika_pdb_dialog_close (pika, + pika_container_get_children_type (container), gradient_callback)) success = FALSE; } @@ -86,18 +93,20 @@ sub gradients_set_popup { @inargs = ( { name => 'gradient_callback', type => 'string', non_empty => 1, desc => 'The name of the callback registered for this pop-up' }, - { name => 'gradient_name', type => 'string', - desc => 'The name of the gradient to set as selected' } + { name => 'gradient', type => 'gradient', + desc => 'The gradient to set as selected' } ); %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->gradient_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, gradient_callback) || - ! pika_pdb_dialog_set (pika, pika_data_factory_get_container (pika->gradient_factory), - gradient_callback, gradient_name, - NULL)) + ! pika_pdb_dialog_set (pika, + pika_container_get_children_type (container), + gradient_callback, PIKA_OBJECT (gradient), NULL)) success = FALSE; } CODE @@ -106,6 +115,7 @@ CODE @headers = qw("core/pika.h" + "core/pikacontainer.h" "core/pikadatafactory.h" "core/pikagradient.h"); diff --git a/pdb/groups/image.pdb b/pdb/groups/image.pdb index 4521155..e3c186b 100644 --- a/pdb/groups/image.pdb +++ b/pdb/groups/image.pdb @@ -1563,6 +1563,36 @@ CODE ); } +sub image_get_palette { + $blurb = "Returns the image's colormap"; + + $help = <<'HELP'; +This procedure returns the image's colormap as a PikaPalette. +If the image is not in Indexed color mode, %NULL is returned. +HELP + + &jehan_pdb_misc('2023', '3.0'); + + @inargs = ( + { name => 'image', type => 'image', + desc => 'The image' } + ); + + @outargs = ( + { name => 'colormap', type => 'palette', + desc => "The image's colormap." } + ); + + %invoke = ( + headers => [ qw("core/pikaimage-colormap.h") ], + code => <<'CODE' +{ + colormap = pika_image_get_colormap_palette (image); +} +CODE + ); +} + sub image_get_metadata { $blurb = "Returns the image's metadata."; $help = 'Returns exif/iptc/xmp metadata from the image.'; @@ -3207,6 +3237,7 @@ CODE image_flatten image_merge_visible_layers image_merge_down image_merge_layer_group image_get_colormap image_set_colormap + image_get_palette image_get_metadata image_set_metadata image_clean_all image_is_dirty image_thumbnail diff --git a/pdb/groups/palette.pdb b/pdb/groups/palette.pdb index 5509204..beae01d 100644 --- a/pdb/groups/palette.pdb +++ b/pdb/groups/palette.pdb @@ -251,9 +251,11 @@ sub palette_delete_entry { $blurb = 'Deletes an entry from the palette.'; $help = <<'HELP'; -Deletes an entry from the palette. -Returns an error if the index is out or range. -Returns an error if the palette is not editable. +This function will fail and return %FALSE if the index is out or range or if the +palette is not editable. + +Additionally if the palette belongs to an indexed image, it will only be possible +to delete palette colors not in use in the image. HELP &mitch_pdb_misc('2004', '2.2'); @@ -272,9 +274,18 @@ HELP PikaPaletteEntry *entry = pika_palette_get_entry (palette, entry_num); if (entry) - pika_palette_delete_entry (palette, entry); + { + PikaImage *image = pika_data_get_image (PIKA_DATA (palette)); + + if (image != NULL) + success = pika_image_delete_colormap_entry (image, entry_num, TRUE); + else + pika_palette_delete_entry (palette, entry); + } else - success = FALSE; + { + success = FALSE; + } } else success = FALSE; @@ -341,7 +352,7 @@ HELP code => <<'CODE' { if (pika_data_is_writable (PIKA_DATA (palette))) - success = pika_palette_set_entry_color (palette, entry_num, &color); + success = pika_palette_set_entry_color (palette, entry_num, &color, TRUE); else success = FALSE; } @@ -420,6 +431,7 @@ CODE "core/pika.h" "core/pikacontext.h" "core/pikadatafactory.h" + "core/pikaimage-colormap.h" "core/pikapalette.h" "pikapdb-utils.h"); diff --git a/pdb/groups/palette_select.pdb b/pdb/groups/palette_select.pdb index 67607b8..23b43dc 100644 --- a/pdb/groups/palette_select.pdb +++ b/pdb/groups/palette_select.pdb @@ -27,19 +27,23 @@ sub palettes_popup { desc => 'The callback PDB proc to call when user chooses a palette' }, { name => 'popup_title', type => 'string', desc => 'Title of the palette selection dialog' }, - { name => 'initial_palette_name', type => 'string', null_ok => 1, - desc => 'The name of the palette to set as the initial choice.' } + { name => 'initial_palette', type => 'palette', null_ok => 1, + desc => 'The palette to set as the initial choice.' }, + { name => 'parent_window', type => 'bytes', null_ok => 1, + desc => 'An optional parent window handle for the popup to be set transient to' } ); %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->palette_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, palette_callback) || ! pika_pdb_dialog_new (pika, context, progress, - pika_data_factory_get_container (pika->palette_factory), - popup_title, palette_callback, initial_palette_name, - NULL)) + pika_container_get_children_type (container), + parent_window, popup_title, palette_callback, + PIKA_OBJECT (initial_palette), NULL)) success = FALSE; } CODE @@ -60,9 +64,12 @@ sub palettes_close_popup { %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->palette_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, palette_callback) || - ! pika_pdb_dialog_close (pika, pika_data_factory_get_container (pika->palette_factory), + ! pika_pdb_dialog_close (pika, + pika_container_get_children_type (container), palette_callback)) success = FALSE; } @@ -79,18 +86,20 @@ sub palettes_set_popup { @inargs = ( { name => 'palette_callback', type => 'string', non_empty => 1, desc => 'The name of the callback registered for this pop-up' }, - { name => 'palette_name', type => 'string', - desc => 'The name of the palette to set as selected' }, + { name => 'palette', type => 'palette', + desc => 'The palette to set as selected' }, ); %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->palette_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, palette_callback) || - ! pika_pdb_dialog_set (pika, pika_data_factory_get_container (pika->palette_factory), - palette_callback, palette_name, - NULL)) + ! pika_pdb_dialog_set (pika, + pika_container_get_children_type (container), + palette_callback, PIKA_OBJECT (palette), NULL)) success = FALSE; } CODE @@ -99,6 +108,7 @@ CODE @headers = qw("core/pika.h" + "core/pikacontainer.h" "core/pikadatafactory.h"); @procs = qw(palettes_popup diff --git a/pdb/groups/pattern.pdb b/pdb/groups/pattern.pdb index 64b91a3..319ee90 100644 --- a/pdb/groups/pattern.pdb +++ b/pdb/groups/pattern.pdb @@ -99,10 +99,10 @@ BLURB $help = <<'HELP'; Gets information about the pattern: the pattern extents (width and height), its bpp, and its pixel data. -The pixel data is an array in C or a list in some languages. HELP &mitch_pdb_misc('2004', '2.2'); + $lib_private = 1; @inargs = ( ${pattern_arg_spec} diff --git a/pdb/groups/pattern_select.pdb b/pdb/groups/pattern_select.pdb index 597e940..dccb547 100644 --- a/pdb/groups/pattern_select.pdb +++ b/pdb/groups/pattern_select.pdb @@ -27,19 +27,23 @@ sub patterns_popup { desc => 'The callback PDB proc to call when the user chooses a pattern' }, { name => 'popup_title', type => 'string', desc => 'Title of the pattern selection dialog' }, - { name => 'initial_pattern_name', type => 'string', null_ok => 1, - desc => 'The name of the pattern to set as the initial choice' } + { name => 'initial_pattern', type => 'pattern', null_ok => 1, + desc => 'The pattern to set as the initial choice' }, + { name => 'parent_window', type => 'bytes', null_ok => 1, + desc => 'An optional parent window handle for the popup to be set transient to' } ); %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->pattern_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, pattern_callback) || ! pika_pdb_dialog_new (pika, context, progress, - pika_data_factory_get_container (pika->pattern_factory), - popup_title, pattern_callback, initial_pattern_name, - NULL)) + pika_container_get_children_type (container), + parent_window, popup_title, pattern_callback, + PIKA_OBJECT (initial_pattern), NULL)) success = FALSE; } CODE @@ -60,9 +64,12 @@ sub patterns_close_popup { %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->pattern_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, pattern_callback) || - ! pika_pdb_dialog_close (pika, pika_data_factory_get_container (pika->pattern_factory), + ! pika_pdb_dialog_close (pika, + pika_container_get_children_type (container), pattern_callback)) success = FALSE; } @@ -79,18 +86,20 @@ sub patterns_set_popup { @inargs = ( { name => 'pattern_callback', type => 'string', non_empty => 1, desc => 'The name of the callback registered for this pop-up' }, - { name => 'pattern_name', type => 'string', - desc => 'The name of the pattern to set as selected' } + { name => 'pattern', type => 'pattern', + desc => 'The pattern to set as selected' } ); %invoke = ( code => <<'CODE' { + PikaContainer *container = pika_data_factory_get_container (pika->pattern_factory); + if (pika->no_interface || ! pika_pdb_lookup_procedure (pika->pdb, pattern_callback) || - ! pika_pdb_dialog_set (pika, pika_data_factory_get_container (pika->pattern_factory), - pattern_callback, pattern_name, - NULL)) + ! pika_pdb_dialog_set (pika, + pika_container_get_children_type (container), + pattern_callback, PIKA_OBJECT (pattern), NULL)) success = FALSE; } CODE @@ -99,6 +108,7 @@ CODE @headers = qw("core/pika.h" + "core/pikacontainer.h" "core/pikadatafactory.h"); @procs = qw(patterns_popup diff --git a/pdb/groups/pdb.pdb b/pdb/groups/pdb.pdb index e6dd807..f3a711f 100644 --- a/pdb/groups/pdb.pdb +++ b/pdb/groups/pdb.pdb @@ -1246,50 +1246,6 @@ CODE ); } -sub pdb_get_data_size { - $blurb = 'Returns size of data associated with the specified identifier.'; - - $help = <<'HELP'; -This procedure returns the size of any data which may have been associated with -the specified identifier. If no data has been associated with the identifier, -an error is returned. -HELP - - &nick_pdb_misc('1998'); - - $lib_private = 1; - - @inargs = ( - { name => 'identifier', type => 'string', non_empty => 1, - desc => 'The identifier associated with data' } - ); - - @outargs = ( - { name => 'bytes', type => '1 <= int32', - desc => 'The number of bytes in the data' } - ); - - %invoke = ( - code => <<'CODE' -{ - if (pika_is_canonical_identifier (identifier)) - { - if (! pika_plug_in_manager_get_data (pika->plug_in_manager, - identifier, &bytes)) - success = FALSE; - } - else - { - g_set_error (error, PIKA_PDB_ERROR, PIKA_PDB_ERROR_INVALID_ARGUMENT, - _("Data label '%s' is not a canonical identifier"), - identifier); - success = FALSE; - } -} -CODE - ); -} - sub pdb_set_data { $blurb = 'Associates the specified identifier with the supplied data.'; @@ -1398,7 +1354,6 @@ CODE pdb_set_file_proc_thumbnail_loader pdb_set_batch_interpreter pdb_get_data - pdb_get_data_size pdb_set_data); %exports = (app => [@procs], lib => [@procs]); diff --git a/pdb/groups/progress.pdb b/pdb/groups/progress.pdb index 792e881..06a8af6 100644 --- a/pdb/groups/progress.pdb +++ b/pdb/groups/progress.pdb @@ -180,17 +180,20 @@ CODE } sub progress_get_window_handle { - $blurb = 'Returns the native window ID of the toplevel window this plug-in\'s progress is displayed in.'; + $blurb = 'Returns the native handle of the toplevel window this plug-in\'s progress is displayed in.'; $help = <<'HELP'; -This function returns the native window ID of the toplevel window this plug-in\'s progress is displayed in. +This function returns the native handle allowing to identify the toplevel window this plug-in's progress is displayed in. + +This handle can be of various types (integer, string, etc.) depending on the platform you are running on which is why it +returns a GBytes. There are usually no reasons to call this directly. HELP &mitch_pdb_misc('2004', '2.2'); @outargs = ( - { name => 'window', type => 'int32', - desc => 'The progress bar\'s toplevel window' } + { name => 'handle', type => 'bytes', + desc => 'The progress bar\'s toplevel window\'s handle' } ); %invoke = ( @@ -201,7 +204,7 @@ HELP if (plug_in && plug_in->open) { if (! pika->no_interface) - window = pika_plug_in_progress_get_window_id (plug_in); + handle = pika_plug_in_progress_get_window_id (plug_in); } else success = FALSE; diff --git a/pdb/groups/text_layer.pdb b/pdb/groups/text_layer.pdb index d8b26be..5e9b260 100644 --- a/pdb/groups/text_layer.pdb +++ b/pdb/groups/text_layer.pdb @@ -38,8 +38,8 @@ HELP desc => 'The image' }, { name => 'text', type => 'string', desc => 'The text to generate (in UTF-8 encoding)' }, - { name => 'fontname', type => 'string', - desc => 'The name of the font' }, + { name => 'font', type => 'font', + desc => 'The font to write the text with' }, { name => 'size', type => '0.0 <= float <= 8192.0', desc => 'The size of text in either pixels or points' }, { name => 'unit', type => 'unit', @@ -61,7 +61,7 @@ HELP pika_text = g_object_new (PIKA_TYPE_TEXT, "text", text, - "font", fontname, + "font", font, "font-size", size, "font-size-unit", unit, "color", &color, @@ -231,7 +231,7 @@ sub text_layer_get_font { $blurb = 'Get the font from a text layer as string.'; $help = <<'HELP'; -This procedure returns the name of the font from a text layer. +This procedure returns the font from a text layer. HELP &marcus_pdb_misc('2008', '2.6'); @@ -242,20 +242,20 @@ HELP ); @outargs = ( - { name => 'font', type => 'string', + { name => 'font', type => 'font', desc => 'The font which is used in the specified text layer.' } ); %invoke = ( code => <<'CODE' { - PikaFont *font_obj; - g_object_get (pika_text_layer_get_text (layer), - "font", &font_obj, + "font", &font, NULL); - font = g_strdup (pika_font_get_lookup_name (font_obj)); - g_object_unref (font_obj); + /* The PikaText keeps a reference. Therefore unref before returning the + * pointer so that we don't leak a reference. + */ + g_object_unref (font); } CODE ); @@ -273,7 +273,7 @@ HELP @inargs = ( { name => 'layer', type => 'text_layer', desc => 'The text layer' }, - { name => 'font', type => 'string', + { name => 'font', type => 'font', desc => 'The new font to use' } ); diff --git a/pdb/groups/text_tool.pdb b/pdb/groups/text_tool.pdb index 846bb7e..2555c76 100644 --- a/pdb/groups/text_tool.pdb +++ b/pdb/groups/text_tool.pdb @@ -16,24 +16,21 @@ # "Perlized" from C source by Manish Singh -sub text_fontname { +sub text_font { $blurb = <<'BLURB'; Add text at the specified location as a floating selection or a new layer. BLURB $help = <<'HELP'; -This tool requires a fontname matching an installed PangoFT2 font. -You can specify the fontsize in units of pixels -or points, and the appropriate metric is specified using the size_type -argument. The x and y parameters together control the placement of the new -text by specifying the upper left corner of the text bounding box. If the -specified drawable parameter is valid, the text will be created as a floating -selection attached to the drawable. If the drawable parameter is not valid -(%NULL), the text will appear as a new layer. Finally, a border can be specified -around the final rendered text. The border is measured in pixels. Parameter -size-type is not used and is currently ignored. If you need to display a font -in points, divide the size in points by 72.0 and multiply it by the image's -vertical resolution. +The x and y parameters together control the placement of the new text by +specifying the upper left corner of the text bounding box. If the specified +drawable parameter is valid, the text will be created as a floating selection +attached to the drawable. If the drawable parameter is not valid (%NULL), the +text will appear as a new layer. Finally, a border can be specified around the +final rendered text. The border is measured in pixels. + +The size is always in pixels. If you need to display a font in points, divide +the size in points by 72.0 and multiply it by the image's vertical resolution. HELP &std_pdb_misc; @@ -57,11 +54,9 @@ HELP { name => 'antialias', type => 'boolean', desc => 'Antialiasing' }, { name => 'size', type => '0 < float', - desc => 'The size of text in either pixels or points' }, - { name => 'size_type', type => 'enum PikaSizeType', dead => 1, - desc => 'The units of specified size' }, - { name => 'fontname', type => 'string', - desc => 'The name of the font' } + desc => 'The size of text in pixels' }, + { name => 'font', type => 'font', + desc => 'The font' } ); @outargs = ( @@ -79,30 +74,30 @@ HELP success = FALSE; if (success) - { - gchar *real_fontname = g_strdup_printf ("%s %d", fontname, (gint) size); - - text_layer = text_render (image, drawable, context, - x, y, real_fontname, text, - border, antialias); - - g_free (real_fontname); - } + text_layer = text_render (image, drawable, context, + x, y, font, size, text, + border, antialias); } CODE ); } -sub text_get_extents_fontname { +sub text_get_extents_font { $blurb = 'Get extents of the bounding box for the specified text.'; $help = <<'HELP'; This tool returns the width and height of a bounding box for the specified text -string with the specified font information. Ascent and descent for the -specified font are returned as well. Parameter size-type is not used and is -currently ignored. If you need to display a font in points, divide the -size in points by 72.0 and multiply it by the vertical resolution of the -image you are taking into account. +rendered with the specified font information. Ascent and descent of the glyph +extents are returned as well. + +The ascent is the distance from the baseline to the highest point of the +character. This is positive if the glyph ascends above the baseline. +The descent is the distance from the baseline to the lowest point of the +character. This is positive if the glyph descends below the baseline. + +The size is always in pixels. If you need to set a font in points, divide the +size in points by 72.0 and multiply it by the vertical resolution of the image +you are taking into account. HELP &std_pdb_misc; @@ -114,34 +109,28 @@ HELP desc => 'The text to generate (in UTF-8 encoding)' }, { name => 'size', type => '0 < float', desc => 'The size of text in either pixels or points' }, - { name => 'size_type', type => 'enum PikaSizeType', dead => 1, - desc => 'The units of specified size' }, - { name => 'fontname', type => 'string', + { name => 'font', type => 'font', desc => 'The name of the font' } ); @outargs = ( { name => 'width', type => 'int32', void_ret => 1, - desc => 'The width of the specified font' }, + desc => 'The width of the glyph extents' }, { name => 'height', type => 'int32', - desc => 'The height of the specified font' }, + desc => 'The height of the glyph extents' }, { name => 'ascent', type => 'int32', - desc => 'The ascent of the specified font' }, + desc => 'The ascent of the glyph extents' }, { name => 'descent', type => 'int32', - desc => 'The descent of the specified font' } + desc => 'The descent of the glyph extents' } ); %invoke = ( code => <<'CODE' { - gchar *real_fontname = g_strdup_printf ("%s %d", fontname, (gint) size); - success = text_get_extents (pika, - real_fontname, text, + font, size, text, &width, &height, &ascent, &descent); - - g_free (real_fontname); } CODE ); @@ -152,8 +141,8 @@ CODE "text/pikatext-compat.h" "pikapdb-utils.h"); -@procs = qw(text_fontname - text_get_extents_fontname); +@procs = qw(text_font + text_get_extents_font); %exports = (app => [@procs], lib => [@procs]); diff --git a/pdb/lib.pl b/pdb/lib.pl index 154c98d..f1f89f0 100644 --- a/pdb/lib.pl +++ b/pdb/lib.pl @@ -534,9 +534,9 @@ $wrapped$funcname ($clist) args = pika_value_array_new_from_types (NULL, ${value_array}G_TYPE_NONE); $arg_array - return_vals = pika_pdb_run_procedure_array (pika_get_pdb (), - "pika-$proc->{canonical_name}", - args); + return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), + "pika-$proc->{canonical_name}", + args); pika_value_array_unref (args); $return_marshal diff --git a/pdb/meson.build b/pdb/meson.build index a7d8a02..a97af9b 100644 --- a/pdb/meson.build +++ b/pdb/meson.build @@ -12,6 +12,7 @@ pdb_names = [ 'display', 'drawable_color', 'drawable_edit', + 'drawable_select', 'drawable', 'dynamics', 'edit', @@ -79,15 +80,11 @@ perlbindir = meson.current_build_dir() perl_env = [ 'PDBGEN_BACKUP=' + (pdbgen_backup ? '1' : '0'), 'PDBGEN_GROUPS=' + (pdbgen_groups ? '1' : '0'), - 'rootme=' + perlbindir, - 'srcdir=' + perlsrcdir, - 'destdir=' + meson.project_build_root(), - 'builddir=' + meson.project_build_root(), -] -perl_opts = [ - perl, - '-I', perlbindir, - '-I', perlsrcdir, + 'rootme=' + perlbindir, + 'srcdir=' + perlsrcdir, + 'destdir=' + meson.project_build_root(), + 'builddir=' + meson.project_build_root(), + 'topsrcdir=' + meson.project_source_root(), ] groups_pl_content = '# This file is autogenerated\n' @@ -98,7 +95,6 @@ endforeach groups_pl_content += ');\n' - # All perl files groups_pl = custom_target('groups.pl', @@ -108,93 +104,61 @@ groups_pl = custom_target('groups.pl', capture: true, ) -pdbgen_run = find_program('meson-pdbgen.sh') +enumgen_run = find_program('meson-enumgen.sh') +pdbgen_run = find_program('meson-pdbgen.sh') +enumcode_run = find_program('meson-enumcode.sh') -if meson.version().version_compare('>=0.57.0') - enums_pl = custom_target('enums.pl', - input : [ 'enumgen.pl', 'enums-external.pl', enum_headers, ], - output: [ 'enums.pl', ], - env: perl_env, - command: [ - perl, '@INPUT0@', - enum_headers, - ], - ) +enums_pl = custom_target('enums.pl', + input : [ 'meson-enumgen.sh', 'enumgen.pl', 'enums-external.pl', enum_headers, ], + output: [ 'stamp-enumgen.h', ], + env: perl_env, + command: [ + enumgen_run, perl, meson.project_source_root(), meson.project_build_root(), + enum_headers, + ], + build_by_default: true, +) - pdbgen = custom_target('stamp-pdbgen.h', - input : [ - files( - 'meson-pdbgen.sh', - 'pdbgen.pl', +pdbgen = custom_target('stamp-pdbgen.h', + input : [ + files( + 'meson-pdbgen.sh', + 'pdbgen.pl', - 'app.pl', - 'lib.pl', - 'pdb.pl', - 'stddefs.pdb', - 'util.pl', - ), - enums_pl, - groups_pl, - pdb_sources, - ], - output: [ 'stamp-pdbgen.h', ], - env: perl_env, - command: [ - pdbgen_run, perl, meson.project_source_root(), meson.project_build_root() - ], - ) + 'app.pl', + 'lib.pl', + 'pdb.pl', + 'stddefs.pdb', + 'util.pl', + ), + enums_pl, + groups_pl, + pdb_sources, + ], + output: [ 'stamp-pdbgen.h', ], + env: perl_env, + command: [ + pdbgen_run, perl, meson.project_source_root(), meson.project_build_root() + ], + build_by_default: true, +) - stamp_enumcode = custom_target('stamp-enum-code', - input : [ 'enumcode.pl', ], - output: [ 'stamp-enum-code', ], - env: perl_env, - command: [ - perl_opts, '@INPUT0@', - ], - ) -else - # TODO: remove this workaround when we bump meson requirement to >= 0.57.0 - # See MR !506. - # In the meantime, make sure the 2 if/else blocks are well synced. - env = find_program('env') +stamp_enumcode = custom_target('pikaenums.h', + input : [ + files( + 'meson-enumcode.sh', + 'enumcode.pl', + 'enumgen.pl', - enums_pl = custom_target('enums.pl', - input : [ 'enumgen.pl', 'enums-external.pl', enum_headers, ], - output: [ 'enums.pl', ], - command: [ - env, perl_env, perl_opts, '@INPUT0@', - enum_headers, - ], - ) - - pdbgen = custom_target('stamp-pdbgen.h', - input : [ - files( - 'meson-pdbgen.sh', - 'pdbgen.pl', - - 'app.pl', - 'lib.pl', - 'pdb.pl', - 'stddefs.pdb', - 'util.pl', - ), - enums_pl, - groups_pl, - pdb_sources, - ], - output: [ 'stamp-pdbgen.h', ], - command: [ - env, perl_env, pdbgen_run, perl, meson.project_source_root(), meson.project_build_root() - ], - ) - - - stamp_enumcode = custom_target('stamp-enum-code', - input : [ 'enumcode.pl', ], - output: [ 'stamp-enum-code', ], - command: [ - env, perl_env, perl_opts, '@INPUT0@', - ], - ) -endif + 'util.pl', + ), + enums_pl, + enum_headers, + ], + output: [ 'stamp-enumcode.h', ], + env: perl_env, + command: [ + enumcode_run, perl, meson.project_source_root(), meson.project_build_root() + ], + build_by_default: true, +) diff --git a/pdb/pdb.pl b/pdb/pdb.pl index 8d60d4a..e7401c8 100644 --- a/pdb/pdb.pl +++ b/pdb/pdb.pl @@ -185,6 +185,84 @@ package Pika::CodeGen::pdb; set_value_func => 'pika_value_set_object_array ($value, PIKA_TYPE_VECTORS, (GObject **) $var, $var_len)', take_value_func => 'pika_value_take_object_array ($value, PIKA_TYPE_VECTORS, (GObject **) $var, $var_len)' }, + resourcearray => { name => 'RESOURCEARRAY', + gtype => 'PIKA_TYPE_OBJECT_ARRAY', + type => 'PikaResource **', + const_type => 'const PikaResource **', + array => 1, + init_value => 'NULL', + in_annotate => '(element-type PikaResource)', + out_annotate => '(element-type PikaResource) (transfer container)', + get_value_func => '$var = (const PikaResource **) pika_value_get_object_array ($value)', + dup_value_func => '{ PikaObjectArray *a = g_value_get_boxed (pika_value_array_index ($value)); if (a) $var = g_memdup2 (a->data, a->length * sizeof (gpointer)); }', + set_value_func => 'pika_value_set_object_array ($value, PIKA_TYPE_RESOURCE, (GObject **) $var, $var_len)', + take_value_func => 'pika_value_take_object_array ($value, PIKA_TYPE_RESOURCE, (GObject **) $var, $var_len)' }, + + brusharray => { name => 'BRUSHARRAY', + gtype => 'PIKA_TYPE_OBJECT_ARRAY', + type => 'PikaBrush **', + const_type => 'const PikaBrush **', + array => 1, + init_value => 'NULL', + in_annotate => '(element-type PikaBrush)', + out_annotate => '(element-type PikaBrush) (transfer container)', + get_value_func => '$var = (const PikaBrush **) pika_value_get_object_array ($value)', + dup_value_func => '{ PikaObjectArray *a = g_value_get_boxed (pika_value_array_index ($value)); if (a) $var = g_memdup2 (a->data, a->length * sizeof (gpointer)); }', + set_value_func => 'pika_value_set_object_array ($value, PIKA_TYPE_BRUSH, (GObject **) $var, $var_len)', + take_value_func => 'pika_value_take_object_array ($value, PIKA_TYPE_BRUSH, (GObject **) $var, $var_len)' }, + + fontarray => { name => 'FONTARRAY', + gtype => 'PIKA_TYPE_OBJECT_ARRAY', + type => 'PikaFont **', + const_type => 'const PikaFont **', + array => 1, + init_value => 'NULL', + in_annotate => '(element-type PikaFont)', + out_annotate => '(element-type PikaFont) (transfer container)', + get_value_func => '$var = (const PikaFont **) pika_value_get_object_array ($value)', + dup_value_func => '{ PikaObjectArray *a = g_value_get_boxed (pika_value_array_index ($value)); if (a) $var = g_memdup2 (a->data, a->length * sizeof (gpointer)); }', + set_value_func => 'pika_value_set_object_array ($value, PIKA_TYPE_FONT, (GObject **) $var, $var_len)', + take_value_func => 'pika_value_take_object_array ($value, PIKA_TYPE_FONT, (GObject **) $var, $var_len)' }, + + gradientarray => { name => 'GRADIENTARRAY', + gtype => 'PIKA_TYPE_OBJECT_ARRAY', + type => 'PikaGradient **', + const_type => 'const PikaGradient **', + array => 1, + init_value => 'NULL', + in_annotate => '(element-type PikaGradient)', + out_annotate => '(element-type PikaGradient) (transfer container)', + get_value_func => '$var = (const PikaGradient **) pika_value_get_object_array ($value)', + dup_value_func => '{ PikaObjectArray *a = g_value_get_boxed (pika_value_array_index ($value)); if (a) $var = g_memdup2 (a->data, a->length * sizeof (gpointer)); }', + set_value_func => 'pika_value_set_object_array ($value, PIKA_TYPE_GRADIENT, (GObject **) $var, $var_len)', + take_value_func => 'pika_value_take_object_array ($value, PIKA_TYPE_GRADIENT, (GObject **) $var, $var_len)' }, + + palettearray => { name => 'PALETTEARRAY', + gtype => 'PIKA_TYPE_OBJECT_ARRAY', + type => 'PikaPalette **', + const_type => 'const PikaPalette **', + array => 1, + init_value => 'NULL', + in_annotate => '(element-type PikaPalette)', + out_annotate => '(element-type PikaPalette) (transfer container)', + get_value_func => '$var = (const PikaPalette **) pika_value_get_object_array ($value)', + dup_value_func => '{ PikaObjectArray *a = g_value_get_boxed (pika_value_array_index ($value)); if (a) $var = g_memdup2 (a->data, a->length * sizeof (gpointer)); }', + set_value_func => 'pika_value_set_object_array ($value, PIKA_TYPE_PALETTE, (GObject **) $var, $var_len)', + take_value_func => 'pika_value_take_object_array ($value, PIKA_TYPE_PALETTE, (GObject **) $var, $var_len)' }, + + patternarray => { name => 'PATTERNARRAY', + gtype => 'PIKA_TYPE_OBJECT_ARRAY', + type => 'PikaPattern **', + const_type => 'const PikaPattern **', + array => 1, + init_value => 'NULL', + in_annotate => '(element-type PikaPattern)', + out_annotate => '(element-type PikaPattern) (transfer container)', + get_value_func => '$var = (const PikaPattern **) pika_value_get_object_array ($value)', + dup_value_func => '{ PikaObjectArray *a = g_value_get_boxed (pika_value_array_index ($value)); if (a) $var = g_memdup2 (a->data, a->length * sizeof (gpointer)); }', + set_value_func => 'pika_value_set_object_array ($value, PIKA_TYPE_PATTERN, (GObject **) $var, $var_len)', + take_value_func => 'pika_value_take_object_array ($value, PIKA_TYPE_PATTERN, (GObject **) $var, $var_len)' }, + color => { name => 'COLOR', gtype => 'PIKA_TYPE_RGB', type => 'PikaRGB ', diff --git a/plug-ins/common/align-layers.c b/plug-ins/common/align-layers.c index 1a2fe94..d4ec974 100644 --- a/plug-ins/common/align-layers.c +++ b/plug-ins/common/align-layers.c @@ -85,7 +85,7 @@ struct _AlignLayersClass #define ALIGN_LAYERS_TYPE (align_layers_get_type ()) -#define ALIGN_LAYERS (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ALIGN_LAYERS_TYPE, AlignLayers)) +#define ALIGN_LAYERS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ALIGN_LAYERS_TYPE, AlignLayers)) GType align_layers_get_type (void) G_GNUC_CONST; @@ -98,7 +98,7 @@ static PikaValueArray * align_layers_run (PikaProcedure PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); @@ -266,18 +266,14 @@ align_layers_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals = NULL; - PikaPDBStatusType status = PIKA_PDB_EXECUTION_ERROR; - GError *error = NULL; - GList *layers; - gint layer_num; - - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); + PikaValueArray *return_vals = NULL; + PikaPDBStatusType status = PIKA_PDB_EXECUTION_ERROR; + GError *error = NULL; + GList *layers; + gint layer_num; switch ( run_mode ) { @@ -312,11 +308,7 @@ align_layers_run (PikaProcedure *procedure, pika_displays_flush (); } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - - return_vals = pika_procedure_new_return_values (procedure, status, - error); + return_vals = pika_procedure_new_return_values (procedure, status, error); return return_vals; } diff --git a/plug-ins/common/animation-optimize.c b/plug-ins/common/animation-optimize.c index 05a3223..835c019 100644 --- a/plug-ins/common/animation-optimize.c +++ b/plug-ins/common/animation-optimize.c @@ -75,7 +75,7 @@ struct _OptimizeClass #define OPTIMIZE_TYPE (optimize_get_type ()) -#define OPTIMIZE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OPTIMIZE_TYPE, Optimize)) +#define OPTIMIZE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OPTIMIZE_TYPE, Optimize)) GType optimize_get_type (void) G_GNUC_CONST; @@ -88,7 +88,7 @@ static PikaValueArray * optimize_run (PikaProcedure *procedu PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaImage * do_optimizations (PikaRunMode run_mode, @@ -311,7 +311,7 @@ optimize_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals; diff --git a/plug-ins/common/animation-play.c b/plug-ins/common/animation-play.c index 4421d5a..f6c5314 100644 --- a/plug-ins/common/animation-play.c +++ b/plug-ins/common/animation-play.c @@ -99,7 +99,7 @@ static PikaValueArray * play_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void initialize (PikaPlay *play); @@ -340,6 +340,11 @@ play_create_procedure (PikaPlugIn *plug_in, "Adam D. Moss ", "Adam D. Moss ", "1997, 1998..."); + + PIKA_PROC_AUX_ARG_BYTES (procedure, "settings-data", + "Settings data", + "TODO: eventually we must implement proper args for every settings", + PIKA_PARAM_READWRITE); } return procedure; @@ -351,12 +356,26 @@ play_run (PikaProcedure *procedure, PikaImage *_image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { + GBytes *settings_bytes = NULL; GMenu *section; PikaPlay *play; + if (run_mode != PIKA_RUN_INTERACTIVE) + { + GError *error = NULL; + + g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, + _("Procedure '%s' only works in interactive mode."), + pika_procedure_get_name (procedure)); + + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CALLING_ERROR, + error); + } + play = PIKA_PLAY (pika_procedure_get_plug_in (procedure)); #if GLIB_CHECK_VERSION(2,74,0) play->app = gtk_application_new (NULL, G_APPLICATION_DEFAULT_FLAGS); @@ -392,7 +411,15 @@ play_run (PikaProcedure *procedure, image = _image; - pika_get_data (PLUG_IN_PROC, &settings); + /* Temporary code replacing legacy pika_[gs]et_data() using an AUX argument. + * This doesn't actually fix the "Reset to initial values|factory defaults" + * features, but at least makes per-run value storage work. + * TODO: eventually we want proper separate arguments as a complete fix. + */ + g_object_get (config, "settings-data", &settings_bytes, NULL); + if (settings_bytes != NULL && g_bytes_get_size (settings_bytes) == sizeof (AnimationSettings)) + settings = *((AnimationSettings *) g_bytes_get_data (settings_bytes, NULL)); + g_bytes_unref (settings_bytes); g_signal_connect (play->app, "activate", G_CALLBACK (on_app_activate), play); @@ -400,7 +427,9 @@ play_run (PikaProcedure *procedure, g_clear_object (&play->app); - pika_set_data (PLUG_IN_PROC, &settings, sizeof (settings)); + settings_bytes = g_bytes_new (&settings, sizeof (AnimationSettings)); + g_object_set (config, "settings-data", settings_bytes, NULL); + g_bytes_unref (settings_bytes); if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); diff --git a/plug-ins/common/blinds.c b/plug-ins/common/blinds.c index 5428dea..e8d1469 100644 --- a/plug-ins/common/blinds.c +++ b/plug-ins/common/blinds.c @@ -62,7 +62,7 @@ struct _BlindsClass #define BLINDS_TYPE (blinds_get_type ()) -#define BLINDS (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BLINDS_TYPE, Blinds)) +#define BLINDS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BLINDS_TYPE, Blinds)) GType blinds_get_type (void) G_GNUC_CONST; @@ -75,7 +75,7 @@ static PikaValueArray * blinds_run (PikaProcedure *procedure PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gboolean blinds_dialog (PikaProcedure *procedure, @@ -186,11 +186,10 @@ blinds_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaDrawable *drawable; + PikaDrawable *drawable; gegl_init (NULL, NULL); @@ -211,26 +210,10 @@ blinds_run (PikaProcedure *procedure, drawable = drawables[0]; } - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! blinds_dialog (procedure, G_OBJECT (config), drawable)) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - default: - break; - } + if (run_mode == PIKA_RUN_INTERACTIVE && ! blinds_dialog (procedure, G_OBJECT (config), drawable)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); if (pika_drawable_is_rgb (drawable) || pika_drawable_is_gray (drawable)) @@ -244,17 +227,11 @@ blinds_run (PikaProcedure *procedure, } else { - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); } - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } @@ -298,7 +275,7 @@ blinds_dialog (PikaProcedure *procedure, "orientation", PIKA_INT_STORE (store)); pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "bg_label", _("Background")); + "bg_label", _("Background"), FALSE, FALSE); pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), "bg-frame", "bg_label", FALSE, diff --git a/plug-ins/common/border-average.c b/plug-ins/common/border-average.c index f291782..78081df 100644 --- a/plug-ins/common/border-average.c +++ b/plug-ins/common/border-average.c @@ -45,7 +45,7 @@ struct _BorderAverageClass #define BORDER_AVERAGE_TYPE (border_average_get_type ()) -#define BORDER_AVERAGE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BORDER_AVERAGE_TYPE, BorderAverage)) +#define BORDER_AVERAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BORDER_AVERAGE_TYPE, BorderAverage)) GType border_average_get_type (void) G_GNUC_CONST; @@ -59,7 +59,7 @@ static PikaValueArray * border_average_run (PikaProcedure PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); @@ -107,7 +107,7 @@ border_average_query_procedures (PikaPlugIn *plug_in) static PikaProcedure * border_average_create_procedure (PikaPlugIn *plug_in, - const gchar *name) + const gchar *name) { PikaProcedure *procedure = NULL; @@ -166,15 +166,14 @@ border_average_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaDrawable *drawable; - PikaValueArray *return_vals = NULL; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaRGB result_color = { 0.0, }; - GeglBuffer *buffer; + PikaDrawable *drawable; + PikaValueArray *return_vals = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaRGB result_color = { 0.0, }; + GeglBuffer *buffer; gegl_init (NULL, NULL); @@ -195,27 +194,11 @@ border_average_run (PikaProcedure *procedure, drawable = drawables[0]; } - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - buffer = pika_drawable_get_buffer (drawable); - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! borderaverage_dialog (procedure, G_OBJECT (config), - image, drawable)) - status = PIKA_PDB_EXECUTION_ERROR; - break; - - case PIKA_RUN_NONINTERACTIVE: - if (pika_value_array_length (args) != 2) - status = PIKA_PDB_CALLING_ERROR; - break; - - default: - break; - } + if (run_mode == PIKA_RUN_INTERACTIVE && + ! borderaverage_dialog (procedure, G_OBJECT (config), image, drawable)) + return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, NULL); if (status == PIKA_PDB_SUCCESS) { @@ -238,9 +221,6 @@ border_average_run (PikaProcedure *procedure, return_vals = pika_procedure_new_return_values (procedure, status, NULL); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - if (status == PIKA_PDB_SUCCESS) PIKA_VALUES_SET_RGB (return_vals, 1, &result_color); @@ -414,7 +394,8 @@ borderaverage_dialog (PikaProcedure *procedure, pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "border-size-label", - _("Border Size")); + _("Border Size"), + FALSE, FALSE); /* Get the image resolution */ pika_image_get_resolution (image, &xres, &yres); @@ -440,7 +421,8 @@ borderaverage_dialog (PikaProcedure *procedure, pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "bucket-size-label", - _("Number of Colors")); + _("Number of Colors"), + FALSE, FALSE); store = pika_int_store_new ("1", 0, "2", 1, "4", 2, "8", 3, "16", 4, "32", 5, "64", 6, "128", 7, diff --git a/plug-ins/common/busy-dialog.c b/plug-ins/common/busy-dialog.c index 55e90fc..523df6f 100644 --- a/plug-ins/common/busy-dialog.c +++ b/plug-ins/common/busy-dialog.c @@ -57,7 +57,7 @@ struct _BusyDialogClass #define BUSY_DIALOG_TYPE (busy_dialog_get_type ()) -#define BUSY_DIALOG (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BUSY_DIALOG_TYPE, BusyDialog)) +#define BUSY_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BUSY_DIALOG_TYPE, BusyDialog)) GType busy_dialog_get_type (void) G_GNUC_CONST; @@ -66,7 +66,7 @@ static GList * busy_dialog_query_procedures (PikaPlugIn static PikaProcedure * busy_dialog_create_procedure (PikaPlugIn *plug_in, const gchar *name); static PikaValueArray * busy_dialog_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaPDBStatusType busy_dialog (gint read_fd, @@ -177,30 +177,30 @@ busy_dialog_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * busy_dialog_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals = NULL; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaRunMode run_mode; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaRunMode run_mode = PIKA_RUN_INTERACTIVE; + gint read_fd; + gint write_fd; + const gchar *message; + gboolean cancelable; - run_mode = PIKA_VALUES_GET_ENUM (args, 0); + g_object_get (config, + "run-mode", &run_mode, + "read-fd", &read_fd, + "write-fd", &write_fd, + "message", &message, + "cancelable", &cancelable, + NULL); switch (run_mode) { case PIKA_RUN_INTERACTIVE: case PIKA_RUN_NONINTERACTIVE: case PIKA_RUN_WITH_LAST_VALS: - if (pika_value_array_length (args) != 5) - { - status = PIKA_PDB_CALLING_ERROR; - } - else - { - status = busy_dialog (PIKA_VALUES_GET_INT (args, 1), - PIKA_VALUES_GET_INT (args, 2), - PIKA_VALUES_GET_STRING (args, 3), - PIKA_VALUES_GET_BOOLEAN (args, 4)); - } + status = busy_dialog (read_fd, write_fd, message, cancelable); break; default: diff --git a/plug-ins/common/checkerboard.c b/plug-ins/common/checkerboard.c index 62ca614..b534981 100644 --- a/plug-ins/common/checkerboard.c +++ b/plug-ins/common/checkerboard.c @@ -46,7 +46,7 @@ struct _CheckerboardClass #define CHECKERBOARD_TYPE (checkerboard_get_type ()) -#define CHECKERBOARD (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CHECKERBOARD_TYPE, Checkerboard)) +#define CHECKERBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CHECKERBOARD_TYPE, Checkerboard)) GType checkerboard_get_type (void) G_GNUC_CONST; @@ -59,7 +59,7 @@ static PikaValueArray * checkerboard_run (PikaProcedure *pro PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void do_checkerboard_pattern (GObject *config, @@ -161,11 +161,10 @@ checkerboard_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaDrawable *drawable; + PikaDrawable *drawable; gegl_init (NULL, NULL); @@ -186,27 +185,11 @@ checkerboard_run (PikaProcedure *procedure, drawable = drawables[0]; } - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! checkerboard_dialog (procedure, G_OBJECT (config), image, - drawable)) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - default: - break; - } + if (run_mode == PIKA_RUN_INTERACTIVE && + ! checkerboard_dialog (procedure, G_OBJECT (config), image, drawable)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); if (pika_drawable_is_rgb (drawable) || pika_drawable_is_gray (drawable)) @@ -218,17 +201,11 @@ checkerboard_run (PikaProcedure *procedure, } else { - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); } - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } diff --git a/plug-ins/common/cml-explorer.c b/plug-ins/common/cml-explorer.c index 1fd7f73..96097c7 100644 --- a/plug-ins/common/cml-explorer.c +++ b/plug-ins/common/cml-explorer.c @@ -32,7 +32,7 @@ * * Value Time Space * Coupled-Map Lattice cont. discrete discrete - * Celluar Automata discrete discrete discrete + * Cellular Automata discrete discrete discrete * Differential Eq. cont. cont. cont. * * (But this program uses a parameter: hold-rate to avoid very fast changes. @@ -267,7 +267,6 @@ typedef struct gint scale; gint start_offset; gint seed; - gchar last_file_name[256]; } ValueType; static ValueType VALS = @@ -290,7 +289,6 @@ static ValueType VALS = 1, /* scale */ 0, /* start_offset */ 0, /* seed */ - "" /* last filename */ }; static CML_PARAM *channel_params[] = @@ -331,7 +329,7 @@ struct _ExplorerClass #define EXPLORER_TYPE (explorer_get_type ()) -#define EXPLORER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXPLORER_TYPE, Explorer)) +#define EXPLORER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXPLORER_TYPE, Explorer)) GType explorer_get_type (void) G_GNUC_CONST; @@ -344,85 +342,89 @@ static PikaValueArray * explorer_run (PikaProcedure *procedu PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static gboolean CML_main_function (gboolean preview_p); -static void CML_compute_next_step (gint size, - gdouble **h, - gdouble **s, - gdouble **v, - gdouble **hn, - gdouble **sn, - gdouble **vn, - gdouble **haux, - gdouble **saux, - gdouble **vaux); -static gdouble CML_next_value (gdouble *vec, - gint pos, - gint size, - gdouble c1, - gdouble c2, - CML_PARAM *param, - gdouble aux); -static gdouble logistic_function (CML_PARAM *param, - gdouble x, - gdouble power); +static gboolean CML_main_function (gboolean preview_p); +static void CML_compute_next_step (gint size, + gdouble **h, + gdouble **s, + gdouble **v, + gdouble **hn, + gdouble **sn, + gdouble **vn, + gdouble **haux, + gdouble **saux, + gdouble **vaux); +static gdouble CML_next_value (gdouble *vec, + gint pos, + gint size, + gdouble c1, + gdouble c2, + CML_PARAM *param, + gdouble aux); +static gdouble logistic_function (CML_PARAM *param, + gdouble x, + gdouble power); -static gint CML_explorer_dialog (void); -static GtkWidget * CML_dialog_channel_panel_new (CML_PARAM *param, - gint channel_id); -static GtkWidget * CML_dialog_advanced_panel_new (void); +static gint CML_explorer_dialog (PikaProcedureConfig *config); +static GtkWidget * CML_dialog_channel_panel_new (CML_PARAM *param, + gint channel_id); +static GtkWidget * CML_dialog_advanced_panel_new (void); -static void CML_explorer_toggle_entry_init (WidgetEntry *widget_entry, - GtkWidget *widget, - gpointer value_ptr); +static void CML_explorer_toggle_entry_init (WidgetEntry *widget_entry, + GtkWidget *widget, + gpointer value_ptr); -static void CML_explorer_int_entry_init (WidgetEntry *widget_entry, - GtkWidget *scale, - gpointer value_ptr); +static void CML_explorer_int_entry_init (WidgetEntry *widget_entry, + GtkWidget *scale, + gpointer value_ptr); -static void CML_explorer_double_entry_init (WidgetEntry *widget_entry, - GtkWidget *scale, - gpointer value_ptr); +static void CML_explorer_double_entry_init (WidgetEntry *widget_entry, + GtkWidget *scale, + gpointer value_ptr); -static void CML_explorer_menu_update (GtkWidget *widget, - gpointer data); -static void CML_initial_value_menu_update (GtkWidget *widget, - gpointer data); -static void CML_explorer_menu_entry_init (WidgetEntry *widget_entry, - GtkWidget *widget, - gpointer value_ptr); +static void CML_explorer_menu_update (GtkWidget *widget, + gpointer data); +static void CML_initial_value_menu_update (GtkWidget *widget, + gpointer data); +static void CML_explorer_menu_entry_init (WidgetEntry *widget_entry, + GtkWidget *widget, + gpointer value_ptr); static void preview_update (void); -static void function_graph_new (GtkWidget *widget, - gpointer *data); -static void CML_set_or_randomize_seed_callback (GtkWidget *widget, - gpointer data); -static void CML_copy_parameters_callback (GtkWidget *widget, - gpointer data); +static void function_graph_new (GtkWidget *widget, + gpointer *data); +static void CML_set_or_randomize_seed_callback (GtkWidget *widget, + gpointer data); +static void CML_copy_parameters_callback (GtkWidget *widget, + gpointer data); static void CML_initial_value_sensitives_update (void); -static void CML_save_to_file_callback (GtkWidget *widget, - gpointer data); -static void CML_save_to_file_response (GtkWidget *dialog, - gint response_id, - gpointer data); +static void CML_save_to_file_callback (GtkWidget *widget, + PikaProcedureConfig *config); +static void CML_save_to_file_response (GtkWidget *dialog, + gint response_id, + PikaProcedureConfig *config); -static void CML_preview_update_callback (GtkWidget *widget, - gpointer data); -static void CML_load_from_file_callback (GtkWidget *widget, - gpointer data); -static gboolean CML_load_parameter_file (const gchar *filename, - gboolean interactive_mode); -static void CML_load_from_file_response (GtkWidget *dialog, - gint response_id, - gpointer data); -static gint parse_line_to_gint (FILE *file, - gboolean *flag); -static gdouble parse_line_to_gdouble (FILE *file, - gboolean *flag); +static void CML_preview_update_callback (GtkWidget *widget, + gpointer data); +static void CML_load_from_file_callback (GtkWidget *widget, + PikaProcedureConfig *config); +static gboolean CML_load_parameter_file (GFile *file, + gboolean interactive_mode, + PikaProcedureConfig *config, + GError **error); +static void CML_load_from_file_response (GtkWidget *dialog, + gint response_id, + PikaProcedureConfig *config); +static gint parse_line_to_gint (GDataInputStream *input, + gboolean *flag, + GError **error); +static gdouble parse_line_to_gdouble (GDataInputStream *input, + gboolean *flag, + GError **error); G_DEFINE_TYPE (Explorer, explorer, PIKA_TYPE_PLUG_IN) @@ -516,14 +518,14 @@ explorer_create_procedure (PikaPlugIn *plug_in, pika_procedure_set_documentation (procedure, _("Create abstract Coupled-Map " "Lattice patterns"), - "Make an image of Coupled-Map Lattice " - "(CML). CML is a kind of Cellula " - "Automata on continuous (value) " - "domain. In PIKA_RUN_NONINTERACTIVE, " - "the name of a parameter file is " - "passed as the 4th arg. You can " - "control CML_explorer via parameter " - "file.", + _("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 of a parameter file is " + "passed as the 4th arg. You can " + "control CML_explorer via parameter " + "file."), /* Or do you want to call me * with over 50 args? */ @@ -534,12 +536,16 @@ explorer_create_procedure (PikaPlugIn *plug_in, "Shuji Narazaki", "1997"); - PIKA_PROC_ARG_STRING (procedure, "parameter-uri", - "Parameter UTI", - "The local file:// URI of parameter file. " - "CML_explorer makes an image with its settings.", - NULL, - G_PARAM_READWRITE); + PIKA_PROC_ARG_FILE (procedure, "parameter-file", + _("Parameter File"), + _("The parameter file from which CML_explorer makes an image. " + "This argument is only used in non-interactive runs."), + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_BYTES (procedure, "settings-data", + "Settings data", + "TODO: eventually we must implement proper args for every settings", + PIKA_PARAM_READWRITE); } return procedure; @@ -551,13 +557,14 @@ explorer_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { + GBytes *settings_bytes = NULL; + GError *error = NULL; + if (n_drawables != 1) { - GError *error = NULL; - g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, _("Procedure '%s' only works with one drawable."), PLUG_IN_PROC); @@ -571,12 +578,22 @@ explorer_run (PikaProcedure *procedure, drawable = drawables[0]; } + gegl_init (NULL, NULL); + + /* Temporary code replacing legacy pika_[gs]et_data() using an AUX argument. + * This doesn't actually fix the "Reset to initial values|factory defaults" + * features, but at least makes per-run value storage work. + * TODO: eventually we want proper separate arguments as a complete fix. + */ + g_object_get (config, "settings-data", &settings_bytes, NULL); + if (settings_bytes != NULL && g_bytes_get_size (settings_bytes) == sizeof (ValueType)) + VALS = *((ValueType *) g_bytes_get_data (settings_bytes, NULL)); + g_bytes_unref (settings_bytes); + switch (run_mode) { case PIKA_RUN_INTERACTIVE: - pika_get_data (PLUG_IN_PROC, &VALS); - - if (! CML_explorer_dialog ()) + if (! CML_explorer_dialog (config)) return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, NULL); @@ -584,16 +601,30 @@ explorer_run (PikaProcedure *procedure, case PIKA_RUN_NONINTERACTIVE: { - const gchar *uri = PIKA_VALUES_GET_STRING (args, 0); - GFile *file = g_file_new_for_uri (uri); + GFile *file = NULL; - if (! CML_load_parameter_file (g_file_peek_path (file), FALSE)) + g_object_get (config, + "parameter-file", &file, + NULL); + + if (file == NULL) + { + g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, + "Procedure '%s' requires \"parameter-file\" argument " + "in non-interactive runs.", + PLUG_IN_PROC); + + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CALLING_ERROR, + error); + } + else if (! CML_load_parameter_file (file, FALSE, config, &error)) { g_object_unref (file); return pika_procedure_new_return_values (procedure, PIKA_PDB_CALLING_ERROR, - NULL); + error); } g_object_unref (file); @@ -601,7 +632,6 @@ explorer_run (PikaProcedure *procedure, break; case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (PLUG_IN_PROC, &VALS); break; } @@ -609,9 +639,6 @@ explorer_run (PikaProcedure *procedure, { if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush(); - - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &VALS, sizeof (ValueType)); } else { @@ -620,6 +647,10 @@ explorer_run (PikaProcedure *procedure, NULL); } + settings_bytes = g_bytes_new (&VALS, sizeof (ValueType)); + g_object_set (config, "settings-data", settings_bytes, NULL); + g_bytes_unref (settings_bytes); + g_free (mem_chank0); g_free (mem_chank1); g_free (mem_chank2); @@ -1333,7 +1364,7 @@ logistic_function (CML_PARAM *param, /* dialog stuff */ static gint -CML_explorer_dialog (void) +CML_explorer_dialog (PikaProcedureConfig *config) { GtkWidget *dialog; GtkWidget *hbox; @@ -1432,7 +1463,7 @@ CML_explorer_dialog (void) g_signal_connect (button, "clicked", G_CALLBACK (CML_load_from_file_callback), - &VALS); + config); button = gtk_button_new_with_mnemonic (_("_Save")); gtk_container_add (GTK_CONTAINER (bbox), button); @@ -1440,7 +1471,7 @@ CML_explorer_dialog (void) g_signal_connect (button, "clicked", G_CALLBACK (CML_save_to_file_callback), - &VALS); + config); { GtkWidget *notebook; @@ -2103,10 +2134,11 @@ CML_preview_update_callback (GtkWidget *widget, /* parameter file saving functions */ static void -CML_save_to_file_callback (GtkWidget *widget, - gpointer data) +CML_save_to_file_callback (GtkWidget *widget, + PikaProcedureConfig *config) { static GtkWidget *dialog = NULL; + GFile *file = NULL; if (! dialog) { @@ -2131,27 +2163,38 @@ CML_save_to_file_callback (GtkWidget *widget, g_signal_connect (dialog, "response", G_CALLBACK (CML_save_to_file_response), - NULL); + config); g_signal_connect (dialog, "delete-event", G_CALLBACK (gtk_true), NULL); } - if (strlen (VALS.last_file_name)) - gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), - VALS.last_file_name); + g_object_get (config, "parameter-file", &file, NULL); + if (file != NULL) + { + GError *error = NULL; + + gtk_file_chooser_set_file (GTK_FILE_CHOOSER (dialog), file, &error); + if (error != NULL) + g_printerr ("%s: failed to set file '%s'.\n", PLUG_IN_PROC, + g_file_peek_path (file)); + g_clear_error (&error); + } + g_clear_object (&file); gtk_window_present (GTK_WINDOW (dialog)); } static void -CML_save_to_file_response (GtkWidget *dialog, - gint response_id, - gpointer data) +CML_save_to_file_response (GtkWidget *dialog, + gint response_id, + PikaProcedureConfig *config) { - gchar *filename; - FILE *file; - gint channel_id; + GFile *file; + GFileOutputStream *fstream; + GOutputStream *output; + GError *error = NULL; + gint channel_id; if (response_id != GTK_RESPONSE_OK) { @@ -2159,23 +2202,37 @@ CML_save_to_file_response (GtkWidget *dialog, return; } - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - if (! filename) + file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + if (! file) return; - file = g_fopen (filename, "wb"); + fstream = g_file_replace (file, NULL, FALSE, + G_FILE_CREATE_REPLACE_DESTINATION, + NULL, &error); + output = G_OUTPUT_STREAM (fstream); - if (! file) + if (error != NULL) { g_message (_("Could not open '%s' for writing: %s"), - pika_filename_to_utf8 (filename), g_strerror (errno)); - g_free (filename); + g_file_peek_path (file), error->message); + g_object_unref (file); + g_clear_error (&error); return; } - fprintf (file, "; This is a parameter file for CML_explorer\n"); - fprintf (file, "; File format version: %1.1f\n", PARAM_FILE_FORMAT_VERSION); - fprintf (file, ";\n"); + if (! g_output_stream_printf (output, NULL, NULL, &error, + "; This is a parameter file for CML_explorer\n") || + ! g_output_stream_printf (output, NULL, NULL, &error, + "; File format version: %1.1f\n", PARAM_FILE_FORMAT_VERSION) || + ! g_output_stream_printf (output, NULL, NULL, &error, ";\n")) + { + g_message (_("Could not write to '%s': %s"), + g_file_peek_path (file), error->message); + g_object_unref (file); + g_clear_error (&error); + g_object_unref (fstream); + return; + } for (channel_id = 0; channel_id < 3; channel_id++) { @@ -2183,52 +2240,103 @@ CML_save_to_file_response (GtkWidget *dialog, CML_PARAM param = *(CML_PARAM *)(channel_params[channel_id]); - fprintf (file, "\t%s\n", channel_names[channel_id]); - fprintf (file, "Function_type : %d (%s)\n", - param.function, function_names[param.function]); - fprintf (file, "Compostion_type : %d (%s)\n", - param.composition, composition_names[param.composition]); - fprintf (file, "Arrange : %d (%s)\n", - param.arrange, arrange_names[param.arrange]); - fprintf (file, "Cyclic_range : %d (%s)\n", - param.cyclic_range, (param.cyclic_range ? "TRUE" : "FALSE")); - fprintf (file, "Mod. rate : %s\n", - g_ascii_dtostr (buf, sizeof (buf), param.mod_rate)); - fprintf (file, "Env_sensitivtiy : %s\n", - g_ascii_dtostr (buf, sizeof (buf), param.env_sensitivity)); - fprintf (file, "Diffusion dist. : %d\n", param.diffusion_dist); - fprintf (file, "Ch. sensitivity : %s\n", - g_ascii_dtostr (buf, sizeof (buf), param.ch_sensitivity)); - fprintf (file, "Num. of Subranges: %d\n", param.range_num); - fprintf (file, "Power_factor : %s\n", - g_ascii_dtostr (buf, sizeof (buf), param.power)); - fprintf (file, "Parameter_k : %s\n", - g_ascii_dtostr (buf, sizeof (buf), param.parameter_k)); - fprintf (file, "Range_low : %s\n", - g_ascii_dtostr (buf, sizeof (buf), param.range_l)); - fprintf (file, "Range_high : %s\n", - g_ascii_dtostr (buf, sizeof (buf), param.range_h)); - fprintf (file, "Mutation_rate : %s\n", - g_ascii_dtostr (buf, sizeof (buf), param.mutation_rate)); - fprintf (file, "Mutation_distance: %s\n", - g_ascii_dtostr (buf, sizeof (buf), param.mutation_dist)); + if (! g_output_stream_printf (output, NULL, NULL, &error, + "\t%s\n", channel_names[channel_id])) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Function_type : %d (%s)\n", + param.function, function_names[param.function])) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Compostion_type : %d (%s)\n", + param.composition, composition_names[param.composition])) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Arrange : %d (%s)\n", + param.arrange, arrange_names[param.arrange])) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Cyclic_range : %d (%s)\n", + param.cyclic_range, (param.cyclic_range ? "TRUE" : "FALSE"))) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Mod. rate : %s\n", + g_ascii_dtostr (buf, sizeof (buf), param.mod_rate))) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Env_sensitivtiy : %s\n", + g_ascii_dtostr (buf, sizeof (buf), param.env_sensitivity))) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Diffusion dist. : %d\n", param.diffusion_dist)) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Ch. sensitivity : %s\n", + g_ascii_dtostr (buf, sizeof (buf), param.ch_sensitivity))) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Num. of Subranges: %d\n", param.range_num)) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Power_factor : %s\n", + g_ascii_dtostr (buf, sizeof (buf), param.power))) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Parameter_k : %s\n", + g_ascii_dtostr (buf, sizeof (buf), param.parameter_k))) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Range_low : %s\n", + g_ascii_dtostr (buf, sizeof (buf), param.range_l))) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Range_high : %s\n", + g_ascii_dtostr (buf, sizeof (buf), param.range_h))) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Mutation_rate : %s\n", + g_ascii_dtostr (buf, sizeof (buf), param.mutation_rate))) + break; + if (! g_output_stream_printf (output, NULL, NULL, &error, + "Mutation_distance: %s\n", + g_ascii_dtostr (buf, sizeof (buf), param.mutation_dist))) + break; } - fprintf (file, "\n"); - fprintf (file, "Initial value : %d (%s)\n", - VALS.initial_value, initial_value_names[VALS.initial_value]); - fprintf (file, "Zoom scale : %d\n", VALS.scale); - fprintf (file, "Start offset : %d\n", VALS.start_offset); - fprintf (file, "Random seed : %d\n", VALS.seed); - fclose(file); + if (error != NULL) + { + g_message (_("Could not write to '%s': %s"), + g_file_peek_path (file), error->message); + g_object_unref (file); + g_clear_error (&error); + g_object_unref (fstream); + return; + } - g_message (_("Parameters were saved to '%s'"), - pika_filename_to_utf8 (filename)); + if (! g_output_stream_printf (output, NULL, NULL, &error, "\n") || + ! g_output_stream_printf (output, NULL, NULL, &error, + "Initial value : %d (%s)\n", VALS.initial_value, initial_value_names[VALS.initial_value]) || + ! g_output_stream_printf (output, NULL, NULL, &error, + "Zoom scale : %d\n", VALS.scale) || + ! g_output_stream_printf (output, NULL, NULL, &error, + "Start offset : %d\n", VALS.start_offset) || + ! g_output_stream_printf (output, NULL, NULL, &error, + "Random seed : %d\n", VALS.seed)) + { + g_message (_("Could not write to '%s': %s"), + g_file_peek_path (file), error->message); + g_object_unref (file); + g_clear_error (&error); + g_object_unref (fstream); + return; + } + g_object_unref (fstream); - g_strlcpy (VALS.last_file_name, filename, - sizeof (VALS.last_file_name)); + g_message (_("Parameters were saved to '%s'"), g_file_peek_path (file)); - g_free (filename); + g_object_set (config, "parameter-file", file, NULL); + + g_clear_object (&file); gtk_widget_hide (dialog); } @@ -2236,10 +2344,11 @@ CML_save_to_file_response (GtkWidget *dialog, /* parameter file loading functions */ static void -CML_load_from_file_callback (GtkWidget *widget, - gpointer data) +CML_load_from_file_callback (GtkWidget *widget, + PikaProcedureConfig *config) { static GtkWidget *dialog = NULL; + GFile *file = NULL; if (! dialog) { @@ -2262,36 +2371,50 @@ CML_load_from_file_callback (GtkWidget *widget, g_signal_connect (dialog, "response", G_CALLBACK (CML_load_from_file_response), - NULL); + config); g_signal_connect (dialog, "delete-event", G_CALLBACK (gtk_true), NULL); } - if (strlen (VALS.last_file_name) > 0) - gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), - VALS.last_file_name); + g_object_get (config, "parameter-file", &file, NULL); + if (file != NULL) + { + GError *error = NULL; + + gtk_file_chooser_set_file (GTK_FILE_CHOOSER (dialog), file, &error); + if (error != NULL) + g_printerr ("%s: failed to set file '%s'.\n", PLUG_IN_PROC, + g_file_peek_path (file)); + g_clear_error (&error); + } + g_clear_object (&file); gtk_window_present (GTK_WINDOW (dialog)); } static void -CML_load_from_file_response (GtkWidget *dialog, - gint response_id, - gpointer data) +CML_load_from_file_response (GtkWidget *dialog, + gint response_id, + PikaProcedureConfig *config) { if (response_id == GTK_RESPONSE_OK) { - gchar *filename; + GFile *file = NULL; gint channel_id; gboolean flag = TRUE; + GError *error = NULL; - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); - gtk_widget_set_sensitive (dialog, FALSE); - flag = CML_load_parameter_file (filename, TRUE); + flag = CML_load_parameter_file (file, TRUE, config, &error); - g_free (filename); + if (error != NULL) + g_printerr ("%s: loading file '%s' failed: %s\n", PLUG_IN_PROC, + g_file_peek_path (file), error->message); + + g_clear_error (&error); + g_clear_object (&file); if (flag) { @@ -2323,114 +2446,124 @@ CML_load_from_file_response (GtkWidget *dialog, } static gboolean -CML_load_parameter_file (const gchar *filename, - gboolean interactive_mode) +CML_load_parameter_file (GFile *file, + gboolean interactive_mode, + PikaProcedureConfig *config, + GError **error) { - FILE *file; - gint channel_id; - gboolean flag = TRUE; - CML_PARAM ch[3]; - gint initial_value = 0; - gint scale = 1; - gint start_offset = 0; - gint seed = 0; - gint old2new_function_id[] = { 3, 4, 5, 6, 7, 9, 10, 11, 1, 2 }; + GIOStream *iostream; + GDataInputStream *input; + gint channel_id; + gboolean flag = TRUE; + CML_PARAM ch[3]; + gint initial_value = 0; + gint scale = 1; + gint start_offset = 0; + gint seed = 0; + gint old2new_function_id[] = { 3, 4, 5, 6, 7, 9, 10, 11, 1, 2 }; + gdouble version = 0.99; - file = g_fopen (filename, "rb"); + iostream = G_IO_STREAM (g_file_open_readwrite (file, NULL, error)); - if (!file) + if (iostream == NULL) + return FALSE; + + input = g_data_input_stream_new (g_io_stream_get_input_stream (iostream)); + + version = parse_line_to_gdouble (input, &flag, error); /* old format returns 1 */ + if (version == 1.0) { - g_message (_("Could not open '%s' for reading: %s"), - pika_filename_to_utf8 (filename), g_strerror (errno)); + version = 0.99; + } + else if (! flag) + { + flag = TRUE; + g_clear_error (error); + version = parse_line_to_gdouble (input, &flag, error); /* maybe new format */ + if (flag) + /* one more comment line */ + g_free (g_data_input_stream_read_line (input, NULL, NULL, NULL)); + } + if (version == 0) + { + if (interactive_mode) + g_message (_("Error: \"%s\" is not a CML parameter file."), g_file_peek_path (file)); + g_object_unref (iostream); return FALSE; } - else + if (interactive_mode) { - gchar line[CML_LINE_SIZE]; - gdouble version = 0.99; + if (version < PARAM_FILE_FORMAT_VERSION) + g_message (_("Warning: '%s' is an old format file."), + g_file_peek_path (file)); - version = parse_line_to_gdouble (file, &flag); /* old format returns 1 */ - if (version == 1.0) - version = 0.99; - else if (! flag) - { - flag = TRUE; - version = parse_line_to_gdouble (file, &flag); /* maybe new format */ - if (flag) - fgets (line, CML_LINE_SIZE - 1, file); /* one more comment line */ - } - if (version == 0) - { - if (interactive_mode) - pika_message (_("Error: it's not CML parameter file.")); - fclose(file); - return FALSE; - } - if (interactive_mode) - { - if (version < PARAM_FILE_FORMAT_VERSION) - g_message (_("Warning: '%s' is an old format file."), - pika_filename_to_utf8 (filename)); + if (PARAM_FILE_FORMAT_VERSION < version) + g_message (_("Warning: '%s' is a parameter file for a newer " + "version of CML Explorer."), + g_file_peek_path (file)); + } + for (channel_id = 0; flag && (channel_id < 3); channel_id++) + { + gchar *line; - if (PARAM_FILE_FORMAT_VERSION < version) - g_message (_("Warning: '%s' is a parameter file for a newer " - "version of CML Explorer."), - pika_filename_to_utf8 (filename)); - } - for (channel_id = 0; flag && (channel_id < 3); channel_id++) + /* patched by Tim Mooney */ + /* skip channel name */ + line = g_data_input_stream_read_line (input, NULL, NULL, NULL); + if (line == NULL) { - /* patched by Tim Mooney */ - if (fgets (line, CML_LINE_SIZE - 1, file) == NULL) /* skip channel name */ - { - flag = FALSE; - break; - } - ch[channel_id].function = parse_line_to_gint (file, &flag); - if (version < 1.0) - ch[channel_id].function = old2new_function_id [ch[channel_id].function]; - if (1.0 <= version) - ch[channel_id].composition = parse_line_to_gint (file, &flag); - else - ch[channel_id].composition = COMP_NONE; - ch[channel_id].arrange = parse_line_to_gint (file, &flag); - ch[channel_id].cyclic_range = parse_line_to_gint (file, &flag); - ch[channel_id].mod_rate = parse_line_to_gdouble (file, &flag); - ch[channel_id].env_sensitivity = parse_line_to_gdouble (file, &flag); - if (1.0 <= version) - ch[channel_id].diffusion_dist = parse_line_to_gint (file, &flag); - else - ch[channel_id].diffusion_dist = 2; - ch[channel_id].ch_sensitivity = parse_line_to_gdouble (file, &flag); - ch[channel_id].range_num = parse_line_to_gint (file, &flag); - ch[channel_id].power = parse_line_to_gdouble (file, &flag); - ch[channel_id].parameter_k = parse_line_to_gdouble (file, &flag); - ch[channel_id].range_l = parse_line_to_gdouble (file, &flag); - ch[channel_id].range_h = parse_line_to_gdouble (file, &flag); - ch[channel_id].mutation_rate = parse_line_to_gdouble (file, &flag); - ch[channel_id].mutation_dist = parse_line_to_gdouble (file, &flag); + flag = FALSE; + break; } - if (flag) - { - gint dummy; + ch[channel_id].function = parse_line_to_gint (input, &flag, error); + if (version < 1.0) + ch[channel_id].function = old2new_function_id [ch[channel_id].function]; + if (1.0 <= version) + ch[channel_id].composition = parse_line_to_gint (input, &flag, error); + else + ch[channel_id].composition = COMP_NONE; + ch[channel_id].arrange = parse_line_to_gint (input, &flag, error); + ch[channel_id].cyclic_range = parse_line_to_gint (input, &flag, error); + ch[channel_id].mod_rate = parse_line_to_gdouble (input, &flag, error); + ch[channel_id].env_sensitivity = parse_line_to_gdouble (input, &flag, error); + if (1.0 <= version) + ch[channel_id].diffusion_dist = parse_line_to_gint (input, &flag, error); + else + ch[channel_id].diffusion_dist = 2; + ch[channel_id].ch_sensitivity = parse_line_to_gdouble (input, &flag, error); + ch[channel_id].range_num = parse_line_to_gint (input, &flag, error); + ch[channel_id].power = parse_line_to_gdouble (input, &flag, error); + ch[channel_id].parameter_k = parse_line_to_gdouble (input, &flag, error); + ch[channel_id].range_l = parse_line_to_gdouble (input, &flag, error); + ch[channel_id].range_h = parse_line_to_gdouble (input, &flag, error); + ch[channel_id].mutation_rate = parse_line_to_gdouble (input, &flag, error); + ch[channel_id].mutation_dist = parse_line_to_gdouble (input, &flag, error); + } + if (flag) + { + gchar *line; + gboolean dummy = TRUE; - if (fgets (line, CML_LINE_SIZE - 1, file) == NULL) /* skip a line */ - dummy = 1; - else - { - initial_value = parse_line_to_gint (file, &dummy); - scale = parse_line_to_gint (file, &dummy); - start_offset = parse_line_to_gint (file, &dummy); - seed = parse_line_to_gint (file, &dummy); - } - if (! dummy) - { - initial_value = 0; - scale = 1; - start_offset = 0; - seed = 0; - } + /* skip a line */ + line = g_data_input_stream_read_line (input, NULL, NULL, NULL); + if (line == NULL) + { + dummy = FALSE; + } + else + { + g_free (line); + initial_value = parse_line_to_gint (input, &dummy, error); + scale = parse_line_to_gint (input, &dummy, error); + start_offset = parse_line_to_gint (input, &dummy, error); + seed = parse_line_to_gint (input, &dummy, error); + } + if (! dummy) + { + initial_value = 0; + scale = 1; + start_offset = 0; + seed = 0; } - fclose (file); } if (! flag) @@ -2458,69 +2591,103 @@ CML_load_parameter_file (const gchar *filename, sizeof (CML_PARAM)); } - g_strlcpy (VALS.last_file_name, filename, - sizeof (VALS.last_file_name)); + g_object_set (config, "parameter-file", file, NULL); } + + g_object_unref (input); + g_object_unref (iostream); return flag; } static gint -parse_line_to_gint (FILE *file, - gboolean *flag) +parse_line_to_gint (GDataInputStream *input, + gboolean *flag, + GError **error) { - gchar line[CML_LINE_SIZE]; + gint i; + gchar *line; gchar *str; + gsize read; if (! *flag) return 0; - if (fgets (line, CML_LINE_SIZE - 1, file) == NULL) - { - *flag = FALSE; /* set FALSE if fail to parse */ - return 0; - } - str = &line[0]; - while (*str != ':') - if (*str == '\000') - { - *flag = FALSE; - return 0; - } - else - { - str++; - } - return atoi (str + 1); + line = g_data_input_stream_read_line (input, &read, NULL, error); + if (line == NULL) + { + /* set FALSE if fail to parse */ + *flag = FALSE; + return 0.0; + } + + line[read] = '\0'; + str = line; + while (read > 1 && *str != ':') + { + str++; + read--; + } + + if (read == 1) + { + g_set_error (error, PIKA_PLUG_IN_ERROR, 0, + "%s: invalid line in the CML file: %s", + PLUG_IN_PROC, line); + *flag = FALSE; + g_free (line); + return 0.0; + } + + i = atoi (str + 1); + g_free (line); + + return i; } static gdouble -parse_line_to_gdouble (FILE *file, - gboolean *flag) +parse_line_to_gdouble (GDataInputStream *input, + gboolean *flag, + GError **error) { - gchar line[CML_LINE_SIZE]; + gdouble d; + gchar *line; gchar *str; + gsize read; if (! *flag) return 0.0; - if (fgets (line, CML_LINE_SIZE - 1, file) == NULL) + line = g_data_input_stream_read_line (input, &read, NULL, error); + + if (line == NULL) { - *flag = FALSE; /* set FALSE if fail to parse */ + /* set FALSE if fail to parse */ + *flag = FALSE; return 0.0; } - str = &line[0]; - while (*str != ':') - if (*str == '\000') - { - *flag = FALSE; - return 0.0; - } - else - { - str++; - } - return g_ascii_strtod (str + 1, NULL); + line[read] = '\0'; + str = line; + while (read > 1 && *str != ':') + { + str++; + read--; + } + + if (read == 1) + { + g_set_error (error, PIKA_PLUG_IN_ERROR, 0, + "%s: invalid line in the CML file: %s", + PLUG_IN_PROC, line); + *flag = FALSE; + g_free (line); + return 0.0; + } + + d = g_ascii_strtod (str + 1, NULL); + g_free (line); + + return d; } diff --git a/plug-ins/common/colormap-remap.c b/plug-ins/common/colormap-remap.c index d7a1e0c..fb8b328 100644 --- a/plug-ins/common/colormap-remap.c +++ b/plug-ins/common/colormap-remap.c @@ -77,7 +77,7 @@ static PikaValueArray * remap_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gboolean real_remap (PikaImage *image, @@ -194,10 +194,10 @@ remap_create_procedure (PikaPlugIn *plug_in, pika_procedure_set_documentation (procedure, _("Rearrange the colormap"), - "This procedure takes an indexed " - "image and lets you alter the " - "positions of colors in the colormap " - "without visually changing the image.", + _("This procedure takes an indexed " + "image and lets you alter the " + "positions of colors in the colormap " + "without visually changing the image."), name); pika_procedure_set_attribution (procedure, "Mukund Sivaraman ", @@ -205,8 +205,8 @@ remap_create_procedure (PikaPlugIn *plug_in, "June 2006"); PIKA_PROC_ARG_BYTES (procedure, "map", - "Map", - "Remap array for the colormap", + _("Map"), + _("Remap array for the colormap"), G_PARAM_READWRITE); } else if (! strcmp (name, PLUG_IN_PROC_SWAP)) @@ -226,11 +226,11 @@ remap_create_procedure (PikaPlugIn *plug_in, pika_procedure_set_documentation (procedure, _("Swap two colors in the colormap"), - "This procedure takes an indexed " - "image and lets you swap the " - "positions of two colors in the " - "colormap without visually changing " - "the image.", + _("This procedure takes an indexed " + "image and lets you swap the " + "positions of two colors in the " + "colormap without visually changing " + "the image."), name); pika_procedure_set_attribution (procedure, "Mukund Sivaraman ", @@ -238,14 +238,14 @@ remap_create_procedure (PikaPlugIn *plug_in, "June 2006"); PIKA_PROC_ARG_INT (procedure, "index1", - "Index 1", - "First index in the colormap", + _("Index 1"), + _("First index in the colormap"), 0, 255, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "index2", - "Index 2", - "Second (other) index in the colormap", + _("Index 2"), + _("Second (other) index in the colormap"), 0, 255, 0, G_PARAM_READWRITE); } @@ -259,7 +259,7 @@ remap_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { GMenu *section; @@ -309,8 +309,11 @@ remap_run (PikaProcedure *procedure, g_free (pika_image_get_colormap (image, NULL, &remap->n_cols)); - col_args_bytes = PIKA_VALUES_GET_BYTES (args, 0); - col_args = g_bytes_get_data (col_args_bytes, NULL); + g_object_get (config, + "map", &col_args_bytes, + NULL); + + col_args = g_bytes_get_data (col_args_bytes, NULL); switch (run_mode) { @@ -336,7 +339,6 @@ remap_run (PikaProcedure *procedure, break; case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (PLUG_IN_PROC_REMAP, remap->map); break; } @@ -345,19 +347,21 @@ remap_run (PikaProcedure *procedure, PIKA_PDB_EXECUTION_ERROR, NULL); - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC_REMAP, remap->map, sizeof (remap->map)); - if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); } else if (strcmp (pika_procedure_get_name (procedure), PLUG_IN_PROC_SWAP) == 0) { - gint index1 = PIKA_VALUES_GET_INT (args, 0); - gint index2 = PIKA_VALUES_GET_INT (args, 1); guchar tmp; gint n_cols; + gint index1; + gint index2; + + g_object_get (config, + "index1", &index1, + "index2", &index2, + NULL); if (run_mode != PIKA_RUN_NONINTERACTIVE) return pika_procedure_new_return_values (procedure, @@ -581,23 +585,26 @@ remap_sort (GtkTreeSortable *store, GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, 0); } -static void remap_sort_hue_action (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +static void +remap_sort_hue_action (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { remap_sort (GTK_TREE_SORTABLE (store), COLOR_H, GTK_SORT_ASCENDING); } -static void remap_sort_sat_action (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +static void +remap_sort_sat_action (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { remap_sort (GTK_TREE_SORTABLE (store), COLOR_S, GTK_SORT_ASCENDING); } -static void remap_sort_val_action (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +static void +remap_sort_val_action (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { remap_sort (GTK_TREE_SORTABLE (store), COLOR_V, GTK_SORT_ASCENDING); } @@ -646,9 +653,9 @@ remap_button_press (GtkWidget *widget, } static void -remap_response (GtkWidget *dialog, - gint response_id, - PikaRemap *remap) +remap_response (GtkWidget *dialog, + gint response_id, + PikaRemap *remap) { switch (response_id) { @@ -694,10 +701,10 @@ remap_dialog (PikaImage *image, NULL); pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - RESPONSE_RESET, - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); + RESPONSE_RESET, + GTK_RESPONSE_OK, + GTK_RESPONSE_CANCEL, + -1); pika_window_set_transient (GTK_WINDOW (dialog)); diff --git a/plug-ins/common/compose.c b/plug-ins/common/compose.c index 58ecce1..842ff9b 100644 --- a/plug-ins/common/compose.c +++ b/plug-ins/common/compose.c @@ -130,7 +130,7 @@ struct _ComposeClass #define COMPOSE_TYPE (compose_get_type ()) -#define COMPOSE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COMPOSE_TYPE, Compose)) +#define COMPOSE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COMPOSE_TYPE, Compose)) GType compose_get_type (void) G_GNUC_CONST; @@ -143,56 +143,58 @@ static PikaValueArray * compose_run (PikaProcedure *procedur PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static void cpn_affine_transform (GeglBuffer *buffer, - gdouble min, - gdouble max); +static void cpn_affine_transform (GeglBuffer *buffer, + gdouble min, + gdouble max); -static void fill_buffer_from_components (GeglBuffer *temp[MAX_COMPOSE_IMAGES], - GeglBuffer *dst, - gint num_cpn, - ComposeInput *inputs, - gdouble mask_vals[MAX_COMPOSE_IMAGES]); +static void fill_buffer_from_components (GeglBuffer *temp[MAX_COMPOSE_IMAGES], + GeglBuffer *dst, + gint num_cpn, + ComposeInput *inputs, + gdouble mask_vals[MAX_COMPOSE_IMAGES]); -static void perform_composition (COMPOSE_DSC curr_compose_dsc, - GeglBuffer *buffer_src[MAX_COMPOSE_IMAGES], - GeglBuffer *buffer_dst, - ComposeInput *inputs, - gint num_images); +static void perform_composition (COMPOSE_DSC curr_compose_dsc, + GeglBuffer *buffer_src[MAX_COMPOSE_IMAGES], + GeglBuffer *buffer_dst, + ComposeInput *inputs, + gint num_images); -static PikaImage * compose (const gchar *compose_type, - ComposeInput *inputs, - gboolean compose_by_drawable); +static PikaImage * compose (const gchar *compose_type, + ComposeInput *inputs, + gboolean compose_by_drawable, + PikaProcedureConfig *config); -static PikaImage * create_new_image (GFile *file, - guint width, - guint height, - PikaImageType gdtype, - PikaPrecision precision, - PikaLayer **layer, - GeglBuffer **buffer); +static PikaImage * create_new_image (GFile *file, + guint width, + guint height, + PikaImageType gdtype, + PikaPrecision precision, + PikaLayer **layer, + GeglBuffer **buffer); -static gboolean compose_dialog (const gchar *compose_type, - PikaDrawable *drawable); +static gboolean compose_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + const gchar *compose_type, + PikaDrawable *drawable); -static gboolean check_gray (PikaImage *image, - PikaItem *drawable, - gpointer data); +static gboolean check_gray (PikaImage *image, + PikaItem *drawable, + gpointer data); -static void combo_callback (PikaIntComboBox *cbox, - gpointer data); +static void combo_callback (PikaIntComboBox *cbox, + gpointer data); -static void scale_callback (PikaLabelSpin *scale, - ComposeInput *input); +static void scale_callback (PikaLabelSpin *scale, + ComposeInput *input); -static void check_response (GtkWidget *dialog, - gint response, - gpointer data); +static void check_response (GtkWidget *dialog, + gint response, + gpointer data); -static void type_combo_callback (PikaIntComboBox *combo, - gpointer data); +static void type_combo_callback (PikaProcedureConfig *config); G_DEFINE_TYPE (Compose, compose, PIKA_TYPE_PLUG_IN) @@ -408,8 +410,8 @@ compose_create_procedure (PikaPlugIn *plug_in, pika_procedure_set_documentation (procedure, _("Create an image using multiple " "gray images as color channels"), - "This function creates a new image from " - "multiple gray images", + _("This function creates a new image from " + "multiple gray images"), name); pika_procedure_set_attribution (procedure, "Peter Kirchgessner", @@ -417,32 +419,44 @@ compose_create_procedure (PikaPlugIn *plug_in, "1997"); PIKA_PROC_ARG_IMAGE (procedure, "image-2", - "Image 2", - "Second input image", + _("Image 2"), + _("Second input image"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_IMAGE (procedure, "image-3", - "Image 3", - "Third input image", + _("Image 3"), + _("Third input image"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_IMAGE (procedure, "image-4", - "Image 4", - "Fourth input image", + _("Image 4"), + _("Fourth input image"), TRUE, G_PARAM_READWRITE); - PIKA_PROC_ARG_STRING (procedure, "compose-type", - "Compose type", + PIKA_PROC_ARG_CHOICE (procedure, "compose-type", + _("Color _model"), type_desc->str, - "RGB", + pika_choice_new_with_values ("rgb", 0, _("RGB"), NULL, + "rgba", 1, _("RGBA"), NULL, + "hsv", 2, _("HSV"), NULL, + "hsl", 3, _("HSL"), NULL, + "cmyk", 4, _("CMYK"), NULL, + "lab", 5, _("LAB"), NULL, + "lch", 6, _("LCH"), NULL, + "ycbcr470", 7, _("YCbCr ITU R470"), NULL, + "ycbcr709", 8, _("YCbCr ITU R709"), NULL, + "ycbcr470f", 9, _("YCbCr ITU R470 256"), NULL, + "ycbcr709f", 10, _("YCbCr ITU R709 256"), NULL, + NULL), + "rgb", G_PARAM_READWRITE); PIKA_PROC_VAL_IMAGE (procedure, "new-image", - "New image", - "Output image", + _("New image"), + _("Output image"), FALSE, G_PARAM_READWRITE); } @@ -457,10 +471,10 @@ compose_create_procedure (PikaPlugIn *plug_in, PIKA_PROCEDURE_SENSITIVE_DRAWABLE); pika_procedure_set_documentation (procedure, - "Compose an image from multiple " - "drawables of gray images", - "This function creates a new image from " - "multiple drawables of gray images", + _("Compose an image from multiple " + "drawables of gray images"), + _("This function creates a new image from " + "multiple drawables of gray images"), name); pika_procedure_set_attribution (procedure, "Peter Kirchgessner", @@ -468,32 +482,44 @@ compose_create_procedure (PikaPlugIn *plug_in, "1998"); PIKA_PROC_ARG_DRAWABLE (procedure, "drawable-2", - "Drawable 2", - "Second input drawable", + _("Drawable 2"), + _("Second input drawable"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DRAWABLE (procedure, "drawable-3", - "Drawable 3", - "Third input drawable", + _("Drawable 3"), + _("Third input drawable"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DRAWABLE (procedure, "drawable-4", - "Drawable 4", - "Fourth input drawable", + _("Drawable 4"), + _("Fourth input drawable"), TRUE, G_PARAM_READWRITE); - PIKA_PROC_ARG_STRING (procedure, "compose-type", - "Compose type", + PIKA_PROC_ARG_CHOICE (procedure, "compose-type", + _("Color _model"), type_desc->str, - "RGB", + pika_choice_new_with_values ("rgb", 0, _("RGB"), NULL, + "rgba", 1, _("RGBA"), NULL, + "hsv", 2, _("HSV"), NULL, + "hsl", 3, _("HSL"), NULL, + "cmyk", 4, _("CMYK"), NULL, + "lab", 5, _("LAB"), NULL, + "lch", 6, _("LCH"), NULL, + "ycbcr470", 7, _("YCbCr ITU R470"), NULL, + "ycbcr709", 8, _("YCbCr ITU R709"), NULL, + "ycbcr470f", 9, _("YCbCr ITU R470 256"), NULL, + "ycbcr709f", 10, _("YCbCr ITU R709 256"), NULL, + NULL), + "rgb", G_PARAM_READWRITE); PIKA_PROC_VAL_IMAGE (procedure, "new-image", - "New image", - "Output image", + _("New image"), + _("Output image"), FALSE, G_PARAM_READWRITE); } @@ -515,11 +541,11 @@ compose_create_procedure (PikaPlugIn *plug_in, pika_procedure_set_documentation (procedure, _("Recompose an image that was " "previously decomposed"), - "This function recombines the grayscale " - "layers produced by Decompose " - "into a single RGB or RGBA layer, and " - "replaces the originally decomposed " - "layer with the result.", + _("This function recombines the grayscale " + "layers produced by Decompose " + "into a single RGB or RGBA layer, and " + "replaces the originally decomposed " + "layer with the result."), name); pika_procedure_set_attribution (procedure, "Bill Skaggs", @@ -538,13 +564,14 @@ compose_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals; PikaDrawable *drawable = NULL; const gchar *name = pika_procedure_get_name (procedure); gint compose_by_drawable; + gint compose_idx; gint i; gegl_init (NULL, NULL); @@ -662,8 +689,6 @@ compose_run (PikaProcedure *procedure, switch (run_mode) { case PIKA_RUN_INTERACTIVE: - pika_get_data (name, &composevals); - compose_by_drawable = TRUE; /* Get a drawable-ID of the image */ @@ -689,7 +714,8 @@ compose_run (PikaProcedure *procedure, g_free (layers); } - if (! compose_dialog (composevals.compose_type, drawable)) + if (! compose_dialog (procedure, config, composevals.compose_type, + drawable)) return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, NULL); @@ -699,21 +725,23 @@ compose_run (PikaProcedure *procedure, if (compose_by_drawable) { composevals.inputs[0].comp.object = drawable; - composevals.inputs[1].comp.object = PIKA_VALUES_GET_DRAWABLE (args, 0); - composevals.inputs[2].comp.object = PIKA_VALUES_GET_DRAWABLE (args, 1); - composevals.inputs[3].comp.object = PIKA_VALUES_GET_DRAWABLE (args, 2); + + g_object_get (config, + "drawable-2", &composevals.inputs[1].comp.object, + "drawable-3", &composevals.inputs[2].comp.object, + "drawable-4", &composevals.inputs[3].comp.object, + NULL); } else { composevals.inputs[0].comp.object = image; - composevals.inputs[1].comp.object = PIKA_VALUES_GET_IMAGE (args, 0); - composevals.inputs[2].comp.object = PIKA_VALUES_GET_IMAGE (args, 1); - composevals.inputs[3].comp.object = PIKA_VALUES_GET_IMAGE (args, 2); - } - g_strlcpy (composevals.compose_type, - PIKA_VALUES_GET_STRING (args, 3), - sizeof (composevals.compose_type)); + g_object_get (config, + "image-2", &composevals.inputs[1].comp.object, + "image-3", &composevals.inputs[2].comp.object, + "image-4", &composevals.inputs[3].comp.object, + NULL); + } for (i = 0; i < MAX_COMPOSE_IMAGES; i++) { @@ -730,8 +758,6 @@ compose_run (PikaProcedure *procedure, break; case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (name, &composevals); - compose_by_drawable = TRUE; break; @@ -740,17 +766,47 @@ compose_run (PikaProcedure *procedure, } } + compose_idx = pika_procedure_config_get_choice_id (config, "compose-type"); + if (compose_idx >= 0 && compose_idx < G_N_ELEMENTS (compose_dsc)) + { + g_strlcpy (composevals.compose_type, + compose_dsc[compose_idx].compose_type, + sizeof (composevals.compose_type)); + } + pika_progress_init (_("Composing")); image = compose (composevals.compose_type, composevals.inputs, - compose_by_drawable); + compose_by_drawable, + config); if (! image) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); + /* Save drawables/images in PikaProcedureConfig */ + if (run_mode == PIKA_RUN_NONINTERACTIVE) + { + if (compose_by_drawable) + { + g_object_set (config, + "drawable-2", composevals.inputs[1].comp.object, + "drawable-3", composevals.inputs[2].comp.object, + "drawable-4", composevals.inputs[3].comp.object, + NULL); + } + else + { + g_object_set (config, + "image-2", composevals.inputs[1].comp.object, + "image-3", composevals.inputs[2].comp.object, + "image-4", composevals.inputs[3].comp.object, + NULL); + } + } + if (composevals.do_recompose) { pika_displays_flush (); @@ -764,9 +820,6 @@ compose_run (PikaProcedure *procedure, pika_display_new (image); } - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (name, &composevals, sizeof (ComposeVals)); - return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); @@ -930,9 +983,10 @@ perform_composition (COMPOSE_DSC curr_compose_dsc, /* Compose an image from several gray-images */ static PikaImage * -compose (const gchar *compose_type, - ComposeInput *inputs, - gboolean compose_by_drawable) +compose (const gchar *compose_type, + ComposeInput *inputs, + gboolean compose_by_drawable, + PikaProcedureConfig *config) { gint width, height; gint num_images, compose_idx; @@ -1143,33 +1197,26 @@ create_new_image (GFile *file, static gboolean -compose_dialog (const gchar *compose_type, - PikaDrawable *drawable) +compose_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + const gchar *compose_type, + PikaDrawable *drawable) { GtkWidget *dialog; GtkWidget *main_vbox; GtkWidget *frame; GtkWidget *vbox; GtkWidget *hbox; - GtkWidget *label; - GtkWidget *combo; GtkWidget *grid; GtkSizeGroup *size_group; PikaLayer **layer_list; + gint compose_idx; gint nlayers; gint j; gboolean run; /* Check default compose type */ - composeint.compose_idx = 0; - for (j = 0; j < G_N_ELEMENTS (compose_dsc); j++) - { - if (g_ascii_strcasecmp (compose_type, compose_dsc[j].compose_type) == 0) - { - composeint.compose_idx = j; - break; - } - } + compose_idx = pika_procedure_config_get_choice_id (config, "compose-type"); /* Save original image width/height */ composeint.width = pika_drawable_get_width (drawable); @@ -1180,19 +1227,14 @@ compose_dialog (const gchar *compose_type, layer_list = pika_image_get_layers (pika_item_get_image (PIKA_ITEM (drawable)), &nlayers); - dialog = pika_dialog_new (_("Compose"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, COMPOSE_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); + dialog = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Compose")); pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); + GTK_RESPONSE_OK, + GTK_RESPONSE_CANCEL, + -1); g_signal_connect (dialog, "response", G_CALLBACK (check_response), @@ -1200,53 +1242,20 @@ compose_dialog (const gchar *compose_type, pika_window_set_transient (GTK_WINDOW (dialog)); - main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - main_vbox, TRUE, TRUE, 0); - gtk_widget_show (main_vbox); - /* Compose type combo */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "compose-label", _("Compose Channels"), + FALSE, FALSE); - frame = pika_frame_new (_("Compose Channels")); - gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "compose-frame", "compose-label", FALSE, + "compose-type"); - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_widget_show (hbox); - - size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - - label = gtk_label_new_with_mnemonic (_("Color _model:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - gtk_size_group_add_widget (size_group, label); - g_object_unref (size_group); - - combo = g_object_new (PIKA_TYPE_INT_COMBO_BOX, NULL); - for (j = 0; j < G_N_ELEMENTS (compose_dsc); j++) - { - gchar *label = g_strdup (gettext (compose_dsc[j].compose_type)); - gchar *l; - - for (l = label; *l; l++) - if (*l == '-' || *l == '_') - *l = ' '; - - pika_int_combo_box_append (PIKA_INT_COMBO_BOX (combo), - PIKA_INT_STORE_LABEL, label, - PIKA_INT_STORE_VALUE, j, - -1); - g_free (label); - } - - gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0); - gtk_widget_show (combo); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); + main_vbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "compose-vbox", "compose-frame", + NULL); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), + "compose-vbox", NULL); /* Channel representation grid */ @@ -1264,6 +1273,8 @@ compose_dialog (const gchar *compose_type, gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); gtk_widget_show (grid); + size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + for (j = 0; j < MAX_COMPOSE_IMAGES; j++) { GtkWidget *image; @@ -1275,7 +1286,6 @@ compose_dialog (const gchar *compose_type, hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_grid_attach (GTK_GRID (grid), hbox, 0, j, 1, 1); - // GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (hbox); gtk_size_group_add_widget (size_group, hbox); @@ -1289,8 +1299,8 @@ compose_dialog (const gchar *compose_type, gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); - if (composeint.compose_idx >= 0 && - nlayers >= compose_dsc[composeint.compose_idx].num_images && + if (compose_idx >= 0 && + nlayers >= compose_dsc[compose_idx].num_images && j < nlayers) { composeint.selected[j].comp.object = layer_list[j]; @@ -1313,7 +1323,6 @@ compose_dialog (const gchar *compose_type, PIKA_INT_STORE_ICON_NAME, PIKA_ICON_CHANNEL_GRAY, -1); gtk_grid_attach (GTK_GRID (grid), combo, 1, j, 1, 1); - // GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show (combo); gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); @@ -1341,14 +1350,14 @@ compose_dialog (const gchar *compose_type, g_free (layer_list); /* Calls the combo callback and sets icons, labels and sensitivity */ - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), - composeint.compose_idx, - G_CALLBACK (type_combo_callback), - NULL, NULL); + g_signal_connect (config, "notify::compose-type", + G_CALLBACK (type_combo_callback), + NULL); + type_combo_callback (config); gtk_widget_show (dialog); - run = (pika_dialog_run (PIKA_DIALOG (dialog)) == GTK_RESPONSE_OK); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); gtk_widget_destroy (dialog); @@ -1367,7 +1376,7 @@ compose_dialog (const gchar *compose_type, } strcpy (composevals.compose_type, - compose_dsc[composeint.compose_idx].compose_type); + compose_dsc[compose_idx].compose_type); } return run; @@ -1468,46 +1477,46 @@ scale_callback (PikaLabelSpin *scale, } static void -type_combo_callback (PikaIntComboBox *combo, - gpointer data) +type_combo_callback (PikaProcedureConfig *config) { - if (pika_int_combo_box_get_active (combo, &composeint.compose_idx)) + gboolean combo4; + gboolean scale4; + gint compose_idx; + gint j; + + if (config) + compose_idx = pika_procedure_config_get_choice_id (config, "compose-type"); + else + return; + + for (j = 0; j < MAX_COMPOSE_IMAGES; j++) { - gboolean combo4; - gboolean scale4; - gint compose_idx; - gint j; + GtkWidget *label = composeint.channel_label[j]; + GtkWidget *image = composeint.channel_icon[j]; + const gchar *text = compose_dsc[compose_idx].components[j].name; + const gchar *icon = compose_dsc[compose_idx].components[j].icon; - compose_idx = composeint.compose_idx; + gtk_label_set_text_with_mnemonic (GTK_LABEL (label), + text ? gettext (text) : ""); - for (j = 0; j < MAX_COMPOSE_IMAGES; j++) + if (icon) { - GtkWidget *label = composeint.channel_label[j]; - GtkWidget *image = composeint.channel_icon[j]; - const gchar *text = compose_dsc[compose_idx].components[j].name; - const gchar *icon = compose_dsc[compose_idx].components[j].icon; - - gtk_label_set_text_with_mnemonic (GTK_LABEL (label), - text ? gettext (text) : ""); - - if (icon) - { - gtk_image_set_from_icon_name (GTK_IMAGE (image), - icon, GTK_ICON_SIZE_BUTTON); - gtk_widget_show (image); - } - else - { - gtk_image_clear (GTK_IMAGE (image)); - gtk_widget_hide (image); - } + gtk_image_set_from_icon_name (GTK_IMAGE (image), + icon, GTK_ICON_SIZE_BUTTON); + gtk_widget_show (image); + } + else + { + gtk_image_clear (GTK_IMAGE (image)); + gtk_widget_hide (image); } - - /* Set sensitivity of last menu */ - combo4 = (compose_dsc[compose_idx].num_images == 4); - gtk_widget_set_sensitive (composeint.channel_menu[3], combo4); - - scale4 = combo4 && !composeint.selected[3].is_object; - gtk_widget_set_sensitive (composeint.scales[3], scale4); } + + /* Set sensitivity of last menu */ + combo4 = (compose_dsc[compose_idx].num_images == 4); + gtk_widget_set_sensitive (composeint.channel_menu[3], combo4); + + scale4 = combo4 && !composeint.selected[3].is_object; + gtk_widget_set_sensitive (composeint.scales[3], scale4); + } diff --git a/plug-ins/common/contrast-retinex.c b/plug-ins/common/contrast-retinex.c index baf3e91..2a806eb 100644 --- a/plug-ins/common/contrast-retinex.c +++ b/plug-ins/common/contrast-retinex.c @@ -79,7 +79,7 @@ struct _RetinexClass #define RETINEX_TYPE (retinex_get_type ()) -#define RETINEX (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RETINEX_TYPE, Retinex)) +#define RETINEX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RETINEX_TYPE, Retinex)) GType retinex_get_type (void) G_GNUC_CONST; @@ -92,7 +92,7 @@ static PikaValueArray * retinex_run (PikaProcedure *procedur PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gboolean retinex_dialog (PikaProcedure *procedure, @@ -234,25 +234,18 @@ retinex_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaDrawable *drawable; - gint x, y, width, height; + PikaDrawable *drawable; + gint x, y, width, height; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - if (n_drawables != 1) { GError *error = NULL; - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, _("Procedure '%s' only works with one drawable."), PLUG_IN_PROC); @@ -269,32 +262,14 @@ retinex_run (PikaProcedure *procedure, if (! pika_drawable_mask_intersect (drawable, &x, &y, &width, &height) || width < MIN_GAUSSIAN_SCALE || height < MIN_GAUSSIAN_SCALE) - { - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + NULL); - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - NULL); - } - - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! retinex_dialog (procedure, G_OBJECT (config), drawable)) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - default: - break; - } + if (run_mode == PIKA_RUN_INTERACTIVE && ! retinex_dialog (procedure, G_OBJECT (config), drawable)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); if (pika_drawable_is_rgb (drawable)) { @@ -307,17 +282,11 @@ retinex_run (PikaProcedure *procedure, } else { - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); } - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } @@ -409,11 +378,11 @@ retinex (GObject *config, PikaDrawable *drawable, PikaPreview *preview) { - GeglBuffer *src_buffer; + GeglBuffer *src_buffer = NULL; GeglBuffer *dest_buffer; - const Babl *format; - guchar *src = NULL; - guchar *psrc = NULL; + const Babl *format = NULL; + guchar *src = NULL; + guchar *psrc = NULL; gint x, y, width, height; gint size, bytes; @@ -476,7 +445,8 @@ retinex (GObject *config, format, psrc, GEGL_AUTO_ROWSTRIDE); - g_object_unref (src_buffer); + if (src_buffer) + g_object_unref (src_buffer); g_object_unref (dest_buffer); pika_progress_update (1.0); diff --git a/plug-ins/common/crop-zealous.c b/plug-ins/common/crop-zealous.c index d069957..f8f49ad 100644 --- a/plug-ins/common/crop-zealous.c +++ b/plug-ins/common/crop-zealous.c @@ -44,7 +44,7 @@ struct _CropClass }; #define CROP_TYPE (crop_get_type ()) -#define CROP (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CROP_TYPE, Crop)) +#define CROP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CROP_TYPE, Crop)) GType crop_get_type (void) G_GNUC_CONST; @@ -57,7 +57,7 @@ static PikaValueArray * crop_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static inline gboolean colors_equal (const gfloat *col1, @@ -134,7 +134,7 @@ crop_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; diff --git a/plug-ins/common/curve-bend.c b/plug-ins/common/curve-bend.c index e54c626..1263a67 100644 --- a/plug-ins/common/curve-bend.c +++ b/plug-ins/common/curve-bend.c @@ -60,10 +60,6 @@ #define PLUG_IN_AUTHOR "Wolfgang Hofer (hof@hotbot.com)" #define PLUG_IN_COPYRIGHT "Wolfgang Hofer" -#define PLUG_IN_ITER_NAME "plug-in-curve-bend-Iterator" -#define PLUG_IN_DATA_ITER_FROM "plug_in_curve_bend_ITER_FROM" -#define PLUG_IN_DATA_ITER_TO "plug_in_curve_bend_ITER_TO" - #define KEY_POINTFILE "POINTFILE_CURVE_BEND" #define KEY_POINTS "POINTS" #define KEY_VAL_Y "VAL_Y" @@ -110,15 +106,8 @@ struct _BenderValues guchar curve[2][256]; /* for curve_type freehand mode 0 <= curve <= 255 */ gdouble points[2][17][2]; /* for curve_type smooth mode 0.0 <= points <= 1.0 */ - gint curve_type; - - gint smoothing; - gint antialias; - gint work_on_copy; - gdouble rotation; - - gint32 total_steps; - gdouble current_step; + gint curve_type; + gboolean work_on_copy; }; typedef struct _Curves Curves; @@ -132,49 +121,42 @@ typedef struct _BenderDialog BenderDialog; struct _BenderDialog { - GtkWidget *shell; - GtkWidget *outline_menu; - GtkWidget *pv_widget; - GtkWidget *graph; - GtkAdjustment *rotate_data; - GtkWidget *filechooser; + GtkWidget *shell; + GtkWidget *outline_menu; + GtkWidget *pv_widget; + GtkWidget *graph; + GtkWidget *filechooser; - GdkCursor *cursor_busy; + GdkCursor *cursor_busy; - PikaDrawable *drawable; - int color; - int outline; - gint preview; + PikaProcedureConfig *config; - int grab_point; - int last; - int leftmost; - int rightmost; - int curve_type; - gdouble points[2][17][2]; /* 0.0 <= points <= 1.0 */ - guchar curve[2][256]; /* 0 <= curve <= 255 */ - gint32 *curve_ptr[2]; /* 0 <= curve_ptr <= src_drawable_width - * both arrays are allocated dynamic, - * depending on drawable width - */ + PikaDrawable *drawable; + int color; + int outline; + gint preview; + + int grab_point; + int last; + int leftmost; + int rightmost; + int curve_type; + gdouble points[2][17][2]; /* 0.0 <= points <= 1.0 */ + guchar curve[2][256]; /* 0 <= curve <= 255 */ + gint32 *curve_ptr[2]; /* 0 <= curve_ptr <= src_drawable_width + * both arrays are allocated dynamic, + * depending on drawable width + */ gint32 min2[2]; gint32 max2[2]; gint32 zero2[2]; gboolean show_progress; - gboolean smoothing; - gboolean antialias; - gboolean work_on_copy; - gdouble rotation; PikaImage *preview_image; PikaLayer *preview_layer1; PikaLayer *preview_layer2; - BenderValues *bval_from; - BenderValues *bval_to; - BenderValues *bval_curr; - gboolean run; }; @@ -248,7 +230,7 @@ struct _BenderClass #define BENDER_TYPE (bender_get_type ()) -#define BENDER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BENDER_TYPE, Bender)) +#define BENDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BENDER_TYPE, Bender)) GType bender_get_type (void) G_GNUC_CONST; @@ -261,10 +243,12 @@ static PikaValueArray * bender_run (PikaProcedure *procedure PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static BenderDialog * bender_new_dialog (PikaDrawable *drawable); +static BenderDialog * bender_new_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable); static void bender_update (BenderDialog *, int); static void bender_plot_curve (BenderDialog *, @@ -279,9 +263,7 @@ static void bender_calculate_curve (BenderDialog *, gint32, gint32, gint); -static void bender_rotate_adj_callback (GtkAdjustment *, - gpointer); -static void bender_border_callback (GtkWidget *, +static void bender_global_notify (GtkWidget *, gpointer); static void bender_type_callback (GtkWidget *, gpointer); @@ -293,15 +275,6 @@ static void bender_copy_inv_callback (GtkWidget *, gpointer); static void bender_swap_callback (GtkWidget *, gpointer); -static void bender_response (GtkWidget *, - gint, - BenderDialog *); -static void bender_smoothing_callback (GtkWidget *, - gpointer); -static void bender_antialias_callback (GtkWidget *, - gpointer); -static void bender_work_on_copy_callback (GtkWidget *, - gpointer); static void bender_preview_update (GtkWidget *, gpointer); static void bender_preview_update_once (GtkWidget *, @@ -321,60 +294,53 @@ static void bender_CR_compose (CRMatrix, CRMatrix); static void bender_init_min_max (BenderDialog *, gint32); -static BenderDialog * do_dialog (PikaDrawable *drawable); -static void p_init_gdrw (t_GDRW *gdrw, - PikaDrawable *drawable, - int shadow); -static void p_end_gdrw (t_GDRW *gdrw); -static PikaLayer * p_main_bend (BenderDialog *cd, - PikaDrawable *, - gint); -static PikaImage * p_create_pv_image (PikaDrawable *src_drawable, - PikaLayer **layer); -static void p_render_preview (BenderDialog *cd, - PikaLayer *layer); -static void p_get_pixel (t_GDRW *gdrw, - gint32 x, - gint32 y, - guchar *pixel); -static void p_put_pixel (t_GDRW *gdrw, - gint32 x, - gint32 y, - guchar *pixel); -static void p_put_mix_pixel (t_GDRW *gdrw, - gint32 x, - gint32 y, - guchar *color, - gint32 nb_curvy, - gint32 nb2_curvy, - gint32 curvy); -static void p_stretch_curves (BenderDialog *cd, - gint32 xmax, - gint32 ymax); -static void p_cd_to_bval (BenderDialog *cd, - BenderValues *bval); -static void p_cd_from_bval (BenderDialog *cd, - BenderValues *bval); -static void p_store_values (BenderDialog *cd); -static void p_retrieve_values (BenderDialog *cd); -static void p_bender_calculate_iter_curve (BenderDialog *cd, - gint32 xmax, - gint32 ymax); -static void p_delta_gint32 (gint32 *val, - gint32 val_from, - gint32 val_to, - gint32 total_steps, - gdouble current_step); -static void p_copy_points (BenderDialog *cd, - int outline, - int xy, - int argc, - const gdouble *floatarray); -static void p_copy_yval (BenderDialog *cd, - int outline, - GBytes *bytes); -static int p_save_pointfile (BenderDialog *cd, - const gchar *filename); +static BenderDialog * do_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable); +static void p_init_gdrw (t_GDRW *gdrw, + PikaDrawable *drawable, + int shadow); +static void p_end_gdrw (t_GDRW *gdrw); +static PikaLayer * p_main_bend (BenderDialog *cd, + PikaDrawable *original_drawable, + PikaProcedureConfig *config, + gint work_on_copy); +static PikaImage * p_create_pv_image (PikaDrawable *src_drawable, + PikaLayer **layer); +static void p_render_preview (BenderDialog *cd, + PikaLayer *layer); +static void p_get_pixel (t_GDRW *gdrw, + gint32 x, + gint32 y, + guchar *pixel); +static void p_put_pixel (t_GDRW *gdrw, + gint32 x, + gint32 y, + guchar *pixel); +static void p_put_mix_pixel (t_GDRW *gdrw, + gint32 x, + gint32 y, + guchar *color, + gint32 nb_curvy, + gint32 nb2_curvy, + gint32 curvy); +static void p_stretch_curves (BenderDialog *cd, + gint32 xmax, + gint32 ymax); +static void p_cd_to_bval (BenderDialog *cd, + BenderValues *bval); +static void p_cd_from_bval (BenderDialog *cd, + BenderValues *bval); +static void p_store_values (PikaProcedureConfig *config, + BenderDialog *cd); +static void p_retrieve_values (PikaProcedureConfig *config, + BenderDialog *cd); +static void p_bender_calculate_iter_curve (BenderDialog *cd, + PikaProcedureConfig *config, + gint32 xmax, + gint32 ymax); +static int p_save_pointfile (BenderDialog *cd, + const gchar *filename); G_DEFINE_TYPE (Bender, bender, PIKA_TYPE_PLUG_IN) @@ -437,23 +403,23 @@ bender_create_procedure (PikaPlugIn *plug_in, pika_procedure_set_documentation (procedure, _("Bend the image using two control curves"), - "This plug-in does bend the active layer " - "If there is a current selection it is copied to " - "floating selection and the curve_bend distortion " - "is done on the floating selection. If " - "work_on_copy parameter is TRUE, the curve_bend " - "distortion is done on a copy of the active layer " - "(or floating selection). The upper and lower edges " - "are bent in shape of 2 spline curves. both (upper " - "and lower) curves are determined by upto 17 points " - "or by 256 Y-Values if curve_type == 1 (freehand " - "mode) If rotation is not 0, the layer is rotated " - "before and rotated back after the bend operation. " - "This enables bending in other directions than " - "vertical. bending usually changes the size of " - "the handled layer. this plug-in sets the offsets " - "of the handled layer to keep its center at the " - "same position", + _("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 floating selection. If " + "work_on_copy parameter is TRUE, the curve_bend " + "distortion is done on a copy of the active layer " + "(or floating selection). The upper and lower edges " + "are bent in shape of 2 spline curves. Both (upper " + "and lower) curves are determined by up to 17 points " + "or by 256 Y-Values if curve_type == 1 (freehand " + "mode). If rotation is not 0, the layer is rotated " + "before and rotated back after the bend operation. " + "This enables bending in other directions than " + "vertical. Bending usually changes the size of " + "the handled layer. This plug-in sets the offsets " + "of the handled layer to keep its center at the " + "same position."), name); pika_procedure_set_attribution (procedure, PLUG_IN_AUTHOR, @@ -461,102 +427,113 @@ bender_create_procedure (PikaPlugIn *plug_in, PLUG_IN_VERSION); PIKA_PROC_ARG_DOUBLE (procedure, "rotation", - "Rotation", - "Direction {angle 0 to 360 degree } " - "of the bend effect", + _("Rotat_e"), + _("Direction {angle 0 to 360 degree } " + "of the bend effect"), 0, 360, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "smoothing", - "Smoothing", - "Smoothing", + _("Smoo_thing"), + _("Smoothing"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "antialias", - "Antialias", - "Antialias", + _("_Antialiasing"), + _("Antialias"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "work-on-copy", - "Work on copy", - "Copy the drawable and bend the copy", + _("Work on cop_y"), + _("Copy the drawable and bend the copy"), FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "curve-type", - "Curve type", - "{ 0 == smooth (use 17 points), " - "1 == freehand (use 256 val_y) }", + _("Curve Type"), + _("{ 0 == smooth (use 17 points), " + "1 == freehand (use 256 val_y) }"), + 0, 1, 0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_INT (procedure, "curve-border", + _("Curve for Border"), + _("Choose the active border line to edit"), 0, 1, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "argc-upper-point-x", - "Argc upper point X", - "Argc upper point X", + _("Argc upper point X"), + _("Argc upper point X"), 2, 17, 2, G_PARAM_READWRITE); PIKA_PROC_ARG_FLOAT_ARRAY (procedure, "upper-point-x", - "Upper point X", - "Array of 17 x point coords " - "{ 0.0 <= x <= 1.0 or -1 for unused point }", + _("Upper point X"), + _("Array of 17 x point coords " + "{ 0.0 <= x <= 1.0 or -1 for unused point }"), G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "argc-upper-point-y", - "Argc upper point Y", - "Argc upper point Y", + _("Argc upper point Y"), + _("Argc upper point Y"), 2, 17, 2, G_PARAM_READWRITE); PIKA_PROC_ARG_FLOAT_ARRAY (procedure, "upper-point-y", - "Upper point Y", - "Array of 17 y point coords " - "{ 0.0 <= y <= 1.0 or -1 for unused point }", + _("Upper point Y"), + _("Array of 17 y point coords " + "{ 0.0 <= y <= 1.0 or -1 for unused point }"), G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "argc-lower-point-x", - "Argc lower point X", - "Argc lower point X", + _("Argc lower point X"), + _("Argc lower point X"), 2, 17, 2, G_PARAM_READWRITE); PIKA_PROC_ARG_FLOAT_ARRAY (procedure, "lower-point-x", - "Lower point X", - "Array of 17 x point coords " - "{ 0.0 <= x <= 1.0 or -1 for unused point }", + _("Lower point X"), + _("Array of 17 x point coords " + "{ 0.0 <= x <= 1.0 or -1 for unused point }"), G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "argc-lower-point-y", - "Argc lower point Y", - "Argc lower point Y", + _("Argc lower point Y"), + _("Argc lower point Y"), 2, 17, 2, G_PARAM_READWRITE); PIKA_PROC_ARG_FLOAT_ARRAY (procedure, "lower-point-y", - "Lower point Y", - "Array of 17 y point coords " - "{ 0.0 <= y <= 1.0 or -1 for unused point }", + _("Lower point Y"), + _("Array of 17 y point coords " + "{ 0.0 <= y <= 1.0 or -1 for unused point }"), G_PARAM_READWRITE); PIKA_PROC_ARG_BYTES (procedure, "upper-val-y", - "Upper val Y", - "Array of 256 y freehand coords " - "{ 0 <= y <= 255 }", + _("Upper val Y"), + _("Array of 256 y freehand coords " + "{ 0 <= y <= 255 }"), G_PARAM_READWRITE); PIKA_PROC_ARG_BYTES (procedure, "lower-val-y", - "Lower val Y", - "Array of 256 y freehand coords " - "{ 0 <= y <= 255 }", + _("Lower val Y"), + _("Array of 256 y freehand coords " + "{ 0 <= y <= 255 }"), G_PARAM_READWRITE); PIKA_PROC_VAL_LAYER (procedure, "bent-layer", - "Bent layer", - "The transformed layer", + _("Bent layer"), + _("The transformed layer"), FALSE, G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_BYTES (procedure, "settings-data", + "Settings data", + "TODO: eventually we must implement proper args for every settings", + PIKA_PARAM_READWRITE); } return procedure; @@ -647,7 +624,7 @@ bender_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { const gchar *env; @@ -724,10 +701,8 @@ bender_run (PikaProcedure *procedure, switch (run_mode) { case PIKA_RUN_INTERACTIVE: - /* pika_get_data (PLUG_IN_PROC, &g_bndvals); */ - /* Get information from the dialog */ - cd = do_dialog (active_drawable); + cd = do_dialog (procedure, config, active_drawable); cd->show_progress = TRUE; break; @@ -737,30 +712,7 @@ bender_run (PikaProcedure *procedure, cd->run = TRUE; cd->show_progress = TRUE; cd->drawable = active_drawable; - - cd->rotation = PIKA_VALUES_GET_DOUBLE (args, 0); - cd->smoothing = PIKA_VALUES_GET_BOOLEAN (args, 1); - cd->antialias = PIKA_VALUES_GET_BOOLEAN (args, 2); - cd->work_on_copy = PIKA_VALUES_GET_BOOLEAN (args, 3); - cd->curve_type = PIKA_VALUES_GET_INT (args, 4); - - p_copy_points (cd, OUTLINE_UPPER, 0, - PIKA_VALUES_GET_INT (args, 5), - PIKA_VALUES_GET_FLOAT_ARRAY (args, 6)); - p_copy_points (cd, OUTLINE_UPPER, 1, - PIKA_VALUES_GET_INT (args, 7), - PIKA_VALUES_GET_FLOAT_ARRAY (args, 8)); - p_copy_points (cd, OUTLINE_LOWER, 0, - PIKA_VALUES_GET_INT (args, 9), - PIKA_VALUES_GET_FLOAT_ARRAY (args, 10)); - p_copy_points (cd, OUTLINE_LOWER, 1, - PIKA_VALUES_GET_INT (args, 11), - PIKA_VALUES_GET_FLOAT_ARRAY (args, 12)); - - p_copy_yval (cd, OUTLINE_UPPER, - PIKA_VALUES_GET_BYTES (args, 13)); - p_copy_yval (cd, OUTLINE_LOWER, - PIKA_VALUES_GET_BYTES (args, 14)); + cd->config = config; break; case PIKA_RUN_WITH_LAST_VALS: @@ -769,8 +721,9 @@ bender_run (PikaProcedure *procedure, cd->run = TRUE; cd->show_progress = TRUE; cd->drawable = active_drawable; + cd->config = config; - p_retrieve_values (cd); /* Possibly retrieve data from a previous run */ + p_retrieve_values (config, cd); /* Possibly retrieve data from a previous run */ break; } @@ -783,16 +736,22 @@ bender_run (PikaProcedure *procedure, if (cd->run) { + gboolean work_on_copy; + + g_object_get (config, + "work-on-copy", &work_on_copy, + NULL); + pika_image_undo_group_start (image); bent_layer = p_main_bend (cd, cd->drawable, - cd->work_on_copy); + config, work_on_copy); pika_image_undo_group_end (image); /* Store variable states for next run */ if (run_mode == PIKA_RUN_INTERACTIVE) - p_store_values (cd); + p_store_values (config, cd); } else { @@ -961,15 +920,6 @@ p_cd_to_bval (BenderDialog *cd, bval->points[i][j][1] = cd->points[i][j][1]; /* y */ } } - - bval->curve_type = cd->curve_type; - bval->smoothing = cd->smoothing; - bval->antialias = cd->antialias; - bval->work_on_copy = cd->work_on_copy; - bval->rotation = cd->rotation; - - bval->total_steps = 0; - bval->current_step = 0.0; } static void @@ -991,114 +941,37 @@ p_cd_from_bval (BenderDialog *cd, cd->points[i][j][1] = bval->points[i][j][1]; /* y */ } } - - cd->curve_type = bval->curve_type; - cd->smoothing = bval->smoothing; - cd->antialias = bval->antialias; - cd->work_on_copy = bval->work_on_copy; - cd->rotation = bval->rotation; } static void -p_store_values (BenderDialog *cd) +p_store_values (PikaProcedureConfig *config, + BenderDialog *cd) { - BenderValues bval; + BenderValues bval; + GBytes *settings_bytes; p_cd_to_bval (cd, &bval); - pika_set_data (PLUG_IN_PROC, &bval, sizeof (bval)); + + settings_bytes = g_bytes_new (&bval, sizeof (BenderValues)); + g_object_set (config, "settings-data", settings_bytes, NULL); + g_bytes_unref (settings_bytes); } static void -p_retrieve_values (BenderDialog *cd) +p_retrieve_values (PikaProcedureConfig *config, + BenderDialog *cd) { - BenderValues bval; + GBytes *settings_bytes; - bval.total_steps = 0; - bval.current_step = -444.4; /* init with an invalid dummy value */ - - pika_get_data (PLUG_IN_PROC, &bval); - - if (bval.total_steps == 0) + g_object_get (config, "settings-data", &settings_bytes, NULL); + if (settings_bytes != NULL && g_bytes_get_size (settings_bytes) == sizeof (BenderValues)) { - cd->bval_from = NULL; - cd->bval_to = NULL; - if(bval.current_step != -444.4) - { - /* last_value data was retrieved (and dummy value was overwritten) */ - p_cd_from_bval(cd, &bval); - } - } - else - { - cd->bval_from = g_new (BenderValues, 1); - cd->bval_to = g_new (BenderValues, 1); - cd->bval_curr = g_new (BenderValues, 1); - *cd->bval_curr = bval; + BenderValues bval; - /* it seems that we are called from GAP with "Varying Values" */ - pika_get_data(PLUG_IN_DATA_ITER_FROM, cd->bval_from); - pika_get_data(PLUG_IN_DATA_ITER_TO, cd->bval_to); - *cd->bval_curr = bval; - p_cd_from_bval(cd, cd->bval_curr); - cd->work_on_copy = FALSE; - } -} - -static void -p_delta_gint32 (gint32 *val, - gint32 val_from, - gint32 val_to, - gint32 total_steps, - gdouble current_step) -{ - double delta; - - if (total_steps < 1) - return; - - delta = ((double)(val_to - val_from) / (double)total_steps) * ((double)total_steps - current_step); - *val = val_from + delta; -} - -static void -p_copy_points (BenderDialog *cd, - int outline, - int xy, - int argc, - const gdouble *floatarray) -{ - int j; - - for (j = 0; j < 17; j++) - { - cd->points[outline][j][xy] = -1; - } - - for (j = 0; j < argc; j++) - { - cd->points[outline][j][xy] = floatarray[j]; - } -} - -static void -p_copy_yval (BenderDialog *cd, - int outline, - GBytes *bytes) -{ - const guint8 *array = g_bytes_get_data (bytes, NULL); - guchar fill = MIDDLE; - - for (int j = 0; j < 256; j++) - { - if (j < g_bytes_get_size (bytes)) - { - fill = cd->curve[outline][j] = array[j]; - } - else - { - cd->curve[outline][j] = fill; - } + bval = *((BenderValues *) g_bytes_get_data (settings_bytes, NULL)); + p_cd_from_bval(cd, &bval); } + g_bytes_unref (settings_bytes); } /* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */ @@ -1106,7 +979,9 @@ p_copy_yval (BenderDialog *cd, /* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */ static BenderDialog * -do_dialog (PikaDrawable *drawable) +do_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable) { BenderDialog *cd; @@ -1114,7 +989,7 @@ do_dialog (PikaDrawable *drawable) pika_ui_init (PLUG_IN_BINARY); /* The curve_bend dialog */ - cd = bender_new_dialog (drawable); + cd = bender_new_dialog (procedure, config, drawable); /* create temporary image (with a small copy of drawable) for the preview */ cd->preview_image = p_create_pv_image (drawable, @@ -1126,7 +1001,8 @@ do_dialog (PikaDrawable *drawable) bender_update (cd, UP_GRAPH | UP_DRAW | UP_PREVIEW_EXPOSE); - gtk_main (); + cd->run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (cd->shell)); + gtk_widget_destroy (cd->shell); pika_image_delete (cd->preview_image); cd->preview_image = NULL; @@ -1141,43 +1017,33 @@ do_dialog (PikaDrawable *drawable) /**************************/ static BenderDialog * -bender_new_dialog (PikaDrawable *drawable) +bender_new_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable) { BenderDialog *cd; - GtkWidget *main_hbox; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *vbox2; GtkWidget *frame; - GtkWidget *upper, *lower; - GtkWidget *smooth, *freew; GtkWidget *toggle; GtkWidget *button; - GtkWidget *spinbutton; - GtkWidget *label; GdkDisplay *display; + GtkListStore *store; gint i, j; cd = g_new (BenderDialog, 1); + cd->config = config; cd->preview = FALSE; - cd->curve_type = SMOOTH; cd->filechooser = NULL; - cd->outline = OUTLINE_UPPER; cd->show_progress = FALSE; - cd->smoothing = TRUE; - cd->antialias = TRUE; - cd->work_on_copy = FALSE; - cd->rotation = 0.0; /* vertical bend */ cd->drawable = drawable; cd->color = pika_drawable_is_rgb (drawable); cd->run = FALSE; - cd->bval_from = NULL; - cd->bval_to = NULL; - cd->bval_curr = NULL; for (i = 0; i < 2; i++) for (j = 0; j < 256; j++) @@ -1197,53 +1063,58 @@ bender_new_dialog (PikaDrawable *drawable) cd->points[i][16][1] = 0.5; /* y */ } - p_retrieve_values(cd); /* Possibly retrieve data from a previous run */ + p_retrieve_values (config, cd); /* Possibly retrieve data from a previous run */ /* The shell and main vbox */ - cd->shell = pika_dialog_new (_("Curve Bend"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); + cd->shell = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Curve Bend")); pika_dialog_set_alternative_button_order (GTK_DIALOG (cd->shell), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); + GTK_RESPONSE_OK, + GTK_RESPONSE_CANCEL, + -1); pika_window_set_transient (GTK_WINDOW (cd->shell)); - g_signal_connect (cd->shell, "response", - G_CALLBACK (bender_response), - cd); - /* busy cursor */ display = gtk_widget_get_display (cd->shell); cd->cursor_busy = gdk_cursor_new_for_display (display, GDK_WATCH); - /* The main hbox */ - main_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (cd->shell))), - main_hbox, TRUE, TRUE, 0); - gtk_widget_show (main_hbox); - /* Left side column */ - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_box_pack_start (GTK_BOX (main_hbox), vbox, TRUE, TRUE, 0); - gtk_widget_show (vbox); + /* Config-connected widgets first */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (cd->shell), + "option-label", _("Options"), FALSE, + FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (cd->shell), + "options-hbox", "rotation", "smoothing", + "antialias", "work-on-copy", NULL); + g_signal_connect (config, "notify::rotation", + G_CALLBACK (bender_global_notify), cd); + g_signal_connect (config, "notify::smoothing", + G_CALLBACK (bender_global_notify), cd); + g_signal_connect (config, "notify::antialias", + G_CALLBACK (bender_global_notify), cd); + + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (cd->shell), + "option-frame", "option-label", FALSE, + "options-hbox"); + + vbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (cd->shell), + "curve-left-col", "option-frame", + NULL); + + /* GUI-only widgets */ /* Preview area, top of column */ frame = pika_frame_new (_("Preview")); gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); + gtk_widget_set_visible (frame, TRUE); + gtk_box_reorder_child (GTK_BOX (vbox), frame, 0); vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_add (GTK_CONTAINER (frame), vbox2); - gtk_widget_show (vbox2); + gtk_widget_set_visible (vbox2, TRUE); /* The range drawing area */ frame = gtk_frame_new (NULL); @@ -1251,22 +1122,22 @@ bender_new_dialog (PikaDrawable *drawable) gtk_widget_set_valign (frame, GTK_ALIGN_CENTER); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (vbox2), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); + gtk_widget_set_visible (frame, TRUE); cd->pv_widget = pika_preview_area_new (); gtk_widget_set_size_request (cd->pv_widget, PREVIEW_SIZE_X, PREVIEW_SIZE_Y); gtk_container_add (GTK_CONTAINER (frame), cd->pv_widget); - gtk_widget_show (cd->pv_widget); + gtk_widget_set_visible (cd->pv_widget, TRUE); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_end (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); + gtk_widget_set_visible (hbox, TRUE); /* The preview button */ button = gtk_button_new_with_mnemonic (_("_Preview Once")); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); + gtk_widget_set_visible (button, TRUE); g_signal_connect (button, "clicked", G_CALLBACK (bender_preview_update_once), @@ -1276,84 +1147,48 @@ bender_new_dialog (PikaDrawable *drawable) toggle = gtk_check_button_new_with_mnemonic (_("Automatic pre_view")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), cd->preview); gtk_box_pack_start (GTK_BOX (hbox), toggle, FALSE, FALSE, 0); - gtk_widget_show (toggle); + gtk_widget_set_visible (toggle, TRUE); g_signal_connect (toggle, "toggled", G_CALLBACK (bender_preview_update), cd); - /* Options area, bottom of column */ - frame = pika_frame_new (_("Options")); - gtk_box_pack_end (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); + /* The curves graph */ + /* Config-connected widgets first */ + store = pika_int_store_new (_("Smooth"), 0, + _("Free"), 1, + NULL); + pika_procedure_dialog_get_int_radio (PIKA_PROCEDURE_DIALOG (cd->shell), + "curve-type", PIKA_INT_STORE (store)); + g_signal_connect (config, "notify::curve-type", + G_CALLBACK (bender_type_callback), cd); - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); + store = pika_int_store_new (_("Upper"), OUTLINE_UPPER, + C_("adjective", "Lower"), OUTLINE_LOWER, + NULL); + pika_procedure_dialog_get_int_radio (PIKA_PROCEDURE_DIALOG (cd->shell), + "curve-border", PIKA_INT_STORE (store)); + g_signal_connect (config, "notify::curve-border", + G_CALLBACK (bender_global_notify), cd); - /* Render Options */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (cd->shell), + "curve-hbox", "curve-border", + "curve-type", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); - /* Rotate spinbutton */ - label = gtk_label_new_with_mnemonic (_("Rotat_e:")); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); + vbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (cd->shell), + "curve-right-col", "curve-hbox", + NULL); - cd->rotate_data = gtk_adjustment_new (0, 0.0, 360.0, 1, 45, 0); - gtk_adjustment_set_value (cd->rotate_data, cd->rotation); - - spinbutton = pika_spin_button_new (cd->rotate_data, 0.5, 1); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); - - g_signal_connect (cd->rotate_data, "value-changed", - G_CALLBACK (bender_rotate_adj_callback), - cd); - - /* The smoothing toggle */ - toggle = gtk_check_button_new_with_mnemonic (_("Smoo_thing")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), cd->smoothing); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (bender_smoothing_callback), - cd); - - /* The antialiasing toggle */ - toggle = gtk_check_button_new_with_mnemonic (_("_Antialiasing")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), cd->antialias); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (bender_antialias_callback), - cd); - - /* The work_on_copy toggle */ - toggle = gtk_check_button_new_with_mnemonic (_("Work on cop_y")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), cd->work_on_copy); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (bender_work_on_copy_callback), - cd); - - /* The curves graph */ - frame = pika_frame_new (_("Modify Curves")); - gtk_box_pack_start (GTK_BOX (main_hbox), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (cd->shell), + "modify-label", _("Modify Curves"), FALSE, + FALSE); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (cd->shell), + "curve-right-frame", "modify-label", FALSE, + "curve-right-col"); + /* GUI-only widgets */ cd->graph = gtk_drawing_area_new (); gtk_widget_set_halign (cd->graph, GTK_ALIGN_CENTER); gtk_widget_set_valign (cd->graph, GTK_ALIGN_CENTER); @@ -1362,7 +1197,7 @@ bender_new_dialog (PikaDrawable *drawable) GRAPH_HEIGHT + RADIUS * 2); gtk_widget_set_events (cd->graph, GRAPH_MASK); gtk_box_pack_start (GTK_BOX (vbox), cd->graph, FALSE, FALSE, 0); - gtk_widget_show (cd->graph); + gtk_widget_set_visible (cd->graph, TRUE); g_signal_connect (cd->graph, "event", G_CALLBACK (bender_graph_events), @@ -1371,48 +1206,17 @@ bender_new_dialog (PikaDrawable *drawable) G_CALLBACK (bender_graph_draw), cd); - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - frame = pika_int_radio_group_new (TRUE, _("Curve for Border"), - G_CALLBACK (bender_border_callback), - &cd->outline, NULL, cd->outline, - - C_("curve-border", "_Upper"), OUTLINE_UPPER, &upper, - C_("curve-border", "_Lower"), OUTLINE_LOWER, &lower, - - NULL); - - g_object_set_data (G_OBJECT (upper), "cd", cd); - g_object_set_data (G_OBJECT (lower), "cd", cd); - - gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); - - frame = pika_int_radio_group_new (TRUE, _("Curve Type"), - G_CALLBACK (bender_type_callback), - &cd->curve_type, NULL, cd->curve_type, - - _("Smoot_h"), SMOOTH, &smooth, - _("_Free"), GFREE, &freew, - - NULL); - g_object_set_data (G_OBJECT (smooth), "cd", cd); - g_object_set_data (G_OBJECT (freew), "cd", cd); - - gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); + gtk_box_reorder_child (GTK_BOX (vbox), cd->graph, 0); /* hbox for curve options */ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); + gtk_widget_set_visible (hbox, TRUE); /* The Copy button */ button = gtk_button_new_with_mnemonic (_("_Copy")); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); - gtk_widget_show (button); + gtk_widget_set_visible (button, TRUE); pika_help_set_help_data (button, _("Copy the active curve to the other border"), NULL); @@ -1424,7 +1228,7 @@ bender_new_dialog (PikaDrawable *drawable) /* The CopyInv button */ button = gtk_button_new_with_mnemonic (_("_Mirror")); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); - gtk_widget_show (button); + gtk_widget_set_visible (button, TRUE); pika_help_set_help_data (button, _("Mirror the active curve to the other border"), @@ -1437,7 +1241,7 @@ bender_new_dialog (PikaDrawable *drawable) /* The Swap button */ button = gtk_button_new_with_mnemonic (_("S_wap")); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); - gtk_widget_show (button); + gtk_widget_set_visible (button, TRUE); pika_help_set_help_data (button, _("Swap the two curves"), NULL); @@ -1449,7 +1253,7 @@ bender_new_dialog (PikaDrawable *drawable) /* The Reset button */ button = gtk_button_new_with_mnemonic (_("_Reset")); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); - gtk_widget_show (button); + gtk_widget_set_visible (button, TRUE); pika_help_set_help_data (button, _("Reset the active curve"), NULL); @@ -1461,12 +1265,12 @@ bender_new_dialog (PikaDrawable *drawable) /* hbox for curve load and save */ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); + gtk_widget_set_visible (hbox, TRUE); /* The Load button */ button = gtk_button_new_with_mnemonic (_("_Open")); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); - gtk_widget_show (button); + gtk_widget_set_visible (button, TRUE); pika_help_set_help_data (button, _("Load the curves from a file"), NULL); @@ -1478,7 +1282,7 @@ bender_new_dialog (PikaDrawable *drawable) /* The Save button */ button = gtk_button_new_with_mnemonic (_("_Save")); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); - gtk_widget_show (button); + gtk_widget_set_visible (button, TRUE); pika_help_set_help_data (button, _("Save the curves to a file"), NULL); @@ -1487,7 +1291,15 @@ bender_new_dialog (PikaDrawable *drawable) G_CALLBACK (bender_save_callback), cd); - gtk_widget_show (main_hbox); + /* Combine the two columns */ + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (cd->shell), + "curve-columns", "curve-left-col", + "curve-right-frame", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (cd->shell), + "curve-columns", NULL); return cd; } @@ -1506,7 +1318,7 @@ bender_update (BenderDialog *cd, pika_image_remove_layer (cd->preview_image, cd->preview_layer2); cd->preview_layer2 = p_main_bend (cd, PIKA_DRAWABLE (cd->preview_layer1), - TRUE /* work_on_copy*/ ); + cd->config, TRUE /* work_on_copy*/ ); p_render_preview (cd, cd->preview_layer2); if (update & UP_DRAW) @@ -1522,7 +1334,7 @@ bender_update (BenderDialog *cd, */ if (! cd->preview_layer2) cd->preview_layer2 = p_main_bend (cd, PIKA_DRAWABLE (cd->preview_layer1), - TRUE /* work_on_copy*/ ); + cd->config, TRUE /* work_on_copy*/ ); p_render_preview (cd, cd->preview_layer2); if (update & UP_DRAW) @@ -1553,6 +1365,11 @@ bender_plot_curve (BenderDialog *cd, gint32 newx, newy; gint32 ntimes; gint32 i; + gint outline; + + g_object_get (cd->config, + "curve-border", &outline, + NULL); /* construct the geometry matrix from the segment */ for (i = 0; i < 4; i++) @@ -1561,15 +1378,15 @@ bender_plot_curve (BenderDialog *cd, geometry[i][3] = 0; } - geometry[0][0] = (cd->points[cd->outline][p1][0] * xmax); - geometry[1][0] = (cd->points[cd->outline][p2][0] * xmax); - geometry[2][0] = (cd->points[cd->outline][p3][0] * xmax); - geometry[3][0] = (cd->points[cd->outline][p4][0] * xmax); + geometry[0][0] = (cd->points[outline][p1][0] * xmax); + geometry[1][0] = (cd->points[outline][p2][0] * xmax); + geometry[2][0] = (cd->points[outline][p3][0] * xmax); + geometry[3][0] = (cd->points[outline][p4][0] * xmax); - geometry[0][1] = (cd->points[cd->outline][p1][1] * ymax); - geometry[1][1] = (cd->points[cd->outline][p2][1] * ymax); - geometry[2][1] = (cd->points[cd->outline][p3][1] * ymax); - geometry[3][1] = (cd->points[cd->outline][p4][1] * ymax); + geometry[0][1] = (cd->points[outline][p1][1] * ymax); + geometry[1][1] = (cd->points[outline][p2][1] * ymax); + geometry[2][1] = (cd->points[outline][p3][1] * ymax); + geometry[3][1] = (cd->points[outline][p4][1] * ymax); /* subdivide the curve ntimes (1000) times */ ntimes = 4 * xmax; @@ -1608,13 +1425,13 @@ bender_plot_curve (BenderDialog *cd, if (fix255) { - cd->curve[cd->outline][lastx] = lasty; + cd->curve[outline][lastx] = lasty; } else { - cd->curve_ptr[cd->outline][lastx] = lasty; + cd->curve_ptr[outline][lastx] = lasty; if(gb_debug) g_printf("bender_plot_curve xmax:%d ymax:%d\n", - (int)xmax, (int)ymax); + (gint) xmax, (gint) ymax); } /* loop over the curve */ @@ -1639,15 +1456,15 @@ bender_plot_curve (BenderDialog *cd, if (fix255) { /* use fixed array size (for the curve graph) */ - cd->curve[cd->outline][newx] = newy; + cd->curve[outline][newx] = newy; } else { /* use dynamic allocated curve_ptr (for the real curve) */ - cd->curve_ptr[cd->outline][newx] = newy; + cd->curve_ptr[outline][newx] = newy; - if(gb_debug) g_printf("outline: %d cX: %d cY: %d\n", - (int)cd->outline, (int)newx, (int)newy); + if (gb_debug) g_printf("outline: %d cX: %d cY: %d\n", + (gint) outline, (int) newx, (int) newy); } } @@ -1662,14 +1479,21 @@ bender_calculate_curve (BenderDialog *cd, gint32 ymax, gint fix255) { - int i; - int points[17]; - int num_pts; - int p1, p2, p3, p4; - int xmid; - int yfirst, ylast; + gint i; + gint points[17]; + gint num_pts; + gint p1, p2, p3, p4; + gint xmid; + gint yfirst, ylast; + gint curve_type; + gint outline; - switch (cd->curve_type) + g_object_get (cd->config, + "curve-type", &curve_type, + "curve-border", &outline, + NULL); + + switch (curve_type) { case GFREE: break; @@ -1678,7 +1502,7 @@ bender_calculate_curve (BenderDialog *cd, /* cycle through the curves */ num_pts = 0; for (i = 0; i < 17; i++) - if (cd->points[cd->outline][i][0] != -1) + if (cd->points[outline][i][0] != -1) points[num_pts++] = i; xmid = xmax / 2; @@ -1687,27 +1511,27 @@ bender_calculate_curve (BenderDialog *cd, { if (fix255) { - for (i = 0; i < (cd->points[cd->outline][points[0]][0] * 255); i++) - cd->curve[cd->outline][i] = - (cd->points[cd->outline][points[0]][1] * 255); + for (i = 0; i < (cd->points[outline][points[0]][0] * 255); i++) + cd->curve[outline][i] = + (cd->points[outline][points[0]][1] * 255); - for (i = (cd->points[cd->outline][points[num_pts - 1]][0] * 255); i < 256; i++) - cd->curve[cd->outline][i] = - (cd->points[cd->outline][points[num_pts - 1]][1] * 255); + for (i = (cd->points[outline][points[num_pts - 1]][0] * 255); i < 256; i++) + cd->curve[outline][i] = + (cd->points[outline][points[num_pts - 1]][1] * 255); } else { - yfirst = cd->points[cd->outline][points[0]][1] * ymax; - ylast = cd->points[cd->outline][points[num_pts - 1]][1] * ymax; + yfirst = cd->points[outline][points[0]][1] * ymax; + ylast = cd->points[outline][points[num_pts - 1]][1] * ymax; for (i = 0; i < xmid; i++) { - cd->curve_ptr[cd->outline][i] = yfirst; + cd->curve_ptr[outline][i] = yfirst; } for (i = xmid; i <= xmax; i++) { - cd->curve_ptr[cd->outline][i] = ylast; + cd->curve_ptr[outline][i] = ylast; } } } @@ -1726,28 +1550,17 @@ bender_calculate_curve (BenderDialog *cd, } static void -bender_rotate_adj_callback (GtkAdjustment *adjustment, - gpointer client_data) -{ - BenderDialog *cd = client_data; - - if (gtk_adjustment_get_value (adjustment) != cd->rotation) - { - cd->rotation = gtk_adjustment_get_value (adjustment); - if (cd->preview) - bender_update (cd, UP_PREVIEW | UP_DRAW); - } -} - -static void -bender_border_callback (GtkWidget *widget, - gpointer data) +bender_global_notify (GtkWidget *widget, + gpointer data) { BenderDialog *cd; - pika_radio_button_update (widget, data); cd = g_object_get_data (G_OBJECT (widget), "cd"); - bender_update (cd, UP_GRAPH | UP_DRAW); + if (! cd) + return; + + if (cd->preview) + bender_update (cd, UP_PREVIEW | UP_DRAW); } static void @@ -1755,14 +1568,19 @@ bender_type_callback (GtkWidget *widget, gpointer data) { BenderDialog *cd; - - pika_radio_button_update (widget, data); + gint curve_type; + gint outline; cd = g_object_get_data (G_OBJECT (widget), "cd"); if (! cd) return; - if (cd->curve_type == SMOOTH) + g_object_get (cd->config, + "curve-type", &curve_type, + "curve-border", &outline, + NULL); + + if (curve_type == SMOOTH) { gint i; @@ -1770,8 +1588,8 @@ bender_type_callback (GtkWidget *widget, for (i = 0; i <= 8; i++) { gint index = CLAMP ((i * 32), 0, 255); - cd->points[cd->outline][i * 2][0] = (gdouble)index / 255.0; - cd->points[cd->outline][i * 2][1] = (gdouble)cd->curve[cd->outline][index] / 255.0; + cd->points[outline][i * 2][0] = (gdouble)index / 255.0; + cd->points[outline][i * 2][1] = (gdouble)cd->curve[outline][index] / 255.0; } bender_calculate_curve (cd, 255, 255, TRUE); @@ -1792,21 +1610,26 @@ bender_reset_callback (GtkWidget *widget, { BenderDialog *cd = (BenderDialog *) client_data; gint i; + gint outline; + + g_object_get (cd->config, + "curve-border", &outline, + NULL); /* Initialize the values */ for (i = 0; i < 256; i++) - cd->curve[cd->outline][i] = MIDDLE; + cd->curve[outline][i] = MIDDLE; cd->grab_point = -1; for (i = 0; i < 17; i++) { - cd->points[cd->outline][i][0] = -1; - cd->points[cd->outline][i][1] = -1; + cd->points[outline][i][0] = -1; + cd->points[outline][i][1] = -1; } - cd->points[cd->outline][0][0] = 0.0; /* x */ - cd->points[cd->outline][0][1] = 0.5; /* y */ - cd->points[cd->outline][16][0] = 1.0; /* x */ - cd->points[cd->outline][16][1] = 0.5; /* y */ + cd->points[outline][0][0] = 0.0; /* x */ + cd->points[outline][0][1] = 0.5; /* y */ + cd->points[outline][16][0] = 1.0; /* x */ + cd->points[outline][16][1] = 0.5; /* y */ bender_update (cd, UP_GRAPH | UP_DRAW); if (cd->preview) @@ -1818,20 +1641,25 @@ bender_copy_callback (GtkWidget *widget, gpointer client_data) { BenderDialog *cd = (BenderDialog *) client_data; - int i; - int other; + gint i; + gint other; + gint outline; - other = (cd->outline) ? 0 : 1; + g_object_get (cd->config, + "curve-border", &outline, + NULL); + + other = (outline) ? 0 : 1; for (i = 0; i < 17; i++) { - cd->points[other][i][0] = cd->points[cd->outline][i][0]; - cd->points[other][i][1] = cd->points[cd->outline][i][1]; + cd->points[other][i][0] = cd->points[outline][i][0]; + cd->points[other][i][1] = cd->points[outline][i][1]; } for (i= 0; i < 256; i++) { - cd->curve[other][i] = cd->curve[cd->outline][i]; + cd->curve[other][i] = cd->curve[outline][i]; } bender_update (cd, UP_GRAPH | UP_DRAW); @@ -1843,21 +1671,26 @@ static void bender_copy_inv_callback (GtkWidget *widget, gpointer client_data) { - BenderDialog *cd = (BenderDialog*) client_data; - int i; - int other; + BenderDialog *cd = (BenderDialog *) client_data; + gint i; + gint other; + gint outline; - other = (cd->outline) ? 0 : 1; + g_object_get (cd->config, + "curve-border", &outline, + NULL); + + other = (outline) ? 0 : 1; for (i = 0; i < 17; i++) { - cd->points[other][i][0] = cd->points[cd->outline][i][0]; /* x */ - cd->points[other][i][1] = 1.0 - cd->points[cd->outline][i][1]; /* y */ + cd->points[other][i][0] = cd->points[outline][i][0]; /* x */ + cd->points[other][i][1] = 1.0 - cd->points[outline][i][1]; /* y */ } for (i= 0; i < 256; i++) { - cd->curve[other][i] = 255 - cd->curve[cd->outline][i]; + cd->curve[other][i] = 255 - cd->curve[outline][i]; } bender_update (cd, UP_GRAPH | UP_DRAW); @@ -1871,23 +1704,28 @@ bender_swap_callback (GtkWidget *widget, gpointer client_data) { #define SWAP_VALUE(a, b, h) { h=a; a=b; b=h; } - BenderDialog *cd = (BenderDialog*) client_data; - int i; - int other; - gdouble hd; - guchar hu; + BenderDialog *cd = (BenderDialog *) client_data; + gint i; + gint other; + gint outline; + gdouble hd; + guchar hu; - other = (cd->outline) ? 0 : 1; + g_object_get (cd->config, + "curve-border", &outline, + NULL); + + other = (outline) ? 0 : 1; for (i = 0; i < 17; i++) { - SWAP_VALUE(cd->points[other][i][0], cd->points[cd->outline][i][0], hd); /* x */ - SWAP_VALUE(cd->points[other][i][1], cd->points[cd->outline][i][1], hd); /* y */ + SWAP_VALUE(cd->points[other][i][0], cd->points[outline][i][0], hd); /* x */ + SWAP_VALUE(cd->points[other][i][1], cd->points[outline][i][1], hd); /* y */ } for (i= 0; i < 256; i++) { - SWAP_VALUE(cd->curve[other][i], cd->curve[cd->outline][i], hu); + SWAP_VALUE(cd->curve[other][i], cd->curve[outline][i], hu); } bender_update (cd, UP_GRAPH | UP_DRAW); @@ -1895,24 +1733,15 @@ bender_swap_callback (GtkWidget *widget, bender_update (cd, UP_PREVIEW | UP_DRAW); } -static void -bender_response (GtkWidget *widget, - gint response_id, - BenderDialog *cd) -{ - if (response_id == GTK_RESPONSE_OK) - cd->run = TRUE; - - gtk_widget_destroy (GTK_WIDGET (cd->shell)); - gtk_main_quit (); -} - static void bender_preview_update (GtkWidget *widget, gpointer data) { BenderDialog *cd = (BenderDialog*) data; + if (! cd) + return; + cd->preview = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); if(cd->preview) @@ -1925,6 +1754,9 @@ bender_preview_update_once (GtkWidget *widget, { BenderDialog *cd = (BenderDialog*) data; + if (! cd) + return; + bender_update (cd, UP_PREVIEW | UP_DRAW); } @@ -2032,39 +1864,6 @@ bender_save_callback (GtkWidget *w, gtk_window_present (GTK_WINDOW (cd->filechooser)); } -static void -bender_smoothing_callback (GtkWidget *w, - gpointer data) -{ - BenderDialog *cd = (BenderDialog*) data; - - cd->smoothing = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)); - - if(cd->preview) - bender_update (cd, UP_PREVIEW | UP_DRAW); -} - -static void -bender_antialias_callback (GtkWidget *w, - gpointer data) -{ - BenderDialog *cd = (BenderDialog*) data; - - cd->antialias = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)); - - if (cd->preview) - bender_update (cd, UP_PREVIEW | UP_DRAW); -} - -static void -bender_work_on_copy_callback (GtkWidget *w, - gpointer data) -{ - BenderDialog *cd = (BenderDialog*) data; - - cd->work_on_copy = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)); -} - static gboolean bender_graph_events (GtkWidget *widget, GdkEvent *event, @@ -2073,12 +1872,19 @@ bender_graph_events (GtkWidget *widget, static GdkCursorType cursor_type = GDK_TOP_LEFT_ARROW; GdkCursorType new_type; GdkEventMotion *mevent; - int i; - int tx, ty; - int x, y; - int closest_point; - int distance; - int x1, x2, y1, y2; + gint i; + gint tx, ty; + gint x, y; + gint closest_point; + gint distance; + gint x1, x2, y1, y2; + gint curve_type; + gint outline; + + g_object_get (cd->config, + "curve-type", &curve_type, + "curve-border", &outline, + NULL); new_type = GDK_X_CURSOR; closest_point = 0; @@ -2096,10 +1902,10 @@ bender_graph_events (GtkWidget *widget, distance = G_MAXINT; for (i = 0; i < 17; i++) { - if (cd->points[cd->outline][i][0] != -1) - if (abs ((int) (x - (cd->points[cd->outline][i][0] * 255.0))) < distance) + if (cd->points[outline][i][0] != -1) + if (abs ((int) (x - (cd->points[outline][i][0] * 255.0))) < distance) { - distance = abs ((int) (x - (cd->points[cd->outline][i][0] * 255.0))); + distance = abs ((int) (x - (cd->points[outline][i][0] * 255.0))); closest_point = i; } } @@ -2111,34 +1917,34 @@ bender_graph_events (GtkWidget *widget, case GDK_BUTTON_PRESS: new_type = GDK_TCROSS; - switch (cd->curve_type) + switch (curve_type) { case SMOOTH: /* determine the leftmost and rightmost points */ cd->leftmost = -1; for (i = closest_point - 1; i >= 0; i--) - if (cd->points[cd->outline][i][0] != -1) + if (cd->points[outline][i][0] != -1) { - cd->leftmost = (cd->points[cd->outline][i][0] * 255.0); + cd->leftmost = (cd->points[outline][i][0] * 255.0); break; } cd->rightmost = 256; for (i = closest_point + 1; i < 17; i++) - if (cd->points[cd->outline][i][0] != -1) + if (cd->points[outline][i][0] != -1) { - cd->rightmost = (cd->points[cd->outline][i][0] * 255.0); + cd->rightmost = (cd->points[outline][i][0] * 255.0); break; } cd->grab_point = closest_point; - cd->points[cd->outline][cd->grab_point][0] = (gdouble)x / 255.0; - cd->points[cd->outline][cd->grab_point][1] = (gdouble)(255 - y) / 255.0; + cd->points[outline][cd->grab_point][0] = (gdouble)x / 255.0; + cd->points[outline][cd->grab_point][1] = (gdouble)(255 - y) / 255.0; bender_calculate_curve (cd, 255, 255, TRUE); break; case GFREE: - cd->curve[cd->outline][x] = 255 - y; + cd->curve[outline][x] = 255 - y; cd->grab_point = x; cd->last = y; break; @@ -2164,13 +1970,13 @@ bender_graph_events (GtkWidget *widget, mevent->y = ty; } - switch (cd->curve_type) + switch (curve_type) { case SMOOTH: /* If no point is grabbed... */ if (cd->grab_point == -1) { - if (cd->points[cd->outline][closest_point][0] != -1) + if (cd->points[outline][closest_point][0] != -1) new_type = GDK_FLEUR; else new_type = GDK_TCROSS; @@ -2180,15 +1986,15 @@ bender_graph_events (GtkWidget *widget, { new_type = GDK_TCROSS; - cd->points[cd->outline][cd->grab_point][0] = -1; + cd->points[outline][cd->grab_point][0] = -1; if (x > cd->leftmost && x < cd->rightmost) { closest_point = (x + 8) / 16; - if (cd->points[cd->outline][closest_point][0] == -1) + if (cd->points[outline][closest_point][0] == -1) cd->grab_point = closest_point; - cd->points[cd->outline][cd->grab_point][0] = (gdouble)x / 255.0; - cd->points[cd->outline][cd->grab_point][1] = (gdouble)(255 - y) / 255.0; + cd->points[outline][cd->grab_point][0] = (gdouble)x / 255.0; + cd->points[outline][cd->grab_point][1] = (gdouble)(255 - y) / 255.0; } bender_calculate_curve (cd, 255, 255, TRUE); @@ -2216,9 +2022,9 @@ bender_graph_events (GtkWidget *widget, if (x2 != x1) for (i = x1; i <= x2; i++) - cd->curve[cd->outline][i] = 255 - (y1 + ((y2 - y1) * (i - x1)) / (x2 - x1)); + cd->curve[outline][i] = 255 - (y1 + ((y2 - y1) * (i - x1)) / (x2 - x1)); else - cd->curve[cd->outline][x] = 255 - y; + cd->curve[outline][x] = 255 - y; cd->grab_point = x; cd->last = y; @@ -2257,6 +2063,13 @@ bender_graph_draw (GtkWidget *widget, GdkRGBA gray = { 0.5, 0.5, 0.5, 1.0 }; gint i; gint other; + gint curve_type; + gint outline; + + g_object_get (cd->config, + "curve-type", &curve_type, + "curve-border", &outline, + NULL); cairo_set_line_width (cr, 1.0); cairo_translate (cr, 0.5, 0.5); @@ -2279,7 +2092,7 @@ bender_graph_draw (GtkWidget *widget, cairo_stroke (cr); /* Draw the other curve */ - other = (cd->outline == 0) ? 1 : 0; + other = (outline == 0) ? 1 : 0; cairo_move_to (cr, RADIUS, 255 - cd->curve[other][0] + RADIUS); @@ -2292,24 +2105,24 @@ bender_graph_draw (GtkWidget *widget, cairo_stroke (cr); /* Draw the active curve */ - cairo_move_to (cr, RADIUS, 255 - cd->curve[cd->outline][0] + RADIUS); + cairo_move_to (cr, RADIUS, 255 - cd->curve[outline][0] + RADIUS); for (i = 1; i < 256; i++) { - cairo_line_to (cr, i + RADIUS, 255 - cd->curve[cd->outline][i] + RADIUS); + cairo_line_to (cr, i + RADIUS, 255 - cd->curve[outline][i] + RADIUS); } /* Draw the points */ - if (cd->curve_type == SMOOTH) + if (curve_type == SMOOTH) { for (i = 0; i < 17; i++) { - if (cd->points[cd->outline][i][0] != -1) + if (cd->points[outline][i][0] != -1) { cairo_new_sub_path (cr); cairo_arc (cr, - (cd->points[cd->outline][i][0] * 255.0) + RADIUS, - 255 - (cd->points[cd->outline][i][1] * 255.0) + RADIUS, + (cd->points[outline][i][0] * 255.0) + RADIUS, + 255 - (cd->points[outline][i][1] * 255.0) + RADIUS, RADIUS, 0, 2 * G_PI); } @@ -2788,101 +2601,41 @@ p_add_layer (gint width, */ static void -p_bender_calculate_iter_curve (BenderDialog *cd, - gint32 xmax, - gint32 ymax) +p_bender_calculate_iter_curve (BenderDialog *cd, + PikaProcedureConfig *config, + gint32 xmax, + gint32 ymax) { - gint x; - gint outline; - BenderDialog *cd_from; - BenderDialog *cd_to; + gint outline; + gint curve_type; - outline = cd->outline; + g_object_get (config, + "curve-type", &curve_type, + "curve-border", &outline, + NULL); - if ((cd->bval_from == NULL) || - (cd->bval_to == NULL) || - (cd->bval_curr == NULL)) + if (gb_debug) + g_printf ("p_bender_calculate_iter_curve NORMAL1\n"); + + if (curve_type == SMOOTH) { - if(gb_debug) g_printf("p_bender_calculate_iter_curve NORMAL1\n"); - if (cd->curve_type == SMOOTH) - { - cd->outline = OUTLINE_UPPER; - bender_calculate_curve (cd, xmax, ymax, FALSE); - cd->outline = OUTLINE_LOWER; - bender_calculate_curve (cd, xmax, ymax, FALSE); - } - else - { - p_stretch_curves(cd, xmax, ymax); - } + g_object_set (cd->config, + "curve-border", OUTLINE_UPPER, + NULL); + bender_calculate_curve (cd, xmax, ymax, FALSE); + g_object_set (cd->config, + "curve-border", OUTLINE_LOWER, + NULL); + bender_calculate_curve (cd, xmax, ymax, FALSE); } else { - /* compose curves by iterating between FROM/TO values */ - if(gb_debug) g_printf ("p_bender_calculate_iter_curve ITERmode 1\n"); - - /* init FROM curves */ - cd_from = g_new (BenderDialog, 1); - p_cd_from_bval (cd_from, cd->bval_from); - cd_from->curve_ptr[OUTLINE_UPPER] = g_new (gint32, 1+xmax); - cd_from->curve_ptr[OUTLINE_LOWER] = g_new (gint32, 1+xmax); - - /* init TO curves */ - cd_to = g_new (BenderDialog, 1); - p_cd_from_bval (cd_to, cd->bval_to); - cd_to->curve_ptr[OUTLINE_UPPER] = g_new (gint32, 1+xmax); - cd_to->curve_ptr[OUTLINE_LOWER] = g_new (gint32, 1+xmax); - - if (cd_from->curve_type == SMOOTH) - { - /* calculate FROM curves */ - cd_from->outline = OUTLINE_UPPER; - bender_calculate_curve (cd_from, xmax, ymax, FALSE); - cd_from->outline = OUTLINE_LOWER; - bender_calculate_curve (cd_from, xmax, ymax, FALSE); - } - else - { - p_stretch_curves (cd_from, xmax, ymax); - } - - if (cd_to->curve_type == SMOOTH) - { - /* calculate TO curves */ - cd_to->outline = OUTLINE_UPPER; - bender_calculate_curve (cd_to, xmax, ymax, FALSE); - cd_to->outline = OUTLINE_LOWER; - bender_calculate_curve (cd_to, xmax, ymax, FALSE); - } - else - { - p_stretch_curves (cd_to, xmax, ymax); - } - - /* MIX Y-koords of the curves according to current iteration step */ - for (x = 0; x <= xmax; x++) - { - p_delta_gint32 (&cd->curve_ptr[OUTLINE_UPPER][x], - cd_from->curve_ptr[OUTLINE_UPPER][x], - cd_to->curve_ptr[OUTLINE_UPPER][x], - cd->bval_curr->total_steps, - cd->bval_curr->current_step); - - p_delta_gint32 (&cd->curve_ptr[OUTLINE_LOWER][x], - cd_from->curve_ptr[OUTLINE_LOWER][x], - cd_to->curve_ptr[OUTLINE_LOWER][x], - cd->bval_curr->total_steps, - cd->bval_curr->current_step); - } - - g_free (cd_from->curve_ptr[OUTLINE_UPPER]); - g_free (cd_from->curve_ptr[OUTLINE_LOWER]); - - g_free (cd_from); - g_free (cd_to); + p_stretch_curves (cd, xmax, ymax); } - cd->outline = outline; + g_object_set (config, + "curve-border", outline, + NULL); } /* ============================================================================ @@ -2915,6 +2668,14 @@ p_vertical_bend (BenderDialog *cd, gint alias_dir; guchar mixmask; + gboolean antialias; + gboolean smoothing; + + g_object_get (cd->config, + "antialias", &antialias, + "smoothing", &smoothing, + NULL); + topshift = p_upper_curve_extend (cd, src_gdrw->width, src_gdrw->height); @@ -2985,18 +2746,18 @@ p_vertical_bend (BenderDialog *cd, desty = y + topshift + curvy; /* ----------- SMOOTHING ------------------ */ - if (cd->smoothing && (x > 0)) + if (smoothing && (x > 0)) { nb_curvy = p_curve_get_dy (cd, x -1, - (gint32)src_gdrw->width, - (gint32)src_gdrw->height, - (gdouble)y); + (gint32) src_gdrw->width, + (gint32) src_gdrw->height, + (gdouble) y); if ((nb_curvy == curvy) && (x > 1)) { nb2_curvy = p_curve_get_dy (cd, x -2, - (gint32)src_gdrw->width, - (gint32)src_gdrw->height, - (gdouble)y); + (gint32) src_gdrw->width, + (gint32) src_gdrw->height, + (gdouble) y); } else { @@ -3012,7 +2773,7 @@ p_vertical_bend (BenderDialog *cd, /* ----------- render ANTIALIAS ------------------ */ - if (cd->antialias) + if (antialias) { othery = desty; @@ -3060,9 +2821,12 @@ p_vertical_bend (BenderDialog *cd, (gdouble)(src_gdrw->y1)); } - if(desty < othery) { alias_dir = 1; } /* fade to transp. with descending dy */ - else if(desty > othery) { alias_dir = -1; } /* fade to transp. with ascending dy */ - else { alias_dir = 0; } /* no antialias at curve crossing point(s) */ + if (desty < othery) + alias_dir = 1; /* fade to transp. with descending dy */ + else if (desty > othery) + alias_dir = -1; /* fade to transp. with ascending dy */ + else + alias_dir = 0; /* no antialias at curve crossing point(s) */ if (alias_dir != 0) { @@ -3122,7 +2886,7 @@ p_vertical_bend (BenderDialog *cd, * space between using a mixed color */ - if (cd->smoothing) + if (smoothing) { /* smoothing is on, so we are using a mixed color */ gulong alpha1 = last_arr[x].color[3]; @@ -3159,7 +2923,7 @@ p_vertical_bend (BenderDialog *cd, } } - if (cd->smoothing) + if (smoothing) { p_put_mix_pixel (dst_gdrw, x, desty + (dy * sign), @@ -3193,9 +2957,10 @@ p_vertical_bend (BenderDialog *cd, */ static PikaLayer * -p_main_bend (BenderDialog *cd, - PikaDrawable *original_drawable, - gint work_on_copy) +p_main_bend (BenderDialog *cd, + PikaDrawable *original_drawable, + PikaProcedureConfig *config, + gint work_on_copy) { t_GDRW src_gdrw; t_GDRW dst_gdrw; @@ -3210,8 +2975,13 @@ p_main_bend (BenderDialog *cd, gint offset_x, offset_y; gint center_x, center_y; gint32 xmax, ymax; + gdouble rotation; + + g_object_get (config, + "smoothing", &interpolation, + "rotation", &rotation, + NULL); - interpolation = cd->smoothing; image = pika_item_get_image (PIKA_ITEM (original_drawable)); pika_drawable_get_offsets (original_drawable, &offset_x, &offset_y); @@ -3232,11 +3002,11 @@ p_main_bend (BenderDialog *cd, if(gb_debug) g_printf("p_main_bend tmp_layer_id %d\n", (int) pika_item_get_id (PIKA_ITEM (tmp_layer))); - if (cd->rotation != 0.0) + if (rotation != 0.0) { - if(gb_debug) g_printf("p_main_bend rotate: %f\n", (float)cd->rotation); + if(gb_debug) g_printf("p_main_bend rotate: %f\n", (float) rotation); p_pika_rotate (image, PIKA_DRAWABLE (tmp_layer), - interpolation, cd->rotation); + interpolation, rotation); } src_drawable = PIKA_DRAWABLE (tmp_layer); @@ -3248,8 +3018,8 @@ p_main_bend (BenderDialog *cd, cd->curve_ptr[OUTLINE_UPPER] = g_new (gint32, 1+xmax); cd->curve_ptr[OUTLINE_LOWER] = g_new (gint32, 1+xmax); - p_bender_calculate_iter_curve(cd, xmax, ymax); - bender_init_min_max(cd, xmax); + p_bender_calculate_iter_curve (cd, config, xmax, ymax); + bender_init_min_max (cd, xmax); dst_height = src_height + p_upper_curve_extend(cd, src_width, src_height) @@ -3292,10 +3062,10 @@ p_main_bend (BenderDialog *cd, p_end_gdrw (&src_gdrw); p_end_gdrw (&dst_gdrw); - if (cd->rotation != 0.0) + if (rotation != 0.0) { p_pika_rotate (image, dst_drawable, - interpolation, (gdouble)(360.0 - cd->rotation)); + interpolation, (gdouble)(360.0 - rotation)); /* TODO: here we should crop dst_drawable to cut off full transparent borderpixels */ } diff --git a/plug-ins/common/decompose.c b/plug-ins/common/decompose.c index 32fca4a..8a5b3d1 100644 --- a/plug-ins/common/decompose.c +++ b/plug-ins/common/decompose.c @@ -91,7 +91,7 @@ struct _DecomposeClass #define DECOMPOSE_TYPE (decompose_get_type ()) -#define DECOMPOSE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DECOMPOSE_TYPE, Decompose)) +#define DECOMPOSE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DECOMPOSE_TYPE, Decompose)) GType decompose_get_type (void) G_GNUC_CONST; @@ -104,7 +104,7 @@ static PikaValueArray * decompose_run (PikaProcedure *proced PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gint decompose (PikaImage *image, @@ -355,20 +355,19 @@ decompose_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaDrawable *drawable; - gint num_images; - PikaImage *image_extract[MAX_EXTRACT_IMAGES]; - PikaLayer *layer_extract[MAX_EXTRACT_IMAGES]; - gint num_layers; - GString *data; - gchar *decompose_type; - gchar *tmp; - gint j; + PikaValueArray *return_vals; + PikaDrawable *drawable; + gint num_images; + PikaImage *image_extract[MAX_EXTRACT_IMAGES]; + PikaLayer *layer_extract[MAX_EXTRACT_IMAGES]; + gint num_layers; + GString *data; + gchar *decompose_type; + gchar *tmp; + gint j; gegl_init (NULL, NULL); @@ -389,9 +388,6 @@ decompose_run (PikaProcedure *procedure, drawable = drawables[0]; } - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - g_object_get (config, "decompose-type", &decompose_type, NULL); @@ -405,15 +401,8 @@ decompose_run (PikaProcedure *procedure, g_free (tmp); - if (run_mode == PIKA_RUN_INTERACTIVE) - { - if (! decompose_dialog (procedure, G_OBJECT (config))) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - } + if (run_mode == PIKA_RUN_INTERACTIVE && ! decompose_dialog (procedure, G_OBJECT (config))) + return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, NULL); pika_progress_init (_("Decomposing")); @@ -425,14 +414,7 @@ decompose_run (PikaProcedure *procedure, layer_extract); if (num_images <= 0) - { - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - NULL); - } + return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); /* create decompose-data parasite */ data = g_string_new (""); @@ -473,9 +455,6 @@ decompose_run (PikaProcedure *procedure, pika_display_new (image_extract[j]); } - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - pika_progress_end (); return return_vals; diff --git a/plug-ins/common/depth-merge.c b/plug-ins/common/depth-merge.c index 241d784..c80b8be 100644 --- a/plug-ins/common/depth-merge.c +++ b/plug-ins/common/depth-merge.c @@ -51,15 +51,18 @@ #define PREVIEW_SIZE 256 -/* ----- DepthMerge ----- */ +typedef struct _Merge Merge; +typedef struct _MergeClass MergeClass; -struct _DepthMerge; - -typedef struct _DepthMergeInterface +struct _Merge { - gboolean active; + PikaPlugIn parent_instance; - GtkWidget *dialog; + gint selectionX; + gint selectionY; + gint selectionWidth; + gint selectionHeight; + gint resultHasAlpha; GtkWidget *preview; gint previewWidth; @@ -69,45 +72,8 @@ typedef struct _DepthMergeInterface guchar *previewSource2; guchar *previewDepthMap1; guchar *previewDepthMap2; -} DepthMergeInterface; -typedef struct _DepthMergeParams -{ - gint32 result_id; - gint32 source1_id; - gint32 source2_id; - gint32 depthMap1_id; - gint32 depthMap2_id; - gfloat overlap; - gfloat offset; - gfloat scale1; - gfloat scale2; -} DepthMergeParams; - -typedef struct _DepthMerge -{ - DepthMergeInterface *interface; - DepthMergeParams params; - - PikaDrawable *resultDrawable; - PikaDrawable *source1Drawable; - PikaDrawable *source2Drawable; - PikaDrawable *depthMap1Drawable; - PikaDrawable *depthMap2Drawable; - gint selectionX; - gint selectionY; - gint selectionWidth; - gint selectionHeight; - gint resultHasAlpha; -} DepthMerge; - - -typedef struct _Merge Merge; -typedef struct _MergeClass MergeClass; - -struct _Merge -{ - PikaPlugIn parent_instance; + PikaProcedureConfig *config; }; struct _MergeClass @@ -116,64 +82,64 @@ struct _MergeClass }; -#define MERGE_TYPE (merge_get_type ()) -#define MERGE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MERGE_TYPE, Merge)) +#define MERGE_TYPE (merge_get_type ()) +#define MERGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MERGE_TYPE, Merge)) -GType merge_get_type (void) G_GNUC_CONST; +GType merge_get_type (void) G_GNUC_CONST; -static GList * merge_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * merge_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static void merge_finalize (GObject *object); -static PikaValueArray * merge_run (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - const PikaValueArray *args, - gpointer run_data); +static GList * merge_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * merge_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static void DepthMerge_initParams (DepthMerge *dm); -static gboolean DepthMerge_construct (DepthMerge *dm); -static void DepthMerge_destroy (DepthMerge *dm); -static gint32 DepthMerge_execute (DepthMerge *dm); -static void DepthMerge_executeRegion (DepthMerge *dm, - guchar *source1Row, - guchar *source2Row, - guchar *depthMap1Row, - guchar *depthMap2Row, - guchar *resultRow, - gint length); -static gboolean DepthMerge_dialog (DepthMerge *dm); -static void DepthMerge_buildPreviewSourceImage (DepthMerge *dm); -static void DepthMerge_updatePreview (DepthMerge *dm); +static PikaValueArray * merge_run (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + PikaProcedureConfig *config, + gpointer run_data); + +static gint32 DepthMerge_execute (Merge *dm, + PikaDrawable *resultDrawable, + PikaProcedureConfig *config); +static void DepthMerge_executeRegion (PikaProcedureConfig *config, + guchar *source1Row, + guchar *source2Row, + guchar *depthMap1Row, + guchar *depthMap2Row, + guchar *resultRow, + gint length, + gfloat overlap, + gfloat offset, + gfloat scale1, + gfloat scale2); +static gboolean DepthMerge_dialog (Merge *merge, + PikaProcedure *procedure, + PikaProcedureConfig *config); +static void DepthMerge_buildPreviewSourceImage (Merge *dm, + PikaProcedureConfig *config); +static void DepthMerge_updatePreview (Merge *dm, + PikaProcedureConfig *config); -static gboolean dm_constraint (PikaImage *image, - PikaItem *item, - gpointer data); +static void util_fillReducedBuffer (guchar *dest, + const Babl *dest_format, + gint destWidth, + gint destHeight, + PikaDrawable *sourceDrawable, + gint x0, + gint y0, + gint sourceWidth, + gint sourceHeight); -static void dialogSource1ChangedCallback (GtkWidget *widget, - DepthMerge *dm); -static void dialogSource2ChangedCallback (GtkWidget *widget, - DepthMerge *dm); -static void dialogDepthMap1ChangedCallback (GtkWidget *widget, - DepthMerge *dm); -static void dialogDepthMap2ChangedCallback (GtkWidget *widget, - DepthMerge *dm); - -static void dialogValueScaleUpdateCallback (PikaLabelSpin *scale, - gfloat *value); - -static void util_fillReducedBuffer (guchar *dest, - const Babl *dest_format, - gint destWidth, - gint destHeight, - PikaDrawable *sourceDrawable, - gint x0, - gint y0, - gint sourceWidth, - gint sourceHeight); +static void merge_preview_size_allocate (GtkWidget *widget, + GtkAllocation *allocation, + Merge *dm); +static void merge_preview_config_notify (PikaProcedureConfig *config, + const GParamSpec *pspec, + Merge *dm); G_DEFINE_TYPE (Merge, merge, PIKA_TYPE_PLUG_IN) @@ -185,8 +151,11 @@ DEFINE_STD_SET_I18N static void merge_class_init (MergeClass *klass) { + GObjectClass *object_class = G_OBJECT_CLASS (klass); PikaPlugInClass *plug_in_class = PIKA_PLUG_IN_CLASS (klass); + object_class->finalize = merge_finalize; + plug_in_class->query_procedures = merge_query_procedures; plug_in_class->create_procedure = merge_create_procedure; plug_in_class->set_i18n = STD_SET_I18N; @@ -195,6 +164,23 @@ merge_class_init (MergeClass *klass) static void merge_init (Merge *merge) { + merge->previewSource1 = NULL; + merge->previewSource2 = NULL; + merge->previewDepthMap1 = NULL; + merge->previewDepthMap2 = NULL; +} + +static void +merge_finalize (GObject *object) +{ + Merge *merge = MERGE (object); + + g_free (merge->previewSource1); + g_free (merge->previewSource2); + g_free (merge->previewDepthMap1); + g_free (merge->previewDepthMap2); + + G_OBJECT_CLASS (merge_parent_class)->finalize (object); } static GList * @@ -205,7 +191,7 @@ merge_query_procedures (PikaPlugIn *plug_in) static PikaProcedure * merge_create_procedure (PikaPlugIn *plug_in, - const gchar *name) + const gchar *name) { PikaProcedure *procedure = NULL; @@ -238,49 +224,49 @@ merge_create_procedure (PikaPlugIn *plug_in, PLUG_IN_VERSION); PIKA_PROC_ARG_DRAWABLE (procedure, "source-1", + _("Source _1"), "Source 1", - "Source 1", - TRUE, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_DRAWABLE (procedure, "source-2", - "Source 2", - "Source 2", TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DRAWABLE (procedure, "depth-map-1", - "Depth map 1", + _("_Depth map 1"), "Depth map 1", TRUE, G_PARAM_READWRITE); + PIKA_PROC_ARG_DRAWABLE (procedure, "source-2", + _("Source _2"), + "Source 2", + TRUE, + G_PARAM_READWRITE); + PIKA_PROC_ARG_DRAWABLE (procedure, "depth-map-2", - "Depth map 2", + _("Depth _map 2"), "Depth map 2", TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "overlap", - "Overlap", + _("O_verlap"), "Overlap", 0, 2, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "offset", - "Offset", - "Depth relative offset", + _("O_ffset"), + _("Depth relative offset"), -1, 1, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "scale-1", - "Scale 1", + _("Sc_ale 1"), "Depth relative scale 1", -1, 1, 1, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "scale-2", - "Scale 2", + _("Scal_e 2"), "Depth relative scale 2", -1, 1, 1, G_PARAM_READWRITE); @@ -295,11 +281,11 @@ merge_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; - DepthMerge dm; + Merge *merge = MERGE (pika_procedure_get_plug_in (procedure)); gegl_init (NULL, NULL); @@ -320,159 +306,80 @@ merge_run (PikaProcedure *procedure, drawable = drawables[0]; } - DepthMerge_initParams (&dm); + merge->config = config; + if (! pika_drawable_mask_intersect (drawable, + &(merge->selectionX), &(merge->selectionY), + &(merge->selectionWidth), + &(merge->selectionHeight))) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + g_error_new_literal (PIKA_PLUG_IN_ERROR, 0, + _("The selection does not intersect with the input drawable."))); - switch (run_mode) + if (run_mode == PIKA_RUN_INTERACTIVE) { - case PIKA_RUN_INTERACTIVE: - pika_get_data (PLUG_IN_PROC, &dm.params); + g_object_set (config, + "source-1", drawable, + "source-2", drawable, + "depth-map-1", drawable, + "depth-map-2", drawable, + NULL); - dm.params.result_id = pika_item_get_id (PIKA_ITEM (drawable)); - - if (! DepthMerge_construct (&dm)) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - NULL); - } - - if (! DepthMerge_dialog (&dm)) - { - DepthMerge_destroy (&dm); - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - case PIKA_RUN_NONINTERACTIVE: - dm.params.result_id = pika_item_get_id (PIKA_ITEM (drawable)); - - dm.params.source1_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 0); - dm.params.source2_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 1); - dm.params.depthMap1_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 2); - dm.params.depthMap2_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 3); - dm.params.overlap = PIKA_VALUES_GET_DOUBLE (args, 4); - dm.params.offset = PIKA_VALUES_GET_DOUBLE (args, 5); - dm.params.scale1 = PIKA_VALUES_GET_DOUBLE (args, 6); - dm.params.scale2 = PIKA_VALUES_GET_DOUBLE (args, 7); - - if (! DepthMerge_construct (&dm)) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - NULL); - } - break; - - case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (PLUG_IN_PROC, &dm.params); - - if (! DepthMerge_construct (&dm)) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - NULL); - } - break; + if (! DepthMerge_dialog (merge, procedure, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); } - if (! DepthMerge_execute (&dm)) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - NULL); - } - else - { - if (run_mode != PIKA_RUN_NONINTERACTIVE) - pika_displays_flush (); - - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &dm.params, sizeof (DepthMergeParams)); - } - - DepthMerge_destroy (&dm); + if (! DepthMerge_execute (merge, drawable, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, NULL); + else if (run_mode != PIKA_RUN_NONINTERACTIVE) + pika_displays_flush (); return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } /* ----- DepthMerge ----- */ -static void -DepthMerge_initParams (DepthMerge *dm) -{ - dm->params.result_id = -1; - dm->params.source1_id = -1; - dm->params.source2_id = -1; - dm->params.depthMap1_id = -1; - dm->params.depthMap2_id = -1; - dm->params.overlap = 0; - dm->params.offset = 0; - dm->params.scale1 = 1; - dm->params.scale2 = 1; -} - -static gboolean -DepthMerge_construct (DepthMerge *dm) -{ - dm->interface = NULL; - - dm->resultDrawable = pika_drawable_get_by_id (dm->params.result_id); - - if (! pika_drawable_mask_intersect (dm->resultDrawable, - &(dm->selectionX), &(dm->selectionY), - &(dm->selectionWidth), - &(dm->selectionHeight))) - { - return FALSE; - } - - dm->resultHasAlpha = pika_drawable_has_alpha (dm->resultDrawable); - - dm->source1Drawable = pika_drawable_get_by_id (dm->params.source1_id); - dm->source2Drawable = pika_drawable_get_by_id (dm->params.source2_id); - - dm->depthMap1Drawable = pika_drawable_get_by_id (dm->params.depthMap1_id); - dm->depthMap2Drawable = pika_drawable_get_by_id (dm->params.depthMap2_id); - - dm->params.overlap = CLAMP (dm->params.overlap, 0, 2); - dm->params.offset = CLAMP (dm->params.offset, -1, 1); - dm->params.scale1 = CLAMP (dm->params.scale1, -1, 1); - dm->params.scale2 = CLAMP (dm->params.scale2, -1, 1); - - return TRUE; -} - -static void -DepthMerge_destroy (DepthMerge *dm) -{ - if (dm->interface != NULL) - { - g_free (dm->interface->previewSource1); - g_free (dm->interface->previewSource2); - g_free (dm->interface->previewDepthMap1); - g_free (dm->interface->previewDepthMap2); - g_free (dm->interface); - } -} - static gint32 -DepthMerge_execute (DepthMerge *dm) +DepthMerge_execute (Merge *dm, + PikaDrawable *resultDrawable, + PikaProcedureConfig *config) { int x, y; GeglBuffer *source1_buffer = NULL; GeglBuffer *source2_buffer = NULL; GeglBuffer *depthMap1_buffer = NULL; GeglBuffer *depthMap2_buffer = NULL; - GeglBuffer *result_buffer; + GeglBuffer *result_buffer = NULL; guchar *source1Row, *source2Row; guchar *depthMap1Row, *depthMap2Row; guchar *resultRow; guchar *tempRow; + PikaDrawable *source1Drawable = NULL; + PikaDrawable *source2Drawable = NULL; + PikaDrawable *depthMap1Drawable = NULL; + PikaDrawable *depthMap2Drawable = NULL; + gdouble overlap = 0.0; + gdouble offset = 0.0; + gdouble scale1 = 0.0; + gdouble scale2 = 0.0; + pika_progress_init (_("Depth-merging")); + g_object_get (config, + "source-1", &source1Drawable, + "source-2", &source2Drawable, + "depth-map-1", &depthMap1Drawable, + "depth-map-2", &depthMap2Drawable, + "overlap", &overlap, + "offset", &offset, + "scale-1", &scale1, + "scale-2", &scale2, + NULL); + resultRow = g_new (guchar, dm->selectionWidth * 4); source1Row = g_new (guchar, dm->selectionWidth * 4); source2Row = g_new (guchar, dm->selectionWidth * 4); @@ -480,9 +387,9 @@ DepthMerge_execute (DepthMerge *dm) depthMap2Row = g_new (guchar, dm->selectionWidth ); tempRow = g_new (guchar, dm->selectionWidth * 4); - if (dm->source1Drawable) + if (source1Drawable) { - source1_buffer = pika_drawable_get_buffer (dm->source1Drawable); + source1_buffer = pika_drawable_get_buffer (source1Drawable); } else { @@ -495,9 +402,9 @@ DepthMerge_execute (DepthMerge *dm) } } - if (dm->source2Drawable) + if (source2Drawable) { - source2_buffer = pika_drawable_get_buffer (dm->source2Drawable); + source2_buffer = pika_drawable_get_buffer (source2Drawable); } else { @@ -510,74 +417,62 @@ DepthMerge_execute (DepthMerge *dm) } } - if (dm->depthMap1Drawable) + if (depthMap1Drawable) { - depthMap1_buffer = pika_drawable_get_buffer (dm->depthMap1Drawable); + depthMap1_buffer = pika_drawable_get_buffer (depthMap1Drawable); } else { for (x = 0; x < dm->selectionWidth; x++) - { - depthMap1Row[x] = 0; - } + depthMap1Row[x] = 0; } - if (dm->depthMap2Drawable) + if (depthMap2Drawable) { - depthMap2_buffer = pika_drawable_get_buffer (dm->depthMap2Drawable); + depthMap2_buffer = pika_drawable_get_buffer (depthMap2Drawable); } else { for (x = 0; x < dm->selectionWidth; x++) - { - depthMap2Row[x] = 0; - } + depthMap2Row[x] = 0; } - result_buffer = pika_drawable_get_shadow_buffer (dm->resultDrawable); + result_buffer = pika_drawable_get_shadow_buffer (resultDrawable); for (y = dm->selectionY; y < (dm->selectionY + dm->selectionHeight); y++) { - if (dm->source1Drawable) - { - gegl_buffer_get (source1_buffer, - GEGL_RECTANGLE (dm->selectionX, y, - dm->selectionWidth, 1), 1.0, - babl_format ("R'G'B'A u8"), source1Row, - GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); - } + if (source1Drawable) + gegl_buffer_get (source1_buffer, + GEGL_RECTANGLE (dm->selectionX, y, + dm->selectionWidth, 1), 1.0, + babl_format ("R'G'B'A u8"), source1Row, + GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); - if (dm->source2Drawable) - { - gegl_buffer_get (source2_buffer, - GEGL_RECTANGLE (dm->selectionX, y, - dm->selectionWidth, 1), 1.0, - babl_format ("R'G'B'A u8"), source2Row, - GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); - } + if (source2Drawable) + gegl_buffer_get (source2_buffer, + GEGL_RECTANGLE (dm->selectionX, y, + dm->selectionWidth, 1), 1.0, + babl_format ("R'G'B'A u8"), source2Row, + GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); - if (dm->depthMap1Drawable) - { - gegl_buffer_get (depthMap1_buffer, - GEGL_RECTANGLE (dm->selectionX, y, - dm->selectionWidth, 1), 1.0, - babl_format ("Y' u8"), depthMap1Row, - GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); - } + if (depthMap1Drawable) + gegl_buffer_get (depthMap1_buffer, + GEGL_RECTANGLE (dm->selectionX, y, + dm->selectionWidth, 1), 1.0, + babl_format ("Y' u8"), depthMap1Row, + GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); - if (dm->depthMap2Drawable) - { - gegl_buffer_get (depthMap2_buffer, - GEGL_RECTANGLE (dm->selectionX, y, - dm->selectionWidth, 1), 1.0, - babl_format ("Y' u8"), depthMap2Row, - GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); - } + if (depthMap2Drawable) + gegl_buffer_get (depthMap2_buffer, + GEGL_RECTANGLE (dm->selectionX, y, + dm->selectionWidth, 1), 1.0, + babl_format ("Y' u8"), depthMap2Row, + GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); - DepthMerge_executeRegion (dm, + DepthMerge_executeRegion (config, source1Row, source2Row, depthMap1Row, depthMap2Row, resultRow, - dm->selectionWidth); + dm->selectionWidth, overlap, offset, scale1, scale2); gegl_buffer_set (result_buffer, GEGL_RECTANGLE (dm->selectionX, y, @@ -589,6 +484,10 @@ DepthMerge_execute (DepthMerge *dm) (double)(dm->selectionHeight - 1)); } + g_clear_object (&source1Drawable); + g_clear_object (&source2Drawable); + g_clear_object (&depthMap1Drawable); + g_clear_object (&depthMap2Drawable); g_free (resultRow); g_free (source1Row); g_free (source2Row); @@ -598,22 +497,14 @@ DepthMerge_execute (DepthMerge *dm) pika_progress_update (1.0); - if (source1_buffer) - g_object_unref (source1_buffer); + g_clear_object (&source1_buffer); + g_clear_object (&source2_buffer); + g_clear_object (&depthMap1_buffer); + g_clear_object (&depthMap2_buffer); + g_clear_object (&result_buffer); - if (source2_buffer) - g_object_unref (source2_buffer); - - if (depthMap1_buffer) - g_object_unref (depthMap1_buffer); - - if (depthMap2_buffer) - g_object_unref (depthMap2_buffer); - - g_object_unref (result_buffer); - - pika_drawable_merge_shadow (dm->resultDrawable, TRUE); - pika_drawable_update (dm->resultDrawable, + pika_drawable_merge_shadow (resultDrawable, TRUE); + pika_drawable_update (resultDrawable, dm->selectionX, dm->selectionY, dm->selectionWidth, dm->selectionHeight); @@ -621,25 +512,27 @@ DepthMerge_execute (DepthMerge *dm) } static void -DepthMerge_executeRegion (DepthMerge *dm, - guchar *source1Row, - guchar *source2Row, - guchar *depthMap1Row, - guchar *depthMap2Row, - guchar *resultRow, - gint length) +DepthMerge_executeRegion (PikaProcedureConfig *config, + guchar *source1Row, + guchar *source2Row, + guchar *depthMap1Row, + guchar *depthMap2Row, + guchar *resultRow, + gint length, + gfloat overlap, + gfloat offset, + gfloat scale1, + gfloat scale2) { - gfloat scale1, scale2, offset255, invOverlap255; + gfloat offset255, invOverlap255; gfloat frac, depth1, depth2; gushort c1[4], c2[4]; gushort cR1[4] = { 0, 0, 0, 0 }, cR2[4] = { 0, 0, 0, 0 }; gushort cR[4], temp; gint i, tempInt; - invOverlap255 = 1.0 / (MAX (dm->params.overlap, 0.001) * 255); - offset255 = dm->params.offset * 255; - scale1 = dm->params.scale1; - scale2 = dm->params.scale2; + invOverlap255 = 1.0 / (MAX (overlap, 0.001) * 255); + offset255 = offset * 255; for (i = 0; i < length; i++) { @@ -714,377 +607,154 @@ DepthMerge_executeRegion (DepthMerge *dm, } static gboolean -DepthMerge_dialog (DepthMerge *dm) +DepthMerge_dialog (Merge *merge, + PikaProcedure *procedure, + PikaProcedureConfig *config) { GtkWidget *dialog; - GtkWidget *vbox; - GtkWidget *frame; - GtkWidget *grid; - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *combo; - GtkWidget *scale; gboolean run; - dm->interface = g_new0 (DepthMergeInterface, 1); - pika_ui_init (PLUG_IN_BINARY); - dm->interface->dialog = - dialog = pika_dialog_new (_("Depth Merge"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - pika_window_set_transient (GTK_WINDOW (dialog)); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - vbox, FALSE, FALSE, 0); - gtk_widget_show (vbox); - + dialog = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Depth Merge")); /* Preview */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); + merge->previewWidth = MIN (merge->selectionWidth, PREVIEW_SIZE); + merge->previewHeight = MIN (merge->selectionHeight, PREVIEW_SIZE); + merge->preview = pika_preview_area_new (); + DepthMerge_buildPreviewSourceImage (merge, config); + g_signal_connect (merge->preview, "size-allocate", + G_CALLBACK (merge_preview_size_allocate), + merge); + gtk_widget_set_size_request (merge->preview, + merge->previewWidth, + merge->previewHeight); + gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), + merge->preview, TRUE, TRUE, 0); + gtk_widget_show (merge->preview); - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); + g_signal_connect (config, "notify", + G_CALLBACK (merge_preview_config_notify), + merge); - dm->interface->previewWidth = MIN (dm->selectionWidth, PREVIEW_SIZE); - dm->interface->previewHeight = MIN (dm->selectionHeight, PREVIEW_SIZE); - dm->interface->preview = pika_preview_area_new (); - gtk_widget_set_size_request (dm->interface->preview, - dm->interface->previewWidth, - dm->interface->previewHeight); - gtk_container_add (GTK_CONTAINER (frame), dm->interface->preview); - gtk_widget_show (dm->interface->preview); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), NULL); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); - DepthMerge_buildPreviewSourceImage (dm); - - /* Source and Depth Map selection */ - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - label = gtk_label_new (_("Source 1:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); - gtk_widget_show (label); - - combo = pika_drawable_combo_box_new (dm_constraint, dm, NULL); - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), dm->params.source1_id, - G_CALLBACK (dialogSource1ChangedCallback), - dm, NULL); - - gtk_grid_attach (GTK_GRID (grid), combo, 1, 0, 2, 1); - gtk_widget_show (combo); - - label = gtk_label_new(_("Depth map:")); - gtk_widget_set_margin_bottom (label, 6); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); - gtk_widget_show (label); - - combo = pika_drawable_combo_box_new (dm_constraint, dm, NULL); - gtk_widget_set_margin_bottom (combo, 6); - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), dm->params.depthMap1_id, - G_CALLBACK (dialogDepthMap1ChangedCallback), - dm, NULL); - - gtk_grid_attach (GTK_GRID (grid), combo, 1, 1, 2, 1); - gtk_widget_show (combo); - - label = gtk_label_new (_("Source 2:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1); - gtk_widget_show (label); - - combo = pika_drawable_combo_box_new (dm_constraint, dm, NULL); - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), dm->params.source2_id, - G_CALLBACK (dialogSource2ChangedCallback), - dm, NULL); - - gtk_grid_attach (GTK_GRID (grid), combo, 1, 2, 2, 1); - gtk_widget_show (combo); - - label = gtk_label_new (_("Depth map:")); - gtk_widget_set_margin_bottom (label, 6); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1); - gtk_widget_show (label); - - combo = pika_drawable_combo_box_new (dm_constraint, dm, NULL); - gtk_widget_set_margin_bottom (combo, 6); - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), dm->params.depthMap2_id, - G_CALLBACK (dialogDepthMap2ChangedCallback), - dm, NULL); - - gtk_grid_attach (GTK_GRID (grid), combo, 1, 3, 2, 1); - gtk_widget_show (combo); - - /* Numeric parameters */ - scale = pika_scale_entry_new (_("O_verlap:"), dm->params.overlap, 0, 2, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (dialogValueScaleUpdateCallback), - &(dm->params.overlap)); - g_object_set_data (G_OBJECT (scale), "dm", dm); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 4, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("O_ffset:"), dm->params.offset, -1, 1, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (dialogValueScaleUpdateCallback), - &(dm->params.offset)); - g_object_set_data (G_OBJECT (scale), "dm", dm); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 5, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Sc_ale 1:"), dm->params.scale1, -1, 1, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (dialogValueScaleUpdateCallback), - &(dm->params.scale1)); - g_object_set_data (G_OBJECT (scale), "dm", dm); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 6, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Sca_le 2:"), dm->params.scale2, -1, 1, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (dialogValueScaleUpdateCallback), - &(dm->params.scale2)); - g_object_set_data (G_OBJECT (scale), "dm", dm); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 7, 3, 1); - gtk_widget_show (scale); - - dm->interface->active = TRUE; - - gtk_widget_show (dm->interface->dialog); - DepthMerge_updatePreview (dm); - - run = (pika_dialog_run (PIKA_DIALOG (dm->interface->dialog)) == GTK_RESPONSE_OK); - - gtk_widget_destroy (dm->interface->dialog); - dm->interface->dialog = NULL; + gtk_widget_destroy (dialog); return run; } static void -DepthMerge_buildPreviewSourceImage (DepthMerge *dm) +DepthMerge_buildPreviewSourceImage (Merge *dm, + PikaProcedureConfig *config) { - dm->interface->previewSource1 = - g_new (guchar, dm->interface->previewWidth * - dm->interface->previewHeight * 4); - util_fillReducedBuffer (dm->interface->previewSource1, + PikaDrawable *source1Drawable; + PikaDrawable *source2Drawable; + PikaDrawable *depthMap1Drawable; + PikaDrawable *depthMap2Drawable; + + g_object_get (config, + "source-1", &source1Drawable, + "source-2", &source2Drawable, + "depth-map-1", &depthMap1Drawable, + "depth-map-2", &depthMap2Drawable, + NULL); + + dm->previewSource1 = g_new (guchar, dm->previewWidth * dm->previewHeight * 4); + util_fillReducedBuffer (dm->previewSource1, babl_format ("R'G'B'A u8"), - dm->interface->previewWidth, - dm->interface->previewHeight, - dm->source1Drawable, + dm->previewWidth, + dm->previewHeight, + source1Drawable, dm->selectionX, dm->selectionY, dm->selectionWidth, dm->selectionHeight); - dm->interface->previewSource2 = - g_new (guchar, dm->interface->previewWidth * - dm->interface->previewHeight * 4); - util_fillReducedBuffer (dm->interface->previewSource2, + dm->previewSource2 = g_new (guchar, dm->previewWidth * dm->previewHeight * 4); + util_fillReducedBuffer (dm->previewSource2, babl_format ("R'G'B'A u8"), - dm->interface->previewWidth, - dm->interface->previewHeight, - dm->source2Drawable, + dm->previewWidth, + dm->previewHeight, + source2Drawable, dm->selectionX, dm->selectionY, dm->selectionWidth, dm->selectionHeight); - dm->interface->previewDepthMap1 = - g_new (guchar, dm->interface->previewWidth * - dm->interface->previewHeight * 1); - util_fillReducedBuffer (dm->interface->previewDepthMap1, + dm->previewDepthMap1 = g_new (guchar, dm->previewWidth * dm->previewHeight * 1); + util_fillReducedBuffer (dm->previewDepthMap1, babl_format ("Y' u8"), - dm->interface->previewWidth, - dm->interface->previewHeight, - dm->depthMap1Drawable, + dm->previewWidth, + dm->previewHeight, + depthMap1Drawable, dm->selectionX, dm->selectionY, dm->selectionWidth, dm->selectionHeight); - dm->interface->previewDepthMap2 = - g_new (guchar, dm->interface->previewWidth * - dm->interface->previewHeight * 1); - util_fillReducedBuffer (dm->interface->previewDepthMap2, + dm->previewDepthMap2 = g_new (guchar, dm->previewWidth * dm->previewHeight * 1); + util_fillReducedBuffer (dm->previewDepthMap2, babl_format ("Y' u8"), - dm->interface->previewWidth, - dm->interface->previewHeight, - dm->depthMap2Drawable, + dm->previewWidth, + dm->previewHeight, + depthMap2Drawable, dm->selectionX, dm->selectionY, dm->selectionWidth, dm->selectionHeight); + + g_clear_object (&source1Drawable); + g_clear_object (&source2Drawable); + g_clear_object (&depthMap1Drawable); + g_clear_object (&depthMap2Drawable); } static void -DepthMerge_updatePreview (DepthMerge *dm) +DepthMerge_updatePreview (Merge *dm, + PikaProcedureConfig *config) { gint y; guchar *source1Row, *source2Row; guchar *depthMap1Row, *depthMap2Row; guchar *resultRGBA; + gdouble overlap = 0.0; + gdouble offset = 0.0; + gdouble scale1 = 0.0; + gdouble scale2 = 0.0; - if (!dm->interface->active) - return; + g_object_get (config, + "overlap", &overlap, + "offset", &offset, + "scale-1", &scale1, + "scale-2", &scale2, + NULL); - resultRGBA = g_new (guchar, 4 * dm->interface->previewWidth * - dm->interface->previewHeight); + resultRGBA = g_new (guchar, 4 * dm->previewWidth * + dm->previewHeight); - for (y = 0; y < dm->interface->previewHeight; y++) + for (y = 0; y < dm->previewHeight; y++) { source1Row = - &(dm->interface->previewSource1[ y * dm->interface->previewWidth * 4]); + &(dm->previewSource1[ y * dm->previewWidth * 4]); source2Row = - &(dm->interface->previewSource2[ y * dm->interface->previewWidth * 4]); + &(dm->previewSource2[ y * dm->previewWidth * 4]); depthMap1Row = - &(dm->interface->previewDepthMap1[y * dm->interface->previewWidth ]); + &(dm->previewDepthMap1[y * dm->previewWidth ]); depthMap2Row = - &(dm->interface->previewDepthMap2[y * dm->interface->previewWidth ]); + &(dm->previewDepthMap2[y * dm->previewWidth ]); - DepthMerge_executeRegion(dm, - source1Row, source2Row, depthMap1Row, depthMap2Row, - resultRGBA + 4 * y * dm->interface->previewWidth, - dm->interface->previewWidth); + DepthMerge_executeRegion (config, + source1Row, source2Row, depthMap1Row, depthMap2Row, + resultRGBA + 4 * y * dm->previewWidth, + dm->previewWidth, overlap, offset, scale1, scale2); } - pika_preview_area_draw (PIKA_PREVIEW_AREA (dm->interface->preview), + pika_preview_area_draw (PIKA_PREVIEW_AREA (dm->preview), 0, 0, - dm->interface->previewWidth, - dm->interface->previewHeight, + dm->previewWidth, + dm->previewHeight, PIKA_RGBA_IMAGE, resultRGBA, - dm->interface->previewWidth * 4); - g_free(resultRGBA); + dm->previewWidth * 4); + gtk_widget_show (dm->preview); + g_free (resultRGBA); } -/* ----- Callbacks ----- */ - -static gboolean -dm_constraint (PikaImage *image, - PikaItem *item, - gpointer data) -{ - DepthMerge *dm = data; - PikaDrawable *drawable = PIKA_DRAWABLE (item); - - return ((pika_drawable_get_width (drawable) == - pika_drawable_get_width (dm->resultDrawable)) && - (pika_drawable_get_height (drawable) == - pika_drawable_get_height (dm->resultDrawable)) && - ((pika_drawable_is_rgb (drawable) && - (pika_drawable_is_rgb (dm->resultDrawable))) || - pika_drawable_is_gray (drawable))); -} - -static void -dialogSource1ChangedCallback (GtkWidget *widget, - DepthMerge *dm) -{ - pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (widget), - &dm->params.source1_id); - - dm->source1Drawable = pika_drawable_get_by_id (dm->params.source1_id); - - util_fillReducedBuffer (dm->interface->previewSource1, - babl_format ("R'G'B'A u8"), - dm->interface->previewWidth, - dm->interface->previewHeight, - dm->source1Drawable, - dm->selectionX, dm->selectionY, - dm->selectionWidth, dm->selectionHeight); - - DepthMerge_updatePreview (dm); -} - -static void -dialogSource2ChangedCallback (GtkWidget *widget, - DepthMerge *dm) -{ - pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (widget), - &dm->params.source2_id); - - dm->source2Drawable = pika_drawable_get_by_id (dm->params.source2_id); - - util_fillReducedBuffer (dm->interface->previewSource2, - babl_format ("R'G'B'A u8"), - dm->interface->previewWidth, - dm->interface->previewHeight, - dm->source2Drawable, - dm->selectionX, dm->selectionY, - dm->selectionWidth, dm->selectionHeight); - - DepthMerge_updatePreview (dm); -} - -static void -dialogDepthMap1ChangedCallback (GtkWidget *widget, - DepthMerge *dm) -{ - pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (widget), - &dm->params.depthMap1_id); - - dm->depthMap1Drawable = pika_drawable_get_by_id (dm->params.depthMap1_id); - - util_fillReducedBuffer (dm->interface->previewDepthMap1, - babl_format ("Y' u8"), - dm->interface->previewWidth, - dm->interface->previewHeight, - dm->depthMap1Drawable, - dm->selectionX, dm->selectionY, - dm->selectionWidth, dm->selectionHeight); - - DepthMerge_updatePreview (dm); -} - -static void -dialogDepthMap2ChangedCallback (GtkWidget *widget, - DepthMerge *dm) -{ - pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (widget), - &dm->params.depthMap2_id); - - dm->depthMap2Drawable = pika_drawable_get_by_id (dm->params.depthMap2_id); - - util_fillReducedBuffer (dm->interface->previewDepthMap2, - babl_format ("Y' u8"), - dm->interface->previewWidth, - dm->interface->previewHeight, - dm->depthMap2Drawable, - dm->selectionX, dm->selectionY, - dm->selectionWidth, dm->selectionHeight); - - DepthMerge_updatePreview (dm); -} - -static void -dialogValueScaleUpdateCallback (PikaLabelSpin *scale, - gfloat *value) -{ - DepthMerge *dm = g_object_get_data (G_OBJECT (scale), "dm"); - - *value = (gfloat) pika_label_spin_get_value (scale); - - DepthMerge_updatePreview (dm); -} /* ----- Utility routines ----- */ @@ -1155,3 +825,60 @@ util_fillReducedBuffer (guchar *dest, g_free (reducedRowBuffer); g_free (sourceRowOffsetLookup); } + + +/* Signal handlers */ + +static void +merge_preview_size_allocate (GtkWidget *widget, + GtkAllocation *allocation, + Merge *dm) +{ + DepthMerge_updatePreview (dm, dm->config); +} + +static void +merge_preview_config_notify (PikaProcedureConfig *config, + const GParamSpec *pspec, + Merge *dm) +{ + PikaDrawable *drawable = NULL; + guchar *dest = NULL; + const Babl *format = NULL; + + if (g_strcmp0 (pspec->name, "source-1") == 0) + { + g_object_get (config, "source-1", &drawable, NULL); + dest = dm->previewSource1; + format = babl_format ("R'G'B'A u8"); + } + else if (g_strcmp0 (pspec->name, "source-2") == 0) + { + g_object_get (config, "source-2", &drawable, NULL); + dest = dm->previewSource2; + format = babl_format ("R'G'B'A u8"); + } + else if (g_strcmp0 (pspec->name, "depth-map-1") == 0) + { + g_object_get (config, "depth-map-1", &drawable, NULL); + dest = dm->previewDepthMap1, + format = babl_format ("Y' u8"); + } + else if (g_strcmp0 (pspec->name, "depth-map-2") == 0) + { + g_object_get (config, "depth-map-2", &drawable, NULL); + dest = dm->previewDepthMap2, + format = babl_format ("Y' u8"); + } + + if (drawable != NULL) + util_fillReducedBuffer (dest, format, + dm->previewWidth, + dm->previewHeight, + drawable, + dm->selectionX, dm->selectionY, + dm->selectionWidth, dm->selectionHeight); + g_clear_object (&drawable); + + DepthMerge_updatePreview (dm, dm->config); +} diff --git a/plug-ins/common/despeckle.c b/plug-ins/common/despeckle.c index e238e24..3da4304 100644 --- a/plug-ins/common/despeckle.c +++ b/plug-ins/common/despeckle.c @@ -85,7 +85,7 @@ struct _DespeckleClass #define DESPECKLE_TYPE (despeckle_get_type ()) -#define DESPECKLE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DESPECKLE_TYPE, Despeckle)) +#define DESPECKLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DESPECKLE_TYPE, Despeckle)) GType despeckle_get_type (void) G_GNUC_CONST; @@ -98,7 +98,7 @@ static PikaValueArray * despeckle_run (PikaProcedure *proced PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void despeckle (PikaDrawable *drawable, @@ -220,11 +220,10 @@ despeckle_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaDrawable *drawable; + PikaDrawable *drawable; gegl_init (NULL, NULL); @@ -245,35 +244,14 @@ despeckle_run (PikaProcedure *procedure, drawable = drawables[0]; } - if (! pika_drawable_is_rgb (drawable) && - ! pika_drawable_is_gray (drawable)) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - NULL); - } + if (! pika_drawable_is_rgb (drawable) && ! pika_drawable_is_gray (drawable)) + return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - - if (run_mode == PIKA_RUN_INTERACTIVE) - { - if (! despeckle_dialog (procedure, G_OBJECT (config), drawable)) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - } + if (run_mode == PIKA_RUN_INTERACTIVE && ! despeckle_dialog (procedure, G_OBJECT (config), drawable)) + return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, NULL); despeckle (drawable, G_OBJECT (config)); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } diff --git a/plug-ins/common/destripe.c b/plug-ins/common/destripe.c index dd66b5b..cb91d7f 100644 --- a/plug-ins/common/destripe.c +++ b/plug-ins/common/destripe.c @@ -57,7 +57,7 @@ struct _DestripeClass #define DESTRIPE_TYPE (destripe_get_type ()) -#define DESTRIPE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DESTRIPE_TYPE, Destripe)) +#define DESTRIPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DESTRIPE_TYPE, Destripe)) GType destripe_get_type (void) G_GNUC_CONST; @@ -70,7 +70,7 @@ static PikaValueArray * destripe_run (PikaProcedure *procedu PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void destripe (GObject *config, @@ -164,24 +164,17 @@ destripe_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaDrawable *drawable; + PikaDrawable *drawable; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - if (n_drawables != 1) { GError *error = NULL; - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, _("Procedure '%s' only works with one drawable."), PLUG_IN_PROC); @@ -195,44 +188,20 @@ destripe_run (PikaProcedure *procedure, drawable = drawables[0]; } - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! destripe_dialog (procedure, G_OBJECT (config), drawable)) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); + if (run_mode == PIKA_RUN_INTERACTIVE && ! destripe_dialog (procedure, G_OBJECT (config), drawable)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - default: - break; - }; - - if (pika_drawable_is_rgb (drawable) || - pika_drawable_is_gray (drawable)) - { - destripe (G_OBJECT (config), drawable, NULL); - - if (run_mode != PIKA_RUN_NONINTERACTIVE) - pika_displays_flush (); - } + if (pika_drawable_is_rgb (drawable)|| pika_drawable_is_gray (drawable)) + destripe (G_OBJECT (config), drawable, NULL); else - { - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + NULL); - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - NULL); - } - - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); + if (run_mode != PIKA_RUN_NONINTERACTIVE) + pika_displays_flush (); return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } diff --git a/plug-ins/common/file-aa.c b/plug-ins/common/file-aa.c index 7027f28..bbd6bb0 100644 --- a/plug-ins/common/file-aa.c +++ b/plug-ins/common/file-aa.c @@ -60,7 +60,7 @@ struct _AsciiClass #define ASCII_TYPE (ascii_get_type ()) -#define ASCII (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ASCII_TYPE, Ascii)) +#define ASCII(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ASCII_TYPE, Ascii)) GType ascii_get_type (void) G_GNUC_CONST; @@ -74,7 +74,8 @@ static PikaValueArray * ascii_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static gboolean save_aa (GFile *file, @@ -128,7 +129,7 @@ ascii_create_procedure (PikaPlugIn *plug_in, procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - ascii_save, NULL, NULL); + FALSE, ascii_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -172,19 +173,16 @@ ascii_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -231,9 +229,6 @@ ascii_save (PikaProcedure *procedure, } } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/common/file-cel.c b/plug-ins/common/file-cel.c index 8818f74..0552c51 100644 --- a/plug-ins/common/file-cel.c +++ b/plug-ins/common/file-cel.c @@ -56,41 +56,46 @@ struct _CelClass #define CEL_TYPE (cel_get_type ()) -#define CEL (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CEL_TYPE, Cel)) +#define CEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CEL_TYPE, Cel)) GType cel_get_type (void) G_GNUC_CONST; -static GList * cel_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * cel_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * cel_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * cel_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * cel_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * cel_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * cel_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * cel_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static gint load_palette (GFile *file, - FILE *fp, - guchar palette[], - GError **error); -static PikaImage * load_image (GFile *file, - GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GError **error); -static void palette_dialog (const gchar *title); -static gboolean need_palette (GFile *file, - GError **error); +static gint load_palette (GFile *file, + guchar palette[], + GError **error); +static PikaImage * load_image (GFile *file, + GFile *palette_file, + GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GError **error); +static gboolean palette_dialog (const gchar *title, + PikaProcedure *procedure, + PikaProcedureConfig *config); +static gboolean need_palette (GFile *file, + GError **error); G_DEFINE_TYPE (Cel, cel, PIKA_TYPE_PLUG_IN) @@ -99,10 +104,6 @@ PIKA_MAIN (CEL_TYPE) DEFINE_STD_SET_I18N -static gchar *palette_file = NULL; -static gsize data_length = 0; - - static void cel_class_init (CelClass *klass) { @@ -158,18 +159,16 @@ cel_create_procedure (PikaPlugIn *plug_in, pika_file_procedure_set_magics (PIKA_FILE_PROCEDURE (procedure), "0,string,KiSS\\040"); - PIKA_PROC_ARG_STRING (procedure, "palette-filename", - "Palette filename", - "Filename to load palette from", - NULL, - G_PARAM_READWRITE | - PIKA_PARAM_NO_VALIDATE); + PIKA_PROC_ARG_FILE (procedure, "palette-file", + _("_Palette file"), + _("KCF file to load palette from"), + G_PARAM_READWRITE); } else if (! strcmp (name, SAVE_PROC)) { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - cel_save, NULL, NULL); + FALSE, cel_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB*, INDEXED*"); @@ -190,73 +189,80 @@ cel_create_procedure (PikaPlugIn *plug_in, pika_file_procedure_set_extensions (PIKA_FILE_PROCEDURE (procedure), "cel"); - PIKA_PROC_ARG_STRING (procedure, "palette-filename", - "Palette filename", - "Filename to save palette to", - NULL, - G_PARAM_READWRITE | - PIKA_PARAM_NO_VALIDATE); + PIKA_PROC_ARG_FILE (procedure, "palette-file", + "Palette file", + "File to save palette to", + G_PARAM_READWRITE); } return procedure; } static PikaValueArray * -cel_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +cel_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image = NULL; gboolean needs_palette = FALSE; + GFile *palette_file = NULL; GError *error = NULL; gegl_init (NULL, NULL); - if (run_mode != PIKA_RUN_NONINTERACTIVE) + needs_palette = need_palette (file, &error); + if (error != NULL) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + error); + + g_object_get (config, "palette-file", &palette_file, NULL); + switch (run_mode) { - data_length = pika_get_data_size (SAVE_PROC); - if (data_length > 0) + case PIKA_RUN_INTERACTIVE: + if (needs_palette) { - palette_file = g_malloc (data_length); - pika_get_data (SAVE_PROC, palette_file); - } - else - { - palette_file = g_strdup ("*.kcf"); - data_length = strlen (palette_file) + 1; + /* Let user choose KCF palette (cancel ignores) */ + if (! palette_dialog (_("Load KISS Palette"), procedure, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); + + g_clear_object (&palette_file); + g_object_get (config, "palette-file", &palette_file, NULL); } + break; + case PIKA_RUN_WITH_LAST_VALS: + if (! needs_palette) + /* It is possible to have a palette file from a previous call. Just ignore + * it if it's unneeded, yet keep it stored. + */ + g_clear_object (&palette_file); + break; + case PIKA_RUN_NONINTERACTIVE: + /* Note: we don't forbid setting a palette file when unneeded as a way to + * override the embedded palette in scripts. + */ + break; } - if (run_mode == PIKA_RUN_NONINTERACTIVE) + if (needs_palette && palette_file == NULL) { - palette_file = (gchar *) PIKA_VALUES_GET_STRING (args, 0); - if (palette_file) - data_length = strlen (palette_file) + 1; - else - data_length = 0; - } - else if (run_mode == PIKA_RUN_INTERACTIVE) - { - /* Let user choose KCF palette (cancel ignores) */ - needs_palette = need_palette (file, &error); + g_set_error (&error, G_FILE_ERROR, 0, + _("This KISS CEL image requires a palette file.")); - if (! error) - { - if (needs_palette) - palette_dialog (_("Load KISS Palette")); - - pika_set_data (SAVE_PROC, palette_file, data_length); - } - } - - if (! error) - { - image = load_image (file, &error); + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CALLING_ERROR, + error); } + image = load_image (file, palette_file, &error); + g_clear_object (&palette_file); if (! image) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, @@ -278,12 +284,13 @@ cel_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); @@ -318,17 +325,8 @@ cel_save (PikaProcedure *procedure, error); } - if (save_image (file, image, drawables[0], &error)) - { - if (data_length) - { - pika_set_data (SAVE_PROC, palette_file, data_length); - } - } - else - { - status = PIKA_PDB_EXECUTION_ERROR; - } + if (! save_image (file, image, drawables[0], &error)) + status = PIKA_PDB_EXECUTION_ERROR; if (export == PIKA_EXPORT_EXPORT) { @@ -376,6 +374,7 @@ need_palette (GFile *file, static PikaImage * load_image (GFile *file, + GFile *palette_file, GError **error) { FILE *fp; /* Read file pointer */ @@ -384,7 +383,7 @@ load_image (GFile *file, bpp; /* Bits per pixel */ gint height, width, /* Dimensions of image */ offx, offy, /* Layer offsets */ - colors; /* Number of colors */ + colors; /* Number of colors */ PikaImage *image; /* Image */ PikaLayer *layer; /* Layer */ @@ -630,29 +629,9 @@ load_image (GFile *file, /* Use palette from file or otherwise default grey palette */ guchar palette[256 * 3]; - /* Open the file for reading if user picked one */ - if (palette_file == NULL) + if (palette_file != NULL) { - fp = NULL; - } - else - { - fp = g_fopen (palette_file, "r"); - - if (fp == NULL) - { - g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), - _("Could not open '%s' for reading: %s"), - pika_filename_to_utf8 (palette_file), - g_strerror (errno)); - return NULL; - } - } - - if (fp != NULL) - { - colors = load_palette (g_file_new_for_path (palette_file), fp, palette, error); - fclose (fp); + colors = load_palette (palette_file, palette, error); if (colors < 0 || *error) return NULL; } @@ -677,42 +656,43 @@ load_image (GFile *file, } static gint -load_palette (GFile *file, - FILE *fp, - guchar palette[], - GError **error) +load_palette (GFile *file, + guchar palette[], + GError **error) { - guchar header[32]; /* File header */ - guchar buffer[2]; - guchar file_mark, bpp; - gint i, colors = 0; - size_t n_read; + GFileInputStream *input; + guchar header[32]; /* File header */ + guchar buffer[2]; + guchar file_mark, bpp; + gint i, colors = 0; + gssize n_read; - n_read = fread (header, 4, 1, fp); + input = g_file_read (file, NULL, error); + if (input == NULL) + return -1; + + n_read = g_input_stream_read (G_INPUT_STREAM (input), header, 4, NULL, error); if (n_read < 1) { - g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, - _("'%s': EOF or error while reading palette header"), - pika_file_get_utf8_name (file)); + g_object_unref (input); return -1; } if (!strncmp ((const gchar *) header, "KiSS", 4)) { - n_read = fread (header+4, 28, 1, fp); + n_read = g_input_stream_read (G_INPUT_STREAM (input), header + 4, 28, NULL, error); if (n_read < 1) { - g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, - _("'%s': EOF or error while reading palette header"), - pika_file_get_utf8_name (file)); + g_object_unref (input); return -1; } file_mark = header[4]; if (file_mark != 0x10) { + g_object_unref (input); g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("'%s': is not a KCF palette file"), pika_file_get_utf8_name (file)); @@ -722,6 +702,7 @@ load_palette (GFile *file, bpp = header[5]; if (bpp != 12 && bpp != 24) { + g_object_unref (input); g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("'%s': illegal bpp value in palette: %hhu"), pika_file_get_utf8_name (file), bpp); @@ -731,6 +712,7 @@ load_palette (GFile *file, colors = header[8] + header[9] * 256; if (colors != 16 && colors != 256) { + g_object_unref (input); g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("'%s': illegal number of colors: %u"), pika_file_get_utf8_name (file), colors); @@ -742,16 +724,22 @@ load_palette (GFile *file, case 12: for (i = 0; i < colors; ++i) { - n_read = fread (buffer, 1, 2, fp); + n_read = g_input_stream_read (G_INPUT_STREAM (input), buffer, 2, NULL, error); - if (n_read < 2) + if (n_read == 1) { + g_object_unref (input); g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("'%s': EOF or error while reading " "palette data"), pika_file_get_utf8_name (file)); return -1; } + else if (n_read < 1) + { + g_object_unref (input); + return -1; + } palette[i*3]= buffer[0] & 0xf0; palette[i*3+1]= (buffer[1] & 0x0f) * 16; @@ -759,10 +747,16 @@ load_palette (GFile *file, } break; case 24: - n_read = fread (palette, colors, 3, fp); + n_read = g_input_stream_read (G_INPUT_STREAM (input), palette, 3 * colors, NULL, error); - if (n_read < 3) + if (n_read < 1) { + g_object_unref (input); + return -1; + } + else if (n_read < 3 * colors) + { + g_object_unref (input); g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("'%s': EOF or error while reading palette data"), pika_file_get_utf8_name (file)); @@ -776,13 +770,24 @@ load_palette (GFile *file, else { colors = 16; - fseek (fp, 0, SEEK_SET); + if (! g_seekable_seek (G_SEEKABLE (input), 0, G_SEEK_SET, NULL, error)) + { + g_object_unref (input); + return -1; + } + for (i= 0; i < colors; ++i) { - n_read = fread (buffer, 1, 2, fp); + n_read = g_input_stream_read (G_INPUT_STREAM (input), buffer, 2, NULL, error); - if (n_read < 2) + if (n_read < 1) { + g_object_unref (input); + return -1; + } + else if (n_read == 1) + { + g_object_unref (input); g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("'%s': EOF or error while reading palette data"), pika_file_get_utf8_name (file)); @@ -992,38 +997,25 @@ save_image (GFile *file, return FALSE; } -static void -palette_dialog (const gchar *title) +static gboolean +palette_dialog (const gchar *title, + PikaProcedure *procedure, + PikaProcedureConfig *config) { GtkWidget *dialog; + gboolean run; pika_ui_init (PLUG_IN_BINARY); - dialog = gtk_file_chooser_dialog_new (title, NULL, - GTK_FILE_CHOOSER_ACTION_OPEN, + dialog = pika_procedure_dialog_new (PIKA_PROCEDURE (procedure), + PIKA_PROCEDURE_CONFIG (config), + title); + pika_procedure_dialog_set_ok_label (PIKA_PROCEDURE_DIALOG (dialog), _("_Open")); - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_Open"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), palette_file); - - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); - - gtk_widget_show (dialog); - - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) - { - g_free (palette_file); - palette_file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - data_length = strlen (palette_file) + 1; - } + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), NULL); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); gtk_widget_destroy (dialog); + + return run; } diff --git a/plug-ins/common/file-compressor.c b/plug-ins/common/file-compressor.c index 630011e..11a8685 100644 --- a/plug-ins/common/file-compressor.c +++ b/plug-ins/common/file-compressor.c @@ -149,60 +149,63 @@ struct _CompressorClass #define COMPRESSOR_TYPE (compressor_get_type ()) -#define COMPRESSOR (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COMPRESSOR_TYPE, Compressor)) +#define COMPRESSOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COMPRESSOR_TYPE, Compressor)) GType compressor_get_type (void) G_GNUC_CONST; -static GList * compressor_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * compressor_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * compressor_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * compressor_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * compressor_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * compressor_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, +static PikaValueArray * compressor_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * compressor_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, gpointer run_data); -static PikaImage * load_image (const CompressorEntry *compressor, - GFile *file, - gint32 run_mode, - PikaPDBStatusType *status, - GError **error); -static PikaPDBStatusType save_image (const CompressorEntry *compressor, - GFile *file, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - gint32 run_mode, - GError **error); +static PikaImage * load_image (const CompressorEntry *compressor, + GFile *file, + gint32 run_mode, + PikaPDBStatusType *status, + GError **error); +static PikaPDBStatusType save_image (const CompressorEntry *compressor, + GFile *file, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + gint32 run_mode, + GError **error); -static gboolean valid_file (GFile *file); -static const gchar * find_extension (const CompressorEntry *compressor, - const gchar *filename); +static gboolean valid_file (GFile *file); +static const gchar * find_extension (const CompressorEntry *compressor, + const gchar *filename); -static gboolean gzip_load (GFile *infile, - GFile *outfile); -static gboolean gzip_save (GFile *infile, - GFile *outfile); +static gboolean gzip_load (GFile *infile, + GFile *outfile); +static gboolean gzip_save (GFile *infile, + GFile *outfile); -static gboolean bzip2_load (GFile *infile, - GFile *outfile); -static gboolean bzip2_save (GFile *infile, - GFile *outfile); +static gboolean bzip2_load (GFile *infile, + GFile *outfile); +static gboolean bzip2_save (GFile *infile, + GFile *outfile); -static gboolean xz_load (GFile *infile, - GFile *outfile); -static gboolean xz_save (GFile *infile, - GFile *outfile); -static goffset get_file_info (GFile *file); +static gboolean xz_load (GFile *infile, + GFile *outfile); +static gboolean xz_save (GFile *infile, + GFile *outfile); +static goffset get_file_info (GFile *file); G_DEFINE_TYPE (Compressor, compressor, PIKA_TYPE_PLUG_IN) @@ -334,7 +337,7 @@ compressor_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - compressor_save, + FALSE, compressor_save, (gpointer) compressor, NULL); pika_procedure_set_image_types (procedure, "RGB*, GRAY*, INDEXED*"); @@ -368,11 +371,13 @@ compressor_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -compressor_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +compressor_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { const CompressorEntry *compressor = run_data; PikaValueArray *return_vals; @@ -404,7 +409,8 @@ compressor_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { const CompressorEntry *compressor = run_data; diff --git a/plug-ins/common/file-csource.c b/plug-ins/common/file-csource.c index 4510ee2..48ffa29 100644 --- a/plug-ins/common/file-csource.c +++ b/plug-ins/common/file-csource.c @@ -51,7 +51,7 @@ struct _CsourceClass #define CSOURCE_TYPE (csource_get_type ()) -#define CSOURCE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CSOURCE_TYPE, Csource)) +#define CSOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CSOURCE_TYPE, Csource)) GType csource_get_type (void) G_GNUC_CONST; @@ -65,7 +65,8 @@ static PikaValueArray * csource_save (PikaProcedure *procedur gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static gboolean save_image (GFile *file, @@ -115,7 +116,7 @@ csource_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - csource_save, NULL, NULL); + FALSE, csource_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -208,15 +209,15 @@ csource_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - gchar *prefixed_name; - gchar *comment; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + gchar *prefixed_name; + gchar *comment; + GError *error = NULL; gegl_init (NULL, NULL); @@ -225,9 +226,6 @@ csource_save (PikaProcedure *procedure, PIKA_PDB_CALLING_ERROR, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_export (config, image, run_mode, args, NULL); - pika_ui_init (PLUG_IN_BINARY); export = pika_export_image (&image, &n_drawables, &drawables, "C Source", @@ -283,9 +281,6 @@ csource_save (PikaProcedure *procedure, } } - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/common/file-desktop-link.c b/plug-ins/common/file-desktop-link.c index 0477273..f1ae790 100644 --- a/plug-ins/common/file-desktop-link.c +++ b/plug-ins/common/file-desktop-link.c @@ -55,23 +55,25 @@ struct _DesktopClass #define DESKTOP_TYPE (desktop_get_type ()) -#define DESKTOP (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DESKTOP_TYPE, Desktop)) +#define DESKTOP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DESKTOP_TYPE, Desktop)) GType desktop_get_type (void) G_GNUC_CONST; -static GList * desktop_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * desktop_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * desktop_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * desktop_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * desktop_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * desktop_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - PikaRunMode run_mode, - GError **error); +static PikaImage * load_image (GFile *file, + PikaRunMode run_mode, + GError **error); G_DEFINE_TYPE (Desktop, desktop, PIKA_TYPE_PLUG_IN) @@ -136,11 +138,13 @@ desktop_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -desktop_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +desktop_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_values; PikaImage *image; diff --git a/plug-ins/common/file-dicom.c b/plug-ins/common/file-dicom.c index c74687f..0232e30 100644 --- a/plug-ins/common/file-dicom.c +++ b/plug-ins/common/file-dicom.c @@ -81,53 +81,56 @@ struct _DicomClass #define DICOM_TYPE (dicom_get_type ()) -#define DICOM (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DICOM_TYPE, Dicom)) +#define DICOM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DICOM_TYPE, Dicom)) GType dicom_get_type (void) G_GNUC_CONST; -static GList * dicom_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * dicom_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * dicom_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * dicom_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * dicom_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * dicom_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * dicom_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * dicom_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GError **error); -static void dicom_loader (guint8 *pix_buf, - DicomInfo *info, - GeglBuffer *buffer); -static void guess_and_set_endian2 (guint16 *buf16, - gint length); -static void toggle_endian2 (guint16 *buf16, - gint length); -static void add_tag_pointer (GByteArray *group_stream, - gint group, - gint element, - const gchar *value_rep, - const guint8 *data, - gint length); -static GSList * dicom_add_tags (FILE *dicom, - GByteArray *group_stream, - GSList *elements); -static gboolean write_group_to_file (FILE *dicom, - gint group, - GByteArray *group_stream); +static PikaImage * load_image (GFile *file, + GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GError **error); +static void dicom_loader (guint8 *pix_buf, + DicomInfo *info, + GeglBuffer *buffer); +static void guess_and_set_endian2 (guint16 *buf16, + gint length); +static void toggle_endian2 (guint16 *buf16, + gint length); +static void add_tag_pointer (GByteArray *group_stream, + gint group, + gint element, + const gchar *value_rep, + const guint8 *data, + gint length); +static GSList * dicom_add_tags (FILE *dicom, + GByteArray *group_stream, + GSList *elements); +static gboolean write_group_to_file (FILE *dicom, + gint group, + GByteArray *group_stream); G_DEFINE_TYPE (Dicom, dicom, PIKA_TYPE_PLUG_IN) @@ -201,7 +204,7 @@ dicom_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - dicom_save, NULL, NULL); + FALSE, dicom_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB, GRAY"); @@ -236,11 +239,13 @@ dicom_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -dicom_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +dicom_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -271,7 +276,8 @@ dicom_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status = PIKA_PDB_SUCCESS; diff --git a/plug-ins/common/file-farbfeld.c b/plug-ins/common/file-farbfeld.c index 64376c5..e65bf95 100644 --- a/plug-ins/common/file-farbfeld.c +++ b/plug-ins/common/file-farbfeld.c @@ -54,37 +54,40 @@ struct _FarbfeldClass #define FARBFELD_TYPE (farbfeld_get_type ()) -#define FARBFELD (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FARBFELD_TYPE, Farbfeld)) +#define FARBFELD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FARBFELD_TYPE, Farbfeld)) GType farbfeld_get_type (void) G_GNUC_CONST; -static GList * farbfeld_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * farbfeld_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * farbfeld_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * farbfeld_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * farbfeld_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * farbfeld_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * farbfeld_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * farbfeld_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GObject *config, - PikaRunMode run_mode, - GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GError **error); +static PikaImage * load_image (GFile *file, + GObject *config, + PikaRunMode run_mode, + GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GError **error); G_DEFINE_TYPE (Farbfeld, farbfeld, PIKA_TYPE_PLUG_IN) @@ -154,7 +157,7 @@ farbfeld_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - farbfeld_save, NULL, NULL); + FALSE, farbfeld_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -179,22 +182,20 @@ farbfeld_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -farbfeld_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +farbfeld_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaImage *image; - GError *error = NULL; + PikaValueArray *return_vals; + PikaImage *image; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - image = load_image (file, G_OBJECT (config), run_mode, &error); if (! image) @@ -202,9 +203,6 @@ farbfeld_load (PikaProcedure *procedure, PIKA_PDB_EXECUTION_ERROR, error); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); @@ -221,7 +219,8 @@ farbfeld_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status = PIKA_PDB_SUCCESS; diff --git a/plug-ins/common/file-gbr.c b/plug-ins/common/file-gbr.c index 8634711..08927ea 100644 --- a/plug-ins/common/file-gbr.c +++ b/plug-ins/common/file-gbr.c @@ -63,7 +63,7 @@ struct _GbrClass #define GBR_TYPE (gbr_get_type ()) -#define GBR (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GBR_TYPE, Gbr)) +#define GBR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GBR_TYPE, Gbr)) GType gbr_get_type (void) G_GNUC_CONST; @@ -77,7 +77,8 @@ static PikaValueArray * gbr_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static gboolean save_dialog (PikaProcedure *procedure, @@ -122,7 +123,7 @@ gbr_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - gbr_save, NULL, NULL); + FALSE, gbr_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -174,17 +175,14 @@ gbr_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - gchar *description; - GError *error = NULL; - - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + gchar *description; + GError *error = NULL; g_object_get (config, "description", &description, @@ -229,16 +227,6 @@ gbr_save (PikaProcedure *procedure, break; } - if (n_drawables != 1) - { - g_set_error (&error, G_FILE_ERROR, 0, - _("GBR format does not support multiple layers.")); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CALLING_ERROR, - error); - } - if (run_mode == PIKA_RUN_INTERACTIVE) { if (! save_dialog (procedure, G_OBJECT (config), image)) @@ -247,25 +235,30 @@ gbr_save (PikaProcedure *procedure, if (status == PIKA_PDB_SUCCESS) { - PikaValueArray *save_retvals; - gint spacing; + PikaProcedure *procedure; + PikaValueArray *save_retvals; + PikaObjectArray *drawables_array; + gint spacing; g_object_get (config, "description", &description, "spacing", &spacing, NULL); - save_retvals = - pika_pdb_run_procedure (pika_get_pdb (), - "file-gbr-save-internal", - PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE, - PIKA_TYPE_IMAGE, image, - PIKA_TYPE_DRAWABLE, drawables[0], - G_TYPE_FILE, file, - G_TYPE_INT, spacing, - G_TYPE_STRING, description, - G_TYPE_NONE); + drawables_array = pika_object_array_new (PIKA_TYPE_DRAWABLE, (GObject **) drawables, + n_drawables, FALSE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), + "file-gbr-save-internal"); + save_retvals = pika_procedure_run (procedure, + "image", image, + "num-drawables", n_drawables, + "drawables", drawables_array, + "file", file, + "spacing", spacing, + "name", description, + NULL); + pika_object_array_free (drawables_array); g_free (description); if (PIKA_VALUES_GET_ENUM (save_retvals, 0) != PIKA_PDB_SUCCESS) @@ -281,9 +274,6 @@ gbr_save (PikaProcedure *procedure, pika_value_array_unref (save_retvals); } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/common/file-gegl.c b/plug-ins/common/file-gegl.c index d90c3db..8fd4ab1 100644 --- a/plug-ins/common/file-gegl.c +++ b/plug-ins/common/file-gegl.c @@ -74,36 +74,39 @@ struct _GoatClass #define GOAT_TYPE (goat_get_type ()) -#define GOAT (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GOAT_TYPE, Goat)) +#define GOAT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GOAT_TYPE, Goat)) GType goat_get_type (void) G_GNUC_CONST; -static GList * goat_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * goat_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * goat_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * goat_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * goat_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * goat_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * goat_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * goat_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - const gchar *gegl_op, - GError **error); -static gboolean save_image (GFile *file, - const gchar *gegl_op, - PikaImage *image, - PikaDrawable *drawable, - GError **error); +static PikaImage * load_image (GFile *file, + const gchar *gegl_op, + GError **error); +static gboolean save_image (GFile *file, + const gchar *gegl_op, + PikaImage *image, + PikaDrawable *drawable, + GError **error); G_DEFINE_TYPE (Goat, goat, PIKA_TYPE_PLUG_IN) @@ -218,7 +221,7 @@ goat_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - goat_save, + FALSE, goat_save, (gpointer) format, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -241,11 +244,13 @@ goat_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -goat_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +goat_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { const FileFormat *format = run_data; PikaValueArray *return_vals; @@ -277,7 +282,8 @@ goat_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { const FileFormat *format = run_data; diff --git a/plug-ins/common/file-gif-load.c b/plug-ins/common/file-gif-load.c index 7f392fb..53f294e 100644 --- a/plug-ins/common/file-gif-load.c +++ b/plug-ins/common/file-gif-load.c @@ -98,28 +98,30 @@ struct _GifClass #define GIF_TYPE (gif_get_type ()) -#define GIF (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIF_TYPE, Gif)) +#define GIF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIF_TYPE, Gif)) GType gif_get_type (void) G_GNUC_CONST; -static GList * gif_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * gif_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * gif_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * gif_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * gif_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * gif_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * gif_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * gif_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - gboolean thumbnail, - GError **error); +static PikaImage * load_image (GFile *file, + gboolean thumbnail, + GError **error); G_DEFINE_TYPE (Gif, gif, PIKA_TYPE_PLUG_IN) @@ -177,8 +179,7 @@ gif_create_procedure (PikaPlugIn *plug_in, pika_procedure_set_documentation (procedure, "Loads files of Compuserve GIF " - "file format", - "FIXME: write help for gif_load", + "file format", NULL, name); pika_procedure_set_attribution (procedure, "Spencer Kimball, Peter Mattis, " @@ -220,11 +221,13 @@ gif_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * -gif_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +gif_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -261,17 +264,18 @@ gif_load (PikaProcedure *procedure, PIKA_PDB_SUCCESS, NULL); + *flags = PIKA_METADATA_LOAD_ALL; PIKA_VALUES_SET_IMAGE (return_vals, 1, image); return return_vals; } static PikaValueArray * -gif_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +gif_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -461,11 +465,6 @@ load_image (GFile *file, } } - if (GifScreen.AspectRatio != 0 && GifScreen.AspectRatio != 49) - { - g_message (_("Non-square pixels. Image might look squashed.")); - } - highest_used_index = GifScreen.BitPixel; while (TRUE) @@ -554,8 +553,29 @@ load_image (GFile *file, } if (!status) + break; + + if (GifScreen.AspectRatio != 0 && GifScreen.AspectRatio != 49) { - break; + /* Byte overflow is allowed per the GIF specification */ + guint8 par = GifScreen.AspectRatio + 15; + + if (par > 0) + { + gdouble image_xres; + gdouble image_yres; + gfloat ratio = par / 64.0; + + 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); + } } if (comment_parasite != NULL) diff --git a/plug-ins/common/file-gif-save.c b/plug-ins/common/file-gif-save.c index c0ae970..617185f 100644 --- a/plug-ins/common/file-gif-save.c +++ b/plug-ins/common/file-gif-save.c @@ -67,7 +67,7 @@ struct _GifClass #define GIF_TYPE (gif_get_type ()) -#define GIF (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIF_TYPE, Gif)) +#define GIF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIF_TYPE, Gif)) GType gif_get_type (void) G_GNUC_CONST; @@ -81,7 +81,8 @@ static PikaValueArray * gif_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static gboolean save_image (GFile *file, @@ -142,7 +143,7 @@ gif_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - gif_save, NULL, NULL); + FALSE, gif_save, NULL, NULL); pika_procedure_set_image_types (procedure, "INDEXED*, GRAY*"); @@ -259,21 +260,18 @@ gif_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - PikaImage *orig_image; - PikaImage *sanitized_image = NULL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + PikaImage *orig_image; + PikaImage *sanitized_image = NULL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_export (config, image, run_mode, args, NULL); - orig_image = image; if (run_mode == PIKA_RUN_INTERACTIVE || @@ -363,9 +361,6 @@ gif_save (PikaProcedure *procedure, pika_image_delete (sanitized_image); } - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); @@ -1263,7 +1258,8 @@ save_dialog (PikaImage *image, widget = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "milliseconds", - _("milliseconds")); + _("milliseconds"), + FALSE, FALSE); gtk_label_set_xalign (GTK_LABEL (widget), 0.1); gtk_grid_attach (GTK_GRID (grid), widget, 1, 1, 1, 1); gtk_widget_set_visible (widget, TRUE); @@ -1301,9 +1297,11 @@ save_dialog (PikaImage *image, /* Used to create vbox to store hintbox in */ pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "spacer", " "); + "spacer", " ", + FALSE, FALSE); pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "no-ani-title", _("Animated GIF")); + "no-ani-title", _("Animated GIF"), + FALSE, FALSE); vbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "no-animation-vbox", "spacer", diff --git a/plug-ins/common/file-gih.c b/plug-ins/common/file-gih.c index 4a03082..74beb7f 100644 --- a/plug-ins/common/file-gih.c +++ b/plug-ins/common/file-gih.c @@ -53,31 +53,10 @@ #define PLUG_IN_ROLE "pika-file-gih" -/* Parameters applicable each time we export a gih, exported in the - * main pika application between invocations of this plug-in. - */ typedef struct { - gchar description[256]; - gint spacing; -} BrushInfo; - -typedef struct -{ - PikaOrientationType orientation; - PikaImage *image; - PikaLayer *toplayer; - gint nguides; - gint32 *guides; - gint *value; - GtkWidget *count_label; /* Corresponding count adjustment, */ - gint *count; /* cols or rows */ - gint *other_count; /* and the other one */ - GtkAdjustment *ncells; - GtkAdjustment *rank0; - GtkWidget *warning_label; - GtkWidget *rank_entry[PIKA_PIXPIPE_MAXDIM]; - GtkWidget *mode_entry[PIKA_PIXPIPE_MAXDIM]; + GtkWidget *rank_entry[PIKA_PIXPIPE_MAXDIM]; + GtkWidget *mode_entry[PIKA_PIXPIPE_MAXDIM]; } SizeAdjustmentData; @@ -96,24 +75,33 @@ struct _GihClass #define GIH_TYPE (gih_get_type ()) -#define GIH (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIH_TYPE, Gih)) +#define GIH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIH_TYPE, Gih)) -GType gih_get_type (void) G_GNUC_CONST; +GType gih_get_type (void) G_GNUC_CONST; -static GList * gih_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * gih_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * gih_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * gih_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * gih_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * gih_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static gboolean gih_save_dialog (PikaImage *image); +static void gih_remove_guides (PikaProcedureConfig *config, + PikaImage *image); +static void gih_cell_width_notify (PikaProcedureConfig *config, + const GParamSpec *pspec, + PikaProcedureDialog *dialog); + +static gboolean gih_save_dialog (PikaImage *image, + PikaProcedure *procedure, + PikaProcedureConfig *config); G_DEFINE_TYPE (Gih, gih, PIKA_TYPE_PLUG_IN) @@ -122,15 +110,6 @@ PIKA_MAIN (GIH_TYPE) DEFINE_STD_SET_I18N -static BrushInfo info = -{ - "PIKA Brush Pipe", - 20 -}; - -static gint num_layers = 0; -static PikaPixPipeParams gihparams = { 0, }; - static const gchar * const selection_modes[] = { "incremental", "angular", "random", @@ -171,7 +150,7 @@ gih_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - gih_save, NULL, NULL); + FALSE, gih_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB*, GRAY*"); @@ -197,62 +176,70 @@ gih_create_procedure (PikaPlugIn *plug_in, pika_file_procedure_set_mime_types (PIKA_FILE_PROCEDURE (procedure), "image/x-pika-gih"); + pika_file_procedure_set_format_name (PIKA_FILE_PROCEDURE (procedure), + _("Brush Pipe")); pika_file_procedure_set_extensions (PIKA_FILE_PROCEDURE (procedure), "gih"); pika_file_procedure_set_handles_remote (PIKA_FILE_PROCEDURE (procedure), TRUE); PIKA_PROC_ARG_INT (procedure, "spacing", - "Spacing", - "Spacing of the brush", - 1, 1000, 10, + _("Spacing (_percent)"), + _("Spacing of the brush"), + 1, 1000, 20, PIKA_PARAM_READWRITE); PIKA_PROC_ARG_STRING (procedure, "description", - "Description", - "Short description of the gihtern", - "PIKA Gihtern", + _("_Description"), + _("Short description of the GIH brush pipe"), + "PIKA Brush Pipe", PIKA_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "cell-width", - "Cell width", - "Width of the brush cells", - 1, 1000, 10, + _("Cell _width"), + _("Width of the brush cells in pixels"), + 1, 1000, 1, PIKA_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "cell-height", - "Cell height", - "Height of the brush cells", - 1, 1000, 10, - PIKA_PARAM_READWRITE); - - PIKA_PROC_ARG_INT (procedure, "display-cols", - "Display columns", - "Display column number", + _("Cell _height"), + _("Height of the brush cells in pixels"), 1, 1000, 1, PIKA_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "display-rows", - "Display rows", - "Display row number", + PIKA_PROC_ARG_INT (procedure, "num-cells", + _("_Number of cells"), + _("Number of cells to cut up"), 1, 1000, 1, PIKA_PARAM_READWRITE); - PIKA_PROC_ARG_BYTES (procedure, "rank", - "Rank", - "Ranks of the dimensions", + PIKA_PROC_ARG_BYTES (procedure, "ranks", + _("_Rank"), + _("Ranks of the dimensions"), PIKA_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "dimension-2", - "Dimension 2", - "Dimension of the brush pipe (same as dimension)", - 1, 4, 1, - PIKA_PARAM_READWRITE); - - PIKA_PROC_ARG_STRV (procedure, "sel", - "Sel", + PIKA_PROC_ARG_STRV (procedure, "selection-modes", + "Selection modes", "Selection modes", PIKA_PARAM_READWRITE); + + /* Auxiliary arguments. Only useful for the GUI, to pass info around. */ + + PIKA_PROC_AUX_ARG_STRING (procedure, "info-text", + _("Display as"), + _("Describe how the layers will be split"), + "", PIKA_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_INT (procedure, "dimension", + _("D_imension"), + _("How many dimensions the animated brush has"), + 1, 1000, 1, + PIKA_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_INT32_ARRAY (procedure, "guides", + "Guides", + "Guides to show how the layers will be split in cells", + PIKA_PARAM_READWRITE); } return procedure; @@ -265,7 +252,8 @@ gih_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status = PIKA_PDB_SUCCESS; @@ -273,16 +261,23 @@ gih_save (PikaProcedure *procedure, PikaParasite *parasite; PikaImage *orig_image; GError *error = NULL; - gint i; + + PikaPixPipeParams gihparams = { 0, }; + gchar *description = NULL; + gint spacing; GBytes *rank_bytes; + const guint8 *rank; + gchar **selection; orig_image = image; - switch (run_mode) + if (run_mode == PIKA_RUN_INTERACTIVE) { - case PIKA_RUN_INTERACTIVE: - case PIKA_RUN_WITH_LAST_VALS: - pika_ui_init (PLUG_IN_BINARY); + GParamSpec *spec; + gint image_width; + gint image_height; + gint cell_width; + gint cell_height; export = pika_export_image (&image, &n_drawables, &drawables, "GIH", PIKA_EXPORT_CAN_HANDLE_RGB | @@ -296,8 +291,6 @@ gih_save (PikaProcedure *procedure, NULL); /* Possibly retrieve data */ - pika_get_data (SAVE_PROC, &info); - parasite = pika_image_get_parasite (orig_image, "pika-brush-pipe-name"); if (parasite) @@ -307,8 +300,7 @@ gih_save (PikaProcedure *procedure, parasite_data = (gchar *) pika_parasite_get_data (parasite, ¶site_size); - g_strlcpy (info.description, parasite_data, - MIN (sizeof (info.description), parasite_size)); + g_object_set (config, "description", parasite_data , NULL); pika_parasite_free (parasite); } @@ -320,175 +312,104 @@ gih_save (PikaProcedure *procedure, name[strlen (name) - 4] = '\0'; if (strlen (name)) - g_strlcpy (info.description, name, sizeof (info.description)); + g_object_set (config, "description", name, NULL); g_free (name); } - parasite = pika_image_get_parasite (orig_image, - "pika-brush-pipe-spacing"); - if (parasite) + g_object_get (config, + "cell-width", &cell_width, + "cell-height", &cell_height, + NULL); + + image_width = pika_image_get_width (image); + image_height = pika_image_get_height (image); + + spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "cell-width"); + G_PARAM_SPEC_INT (spec)->default_value = image_width; + G_PARAM_SPEC_INT (spec)->maximum = image_width; + + spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "cell-height"); + G_PARAM_SPEC_INT (spec)->default_value = image_height; + G_PARAM_SPEC_INT (spec)->maximum = image_height; + + if (cell_width == 1 && cell_height == 1) { - gchar *parasite_data; - guint32 parasite_size; + g_object_set (config, + "cell-width", image_width, + "cell-height", image_height, + NULL); - parasite_data = (gchar *) pika_parasite_get_data (parasite, ¶site_size); - parasite_data = g_strndup (parasite_data, parasite_size); - - info.spacing = atoi (parasite_data); - - pika_parasite_free (parasite); - g_free (parasite_data); - } - break; - - default: - break; - } - - g_free (pika_image_get_layers (image, &num_layers)); - - pika_pixpipe_params_init (&gihparams); - - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - gihparams.ncells = (num_layers * gihparams.rows * gihparams.cols); - - gihparams.cellwidth = pika_image_get_width (image) / gihparams.cols; - gihparams.cellheight = pika_image_get_height (image) / gihparams.rows; - - parasite = pika_image_get_parasite (orig_image, - "pika-brush-pipe-parameters"); - if (parasite) - { - gchar *parasite_data; - guint32 parasite_size; - - parasite_data = (gchar *) pika_parasite_get_data (parasite, ¶site_size); - parasite_data = g_strndup (parasite_data, parasite_size); - - pika_pixpipe_params_parse (parasite_data, &gihparams); - - pika_parasite_free (parasite); - g_free (parasite_data); + spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "num-cells"); + G_PARAM_SPEC_INT (spec)->maximum = 1; } - /* Force default rank to same as number of cells if there is - * just one dim - */ - if (gihparams.dim == 1) - gihparams.rank[0] = gihparams.ncells; + pika_ui_init (PLUG_IN_BINARY); - if (! gih_save_dialog (image)) + if (! gih_save_dialog (image, procedure, config)) { status = PIKA_PDB_CANCEL; goto out; } - break; - - case PIKA_RUN_NONINTERACTIVE: - info.spacing = PIKA_VALUES_GET_INT (args, 0); - g_strlcpy (info.description, - PIKA_VALUES_GET_STRING (args, 1), - sizeof (info.description)); - - gihparams.cellwidth = PIKA_VALUES_GET_INT (args, 2); - gihparams.cellheight = PIKA_VALUES_GET_INT (args, 3); - gihparams.cols = PIKA_VALUES_GET_INT (args, 4); - gihparams.rows = PIKA_VALUES_GET_INT (args, 5); - rank_bytes = PIKA_VALUES_GET_BYTES (args, 6); - gihparams.dim = g_bytes_get_size (rank_bytes); - gihparams.ncells = 1; - - if (PIKA_VALUES_GET_INT (args, 7) != gihparams.dim) - { - status = PIKA_PDB_CALLING_ERROR; - } - else - { - const guint8 *rank = g_bytes_get_data (rank_bytes, NULL); - const gchar **sel = PIKA_VALUES_GET_STRV (args, 8); - - for (i = 0; i < gihparams.dim; i++) - { - gihparams.rank[i] = rank[i]; - gihparams.selection[i] = g_strdup (sel[i]); - gihparams.ncells *= gihparams.rank[i]; - } - } - break; - - case PIKA_RUN_WITH_LAST_VALS: - parasite = pika_image_get_parasite (orig_image, - "pika-brush-pipe-parameters"); - if (parasite) - { - gchar *parasite_data; - guint32 parasite_size; - - parasite_data = (gchar *) pika_parasite_get_data (parasite, ¶site_size); - parasite_data = g_strndup (parasite_data, parasite_size); - - pika_pixpipe_params_parse (parasite_data, &gihparams); - - pika_parasite_free (parasite); - g_free (parasite_data); - } - break; } + pika_pixpipe_params_init (&gihparams); + + g_object_get (config, + "spacing", &spacing, + "description", &description, + "cell-width", &gihparams.cellwidth, + "cell-height", &gihparams.cellheight, + "num-cells", &gihparams.ncells, + "ranks", &rank_bytes, + "selection-modes", &selection, + NULL); + + gihparams.cols = pika_image_get_width (image) / gihparams.cellwidth; + gihparams.rows = pika_image_get_height (image) / gihparams.cellheight; + + rank = g_bytes_get_data (rank_bytes, NULL); + gihparams.dim = g_bytes_get_size (rank_bytes); + + for (gint i = 0; i < gihparams.dim; i++) + { + gihparams.rank[i] = rank[i]; + gihparams.selection[i] = g_strdup (selection[i]); + } + + g_strfreev (selection); + g_bytes_unref (rank_bytes); + if (status == PIKA_PDB_SUCCESS) { - PikaValueArray *save_retvals; - gchar spacing[8]; - gchar *paramstring; - PikaValueArray *args; + PikaProcedure *procedure; + PikaValueArray *save_retvals; + PikaObjectArray *drawables_array; + gchar *paramstring; paramstring = pika_pixpipe_params_build (&gihparams); - args = pika_value_array_new_from_types (NULL, - PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE, - PIKA_TYPE_IMAGE, image, - G_TYPE_INT, n_drawables, - PIKA_TYPE_OBJECT_ARRAY, NULL, - G_TYPE_FILE, file, - G_TYPE_INT, info.spacing, - G_TYPE_STRING, info.description, - G_TYPE_STRING, paramstring, - G_TYPE_NONE); - pika_value_set_object_array (pika_value_array_index (args, 3), - PIKA_TYPE_ITEM, (GObject **) drawables, n_drawables); - - save_retvals = pika_pdb_run_procedure_array (pika_get_pdb (), - "file-gih-save-internal", - args); - pika_value_array_unref (args); + drawables_array = pika_object_array_new (PIKA_TYPE_DRAWABLE, (GObject **) drawables, + n_drawables, FALSE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), + "file-gih-save-internal"); + save_retvals = pika_procedure_run (procedure, + "image", image, + "num-drawables", n_drawables, + "drawables", drawables_array, + "file", file, + "spacing", spacing, + "name", description, + "params", paramstring, + NULL); + pika_object_array_free (drawables_array); if (PIKA_VALUES_GET_ENUM (save_retvals, 0) == PIKA_PDB_SUCCESS) { - pika_set_data (SAVE_PROC, &info, sizeof (info)); - parasite = pika_parasite_new ("pika-brush-pipe-name", PIKA_PARASITE_PERSISTENT, - strlen (info.description) + 1, - info.description); - pika_image_attach_parasite (orig_image, parasite); - pika_parasite_free (parasite); - - g_snprintf (spacing, sizeof (spacing), "%d", - info.spacing); - - parasite = pika_parasite_new ("pika-brush-pipe-spacing", - PIKA_PARASITE_PERSISTENT, - strlen (spacing) + 1, spacing); - pika_image_attach_parasite (orig_image, parasite); - pika_parasite_free (parasite); - - parasite = pika_parasite_new ("pika-brush-pipe-parameters", - PIKA_PARASITE_PERSISTENT, - strlen (paramstring) + 1, - paramstring); + strlen (description) + 1, + description); pika_image_attach_parasite (orig_image, parasite); pika_parasite_free (parasite); } @@ -506,6 +427,7 @@ gih_save (PikaProcedure *procedure, } pika_pixpipe_params_free (&gihparams); + g_free (description); out: if (export == PIKA_EXPORT_EXPORT) @@ -521,319 +443,296 @@ gih_save (PikaProcedure *procedure, /* save routines */ static void -size_adjustment_callback (GtkAdjustment *adjustment, - SizeAdjustmentData *adj) +gih_remove_guides (PikaProcedureConfig *config, + PikaImage *image) { - gint i; - gint size; - gint newn; - gchar buf[10]; + PikaArray *array; - for (i = 0; i < adj->nguides; i++) - pika_image_delete_guide (adj->image, adj->guides[i]); + g_object_get (config, "guides", &array, NULL); - g_free (adj->guides); - adj->guides = NULL; - pika_displays_flush (); - - *(adj->value) = gtk_adjustment_get_value (adjustment); - - if (adj->orientation == PIKA_ORIENTATION_VERTICAL) + if (array != NULL) { - size = pika_image_get_width (adj->image); - newn = size / *(adj->value); - adj->nguides = newn - 1; - adj->guides = g_new (gint32, adj->nguides); - for (i = 0; i < adj->nguides; i++) - adj->guides[i] = pika_image_add_vguide (adj->image, - *(adj->value) * (i+1)); + gint32 *guides = (gint32 *) array->data; + gint n_guides = array->length / 4; + + for (gint i = 0; i < n_guides; i++) + pika_image_delete_guide (image, guides[i]); } + g_clear_pointer (&array, pika_array_free); + + g_object_set (config, "guides", NULL, NULL); +} + +static void +gih_cell_width_notify (PikaProcedureConfig *config, + const GParamSpec *pspec, + PikaProcedureDialog *dialog) +{ + PikaImage *image; + GParamSpec *spec; + gchar *info_text; + gchar *grid_text = NULL; + const gchar *width_warning = _("Width Mismatch!"); + gchar *height_warning = _("Height Mismatch!"); + GtkWidget *widget; + GtkAdjustment *rank0; + gint dimension; + + gint cell_width; + gint image_width; + gint n_horiz_cells; + gint n_vert_cells; + + gint cell_height; + gint image_height; + gint n_vert_guides; + gint n_horiz_guides; + + gint old_max_cells; + gint max_cells; + gint num_cells; + + image = g_object_get_data (G_OBJECT (dialog), "image"); + rank0 = g_object_get_data (G_OBJECT (dialog), "rank0"); + + g_object_get (config, + "cell-width", &cell_width, + "cell-height", &cell_height, + "num-cells", &num_cells, + "dimension", &dimension, + NULL); + + spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "cell-width"); + image_width = G_PARAM_SPEC_INT (spec)->maximum; + n_horiz_cells = image_width / cell_width; + n_vert_guides = n_horiz_cells - 1; + + if (cell_width * n_horiz_cells == image_width) + width_warning = NULL; + + spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "cell-height"); + image_height = G_PARAM_SPEC_INT (spec)->maximum; + n_vert_cells = image_height / cell_height; + n_horiz_guides = n_vert_cells - 1; + + if (cell_height * n_vert_cells == image_height) + height_warning = NULL; + + /* TRANSLATORS: \xc3\x97 is the UTF-8 encoding for the multiplication sign. */ + if (n_horiz_guides + n_vert_guides > 0) + grid_text = g_strdup_printf (_("Displays as a %d \xc3\x97 %d grid on each layer"), + n_horiz_cells, n_vert_cells); + info_text = g_strdup_printf ("%s%s%s%s%s", + grid_text != NULL ? grid_text : "", + grid_text != NULL && width_warning != NULL ? " / " : "", + width_warning != NULL ? width_warning : "", + (grid_text != NULL || width_warning != NULL) && height_warning != NULL ? " / " : "", + height_warning != NULL ? height_warning : ""); + + spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "num-cells"); + old_max_cells = G_PARAM_SPEC_INT (spec)->maximum; + max_cells = n_horiz_cells * n_vert_cells; + + if (num_cells == old_max_cells) + num_cells = max_cells; else + num_cells = MIN (max_cells, num_cells); + + G_PARAM_SPEC_INT (spec)->maximum = max_cells; + widget = pika_procedure_dialog_get_widget (dialog, "num-cells", G_TYPE_NONE); + g_object_set (widget, "upper", (gdouble) max_cells, NULL); + pika_label_spin_set_increments (PIKA_LABEL_SPIN (widget), 1.0, 1.0); + + gih_remove_guides (config, image); + + widget = pika_procedure_dialog_get_widget (dialog, "info-text", G_TYPE_NONE); + gtk_widget_set_visible (widget, (strlen (info_text) > 0)); + if (n_horiz_guides + n_vert_guides > 0) { - size = pika_image_get_height (adj->image); - newn = size / *(adj->value); - adj->nguides = newn - 1; - adj->guides = g_new (gint32, adj->nguides); - for (i = 0; i < adj->nguides; i++) - adj->guides[i] = pika_image_add_hguide (adj->image, - *(adj->value) * (i+1)); + gint32 *guides = NULL; + GValue value = G_VALUE_INIT; + + guides = g_new0 (gint32, n_horiz_guides + n_vert_guides); + + for (gint i = 0; i < n_vert_guides; i++) + guides[i] = pika_image_add_vguide (image, cell_width * (i + 1)); + + for (gint i = 0; i < n_horiz_guides; i++) + guides[n_vert_guides + i] = pika_image_add_hguide (image, cell_height * (i + 1)); + + g_value_init (&value, PIKA_TYPE_INT32_ARRAY); + pika_value_set_int32_array (&value, guides, n_horiz_guides + n_vert_guides); + g_object_set_property (G_OBJECT (config), "guides", &value); + g_free (guides); } - pika_displays_flush (); - g_snprintf (buf, sizeof (buf), "%2d", newn); - gtk_label_set_text (GTK_LABEL (adj->count_label), buf); - *(adj->count) = newn; + g_object_set (config, + "info-text", info_text, + "num-cells", num_cells, + NULL); + if (rank0 != NULL && dimension == 1) + gtk_adjustment_set_value (rank0, num_cells); - gtk_widget_set_visible (GTK_WIDGET (adj->warning_label), - newn * *(adj->value) != size); - - if (adj->ncells != NULL) - gtk_adjustment_set_value (adj->ncells, - *(adj->other_count) * *(adj->count)); - if (adj->rank0 != NULL) - gtk_adjustment_set_value (adj->rank0, - *(adj->other_count) * *(adj->count)); + g_free (info_text); + g_free (grid_text); } static void -entry_callback (GtkWidget *widget, - gpointer data) -{ - if (data == info.description) - g_strlcpy (info.description, gtk_entry_get_text (GTK_ENTRY (widget)), - sizeof (info.description)); -} - -static void -cb_callback (GtkWidget *widget, - gpointer data) +gih_selection_mode_changed (GtkWidget *widget, + gpointer data) { gint index; index = gtk_combo_box_get_active (GTK_COMBO_BOX (widget)); - *((const gchar **) data) = selection_modes [index]; + g_free (*((gchar **) data)); + *((gchar **) data) = g_strdup (selection_modes [index]); } static void -dim_callback (GtkAdjustment *adjustment, - SizeAdjustmentData *data) +gih_dimension_notify (PikaProcedureConfig *config, + const GParamSpec *pspec, + SizeAdjustmentData *data) { + gint dimension; gint i; - gihparams.dim = RINT (gtk_adjustment_get_value (adjustment)); + g_object_get (config, "dimension", &dimension, NULL); for (i = 0; i < PIKA_PIXPIPE_MAXDIM; i++) { - gtk_widget_set_sensitive (data->rank_entry[i], i < gihparams.dim); - gtk_widget_set_sensitive (data->mode_entry[i], i < gihparams.dim); + gtk_widget_set_sensitive (data->rank_entry[i], i < dimension); + gtk_widget_set_sensitive (data->mode_entry[i], i < dimension); } } static gboolean -gih_save_dialog (PikaImage *image) +gih_save_dialog (PikaImage *image, + PikaProcedure *procedure, + PikaProcedureConfig *config) { - GtkWidget *dialog; - GtkWidget *grid; - GtkWidget *dimgrid; - GtkWidget *label; - GtkAdjustment *adjustment; - GtkWidget *spinbutton; - GtkWidget *entry; - GtkWidget *box; - GtkWidget *cb; - gint i; - gchar buffer[100]; - SizeAdjustmentData cellw_adjust; - SizeAdjustmentData cellh_adjust; - GList *layers; - gboolean run; + GtkWidget *dialog; + GtkWidget *dimgrid; + GtkWidget *label; + GtkAdjustment *adjustment; + GtkWidget *spinbutton; + GtkWidget *cb; + gint i; + SizeAdjustmentData cellw_adjust; + SizeAdjustmentData cellh_adjust; + gchar **selection; + GBytes *rank_bytes = NULL; + guint8 rank[PIKA_PIXPIPE_MAXDIM]; + gint num_cells; + gint dimension; + gboolean run; - dialog = pika_export_dialog_new (_("Brush Pipe"), PLUG_IN_BINARY, SAVE_PROC); + dialog = pika_save_procedure_dialog_new (PIKA_SAVE_PROCEDURE (procedure), + PIKA_PROCEDURE_CONFIG (config), + image); - /* The main grid */ - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_container_set_border_width (GTK_CONTAINER (grid), 12); - gtk_box_pack_start (GTK_BOX (pika_export_dialog_get_content_area (dialog)), - grid, TRUE, TRUE, 0); - gtk_widget_show (grid); + gtk_widget_set_halign (pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "info-text", NULL, TRUE, FALSE), + GTK_ALIGN_START); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), + "description", "spacing", + "cell-width", "cell-height", "num-cells", + "info-text", "dimension", NULL); - /* - * Description: ___________ - */ - entry = gtk_entry_new (); - gtk_widget_set_size_request (entry, 200, -1); - gtk_entry_set_text (GTK_ENTRY (entry), info.description); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("_Description:"), 0.0, 0.5, - entry, 1); + g_object_set_data (G_OBJECT (dialog), "image", image); + g_signal_connect (config, "notify::cell-width", + G_CALLBACK (gih_cell_width_notify), + dialog); + g_signal_connect (config, "notify::cell-height", + G_CALLBACK (gih_cell_width_notify), + dialog); + gih_cell_width_notify (config, NULL, PIKA_PROCEDURE_DIALOG (dialog)); - g_signal_connect (entry, "changed", - G_CALLBACK (entry_callback), - info.description); - - /* - * Spacing: __ - */ - adjustment = gtk_adjustment_new (info.spacing, 1, 1000, 1, 10, 0); - spinbutton = pika_spin_button_new (adjustment, 1.0, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("_Spacing (percent):"), 0.0, 0.5, - spinbutton, 1); - - g_signal_connect (adjustment, "value-changed", - G_CALLBACK (pika_int_adjustment_update), - &info.spacing); - - /* - * Cell size: __ x __ pixels - */ - box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); - - adjustment = gtk_adjustment_new (gihparams.cellwidth, - 2, pika_image_get_width (image), 1, 10, 0); - spinbutton = pika_spin_button_new (adjustment, 1.0, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - layers = pika_image_list_layers (image); - - cellw_adjust.orientation = PIKA_ORIENTATION_VERTICAL; - cellw_adjust.image = image; - cellw_adjust.toplayer = g_list_last (layers)->data; - cellw_adjust.nguides = 0; - cellw_adjust.guides = NULL; - cellw_adjust.value = &gihparams.cellwidth; - - g_signal_connect (adjustment, "value-changed", - G_CALLBACK (size_adjustment_callback), - &cellw_adjust); - - label = gtk_label_new ("x"); - gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - adjustment = gtk_adjustment_new (gihparams.cellheight, - 2, pika_image_get_height (image), 1, 10, 0); - spinbutton = pika_spin_button_new (adjustment, 1.0, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - cellh_adjust.orientation = PIKA_ORIENTATION_HORIZONTAL; - cellh_adjust.image = image; - cellh_adjust.toplayer = g_list_last (layers)->data; - cellh_adjust.nguides = 0; - cellh_adjust.guides = NULL; - cellh_adjust.value = &gihparams.cellheight; - - g_signal_connect (adjustment, "value-changed", - G_CALLBACK (size_adjustment_callback), - &cellh_adjust); - - label = gtk_label_new ( _("Pixels")); - gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - pika_grid_attach_aligned (GTK_GRID (grid), 0, 2, - _("Ce_ll size:"), 0.0, 0.5, - box, 1); - - g_list_free (layers); - - /* - * Number of cells: ___ - */ - adjustment = gtk_adjustment_new (gihparams.ncells, 1, 1000, 1, 10, 0); - spinbutton = pika_spin_button_new (adjustment, 1.0, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 3, - _("_Number of cells:"), 0.0, 0.5, - spinbutton, 1); - - g_signal_connect (adjustment, "value-changed", - G_CALLBACK (pika_int_adjustment_update), - &gihparams.ncells); - - if (gihparams.dim == 1) - cellw_adjust.ncells = cellh_adjust.ncells = adjustment; - else - cellw_adjust.ncells = cellh_adjust.ncells = NULL; - - /* - * Display as: __ rows x __ cols - */ - box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - - g_snprintf (buffer, sizeof (buffer), "%2d", gihparams.rows); - label = gtk_label_new (buffer); - gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); - cellh_adjust.count_label = label; - cellh_adjust.count = &gihparams.rows; - cellh_adjust.other_count = &gihparams.cols; - gtk_widget_show (label); - - label = gtk_label_new (_(" Rows of ")); - gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - g_snprintf (buffer, sizeof (buffer), "%2d", gihparams.cols); - label = gtk_label_new (buffer); - gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); - cellw_adjust.count_label = label; - cellw_adjust.count = &gihparams.cols; - cellw_adjust.other_count = &gihparams.rows; - gtk_widget_show (label); - - label = gtk_label_new (_(" Columns on each layer")); - gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - label = gtk_label_new (_(" (Width Mismatch!) ")); - gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); - cellw_adjust.warning_label = label; - - label = gtk_label_new (_(" (Height Mismatch!) ")); - gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); - cellh_adjust.warning_label = label; - - pika_grid_attach_aligned (GTK_GRID (grid), 0, 4, - _("Display as:"), 0.0, 0.5, - box, 1); - - /* - * Dimension: ___ - */ - adjustment = gtk_adjustment_new (gihparams.dim, - 1, PIKA_PIXPIPE_MAXDIM, 1, 1, 0); - spinbutton = pika_spin_button_new (adjustment, 1.0, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 5, - _("Di_mension:"), 0.0, 0.5, - spinbutton, 1); - - g_signal_connect (adjustment, "value-changed", - G_CALLBACK (dim_callback), + g_signal_connect (config, "notify::dimension", + G_CALLBACK (gih_dimension_notify), &cellw_adjust); /* * Ranks / Selection: ______ ______ ______ ______ ______ */ + g_object_get (config, + "selection-modes", &selection, + "ranks", &rank_bytes, + "num-cells", &num_cells, + NULL); + if (selection == NULL || g_strv_length (selection) != PIKA_PIXPIPE_MAXDIM) + { + GStrvBuilder *builder = g_strv_builder_new (); + gint old_len; + + old_len = (selection == NULL ? 0 : g_strv_length (selection)); + + for (i = 0; i < MIN (old_len, PIKA_PIXPIPE_MAXDIM); i++) + g_strv_builder_add (builder, selection[i]); + + for (i = old_len; i < PIKA_PIXPIPE_MAXDIM; i++) + g_strv_builder_add (builder, "random"); + + g_strfreev (selection); + selection = g_strv_builder_end (builder); + g_strv_builder_unref (builder); + } + + if (rank_bytes == NULL) + { + dimension = 1; + + rank[0] = 1; + for (i = 1; i < PIKA_PIXPIPE_MAXDIM; i++) + rank[i] = 0; + } + else + { + const guint8 *stored; + + stored = g_bytes_get_data (rank_bytes, NULL); + dimension = g_bytes_get_size (rank_bytes); + + for (i = 0; i < dimension; i++) + rank[i] = stored[i]; + + for (i = dimension; i < PIKA_PIXPIPE_MAXDIM; i++) + rank[i] = 1; + } + g_bytes_unref (rank_bytes); + dimension = MAX (dimension, 1); + dimgrid = gtk_grid_new (); gtk_grid_set_column_spacing (GTK_GRID (dimgrid), 4); + + label = gtk_label_new (_("Ranks:")); + gtk_grid_attach (GTK_GRID (dimgrid), label, 0, 0, 1, 1); + gtk_widget_show (label); + for (i = 0; i < PIKA_PIXPIPE_MAXDIM; i++) { gsize j; - adjustment = gtk_adjustment_new (gihparams.rank[i], 1, 100, 1, 1, 0); + adjustment = gtk_adjustment_new (rank[i], 1, 100, 1, 1, 0); + if (i == 0) + g_object_set_data (G_OBJECT (dialog), "rank0", adjustment); + spinbutton = pika_spin_button_new (adjustment, 1.0, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_grid_attach (GTK_GRID (dimgrid), spinbutton, 0, i, 1, 1); + gtk_grid_attach (GTK_GRID (dimgrid), spinbutton, 1, i, 1, 1); gtk_widget_show (spinbutton); - if (i >= gihparams.dim) + if (i >= dimension) gtk_widget_set_sensitive (spinbutton, FALSE); g_signal_connect (adjustment, "value-changed", G_CALLBACK (pika_int_adjustment_update), - &gihparams.rank[i]); + &rank[i]); cellw_adjust.rank_entry[i] = cellh_adjust.rank_entry[i] = spinbutton; - if (i == 0) - { - if (gihparams.dim == 1) - cellw_adjust.rank0 = cellh_adjust.rank0 = adjustment; - else - cellw_adjust.rank0 = cellh_adjust.rank0 = NULL; - } - cb = gtk_combo_box_text_new (); for (j = 0; j < G_N_ELEMENTS (selection_modes); j++) @@ -841,56 +740,46 @@ gih_save_dialog (PikaImage *image) selection_modes[j]); gtk_combo_box_set_active (GTK_COMBO_BOX (cb), 2); /* random */ - if (gihparams.selection[i]) - for (j = 0; j < G_N_ELEMENTS (selection_modes); j++) - if (!strcmp (gihparams.selection[i], selection_modes[j])) - { - gtk_combo_box_set_active (GTK_COMBO_BOX (cb), j); - break; - } + for (j = 0; j < G_N_ELEMENTS (selection_modes); j++) + if (!strcmp (selection[i], selection_modes[j])) + { + gtk_combo_box_set_active (GTK_COMBO_BOX (cb), j); + break; + } - gtk_grid_attach (GTK_GRID (dimgrid), cb, 1, i, 1, 1); + gtk_grid_attach (GTK_GRID (dimgrid), cb, 2, i, 1, 1); gtk_widget_show (cb); - if (i >= gihparams.dim) + if (i >= dimension) gtk_widget_set_sensitive (cb, FALSE); g_signal_connect (GTK_COMBO_BOX (cb), "changed", - G_CALLBACK (cb_callback), - &gihparams.selection[i]); + G_CALLBACK (gih_selection_mode_changed), + &selection[i]); cellw_adjust.mode_entry[i] = cellh_adjust.mode_entry[i] = cb; - - } - pika_grid_attach_aligned (GTK_GRID (grid), 0, 6, - _("Ranks:"), 0.0, 0.0, - dimgrid, 1); + gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), + dimgrid, TRUE, TRUE, 0); + gtk_widget_show (dimgrid); - gtk_widget_show (dialog); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); - run = (pika_dialog_run (PIKA_DIALOG (dialog)) == GTK_RESPONSE_OK); + g_object_get (config, "dimension", &dimension, NULL); + rank_bytes = g_bytes_new (rank, sizeof (guint8) * dimension); - if (run) - { - gint i; - - for (i = 0; i < PIKA_PIXPIPE_MAXDIM; i++) - gihparams.selection[i] = g_strdup (gihparams.selection[i]); - - /* Fix up bogus values */ - gihparams.ncells = MIN (gihparams.ncells, - num_layers * gihparams.rows * gihparams.cols); - } + g_object_set (config, + "selection-modes", selection, + "ranks", rank_bytes, + NULL); + gih_remove_guides (config, image); gtk_widget_destroy (dialog); - for (i = 0; i < cellw_adjust.nguides; i++) - pika_image_delete_guide (image, cellw_adjust.guides[i]); - for (i = 0; i < cellh_adjust.nguides; i++) - pika_image_delete_guide (image, cellh_adjust.guides[i]); + g_strfreev (selection); + g_bytes_unref (rank_bytes); return run; } diff --git a/plug-ins/common/file-glob.c b/plug-ins/common/file-glob.c index e9d43a7..3d37c5d 100644 --- a/plug-ins/common/file-glob.c +++ b/plug-ins/common/file-glob.c @@ -46,8 +46,8 @@ struct _GlobClass }; -#define GLOB_TYPE (glob_get_type ()) -#define GLOB (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLOB_TYPE, Glob)) +#define GLOB_TYPE (glob_get_type ()) +#define GLOB(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLOB_TYPE, Glob)) GType glob_get_type (void) G_GNUC_CONST; @@ -56,7 +56,7 @@ static PikaProcedure * glob_create_procedure (PikaPlugIn *plug_in, const gchar *name); static PikaValueArray * glob_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gboolean glob_match (const gchar *pattern, @@ -145,29 +145,33 @@ glob_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * glob_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals; - const gchar *pattern; + gchar *pattern; gboolean filename_encoding; gchar **matches; - pattern = PIKA_VALUES_GET_STRING (args, 0); - filename_encoding = PIKA_VALUES_GET_BOOLEAN (args, 1); + g_object_get (config, + "pattern", &pattern, + "filename-encoding", &filename_encoding, + NULL); if (! glob_match (pattern, filename_encoding, &matches)) { - return pika_procedure_new_return_values (procedure, + return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); } - - return_vals = pika_procedure_new_return_values (procedure, - PIKA_PDB_SUCCESS, - NULL); - - PIKA_VALUES_TAKE_STRV (return_vals, 1, matches); + else + { + return_vals = pika_procedure_new_return_values (procedure, + PIKA_PDB_SUCCESS, + NULL); + PIKA_VALUES_TAKE_STRV (return_vals, 1, matches); + } + g_free (pattern); return return_vals; } diff --git a/plug-ins/common/file-header.c b/plug-ins/common/file-header.c index 6d9c539..a2e5448 100644 --- a/plug-ins/common/file-header.c +++ b/plug-ins/common/file-header.c @@ -49,7 +49,7 @@ struct _HeaderClass #define HEADER_TYPE (header_get_type ()) -#define HEADER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HEADER_TYPE, Header)) +#define HEADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HEADER_TYPE, Header)) GType header_get_type (void) G_GNUC_CONST; @@ -63,7 +63,8 @@ static PikaValueArray * header_save (PikaProcedure *procedure gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static gboolean save_image (GFile *file, @@ -114,7 +115,7 @@ header_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - header_save, NULL, NULL); + FALSE, header_save, NULL, NULL); pika_procedure_set_image_types (procedure, "INDEXED, RGB"); @@ -148,7 +149,8 @@ header_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status = PIKA_PDB_SUCCESS; diff --git a/plug-ins/common/file-heif.c b/plug-ins/common/file-heif.c index 9e6b824..f2ee75b 100644 --- a/plug-ins/common/file-heif.c +++ b/plug-ins/common/file-heif.c @@ -65,43 +65,47 @@ struct _PikaHeifClass #define PIKA_HEIF_TYPE (pika_heif_get_type ()) -#define PIKA_HEIF (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIKA_HEIF_TYPE, PikaHeif)) +#define PIKA_HEIF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIKA_HEIF_TYPE, PikaHeif)) GType pika_heif_get_type (void) G_GNUC_CONST; -static GList * heif_init_procedures (PikaPlugIn *plug_in); -static PikaProcedure * heif_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * heif_init_procedures (PikaPlugIn *plug_in); +static PikaProcedure * heif_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * heif_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * heif_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * heif_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * heif_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); #if LIBHEIF_HAVE_VERSION(1,8,0) -static PikaValueArray * heif_av1_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * heif_av1_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); #endif -static PikaImage * load_image (GFile *file, - gboolean interactive, - PikaPDBStatusType *status, - GError **error); +static PikaImage * load_image (GFile *file, + gboolean interactive, + PikaPDBStatusType *status, + GError **error); static gboolean save_image (GFile *file, PikaImage *image, PikaDrawable *drawable, @@ -110,11 +114,11 @@ static gboolean save_image (GFile *fil enum heif_compression_format compression, PikaMetadata *metadata); -static gboolean load_dialog (struct heif_context *heif, - uint32_t *selected_image); -static gboolean save_dialog (PikaProcedure *procedure, - GObject *config, - PikaImage *image); +static gboolean load_dialog (struct heif_context *heif, + uint32_t *selected_image); +static gboolean save_dialog (PikaProcedure *procedure, + GObject *config, + PikaImage *image); G_DEFINE_TYPE (PikaHeif, pika_heif, PIKA_TYPE_PLUG_IN) @@ -223,7 +227,7 @@ heif_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - heif_save, NULL, NULL); + FALSE, heif_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB*"); @@ -332,7 +336,7 @@ heif_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - heif_av1_save, NULL, NULL); + FALSE, heif_av1_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB*"); @@ -413,11 +417,13 @@ heif_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -heif_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +heif_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaPDBStatusType status = PIKA_PDB_SUCCESS; @@ -461,20 +467,17 @@ heif_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata_unused, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - PikaMetadata *metadata; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + PikaMetadata *metadata; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -537,9 +540,6 @@ heif_save (PikaProcedure *procedure, } } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); @@ -557,20 +557,17 @@ heif_av1_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata_unused, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - PikaMetadata *metadata; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + PikaMetadata *metadata; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -633,9 +630,6 @@ heif_av1_save (PikaProcedure *procedure, } } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/common/file-html-table.c b/plug-ins/common/file-html-table.c index a8821f4..56d3677 100644 --- a/plug-ins/common/file-html-table.c +++ b/plug-ins/common/file-html-table.c @@ -80,7 +80,7 @@ struct _HtmlClass #define HTML_TYPE (html_get_type ()) -#define HTML (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HTML_TYPE, Html)) +#define HTML(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HTML_TYPE, Html)) GType html_get_type (void) G_GNUC_CONST; @@ -94,7 +94,8 @@ static PikaValueArray * html_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static gboolean save_image (GFile *file, @@ -150,7 +151,7 @@ html_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - html_save, NULL, NULL); + FALSE, html_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -264,13 +265,13 @@ html_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - GeglBuffer *buffer; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + GeglBuffer *buffer; + GError *error = NULL; gegl_init (NULL, NULL); @@ -279,9 +280,6 @@ html_save (PikaProcedure *procedure, PIKA_PDB_CALLING_ERROR, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - if (! save_dialog (image, procedure, G_OBJECT (config))) return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, @@ -307,9 +305,6 @@ html_save (PikaProcedure *procedure, g_object_unref (buffer); - pika_procedure_config_end_run (config, status); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, status, error); } @@ -617,7 +612,8 @@ save_dialog (PikaImage *image, "warning-label", _("You are about to create a huge\n" "HTML file which will most likely\n" - "crash your browser.")); + "crash your browser."), + FALSE, FALSE); hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "warning-hbox", "warning-label", NULL); @@ -632,7 +628,8 @@ save_dialog (PikaImage *image, gtk_widget_set_margin_end (eek, 24); pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "warning-frame-label", _("Warning")); + "warning-frame-label", _("Warning"), + FALSE, FALSE); frame = pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), "warning-frame", "warning-frame-label", @@ -645,7 +642,8 @@ save_dialog (PikaImage *image, /* HTML Page Options */ pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "page-label", _("HTML Page Options")); + "page-label", _("HTML Page Options"), + FALSE, FALSE); frame = pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), "page-frame", "page-label", @@ -655,7 +653,8 @@ save_dialog (PikaImage *image, /* HTML Table Creation Options */ pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "creation-label", - _("Table Creation Options")); + _("Table Creation Options"), + FALSE, FALSE); pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "creation-vbox", "span-tags", @@ -674,7 +673,8 @@ save_dialog (PikaImage *image, gtk_widget_set_margin_bottom (frame, 8); /* HTML Table Options */ pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "table-label", _("Table Options")); + "table-label", _("Table Options"), + FALSE, FALSE); pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "table-vbox", "border", "cell-width", diff --git a/plug-ins/common/file-iff.c b/plug-ins/common/file-iff.c index 2acbc96..d31fb7f 100644 --- a/plug-ins/common/file-iff.c +++ b/plug-ins/common/file-iff.c @@ -57,46 +57,48 @@ struct _IffClass #define IFF_TYPE (iff_get_type ()) -#define IFF (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), IFF_TYPE, Iff)) +#define IFF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), IFF_TYPE, Iff)) GType iff_get_type (void) G_GNUC_CONST; -static GList * iff_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * iff_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * iff_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * iff_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * iff_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * iff_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GObject *config, - PikaRunMode run_mode, - GError **error); +static PikaImage * load_image (GFile *file, + GObject *config, + PikaRunMode run_mode, + GError **error); -static void deleave_indexed_row (IFF_UByte *bitplanes, - guchar *pixel_row, - gint width, - gint nPlanes); +static void deleave_indexed_row (IFF_UByte *bitplanes, + guchar *pixel_row, + gint width, + gint nPlanes); -static void deleave_rgb_row (IFF_UByte *bitplanes, - guchar *pixel_row, - gint width, - gint nPlanes, - gint pixel_size); +static void deleave_rgb_row (IFF_UByte *bitplanes, + guchar *pixel_row, + gint width, + gint nPlanes, + gint pixel_size); -static void deleave_ham_row (const guchar *pika_cmap, - IFF_UByte *bitplanes, - guchar *pixel_row, - gint width, - gint nPlanes); +static void deleave_ham_row (const guchar *pika_cmap, + IFF_UByte *bitplanes, + guchar *pixel_row, + gint width, + gint nPlanes); -static void pbm_row (IFF_UByte *bitplanes, - guchar *pixel_row, - gint width); +static void pbm_row (IFF_UByte *bitplanes, + guchar *pixel_row, + gint width); G_DEFINE_TYPE (Iff, iff, PIKA_TYPE_PLUG_IN) @@ -165,36 +167,26 @@ iff_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -iff_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +iff_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaImage *image; - GError *error = NULL; + PikaValueArray *return_vals; + PikaImage *image; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - image = load_image (file, G_OBJECT (config), run_mode, &error); if (! image) - { - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - error); - } - - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + error); return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, diff --git a/plug-ins/common/file-jp2-load.c b/plug-ins/common/file-jp2-load.c index 8d16ed7..9f2dd71 100644 --- a/plug-ins/common/file-jp2-load.c +++ b/plug-ins/common/file-jp2-load.c @@ -117,31 +117,33 @@ struct _Jp2Class GType jp2_get_type (void) G_GNUC_CONST; -static GList * jp2_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * jp2_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * jp2_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * jp2_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * jp2_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * jp2_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (PikaProcedure *procedure, - GObject *config, - GFile *file, - OPJ_CODEC_FORMAT format, - OPJ_COLOR_SPACE color_space, - gboolean interactive, - gboolean *profile_loaded, - GError **error); +static PikaImage * load_image (PikaProcedure *procedure, + GObject *config, + GFile *file, + OPJ_CODEC_FORMAT format, + OPJ_COLOR_SPACE color_space, + gboolean interactive, + gboolean *profile_loaded, + GError **error); -static OPJ_COLOR_SPACE open_dialog (PikaProcedure *procedure, - GObject *config, - GFile *file, - OPJ_CODEC_FORMAT format, - gint num_components, - GError **error); +static OPJ_COLOR_SPACE open_dialog (PikaProcedure *procedure, + GObject *config, + GFile *file, + OPJ_CODEC_FORMAT format, + gint num_components, + GError **error); G_DEFINE_TYPE (Jp2, jp2, PIKA_TYPE_PLUG_IN) @@ -259,27 +261,24 @@ jp2_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -jp2_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +jp2_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaImage *image = NULL; - OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_UNKNOWN; - gboolean interactive; - PikaMetadata *metadata; - gboolean profile_loaded = FALSE; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - GError *error = NULL; + PikaValueArray *return_vals; + PikaImage *image = NULL; + OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_UNKNOWN; + gboolean interactive; + gboolean profile_loaded = FALSE; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -290,11 +289,17 @@ jp2_load (PikaProcedure *procedure, default: if (! strcmp (pika_procedure_get_name (procedure), LOAD_J2K_PROC)) { + gint color_space_argument = 0; + + g_object_get (config, + "colorspace", &color_space_argument, + NULL); + /* Order is not the same as OpenJPEG enum on purpose, * since it's better to not rely on a given order or * on enum values. */ - switch (PIKA_VALUES_GET_INT (args, 0)) + switch (color_space_argument) { case 1: color_space = OPJ_CLRSPC_GRAY; @@ -336,30 +341,11 @@ jp2_load (PikaProcedure *procedure, { status = error ? PIKA_PDB_EXECUTION_ERROR : PIKA_PDB_CANCEL; - pika_procedure_config_end_run (config, status); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, status, error); } - metadata = pika_image_metadata_load_prepare (image, "image/jp2", - file, NULL); - - if (metadata) - { - PikaMetadataLoadFlags flags = PIKA_METADATA_LOAD_ALL; - - if (profile_loaded) - flags &= ~PIKA_METADATA_LOAD_COLORSPACE; - - pika_image_metadata_load_finish (image, "image/jp2", - metadata, flags); - - g_object_unref (metadata); - } - - pika_procedure_config_end_run (config, status); - g_object_unref (config); + if (profile_loaded) + *flags &= ~PIKA_METADATA_LOAD_COLORSPACE; return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, diff --git a/plug-ins/common/file-jpegxl.c b/plug-ins/common/file-jpegxl.c index 4c5a3cb..8985da4 100644 --- a/plug-ins/common/file-jpegxl.c +++ b/plug-ins/common/file-jpegxl.c @@ -55,46 +55,49 @@ struct _JpegXLClass #define JPEGXL_TYPE (jpegxl_get_type ()) -#define JPEGXL (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), JPEGXL_TYPE, JpegXL)) +#define JPEGXL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), JPEGXL_TYPE, JpegXL)) GType jpegxl_get_type (void) G_GNUC_CONST; -static GList *jpegxl_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure *jpegxl_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList *jpegxl_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure *jpegxl_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray *jpegxl_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray *jpegxl_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray *jpegxl_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray *jpegxl_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static void create_cmyk_layer (PikaImage *image, - PikaLayer *layer, - const Babl *space, - const Babl *type, - gpointer picture_buffer, - gpointer key_buffer, - gint bit_depth, - gboolean has_alpha); -static void extract_cmyk (GeglBuffer *buffer, - gpointer *cmy_data, - gpointer *key_data, - gpointer *alpha_data, - const Babl *type, - const Babl *space, - gint width, - gint height, - gint bit_depth, - gboolean has_alpha); +static void create_cmyk_layer (PikaImage *image, + PikaLayer *layer, + const Babl *space, + const Babl *type, + gpointer picture_buffer, + gpointer key_buffer, + gint bit_depth, + gboolean has_alpha); +static void extract_cmyk (GeglBuffer *buffer, + gpointer *cmy_data, + gpointer *key_data, + gpointer *alpha_data, + const Babl *type, + const Babl *space, + gint width, + gint height, + gint bit_depth, + gboolean has_alpha); G_DEFINE_TYPE (JpegXL, jpegxl, PIKA_TYPE_PLUG_IN) @@ -163,7 +166,7 @@ jpegxl_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - jpegxl_save, NULL, NULL); + FALSE, jpegxl_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB*, GRAY*"); @@ -1141,37 +1144,27 @@ load_image (GFile *file, } static PikaValueArray * -jpegxl_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +jpegxl_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; - GError *error = NULL; + GError *error = NULL; gegl_init (NULL, NULL); - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - case PIKA_RUN_WITH_LAST_VALS: - pika_ui_init (PLUG_IN_BINARY); - break; - - default: - break; - } - image = load_image (file, run_mode, &error); if (! image) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - error); - } + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + error); + return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); @@ -2039,7 +2032,8 @@ save_dialog (PikaImage *image, /* Profile label */ profile_label = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "profile-label", _("CMYK profile required for export")); + "profile-label", _("CMYK profile required for export"), + FALSE, FALSE); gtk_label_set_xalign (GTK_LABEL (profile_label), 0.0); gtk_label_set_ellipsize (GTK_LABEL (profile_label), PANGO_ELLIPSIZE_END); pika_label_set_attributes (GTK_LABEL (profile_label), @@ -2114,19 +2108,16 @@ jpegxl_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaProcedureConfig *config; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -2185,10 +2176,6 @@ jpegxl_save (PikaProcedure *procedure, } } - - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { g_free (drawables); diff --git a/plug-ins/common/file-mng.c b/plug-ins/common/file-mng.c index 5d8c012..11d095d 100644 --- a/plug-ins/common/file-mng.c +++ b/plug-ins/common/file-mng.c @@ -153,7 +153,7 @@ struct _MngClass #define MNG_TYPE (mng_get_type ()) -#define MNG (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MNG_TYPE, Mng)) +#define MNG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MNG_TYPE, Mng)) GType mng_get_type (void) G_GNUC_CONST; @@ -167,7 +167,8 @@ static PikaValueArray * mng_save (PikaProcedure *procedur gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static mng_ptr MNG_DECL myalloc (mng_size_t size); @@ -251,7 +252,7 @@ mng_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - mng_save, NULL, NULL); + FALSE, mng_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -365,19 +366,16 @@ mng_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_IGNORE; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_IGNORE; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_export (config, image, run_mode, args, NULL); - if (run_mode == PIKA_RUN_INTERACTIVE || run_mode == PIKA_RUN_WITH_LAST_VALS) { @@ -411,9 +409,6 @@ mng_save (PikaProcedure *procedure, } } - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); @@ -1597,7 +1592,8 @@ mng_save_dialog (PikaImage *image, "bkgd", "gama", "phys", "time", NULL); pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "options-label", _("MNG Options")); + "options-label", _("MNG Options"), + FALSE, FALSE); pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), "options-frame", "options-label", FALSE, "options-vbox"); @@ -1643,7 +1639,7 @@ mng_save_dialog (PikaImage *image, /* MNG Animation Options */ label = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "milliseconds-label", - _("milliseconds")); + _("milliseconds"), FALSE, FALSE); gtk_widget_set_margin_start (label, 6); hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "animation-box", "default-delay", @@ -1656,7 +1652,7 @@ mng_save_dialog (PikaImage *image, "animation-box", NULL); pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "mng-animation-label", - _("Animated MNG Options")); + _("Animated MNG Options"), FALSE, FALSE); frame = pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), "mng-animation-frame", "mng-animation-label", FALSE, diff --git a/plug-ins/common/file-pat.c b/plug-ins/common/file-pat.c index d9dc4df..de03828 100644 --- a/plug-ins/common/file-pat.c +++ b/plug-ins/common/file-pat.c @@ -46,7 +46,7 @@ struct _PatClass #define PAT_TYPE (pat_get_type ()) -#define PAT (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PAT_TYPE, Pat)) +#define PAT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PAT_TYPE, Pat)) GType pat_get_type (void) G_GNUC_CONST; @@ -60,7 +60,8 @@ static PikaValueArray * pat_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static gboolean save_dialog (PikaImage *image, @@ -105,7 +106,7 @@ pat_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - pat_save, NULL, NULL); + FALSE, pat_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -149,17 +150,14 @@ pat_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - gchar *description; - GError *error = NULL; - - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + gchar *description; + GError *error = NULL; g_object_get (config, "description", &description, @@ -211,28 +209,25 @@ pat_save (PikaProcedure *procedure, if (status == PIKA_PDB_SUCCESS) { - PikaValueArray *save_retvals; - PikaValueArray *args; + PikaProcedure *procedure; + PikaValueArray *save_retvals; + PikaObjectArray *drawables_array; + + drawables_array = pika_object_array_new (PIKA_TYPE_DRAWABLE, (GObject **) drawables, n_drawables, FALSE); g_object_get (config, "description", &description, NULL); - args = pika_value_array_new_from_types (NULL, - PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE, - PIKA_TYPE_IMAGE, image, - G_TYPE_INT, n_drawables, - PIKA_TYPE_OBJECT_ARRAY, NULL, - G_TYPE_FILE, file, - G_TYPE_STRING, description, - G_TYPE_NONE); - pika_value_set_object_array (pika_value_array_index (args, 3), - PIKA_TYPE_ITEM, (GObject **) drawables, n_drawables); - - save_retvals = pika_pdb_run_procedure_array (pika_get_pdb (), - "file-pat-save-internal", - args); - pika_value_array_unref (args); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), + "file-pat-save-internal"); + save_retvals = pika_procedure_run (procedure, + "image", image, + "num-drawables", n_drawables, + "drawables", drawables_array, + "file", file, + "name", description, + NULL); if (PIKA_VALUES_GET_ENUM (save_retvals, 0) != PIKA_PDB_SUCCESS) { @@ -245,11 +240,9 @@ pat_save (PikaProcedure *procedure, } pika_value_array_unref (save_retvals); + pika_object_array_free (drawables_array); } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/common/file-pcx.c b/plug-ins/common/file-pcx.c index 571fe13..a6e2ed5 100644 --- a/plug-ins/common/file-pcx.c +++ b/plug-ins/common/file-pcx.c @@ -54,109 +54,114 @@ struct _PcxClass #define PCX_TYPE (pcx_get_type ()) -#define PCX (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PCX_TYPE, Pcx)) +#define PCX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PCX_TYPE, Pcx)) GType pcx_get_type (void) G_GNUC_CONST; -static GList * pcx_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * pcx_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * pcx_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * pcx_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * pcx_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * dcx_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * pcx_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * pcx_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * dcx_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * pcx_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_single (PikaProcedure *procedure, - GFile *file, - GObject *config, - gint run_mode, - GError **error); -static PikaImage * load_multi (PikaProcedure *procedure, - GFile *file, - GObject *config, - gint run_mode, - GError **error); +static PikaImage * load_single (PikaProcedure *procedure, + GFile *file, + GObject *config, + gint run_mode, + GError **error); +static PikaImage * load_multi (PikaProcedure *procedure, + GFile *file, + GObject *config, + gint run_mode, + GError **error); -static PikaImage * load_image (PikaProcedure *procedure, - FILE *fd, - const gchar *filename, - GObject *config, - gint run_mode, - gint image_num, - GError **error); -static gboolean pcx_load_dialog (PikaProcedure *procedure, - GObject *config); +static PikaImage * load_image (PikaProcedure *procedure, + FILE *fd, + const gchar *filename, + GObject *config, + gint run_mode, + gint image_num, + GError **error); +static gboolean pcx_load_dialog (PikaProcedure *procedure, + GObject *config); -static void load_1 (FILE *fp, - gint width, - gint height, - guchar *buf, - guint16 bytes); -static void load_4 (FILE *fp, - gint width, - gint height, - guchar *buf, - guint16 bytes); -static void load_sub_8 (FILE *fp, - gint width, - gint height, - gint bpp, - gint plane, - guchar *buf, - guint16 bytes); -static void load_8 (FILE *fp, - gint width, - gint height, - guchar *buf, - guint16 bytes); -static void load_24 (FILE *fp, - gint width, - gint height, - guchar *buf, - guint16 bytes, - guint8 planes); -static void readline (FILE *fp, - guchar *buf, - gint bytes); +static void load_1 (FILE *fp, + gint width, + gint height, + guchar *buf, + guint16 bytes); +static void load_4 (FILE *fp, + gint width, + gint height, + guchar *buf, + guint16 bytes); +static void load_sub_8 (FILE *fp, + gint width, + gint height, + gint bpp, + gint plane, + guchar *buf, + guint16 bytes); +static void load_8 (FILE *fp, + gint width, + gint height, + guchar *buf, + guint16 bytes); +static void load_24 (FILE *fp, + gint width, + gint height, + guchar *buf, + guint16 bytes, + guint8 planes); +static void readline (FILE *fp, + guchar *buf, + gint bytes); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GError **error); -static void save_less_than_8 (FILE *fp, - gint width, - gint height, - const gint bpp, - const guchar *buf, - gboolean padding); -static void save_8 (FILE *fp, - gint width, - gint height, - const guchar *buf, - gboolean padding); -static void save_24 (FILE *fp, - gint width, - gint height, - const guchar *buf, - gboolean padding); -static void writeline (FILE *fp, - const guchar *buf, - gint bytes); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GError **error); +static void save_less_than_8 (FILE *fp, + gint width, + gint height, + const gint bpp, + const guchar *buf, + gboolean padding); +static void save_8 (FILE *fp, + gint width, + gint height, + const guchar *buf, + gboolean padding); +static void save_24 (FILE *fp, + gint width, + gint height, + const guchar *buf, + gboolean padding); +static void writeline (FILE *fp, + const guchar *buf, + gint bytes); G_DEFINE_TYPE (Pcx, pcx, PIKA_TYPE_PLUG_IN) @@ -264,7 +269,7 @@ pcx_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - pcx_save, NULL, NULL); + FALSE, pcx_save, NULL, NULL); pika_procedure_set_image_types (procedure, "INDEXED, RGB, GRAY"); @@ -289,36 +294,26 @@ pcx_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -pcx_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +pcx_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaImage *image; - GError *error = NULL; + PikaValueArray *return_vals; + PikaImage *image; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - image = load_single (procedure, file, G_OBJECT (config), run_mode, &error); if (! image) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - error); - } - - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + error); return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, @@ -330,36 +325,26 @@ pcx_load (PikaProcedure *procedure, } static PikaValueArray * -dcx_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +dcx_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaImage *image; - GError *error = NULL; + PikaValueArray *return_vals; + PikaImage *image; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - image = load_multi (procedure, file, G_OBJECT (config), run_mode, &error); if (! image) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - error); - } - - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + error); return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, @@ -377,7 +362,8 @@ pcx_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status = PIKA_PDB_SUCCESS; diff --git a/plug-ins/common/file-pdf-load.c b/plug-ins/common/file-pdf-load.c index e77c130..cdcc202 100644 --- a/plug-ins/common/file-pdf-load.c +++ b/plug-ins/common/file-pdf-load.c @@ -217,61 +217,63 @@ struct _PdfClass #define PDF_TYPE (pdf_get_type ()) -#define PDF (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PDF_TYPE, Pdf)) +#define PDF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PDF_TYPE, Pdf)) GType pdf_get_type (void) G_GNUC_CONST; -static GList * pdf_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * pdf_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * pdf_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * pdf_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * pdf_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * pdf_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * pdf_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * pdf_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (PopplerDocument *doc, - GFile *file, - PikaRunMode run_mode, +static PikaImage * load_image (PopplerDocument *doc, + GFile *file, + PikaRunMode run_mode, PikaPageSelectorTarget target, - gdouble resolution, - gboolean antialias, - gboolean white_background, - gboolean reverse_order, - PdfSelectedPages *pages); + gdouble resolution, + gboolean antialias, + gboolean white_background, + gboolean reverse_order, + PdfSelectedPages *pages); -static PikaPDBStatusType load_dialog (PopplerDocument *doc, - PdfSelectedPages *pages, - PikaProcedure *procedure, - PikaProcedureConfig *config); +static PikaPDBStatusType load_dialog (PopplerDocument *doc, + PdfSelectedPages *pages, + PikaProcedure *procedure, + PikaProcedureConfig *config); -static PopplerDocument * open_document (GFile *file, - const gchar *PDF_password, - PikaRunMode run_mode, - GError **error); +static PopplerDocument * open_document (GFile *file, + const gchar *PDF_password, + PikaRunMode run_mode, + GError **error); -static cairo_surface_t * get_thumb_surface (PopplerDocument *doc, - gint page, - gint preferred_size, - gboolean white_background); +static cairo_surface_t * get_thumb_surface (PopplerDocument *doc, + gint page, + gint preferred_size, + gboolean white_background); -static GdkPixbuf * get_thumb_pixbuf (PopplerDocument *doc, - gint page, - gint preferred_size, - gboolean white_background); +static GdkPixbuf * get_thumb_pixbuf (PopplerDocument *doc, + gint page, + gint preferred_size, + gboolean white_background); -static PikaLayer * layer_from_surface (PikaImage *image, - const gchar *layer_name, - gint position, - cairo_surface_t *surface, - gdouble progress_start, - gdouble progress_scale); +static PikaLayer * layer_from_surface (PikaImage *image, + const gchar *layer_name, + gint position, + cairo_surface_t *surface, + gdouble progress_start, + gdouble progress_scale); G_DEFINE_TYPE (Pdf, pdf, PIKA_TYPE_PLUG_IN) @@ -435,127 +437,104 @@ pdf_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -pdf_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +pdf_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaProcedureConfig *config; PikaImage *image = NULL; PopplerDocument *doc = NULL; PdfSelectedPages pages = { 0, NULL }; GError *error = NULL; + gchar *password; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); + if (run_mode == PIKA_RUN_INTERACTIVE) + pika_ui_init (PLUG_IN_BINARY); - switch (run_mode) + g_object_get (config, + "password", &password, + NULL); + doc = open_document (file, + password, + run_mode, &error); + g_free (password); + + if (doc == NULL) { - case PIKA_RUN_INTERACTIVE: - { - gchar *password; - - pika_ui_init (PLUG_IN_BINARY); - - g_object_get (config, - "password", &password, - NULL); - doc = open_document (file, - password, - run_mode, &error); - g_free (password); - - if (! doc) - { - status = PIKA_PDB_EXECUTION_ERROR; - break; - } - - status = load_dialog (doc, &pages, procedure, config); - } - break; - - case PIKA_RUN_WITH_LAST_VALS: - /* FIXME: implement last vals mode */ status = PIKA_PDB_EXECUTION_ERROR; - break; + } + else if (run_mode == PIKA_RUN_INTERACTIVE) + { + status = load_dialog (doc, &pages, procedure, config); + } + else if (run_mode == PIKA_RUN_NONINTERACTIVE) + { + PopplerPage *test_page = poppler_document_get_page (doc, 0); - case PIKA_RUN_NONINTERACTIVE: - doc = open_document (file, - PIKA_VALUES_GET_STRING (args, 0), - run_mode, &error); - - if (doc) + if (test_page) { - PopplerPage *test_page = poppler_document_get_page (doc, 0); + gint i; + gint doc_n_pages; - if (test_page) + g_object_get (config, "n-pages", &pages.n_pages, NULL); + doc_n_pages = poppler_document_get_n_pages (doc); + /* The number of imported pages may be bigger than + * the number of pages from the original document. + * Indeed it is possible to duplicate some pages + * by setting the same number several times in the + * "pages" argument. + * Not ceiling this value is *not* an error. + */ + if (pages.n_pages <= 0) { - gint i; - gint doc_n_pages; + pages.n_pages = doc_n_pages; + pages.pages = g_new (gint, pages.n_pages); + for (i = 0; i < pages.n_pages; i++) + pages.pages[i] = i; + } + else + { + const gint32 *p; - doc_n_pages = poppler_document_get_n_pages (doc); - /* The number of imported pages may be bigger than - * the number of pages from the original document. - * Indeed it is possible to duplicate some pages - * by setting the same number several times in the - * "pages" argument. - * Not ceiling this value is *not* an error. - */ - pages.n_pages = PIKA_VALUES_GET_INT (args, 2); - if (pages.n_pages <= 0) + g_object_get (config, "pages", &p, NULL); + + pages.pages = g_new (gint, pages.n_pages); + + for (i = 0; i < pages.n_pages; i++) { - pages.n_pages = doc_n_pages; - pages.pages = g_new (gint, pages.n_pages); - for (i = 0; i < pages.n_pages; i++) - pages.pages[i] = i; - } - else - { - const gint32 *p = PIKA_VALUES_GET_INT32_ARRAY (args, 3); - - pages.pages = g_new (gint, pages.n_pages); - - for (i = 0; i < pages.n_pages; i++) + if (p[i] >= doc_n_pages) { - if (p[i] >= doc_n_pages) - { - status = PIKA_PDB_EXECUTION_ERROR; - g_set_error (&error, PIKA_PLUGIN_PDF_LOAD_ERROR, 0, - /* TRANSLATORS: first argument is file name, - * second is out-of-range page number, - * third is number of pages. - * Specify order as in English if needed. - */ - ngettext ("PDF document '%1$s' has %3$d page. Page %2$d is out of range.", - "PDF document '%1$s' has %3$d pages. Page %2$d is out of range.", - doc_n_pages), - pika_file_get_utf8_name (file), - p[i], - doc_n_pages); - break; - } - else - { - pages.pages[i] = p[i]; - } + status = PIKA_PDB_EXECUTION_ERROR; + g_set_error (&error, PIKA_PLUGIN_PDF_LOAD_ERROR, 0, + /* TRANSLATORS: first argument is file name, + * second is out-of-range page number, + * third is number of pages. + * Specify order as in English if needed. + */ + ngettext ("PDF document '%1$s' has %3$d page. Page %2$d is out of range.", + "PDF document '%1$s' has %3$d pages. Page %2$d is out of range.", + doc_n_pages), + pika_file_get_utf8_name (file), + p[i], + doc_n_pages); + break; + } + else + { + pages.pages[i] = p[i]; } } - - g_object_unref (test_page); } + + g_object_unref (test_page); } - else - { - status = PIKA_PDB_EXECUTION_ERROR; - g_object_unref (doc); - } - break; } if (status == PIKA_PDB_SUCCESS) @@ -590,8 +569,6 @@ pdf_load (PikaProcedure *procedure, if (doc) g_object_unref (doc); - pika_procedure_config_end_run (config, status); - g_object_unref (config); g_free (pages.pages); return_vals = pika_procedure_new_return_values (procedure, status, error); @@ -602,11 +579,11 @@ pdf_load (PikaProcedure *procedure, } static PikaValueArray * -pdf_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +pdf_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; gdouble width = 0; diff --git a/plug-ins/common/file-pdf-save.c b/plug-ins/common/file-pdf-save.c index 6523c7e..b9b2c7a 100644 --- a/plug-ins/common/file-pdf-save.c +++ b/plug-ins/common/file-pdf-save.c @@ -179,7 +179,7 @@ struct _PdfClass #define PDF_TYPE (pdf_get_type ()) -#define PDF (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PDF_TYPE, Pdf)) +#define PDF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PDF_TYPE, Pdf)) GType pdf_get_type (void) G_GNUC_CONST; @@ -193,10 +193,11 @@ static PikaValueArray * pdf_save (PikaProcedure *procedur gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static PikaValueArray * pdf_save_multi (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaPDBStatusType pdf_save_image (PikaProcedure *procedure, @@ -311,7 +312,7 @@ pdf_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - pdf_save, NULL, NULL); + TRUE, pdf_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -476,46 +477,21 @@ pdf_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - GError *error = NULL; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - gboolean had_saved_list = FALSE; + GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; gegl_init (NULL, NULL); /* Initializing all the settings */ multi_page.image_count = 0; - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_export (config, image, run_mode, - args, "application/pdf"); file_name = g_file_get_path (file); - switch (run_mode) - { - case PIKA_RUN_NONINTERACTIVE: - init_image_list_defaults (image); - break; - - case PIKA_RUN_INTERACTIVE: - /* Possibly retrieve data */ - had_saved_list = pika_get_data (DATA_IMAGE_LIST, &multi_page); - - if (had_saved_list && (file_name == NULL || strlen (file_name) == 0)) - { - file_name = multi_page.file_name; - } - - init_image_list_defaults (image); - break; - - case PIKA_RUN_WITH_LAST_VALS: - init_image_list_defaults (image); - break; - } + init_image_list_defaults (image); validate_image_list (); @@ -530,73 +506,40 @@ pdf_save (PikaProcedure *procedure, (run_mode != PIKA_RUN_NONINTERACTIVE), &error); - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, status, error); } static PikaValueArray * pdf_save_multi (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - GError *error = NULL; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaRunMode run_mode; - gchar *uri; - const gint32 *image_ids; - - PikaImage *image = NULL; - GFile *file; - gboolean had_saved_list = FALSE; + GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaRunMode run_mode; + gchar *uri; + const gint32 *image_ids = NULL; + PikaImage *image = NULL; + GFile *file; gegl_init (NULL, NULL); - run_mode = PIKA_VALUES_GET_ENUM (args, 0); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); g_object_get (config, - "uri", &uri, - "count", &multi_page.image_count, - "images", &image_ids, + "run-mode", &run_mode, + "uri", &uri, + "count", &multi_page.image_count, + "images", &image_ids, NULL); file = g_file_new_for_uri (uri); g_free (uri); file_name = g_file_get_path (file); - switch (run_mode) - { - gint i; - - case PIKA_RUN_NONINTERACTIVE: - if (image_ids) - for (i = 0; i < multi_page.image_count; i++) - multi_page.images[i] = pika_image_get_by_id (image_ids[i]); - break; - - case PIKA_RUN_INTERACTIVE: - /* Possibly retrieve data */ - had_saved_list = pika_get_data (DATA_IMAGE_LIST, &multi_page); - - if (had_saved_list && (file_name == NULL || strlen (file_name) == 0)) - { - file_name = multi_page.file_name; - } - - if (! had_saved_list) - init_image_list_defaults (image); - break; - - case PIKA_RUN_WITH_LAST_VALS: - /* Possibly retrieve data */ - had_saved_list = pika_get_data (DATA_IMAGE_LIST, &multi_page); - if (had_saved_list) - file_name = multi_page.file_name; - break; - } + if (image_ids) + for (gint i = 0; i < multi_page.image_count; i++) + multi_page.images[i] = pika_image_get_by_id (image_ids[i]); + else + init_image_list_defaults (image); validate_image_list (); @@ -612,9 +555,6 @@ pdf_save_multi (PikaProcedure *procedure, (run_mode != PIKA_RUN_NONINTERACTIVE), &error); - pika_procedure_config_end_run (config, status); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, status, error); } @@ -656,7 +596,7 @@ get_missing_fonts (GList *layers) } else if (pika_item_is_text_layer (PIKA_ITEM (layer))) { - gchar *font_family; + PikaFont *pika_font; PangoFontDescription *font_description; PangoFontDescription *font_description2; PangoFontMap *fontmap; @@ -666,8 +606,8 @@ get_missing_fonts (GList *layers) fontmap = pango_cairo_font_map_new_for_font_type (CAIRO_FONT_TYPE_FT); context = pango_font_map_create_context (fontmap); - font_family = pika_text_layer_get_font (PIKA_TEXT_LAYER (layer)); - font_description = pango_font_description_from_string (font_family); + pika_font = pika_text_layer_get_font (PIKA_TEXT_LAYER (layer)); + font_description = pika_font_get_pango_font_description (pika_font); font = pango_font_map_load_font (fontmap, context, font_description); font_description2 = pango_font_describe (font); @@ -684,7 +624,6 @@ get_missing_fonts (GList *layers) g_object_unref (font); pango_font_description_free (font_description); pango_font_description_free (font_description2); - g_free (font_family); g_object_unref (context); g_object_unref (fontmap); } @@ -892,12 +831,6 @@ pdf_save_image (PikaProcedure *procedure, fclose (fp); - if (! single_image) - { - g_strlcpy (multi_page.file_name, file_name, MAX_FILE_NAME_LENGTH); - pika_set_data (DATA_IMAGE_LIST, &multi_page, sizeof (multi_page)); - } - return PIKA_PDB_SUCCESS; } @@ -1017,8 +950,8 @@ gui_single (PikaProcedure *procedure, * the warning more obvious. */ widget = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (window), - "missing-fonts-label", - text); + "missing-fonts-label", + text, FALSE, FALSE); gtk_label_set_line_wrap (GTK_LABEL (widget), TRUE); pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (window), "convert-text-layers-frame", @@ -1614,7 +1547,6 @@ drawText (PikaLayer *layer, PikaImageType type = pika_drawable_type (PIKA_DRAWABLE (layer)); gchar *text = pika_text_layer_get_text (PIKA_TEXT_LAYER (layer)); gchar *markup = pika_text_layer_get_markup (PIKA_TEXT_LAYER (layer)); - gchar *font_family; gchar *language; cairo_font_options_t *options; gint x; @@ -1629,6 +1561,7 @@ drawText (PikaLayer *layer, PikaTextDirection dir; PangoLayout *layout; PangoContext *context; + PikaFont *font; PangoFontDescription *font_description; gdouble indent; gdouble line_spacing; @@ -1691,6 +1624,15 @@ drawText (PikaLayer *layer, */ fontmap = pango_cairo_font_map_new_for_font_type (CAIRO_FONT_TYPE_FT); + /* Font */ + font = pika_text_layer_get_font (PIKA_TEXT_LAYER (layer)); + font_description = pika_font_get_pango_font_description (font); + + /* This function breaks rendering with some fonts if it's called before + * pika_font_get_pango_font_description(). I'm still unsure why yet it + * probably means there is a bug somewhere we must fix. Until then, let's make + * sure we keep this order. XXX + */ pango_cairo_font_map_set_resolution (PANGO_CAIRO_FONT_MAP (fontmap), y_res); context = pango_font_map_create_context (fontmap); @@ -1702,7 +1644,7 @@ drawText (PikaLayer *layer, language = pika_text_layer_get_language (PIKA_TEXT_LAYER (layer)); if (language) pango_context_set_language (context, - pango_language_from_string(language)); + pango_language_from_string (language)); /* Text Direction */ dir = pika_text_layer_get_base_direction (PIKA_TEXT_LAYER (layer)); @@ -1752,14 +1694,6 @@ drawText (PikaLayer *layer, layout = pango_layout_new (context); pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR); - /* Font */ - font_family = pika_text_layer_get_font (PIKA_TEXT_LAYER (layer)); - - /* We need to find a way to convert PIKA's returned font name to a - * normal Pango name... Hopefully PIKA 2.8 with Pango will fix it. - */ - font_description = pango_font_description_from_string (font_family); - /* Font Size */ size = pika_text_layer_get_font_size (PIKA_TEXT_LAYER (layer), &unit); size = pika_units_to_pixels (size, unit, y_res); @@ -1840,7 +1774,6 @@ drawText (PikaLayer *layer, pango_cairo_show_layout (cr, layout); g_free (text); - g_free (font_family); g_free (language); g_object_unref (layout); diff --git a/plug-ins/common/file-pix.c b/plug-ins/common/file-pix.c index 1f4413b..dbc718e 100644 --- a/plug-ins/common/file-pix.c +++ b/plug-ins/common/file-pix.c @@ -86,43 +86,46 @@ struct _PixClass #define PIX_TYPE (pix_get_type ()) -#define PIX (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIX_TYPE, Pix)) +#define PIX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIX_TYPE, Pix)) GType pix_get_type (void) G_GNUC_CONST; -static GList * pix_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * pix_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * pix_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * pix_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * pix_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * pix_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * pix_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * pix_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); +static PikaImage * load_image (GFile *file, + GError **error); static PikaImage * load_esm_image (GInputStream *input, GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GError **error); -static gboolean get_short (GInputStream *input, - guint16 *value, - GError **error); -static gboolean put_short (GOutputStream *output, - guint16 value, - GError **error); +static gboolean get_short (GInputStream *input, + guint16 *value, + GError **error); +static gboolean put_short (GOutputStream *output, + guint16 value, + GError **error); G_DEFINE_TYPE (Pix, pix, PIKA_TYPE_PLUG_IN) @@ -196,7 +199,7 @@ pix_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - pix_save, NULL, NULL); + FALSE, pix_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -224,11 +227,13 @@ pix_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -pix_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +pix_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -259,7 +264,8 @@ pix_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status = PIKA_PDB_SUCCESS; @@ -567,7 +573,6 @@ load_esm_image (GInputStream *input, GError **error) { PikaImage *image = NULL; - PikaValueArray *return_vals = NULL; GFile *temp_file = NULL; FILE *fp; goffset file_size; @@ -593,7 +598,9 @@ load_esm_image (GInputStream *input, } else { - guchar buffer[file_size - 21]; + PikaProcedure *procedure; + PikaValueArray *return_vals; + guchar buffer[file_size - 21]; if (! g_input_stream_read_all (input, buffer, sizeof (buffer), NULL, NULL, error)) @@ -608,12 +615,11 @@ load_esm_image (GInputStream *input, fwrite (buffer, sizeof (guchar), file_size, fp); fclose (fp); - return_vals = - pika_pdb_run_procedure (pika_get_pdb (), - "file-jpeg-load", - PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE, - G_TYPE_FILE, temp_file, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), "file-jpeg-load"); + return_vals = pika_procedure_run (procedure, + "run-mode", PIKA_RUN_NONINTERACTIVE, + "file", temp_file, + NULL); if (return_vals) { diff --git a/plug-ins/common/file-png.c b/plug-ins/common/file-png.c index 39fd4a5..cecef70 100644 --- a/plug-ins/common/file-png.c +++ b/plug-ins/common/file-png.c @@ -80,61 +80,64 @@ struct _PngClass }; -#define PNG_TYPE (png_get_type ()) -#define PNG (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PNG_TYPE, Png)) +#define PNG_TYPE (png_get_type ()) +#define PNG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PNG_TYPE, Png)) GType png_get_type (void) G_GNUC_CONST; -static GList * png_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * png_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * png_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * png_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * png_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * png_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * png_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * png_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - gboolean interactive, - gboolean *resolution_loaded, - gboolean *profile_loaded, - GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - PikaImage *orig_image, - GObject *config, - gint *bits_per_sample, - gboolean interactive, - GError **error); +static PikaImage * load_image (GFile *file, + gboolean report_progress, + gboolean *resolution_loaded, + gboolean *profile_loaded, + GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + PikaImage *orig_image, + GObject *config, + gint *bits_per_sample, + gboolean report_progress, + GError **error); -static int respin_cmap (png_structp pp, - png_infop info, - guchar *remap, - PikaImage *image, - PikaDrawable *drawable); +static int respin_cmap (png_structp pp, + png_infop info, + guchar *remap, + PikaImage *image, + PikaDrawable *drawable); -static gboolean save_dialog (PikaImage *image, - PikaProcedure *procedure, - GObject *config, - gboolean alpha); +static gboolean save_dialog (PikaImage *image, + PikaProcedure *procedure, + GObject *config, + gboolean alpha); -static gboolean offsets_dialog (gint offset_x, - gint offset_y); +static gboolean offsets_dialog (gint offset_x, + gint offset_y); -static gboolean ia_has_transparent_pixels (GeglBuffer *buffer); +static gboolean ia_has_transparent_pixels (GeglBuffer *buffer); -static gint find_unused_ia_color (GeglBuffer *buffer, - gint *colors); +static gint find_unused_ia_color (GeglBuffer *buffer, + gint *colors); G_DEFINE_TYPE (Png, png, PIKA_TYPE_PLUG_IN) @@ -207,7 +210,7 @@ png_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - png_save, NULL, NULL); + TRUE, png_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -283,12 +286,20 @@ png_create_procedure (PikaPlugIn *plug_in, FALSE, G_PARAM_READWRITE); - PIKA_PROC_AUX_ARG_INT (procedure, "format", - _("_Pixel format"), - _("PNG export format"), - PNG_FORMAT_AUTO, PNG_FORMAT_GRAYA16, - PNG_FORMAT_AUTO, - G_PARAM_READWRITE); + PIKA_PROC_AUX_ARG_CHOICE (procedure, "format", + _("_Pixel format"), + _("PNG export format"), + pika_choice_new_with_values ("auto", PNG_FORMAT_AUTO, _("Automatic"), NULL, + "rgb8", PNG_FORMAT_RGB8, _("8 bpc RGB"), NULL, + "gray8", PNG_FORMAT_GRAY8, _("8 bpc GRAY"), NULL, + "rgba8", PNG_FORMAT_RGBA8, _("8 bpc RGBA"), NULL, + "graya8", PNG_FORMAT_GRAYA8, _("8 bpc GRAYA"), NULL, + "rgb16", PNG_FORMAT_RGB16, _("16 bpc RGB"), NULL, + "gray16", PNG_FORMAT_GRAY16, _("16 bpc GRAY"), NULL, + "rgba16", PNG_FORMAT_RGBA16, _("16 bpc RGBA"), NULL, + "graya16", PNG_FORMAT_GRAYA16, _("16 bpc GRAYA"), NULL, + NULL), + "auto", G_PARAM_READWRITE); pika_save_procedure_set_support_exif (PIKA_SAVE_PROCEDURE (procedure), TRUE); pika_save_procedure_set_support_iptc (PIKA_SAVE_PROCEDURE (procedure), TRUE); @@ -304,36 +315,31 @@ png_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -png_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +png_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; - gboolean interactive; + gboolean report_progress = FALSE; gboolean resolution_loaded = FALSE; gboolean profile_loaded = FALSE; PikaImage *image; - PikaMetadata *metadata; GError *error = NULL; gegl_init (NULL, NULL); - switch (run_mode) + if (run_mode != PIKA_RUN_NONINTERACTIVE) { - case PIKA_RUN_INTERACTIVE: - case PIKA_RUN_WITH_LAST_VALS: pika_ui_init (PLUG_IN_BINARY); - interactive = TRUE; - break; - default: - interactive = FALSE; - break; + report_progress = TRUE; } image = load_image (file, - interactive, + report_progress, &resolution_loaded, &profile_loaded, &error); @@ -343,24 +349,11 @@ png_load (PikaProcedure *procedure, PIKA_PDB_EXECUTION_ERROR, error); - metadata = pika_image_metadata_load_prepare (image, "image/png", - file, NULL); + if (resolution_loaded) + *flags &= ~PIKA_METADATA_LOAD_RESOLUTION; - if (metadata) - { - PikaMetadataLoadFlags flags = PIKA_METADATA_LOAD_ALL; - - if (resolution_loaded) - flags &= ~PIKA_METADATA_LOAD_RESOLUTION; - - if (profile_loaded) - flags &= ~PIKA_METADATA_LOAD_COLORSPACE; - - pika_image_metadata_load_finish (image, "image/png", - metadata, flags); - - g_object_unref (metadata); - } + if (profile_loaded) + *flags &= ~PIKA_METADATA_LOAD_COLORSPACE; return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, @@ -378,23 +371,18 @@ png_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - PikaMetadata *metadata; - PikaImage *orig_image; - gboolean alpha; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + PikaImage *orig_image; + gboolean alpha; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - metadata = pika_procedure_config_begin_export (config, image, run_mode, - args, "image/png"); - orig_image = image; switch (run_mode) @@ -465,9 +453,6 @@ png_save (PikaProcedure *procedure, } } - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); @@ -589,7 +574,7 @@ Build_sRGBGamma (cmsContext ContextID) */ static PikaImage * load_image (GFile *file, - gboolean interactive, + gboolean report_progress, gboolean *resolution_loaded, gboolean *profile_loaded, GError **error) @@ -665,7 +650,7 @@ load_image (GFile *file, * Open the file and initialize the PNG read "engine"... */ - if (interactive) + if (report_progress) pika_progress_init_printf (_("Opening '%s'"), pika_file_get_utf8_name (file)); @@ -973,7 +958,7 @@ load_image (GFile *file, if (offset_x != 0 || offset_y != 0) { - if (! interactive) + if (! report_progress) { pika_layer_set_offsets (layer, offset_x, offset_y); } @@ -1108,7 +1093,7 @@ load_image (GFile *file, pixel, GEGL_AUTO_ROWSTRIDE); - if (interactive) + if (report_progress) pika_progress_update (((gdouble) pass + (gdouble) end / (gdouble) height) / (gdouble) num_passes); @@ -1291,7 +1276,7 @@ save_image (GFile *file, PikaImage *orig_image, GObject *config, gint *bits_per_sample, - gboolean interactive, + gboolean report_progress, GError **error) { gint i, k; /* Looping vars */ @@ -1360,10 +1345,11 @@ save_image (GFile *file, "save-transparent", &save_transp_pixels, "optimize-palette", &optimize_palette, "compression", &compression_level, - "format", &export_format, "save-color-profile", &save_profile, NULL); + export_format = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "format"); + out_linear = FALSE; space = pika_drawable_get_format (drawable); @@ -1494,7 +1480,7 @@ save_image (GFile *file, * Open the file and initialize the PNG write "engine"... */ - if (interactive) + if (report_progress) pika_progress_init_printf (_("Exporting '%s'"), pika_file_get_utf8_name (file)); @@ -1701,7 +1687,7 @@ save_image (GFile *file, break; case PNG_FORMAT_AUTO: g_return_val_if_reached (FALSE); - } + } } if (! file_format) @@ -2044,14 +2030,14 @@ save_image (GFile *file, png_write_rows (pp, pixels, num); - if (interactive) + if (report_progress) pika_progress_update (((double) pass + (double) end / (double) height) / (double) num_passes); } } - if (interactive) + if (report_progress) pika_progress_update (1.0); png_write_end (pp, info); @@ -2283,10 +2269,9 @@ save_dialog (PikaImage *image, GObject *config, gboolean alpha) { - GtkWidget *dialog; - GtkListStore *store; - gboolean run; - gboolean indexed; + GtkWidget *dialog; + gboolean run; + gboolean indexed; indexed = (pika_image_get_base_type (image) == PIKA_INDEXED); @@ -2297,19 +2282,6 @@ save_dialog (PikaImage *image, pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), "compression", PIKA_TYPE_SPIN_SCALE); - store = pika_int_store_new (_("Automatic"), PNG_FORMAT_AUTO, - _("8 bpc RGB"), PNG_FORMAT_RGB8, - _("8 bpc GRAY"), PNG_FORMAT_GRAY8, - _("8 bpc RGBA"), PNG_FORMAT_RGBA8, - _("8 bpc GRAYA"), PNG_FORMAT_GRAYA8, - _("16 bpc RGB"), PNG_FORMAT_RGB16, - _("16 bpc GRAY"), PNG_FORMAT_GRAY16, - _("16 bpc RGBA"), PNG_FORMAT_RGBA16, - _("16 bpc GRAYA"), PNG_FORMAT_GRAYA16, - NULL); - pika_procedure_dialog_get_int_combo (PIKA_PROCEDURE_DIALOG (dialog), - "format", PIKA_INT_STORE (store)); - pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), "save-transparent", alpha, NULL, NULL, FALSE); diff --git a/plug-ins/common/file-pnm.c b/plug-ins/common/file-pnm.c index 4452ce6..4f7ff4b 100644 --- a/plug-ins/common/file-pnm.c +++ b/plug-ins/common/file-pnm.c @@ -140,101 +140,104 @@ struct _PnmClass #define PNM_TYPE (pnm_get_type ()) -#define PNM (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PNM_TYPE, Pnm)) +#define PNM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PNM_TYPE, Pnm)) GType pnm_get_type (void) G_GNUC_CONST; -static GList * pnm_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * pnm_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * pnm_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * pnm_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * pnm_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * pnm_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * pnm_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * pnm_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); -static gint save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - FileType file_type, - GObject *config, - GError **error); +static PikaImage * load_image (GFile *file, + GError **error); +static gint save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + FileType file_type, + GObject *config, + GError **error); -static gboolean save_dialog (PikaProcedure *procedure, - GObject *config, - PikaImage *image); +static gboolean save_dialog (PikaProcedure *procedure, + GObject *config, + PikaImage *image); -static void process_pam_header (PNMScanner *scan, - PNMInfo *info); +static void process_pam_header (PNMScanner *scan, + PNMInfo *info); -static void pnm_load_ascii (PNMScanner *scan, - PNMInfo *info, - GeglBuffer *buffer); -static void pnm_load_raw (PNMScanner *scan, - PNMInfo *info, - GeglBuffer *buffer); -static void pnm_load_rawpbm (PNMScanner *scan, - PNMInfo *info, - GeglBuffer *buffer); -static void pnm_load_rawpfm (PNMScanner *scan, - PNMInfo *info, - GeglBuffer *buffer); +static void pnm_load_ascii (PNMScanner *scan, + PNMInfo *info, + GeglBuffer *buffer); +static void pnm_load_raw (PNMScanner *scan, + PNMInfo *info, + GeglBuffer *buffer); +static void pnm_load_rawpbm (PNMScanner *scan, + PNMInfo *info, + GeglBuffer *buffer); +static void pnm_load_rawpfm (PNMScanner *scan, + PNMInfo *info, + GeglBuffer *buffer); -static void create_pam_header (const gchar **header_string, - PNMRowInfo *rowinfo, - PNMSaverowFunc *saverow, - PikaImageType drawable_type, - GeglBuffer *buffer, - const Babl **format, - gint *rowbufsize, - gint *np, - gchar *comment); +static void create_pam_header (const gchar **header_string, + PNMRowInfo *rowinfo, + PNMSaverowFunc *saverow, + PikaImageType drawable_type, + GeglBuffer *buffer, + const Babl **format, + gint *rowbufsize, + gint *np, + gchar *comment); -static gboolean pnmsaverow_ascii (PNMRowInfo *ri, - guchar *data, - GError **error); -static gboolean pnmsaverow_raw (PNMRowInfo *ri, - guchar *data, - GError **error); -static gboolean pnmsaverow_raw_pbm (PNMRowInfo *ri, - guchar *data, - GError **error); -static gboolean pnmsaverow_ascii_pbm (PNMRowInfo *ri, - guchar *data, - GError **error); -static gboolean pnmsaverow_ascii_indexed (PNMRowInfo *ri, - guchar *data, - GError **error); -static gboolean pnmsaverow_raw_indexed (PNMRowInfo *ri, - guchar *data, - GError **error); +static gboolean pnmsaverow_ascii (PNMRowInfo *ri, + guchar *data, + GError **error); +static gboolean pnmsaverow_raw (PNMRowInfo *ri, + guchar *data, + GError **error); +static gboolean pnmsaverow_raw_pbm (PNMRowInfo *ri, + guchar *data, + GError **error); +static gboolean pnmsaverow_ascii_pbm (PNMRowInfo *ri, + guchar *data, + GError **error); +static gboolean pnmsaverow_ascii_indexed (PNMRowInfo *ri, + guchar *data, + GError **error); +static gboolean pnmsaverow_raw_indexed (PNMRowInfo *ri, + guchar *data, + GError **error); -static PNMScanner * pnmscanner_create (GInputStream *input); -static void pnmscanner_destroy (PNMScanner *s); -static void pnmscanner_createbuffer (PNMScanner *s, - gint bufsize); -static void pnmscanner_getchar (PNMScanner *s); -static void pnmscanner_eatwhitespace (PNMScanner *s); -static void pnmscanner_eatinnerspace (PNMScanner *s); -static void pnmscanner_gettoken (PNMScanner *s, - gchar *buf, - gint bufsize); -static void pnmscanner_getsmalltoken (PNMScanner *s, - gchar *buf); -static void pnmscanner_getheaderline (PNMScanner *s, - gchar *buf, - gint bufsize); +static PNMScanner * pnmscanner_create (GInputStream *input); +static void pnmscanner_destroy (PNMScanner *s); +static void pnmscanner_createbuffer (PNMScanner *s, + gint bufsize); +static void pnmscanner_getchar (PNMScanner *s); +static void pnmscanner_eatwhitespace (PNMScanner *s); +static void pnmscanner_eatinnerspace (PNMScanner *s); +static void pnmscanner_gettoken (PNMScanner *s, + gchar *buf, + gint bufsize); +static void pnmscanner_getsmalltoken (PNMScanner *s, + gchar *buf); +static void pnmscanner_getheaderline (PNMScanner *s, + gchar *buf, + gint bufsize); #define pnmscanner_eof(s) ((s)->eof) #define pnmscanner_input(s) ((s)->input) @@ -343,7 +346,7 @@ pnm_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - pnm_save, + FALSE, pnm_save, GINT_TO_POINTER (FILE_TYPE_PNM), NULL); @@ -380,7 +383,7 @@ pnm_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - pnm_save, + FALSE, pnm_save, GINT_TO_POINTER (FILE_TYPE_PBM), NULL); @@ -416,7 +419,7 @@ pnm_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - pnm_save, + FALSE, pnm_save, GINT_TO_POINTER (FILE_TYPE_PGM), NULL); @@ -452,7 +455,7 @@ pnm_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - pnm_save, + FALSE, pnm_save, GINT_TO_POINTER (FILE_TYPE_PPM), NULL); @@ -488,7 +491,7 @@ pnm_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - pnm_save, + FALSE, pnm_save, GINT_TO_POINTER (FILE_TYPE_PAM), NULL); @@ -517,7 +520,7 @@ pnm_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - pnm_save, + FALSE, pnm_save, GINT_TO_POINTER (FILE_TYPE_PFM), NULL); @@ -547,11 +550,13 @@ pnm_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -pnm_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +pnm_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -582,21 +587,18 @@ pnm_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - FileType file_type = GPOINTER_TO_INT (run_data); - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - const gchar *format_name = NULL; - GError *error = NULL; + FileType file_type = GPOINTER_TO_INT (run_data); + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + const gchar *format_name = NULL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_export (config, image, run_mode, args, NULL); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -687,9 +689,6 @@ pnm_save (PikaProcedure *procedure, } } - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/common/file-ps.c b/plug-ins/common/file-ps.c index e103a63..e07a59a 100644 --- a/plug-ins/common/file-ps.c +++ b/plug-ins/common/file-ps.c @@ -127,41 +127,44 @@ struct _PostScriptClass #define PS_TYPE (ps_get_type ()) -#define PS (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PS_TYPE, PostScript)) +#define PS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PS_TYPE, PostScript)) GType ps_get_type (void) G_GNUC_CONST; -static GList * ps_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * ps_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * ps_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * ps_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * ps_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * ps_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * ps_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * ps_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * ps_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * ps_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GObject *config, - GError **error); -static gboolean save_image (GFile *file, - GObject *config, - PikaImage *image, - PikaDrawable *drawable, - GError **error); +static PikaImage * load_image (GFile *file, + GObject *config, + GError **error); +static gboolean save_image (GFile *file, + GObject *config, + PikaImage *image, + PikaDrawable *drawable, + GError **error); static void ps_set_save_size (GObject *config, PikaImage *image); @@ -446,7 +449,7 @@ ps_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - ps_save, NULL, NULL); + FALSE, ps_save, NULL, NULL); if (! strcmp (name, SAVE_PS_PROC)) { @@ -571,23 +574,20 @@ ps_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -ps_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +ps_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaImage *image = NULL; - GError *error = NULL; + PikaValueArray *return_vals; + PikaImage *image = NULL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - l_run_mode = run_mode; switch (run_mode) @@ -607,9 +607,6 @@ ps_load (PikaProcedure *procedure, image = load_image (file, G_OBJECT (config), &error); - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (! image) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, @@ -625,23 +622,18 @@ ps_load (PikaProcedure *procedure, } static PikaValueArray * -ps_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +ps_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaImage *image = NULL; - GError *error = NULL; + PikaValueArray *return_vals; + PikaImage *image = NULL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, - PIKA_RUN_NONINTERACTIVE, args); - /* We should look for an embedded preview but for now we * just load the document at a small resolution and the * first page only. @@ -650,9 +642,6 @@ ps_load_thumb (PikaProcedure *procedure, image = load_image (file, NULL, &error); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - if (! image) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, @@ -676,21 +665,18 @@ ps_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - PikaImage *orig_image; - gboolean eps_flag = FALSE; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + PikaImage *orig_image; + gboolean eps_flag = FALSE; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - eps_flag = strcmp (pika_procedure_get_name (procedure), SAVE_PS_PROC); g_object_set (config, "eps-flag", eps_flag ? 1 : 0, @@ -767,9 +753,6 @@ ps_save (PikaProcedure *procedure, status = PIKA_PDB_EXECUTION_ERROR; } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); @@ -3730,7 +3713,8 @@ load_dialog (GFile *file, config); pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "rendering-title", _("Rendering")); + "rendering-title", _("Rendering"), + FALSE, FALSE); pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), "rendering-frame", "rendering-title", @@ -3891,7 +3875,8 @@ save_dialog (PikaProcedure *procedure, "#keep_aspect_ratio"), pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "image-title", _("Image Size")); + "image-title", _("Image Size"), + FALSE, FALSE); pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "image-box", "width", "height", "x-offset", "y-offset", @@ -3926,7 +3911,8 @@ save_dialog (PikaProcedure *procedure, /* Output */ pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "output-title", _("Output")); + "output-title", _("Output"), + FALSE, FALSE); pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), "preview", diff --git a/plug-ins/common/file-psp.c b/plug-ins/common/file-psp.c index 97cfa77..dcd9bca 100644 --- a/plug-ins/common/file-psp.c +++ b/plug-ins/common/file-psp.c @@ -460,7 +460,7 @@ typedef enum { PSP_XDATA_GRID, /* Image grid information (since PSP7) */ PSP_XDATA_GUIDE, /* Image guide information (since PSP7) */ PSP_XDATA_EXIF, /* Image Exif information (since PSP8) */ - PSP_XDATA_IPTC, /* Image IPTC information (since PSP10) */ + PSP_XDATA_IPTC, /* Image IPTC information (since PSP8) */ } PSPExtendedDataID; /* Creator field types. @@ -576,39 +576,42 @@ struct _PspClass #define PSP_TYPE (psp_get_type ()) -#define PSP (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSP_TYPE, Psp)) +#define PSP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSP_TYPE, Psp)) GType psp_get_type (void) G_GNUC_CONST; -static GList * psp_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * psp_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * psp_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * psp_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * psp_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * psp_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * psp_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * psp_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GObject *config, - GError **error); -static gboolean save_dialog (PikaProcedure *procedure, - GObject *config, - PikaImage *image); +static PikaImage * load_image (GFile *file, + GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GObject *config, + GError **error); +static gboolean save_dialog (PikaProcedure *procedure, + GObject *config, + PikaImage *image); G_DEFINE_TYPE (Psp, psp, PIKA_TYPE_PLUG_IN) @@ -687,7 +690,7 @@ psp_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - psp_save, NULL, NULL); + FALSE, psp_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -724,11 +727,13 @@ psp_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -psp_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +psp_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -759,19 +764,16 @@ psp_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -810,9 +812,6 @@ psp_save (PikaProcedure *procedure, } } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); @@ -2362,6 +2361,193 @@ compression_name (gint compression) return NULL; } +static gint +read_selection_block (FILE *f, + PikaImage *image, + guint total_len, + PSPimage *ia, + GError **error) +{ + gsize current_location; + gsize file_size; + guint32 chunk_size; + guint32 rect[4]; + + current_location = ftell (f); + fseek (f, 0, SEEK_END); + file_size = ftell (f); + fseek (f, current_location, SEEK_SET); + + if (fread (&chunk_size, 4, 1, f) < 1) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Error reading selection chunk")); + return -1; + } + chunk_size = GUINT32_FROM_LE (chunk_size); + + current_location = ftell (f); + if (chunk_size > (file_size - current_location)) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Invalid selection chunk size")); + return -1; + } + + if (fread (&rect, 16, 1, f) < 1) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Error reading selection chunk")); + return -1; + } + + swab_rect (rect); + pika_image_select_rectangle (image, PIKA_CHANNEL_OP_ADD, + rect[0], rect[1], + rect[2] - rect[0], + rect[3] - rect[1]); + + /* The file format specifies multiple selections, but + * as of PSP 8 they only allow one. Skipping the remaining + * information in the block. */ + total_len -= sizeof (guint32) + sizeof (rect); + if (try_fseek (f, total_len, SEEK_SET, error) < 0) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Error reading end of selection chunk")); + return -1; + } + + return 0; +} + +static gint +read_extended_block (FILE *f, + PikaImage *image, + guint total_len, + PSPimage *ia, + GError **error) +{ + guchar header[4]; + guint16 field_type; + guint32 field_length; + + while (total_len > 0) + { + if (fread (header, 4, 1, f) < 1 || + fread (&field_type, 2, 1, f) < 1 || + fread (&field_length, 4, 1, f) < 1) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Error reading extended block chunk header")); + return -1; + } + + if (memcmp (header, "~FL\0", 4) != 0) + { + g_print ("Header: %s\n", header); + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Invalid extended block chunk header")); + return -1; + } + total_len -= sizeof (header) + sizeof (field_type) + sizeof (field_length); + + field_type = GUINT16_FROM_LE (field_type); + field_length = GUINT32_FROM_LE (field_length); + + if (field_length > total_len) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Invalid extended block chunk size")); + return -1; + } + + switch (field_type) + { + case PSP_XDATA_GRID: + { + PikaRGB color; + guchar rgb[4]; + guint32 h_spacing; + guint32 v_spacing; + guint16 unit; /* Unused */ + + if (field_length != 14 || + fread (rgb, 4, 1, f) < 1 || + fread (&h_spacing, 4, 1, f) < 1 || + fread (&v_spacing, 4, 1, f) < 1 || + fread (&unit, 2, 1, f) < 1) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Error reading extended chunk grid data")); + return -1; + } + + h_spacing = GUINT32_FROM_LE (h_spacing); + v_spacing = GUINT32_FROM_LE (v_spacing); + pika_image_grid_set_spacing (image, h_spacing, v_spacing); + + pika_rgba_set_uchar (&color, rgb[0], rgb[1], rgb[2], 255); + pika_image_grid_set_foreground_color (image, &color); + pika_image_grid_set_background_color (image, &color); + } + break; + + case PSP_XDATA_GUIDE: + { + guchar rgb[4]; /* Unused */ + guint32 offset; + guint16 orientation; + + if (field_length != 10 || + fread (rgb, 4, 1, f) < 1 || + fread (&offset, 4, 1, f) < 1 || + fread (&orientation, 2, 1, f) < 1) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Error reading extended chunk guide data")); + return -1; + } + + offset = GUINT32_FROM_LE (offset); + orientation = GUINT16_FROM_LE (orientation); + + if (orientation == keHorizontalGuide) + { + pika_image_add_hguide (image, offset); + } + else if (orientation == keVerticalGuide) + { + pika_image_add_vguide (image, offset); + } + else + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Invalid guide orientation")); + return -1; + } + } + break; + + /* Not yet implemented */ + case PSP_XDATA_TRNS_INDEX: + case PSP_XDATA_EXIF: + case PSP_XDATA_IPTC: + default: + if (try_fseek (f, field_length, SEEK_CUR, error) < 0) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Error reading extended block chunk")); + return -1; + } + break; + } + total_len -= field_length; + } + + return 0; +} + static gint read_colorprofile_block (FILE *f, PikaImage *image, @@ -2553,7 +2739,10 @@ load_image (GFile *file, break; case PSP_SELECTION_BLOCK: - break; /* Not yet implemented */ + if (read_selection_block (f, image, block_total_len, &ia, + error) == -1) + goto error; + break; case PSP_ALPHA_BANK_BLOCK: break; /* Not yet implemented */ @@ -2562,7 +2751,10 @@ load_image (GFile *file, break; /* No use for it */ case PSP_EXTENDED_DATA_BLOCK: - break; /* Not yet implemented */ + if (read_extended_block (f, image, block_total_len, &ia, + error) == -1) + goto error; + break; case PSP_TUBE_BLOCK: if (read_tube_block (f, image, block_total_len, &ia, error) == -1) diff --git a/plug-ins/common/file-qoi.c b/plug-ins/common/file-qoi.c index 9b561a5..5d0797f 100644 --- a/plug-ins/common/file-qoi.c +++ b/plug-ins/common/file-qoi.c @@ -56,37 +56,40 @@ struct _QoiClass #define QOI_TYPE (qoi_get_type ()) -#define QOI (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), QOI_TYPE, Qoi)) +#define QOI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), QOI_TYPE, Qoi)) GType qoi_get_type (void) G_GNUC_CONST; -static GList * qoi_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * qoi_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * qoi_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * qoi_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * qoi_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * qoi_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * qoi_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * qoi_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GObject *config, - PikaRunMode run_mode, - GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GError **error); +static PikaImage * load_image (GFile *file, + GObject *config, + PikaRunMode run_mode, + GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GError **error); G_DEFINE_TYPE (Qoi, qoi, PIKA_TYPE_PLUG_IN) @@ -157,7 +160,7 @@ qoi_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - qoi_save, NULL, NULL); + FALSE, qoi_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -183,22 +186,20 @@ qoi_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -qoi_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +qoi_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaImage *image; - GError *error = NULL; + PikaValueArray *return_vals; + PikaImage *image; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - image = load_image (file, G_OBJECT (config), run_mode, &error); if (! image) @@ -206,9 +207,6 @@ qoi_load (PikaProcedure *procedure, PIKA_PDB_EXECUTION_ERROR, error); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); @@ -225,7 +223,8 @@ qoi_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status = PIKA_PDB_SUCCESS; diff --git a/plug-ins/common/file-raw-data.c b/plug-ins/common/file-raw-data.c index a2b5a7f..c46be04 100644 --- a/plug-ins/common/file-raw-data.c +++ b/plug-ins/common/file-raw-data.c @@ -156,130 +156,133 @@ struct _RawClass #define RAW_TYPE (raw_get_type ()) -#define RAW (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RAW_TYPE, Raw)) +#define RAW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RAW_TYPE, Raw)) GType raw_get_type (void) G_GNUC_CONST; -static GList * raw_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * raw_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * raw_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * raw_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * raw_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * raw_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * raw_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * raw_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); /* prototypes for the new load functions */ -static gboolean raw_load_standard (RawPikaData *data, - gint width, - gint height, - gint bpp, - gint offset, - RawType type, - gboolean is_big_endian, - gboolean is_signed, - gboolean is_float); -static gboolean raw_load_planar (RawPikaData *data, - gint width, - gint height, - gint bpp, - gint offset, - RawType type, - gboolean is_big_endian, - gboolean is_signed, - gboolean is_float); -static gboolean raw_load_gray (RawPikaData *data, - gint width, - gint height, - gint offset, - gint bpp, - gint bitspp); -static gboolean raw_load_rgb565 (RawPikaData *data, - gint width, - gint height, - gint offset, - RawType type, - RawEndianness endianness); -static gboolean raw_load_palette (RawPikaData *data, - gint palette_offset, - RawPaletteType palette_type, - GFile *palette_file); +static gboolean raw_load_standard (RawPikaData *data, + gint width, + gint height, + gint bpp, + gint offset, + RawType type, + gboolean is_big_endian, + gboolean is_signed, + gboolean is_float); +static gboolean raw_load_planar (RawPikaData *data, + gint width, + gint height, + gint bpp, + gint offset, + RawType type, + gboolean is_big_endian, + gboolean is_signed, + gboolean is_float); +static gboolean raw_load_gray (RawPikaData *data, + gint width, + gint height, + gint offset, + gint bpp, + gint bitspp); +static gboolean raw_load_rgb565 (RawPikaData *data, + gint width, + gint height, + gint offset, + RawType type, + RawEndianness endianness); +static gboolean raw_load_palette (RawPikaData *data, + gint palette_offset, + RawPaletteType palette_type, + GFile *palette_file); /* support functions */ -static goffset get_file_info (GFile *file); -static void raw_read_row (FILE *fp, - guchar *buf, - gint32 offset, - gint32 size); -static int mmap_read (gint fd, - gpointer buf, - gint32 len, - gint32 pos, - gint rowstride); -static void rgb_565_to_888 (guint16 *in, - guchar *out, - gint32 num_pixels, - RawType type, - RawEndianness endianness); +static goffset get_file_info (GFile *file); +static void raw_read_row (FILE *fp, + guchar *buf, + gint32 offset, + gint32 size); +static int mmap_read (gint fd, + gpointer buf, + gint32 len, + gint32 pos, + gint rowstride); +static void rgb_565_to_888 (guint16 *in, + guchar *out, + gint32 num_pixels, + RawType type, + RawEndianness endianness); -static PikaImage * load_image (GFile *file, - PikaProcedureConfig *config, - GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - PikaProcedureConfig *config, - GError **error); +static PikaImage * load_image (GFile *file, + PikaProcedureConfig *config, + GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + PikaProcedureConfig *config, + GError **error); -static void get_bpp (PikaProcedureConfig *config, - gint *bpp, - gint *bitspp); -static gboolean detect_sample_spacing (PikaProcedureConfig *config, - GFile *file, - GError **error); -static void get_load_config_values (PikaProcedureConfig *config, - gint32 *file_offset, - gint32 *image_width, - gint32 *image_height, - RawType *image_type, - RawEncoding *encoding, - RawEndianness *endianness, - RawPlanarConfiguration *planar_configuration, - gint32 *palette_offset, - RawPaletteType *palette_type, - GFile **palette_file); +static void get_bpp (PikaProcedureConfig *config, + gint *bpp, + gint *bitspp); +static gboolean detect_sample_spacing (PikaProcedureConfig *config, + GFile *file, + GError **error); +static void get_load_config_values (PikaProcedureConfig *config, + gint32 *file_offset, + gint32 *image_width, + gint32 *image_height, + RawType *image_type, + RawEncoding *encoding, + RawEndianness *endianness, + RawPlanarConfiguration *planar_configuration, + gint32 *palette_offset, + RawPaletteType *palette_type, + GFile **palette_file); /* gui functions */ -static void halfp2singles (uint32_t *xp, - const uint16_t *hp, - int numel); +static void halfp2singles (uint32_t *xp, + const uint16_t *hp, + int numel); -static void preview_update (PikaPreviewArea *preview, - gboolean preview_cmap_update); -static void preview_update_size (PikaPreviewArea *preview); -static void load_config_notify (PikaProcedureConfig *config, - GParamSpec *pspec, - PikaPreviewArea *preview); -static void preview_allocate (PikaPreviewArea *preview, - GtkAllocation *allocation, - gpointer user_data); -static gboolean load_dialog (GFile *file, - PikaProcedure *procedure, - GObject *config, - gboolean is_hgt); -static gboolean save_dialog (PikaImage *image, - PikaProcedure *procedure, - gboolean has_alpha, - GObject *config); +static void preview_update (PikaPreviewArea *preview, + gboolean preview_cmap_update); +static void preview_update_size (PikaPreviewArea *preview); +static void load_config_notify (PikaProcedureConfig *config, + GParamSpec *pspec, + PikaPreviewArea *preview); +static void preview_allocate (PikaPreviewArea *preview, + GtkAllocation *allocation, + gpointer user_data); +static gboolean load_dialog (GFile *file, + PikaProcedure *procedure, + GObject *config, + gboolean is_hgt); +static gboolean save_dialog (PikaImage *image, + PikaProcedure *procedure, + gboolean has_alpha, + GObject *config); G_DEFINE_TYPE (Raw, raw, PIKA_TYPE_PLUG_IN) @@ -395,7 +398,7 @@ raw_create_procedure (PikaPlugIn *plug_in, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "palette-type", _("Palette's la_yout"), - _("The layout for the palette's color channels" + _("The layout for the palette's color channels " "{ RAW_PALETTE_RGB (0), RAW_PALETTE_BGR (1) }"), RAW_PALETTE_RGB, RAW_PALETTE_BGR, RAW_PALETTE_RGB, G_PARAM_READWRITE); @@ -407,8 +410,8 @@ raw_create_procedure (PikaPlugIn *plug_in, else if (! strcmp (name, LOAD_HGT_PROC)) { procedure = pika_load_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - raw_load, NULL, NULL); + PIKA_PDB_PROC_TYPE_PLUGIN, + raw_load, NULL, NULL); pika_procedure_set_menu_label (procedure, _("Digital Elevation Model data")); @@ -445,7 +448,7 @@ raw_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - raw_save, NULL, NULL); + FALSE, raw_save, NULL, NULL); pika_procedure_set_image_types (procedure, "INDEXED, GRAY, RGB, RGBA"); @@ -471,7 +474,7 @@ raw_create_procedure (PikaPlugIn *plug_in, PIKA_PROC_ARG_INT (procedure, "palette-type", _("Palette's layout"), - _("The layout for the palette's color channels" + _("The layout for the palette's color channels " "{ RAW_PALETTE_RGB (0), RAW_PALETTE_BGR (1) }"), RAW_PALETTE_RGB, RAW_PALETTE_BGR, RAW_PALETTE_RGB, G_PARAM_READWRITE); @@ -484,24 +487,22 @@ raw_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -raw_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +raw_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaValueArray *return_vals; - PikaProcedureConfig *config; - gboolean is_hgt; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaImage *image = NULL; - GError *error = NULL; + PikaValueArray *return_vals; + gboolean is_hgt; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaImage *image = NULL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - is_hgt = (! strcmp (pika_procedure_get_name (procedure), LOAD_HGT_PROC)); if (run_mode == PIKA_RUN_INTERACTIVE) @@ -590,9 +591,6 @@ raw_load (PikaProcedure *procedure, error->message); } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (! image) return pika_procedure_new_return_values (procedure, status, error); @@ -612,10 +610,10 @@ raw_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; PikaPDBStatusType status = PIKA_PDB_SUCCESS; PikaExportReturn export = PIKA_EXPORT_CANCEL; RawPlanarConfiguration planar_conf; @@ -623,9 +621,6 @@ raw_save (PikaProcedure *procedure, gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_export (config, image, run_mode, args, NULL); - g_object_get (config, "planar-configuration", &planar_conf, NULL); @@ -680,9 +675,6 @@ raw_save (PikaProcedure *procedure, } } - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); @@ -1738,9 +1730,9 @@ load_image (GFile *file, ltype = PIKA_RGBA_IMAGE; itype = PIKA_RGB; if (encoding == RAW_ENCODING_FLOAT) - precision = PIKA_PRECISION_U32_NON_LINEAR; - else precision = PIKA_PRECISION_FLOAT_NON_LINEAR; + else + precision = PIKA_PRECISION_U32_NON_LINEAR; break; case RAW_GRAY_1BPP: diff --git a/plug-ins/common/file-sunras.c b/plug-ins/common/file-sunras.c index 9bb648a..e256e9c 100644 --- a/plug-ins/common/file-sunras.c +++ b/plug-ins/common/file-sunras.c @@ -106,125 +106,128 @@ struct _SunrasClass #define SUNRAS_TYPE (sunras_get_type ()) -#define SUNRAS (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SUNRAS_TYPE, Sunras)) +#define SUNRAS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SUNRAS_TYPE, Sunras)) GType sunras_get_type (void) G_GNUC_CONST; -static GList * sunras_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * sunras_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * sunras_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * sunras_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * sunras_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * sunras_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * sunras_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * sunras_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GObject *config, - GError **error); +static PikaImage * load_image (GFile *file, + GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GObject *config, + GError **error); -static void set_color_table (PikaImage *image, - L_SUNFILEHEADER *sunhdr, - const guchar *suncolmap); -static PikaImage * create_new_image (GFile *file, - guint width, - guint height, - PikaImageBaseType type, - PikaLayer **layer, - GeglBuffer **buffer); +static void set_color_table (PikaImage *image, + L_SUNFILEHEADER *sunhdr, + const guchar *suncolmap); +static PikaImage * create_new_image (GFile *file, + guint width, + guint height, + PikaImageBaseType type, + PikaLayer **layer, + GeglBuffer **buffer); -static PikaImage * load_sun_d1 (GFile *file, - FILE *ifp, - L_SUNFILEHEADER *sunhdr, - guchar *suncolmap); -static PikaImage * load_sun_d8 (GFile *file, - FILE *ifp, - L_SUNFILEHEADER *sunhdr, - guchar *suncolmap); -static PikaImage * load_sun_d24 (GFile *file, - FILE *ifp, - L_SUNFILEHEADER *sunhdr, - guchar *suncolmap); -static PikaImage * load_sun_d32 (GFile *file, - FILE *ifp, - L_SUNFILEHEADER *sunhdr, - guchar *suncolmap); +static PikaImage * load_sun_d1 (GFile *file, + FILE *ifp, + L_SUNFILEHEADER *sunhdr, + guchar *suncolmap); +static PikaImage * load_sun_d8 (GFile *file, + FILE *ifp, + L_SUNFILEHEADER *sunhdr, + guchar *suncolmap); +static PikaImage * load_sun_d24 (GFile *file, + FILE *ifp, + L_SUNFILEHEADER *sunhdr, + guchar *suncolmap); +static PikaImage * load_sun_d32 (GFile *file, + FILE *ifp, + L_SUNFILEHEADER *sunhdr, + guchar *suncolmap); -static L_CARD32 read_card32 (FILE *ifp, - int *err); +static L_CARD32 read_card32 (FILE *ifp, + int *err); -static void write_card32 (FILE *ofp, - L_CARD32 c); +static void write_card32 (FILE *ofp, + L_CARD32 c); -static void byte2bit (guchar *byteline, - int width, - guchar *bitline, - gboolean invert); +static void byte2bit (guchar *byteline, + int width, + guchar *bitline, + gboolean invert); -static void rle_startread (FILE *ifp); -static int rle_fread (char *ptr, - int sz, - int nelem, - FILE *ifp); -static int rle_fgetc (FILE *ifp); +static void rle_startread (FILE *ifp); +static int rle_fread (char *ptr, + int sz, + int nelem, + FILE *ifp); +static int rle_fgetc (FILE *ifp); #define rle_getc(fp) ((rlebuf.n > 0) ? (rlebuf.n)--,rlebuf.val : rle_fgetc (fp)) -static void rle_startwrite (FILE *ofp); -static int rle_fwrite (char *ptr, - int sz, - int nelem, - FILE *ofp); -static int rle_fputc (int val, - FILE *ofp); -static int rle_putrun (int n, - int val, - FILE *ofp); -static void rle_endwrite (FILE *ofp); +static void rle_startwrite (FILE *ofp); +static int rle_fwrite (char *ptr, + int sz, + int nelem, + FILE *ofp); +static int rle_fputc (int val, + FILE *ofp); +static int rle_putrun (int n, + int val, + FILE *ofp); +static void rle_endwrite (FILE *ofp); #define rle_putc rle_fputc -static void read_sun_header (FILE *ifp, - L_SUNFILEHEADER *sunhdr); -static void write_sun_header (FILE *ofp, - L_SUNFILEHEADER *sunhdr); -static void read_sun_cols (FILE *ifp, - L_SUNFILEHEADER *sunhdr, - guchar *colormap); -static void write_sun_cols (FILE *ofp, - L_SUNFILEHEADER *sunhdr, - guchar *colormap); +static void read_sun_header (FILE *ifp, + L_SUNFILEHEADER *sunhdr); +static void write_sun_header (FILE *ofp, + L_SUNFILEHEADER *sunhdr); +static void read_sun_cols (FILE *ifp, + L_SUNFILEHEADER *sunhdr, + guchar *colormap); +static void write_sun_cols (FILE *ofp, + L_SUNFILEHEADER *sunhdr, + guchar *colormap); -static gint save_index (FILE *ofp, - PikaImage *image, - PikaDrawable *drawable, - gboolean grey, - gint rle); -static gint save_rgb (FILE *ofp, - PikaImage *image, - PikaDrawable *drawable, - gint rle); +static gint save_index (FILE *ofp, + PikaImage *image, + PikaDrawable *drawable, + gboolean grey, + gint rle); +static gint save_rgb (FILE *ofp, + PikaImage *image, + PikaDrawable *drawable, + gint rle); -static gboolean save_dialog (PikaImage *image, - PikaProcedure *procedure, - GObject *config); +static gboolean save_dialog (PikaImage *image, + PikaProcedure *procedure, + GObject *config); /* Portability kludge */ -static int my_fwrite (void *ptr, - int size, - int nmemb, - FILE *stream); +static int my_fwrite (void *ptr, + int size, + int nmemb, + FILE *stream); G_DEFINE_TYPE (Sunras, sunras, PIKA_TYPE_PLUG_IN) @@ -297,7 +300,7 @@ sunras_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - sunras_save, NULL, NULL); + FALSE, sunras_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB, GRAY, INDEXED"); @@ -333,11 +336,13 @@ sunras_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -sunras_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +sunras_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -368,19 +373,16 @@ sunras_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -430,9 +432,6 @@ sunras_save (PikaProcedure *procedure, } } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/common/file-svg.c b/plug-ins/common/file-svg.c index d274f05..71bc89c 100644 --- a/plug-ins/common/file-svg.c +++ b/plug-ins/common/file-svg.c @@ -53,8 +53,6 @@ typedef struct gdouble resolution; gint width; gint height; - gboolean import; - gboolean merge; } SvgLoadVals; @@ -73,40 +71,49 @@ struct _SvgClass #define SVG_TYPE (svg_get_type ()) -#define SVG (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SVG_TYPE, Svg)) +#define SVG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SVG_TYPE, Svg)) GType svg_get_type (void) G_GNUC_CONST; -static GList * svg_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * svg_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * svg_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * svg_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * svg_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * svg_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * svg_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * svg_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - RsvgHandleFlags rsvg_flags, - GError **error); -static GdkPixbuf * load_rsvg_pixbuf (GFile *file, - SvgLoadVals *vals, - RsvgHandleFlags rsvg_flags, - gboolean *allow_retry, - GError **error); -static gboolean load_rsvg_size (GFile *file, - SvgLoadVals *vals, - RsvgHandleFlags rsvg_flags, - GError **error); -static PikaPDBStatusType load_dialog (GFile *file, - RsvgHandleFlags *rsvg_flags, - GError **error); +static PikaImage * load_image (GFile *file, + gint width, + gint height, + gdouble resolution, + RsvgHandleFlags rsvg_flags, + GError **error); +static GdkPixbuf * load_rsvg_pixbuf (GFile *file, + gint width, + gint height, + gdouble resolution, + RsvgHandleFlags rsvg_flags, + gboolean *allow_retry, + GError **error); +static gboolean load_rsvg_size (GFile *file, + SvgLoadVals *vals, + RsvgHandleFlags rsvg_flags, + GError **error); +static PikaPDBStatusType load_dialog (GFile *file, + PikaProcedure *procedure, + PikaProcedureConfig *config, + RsvgHandleFlags *rsvg_flags, + GError **error); @@ -116,16 +123,6 @@ PIKA_MAIN (SVG_TYPE) DEFINE_STD_SET_I18N -static SvgLoadVals load_vals = -{ - SVG_DEFAULT_RESOLUTION, - 0, - 0, - FALSE, - FALSE -}; - - static void svg_class_init (SvgClass *klass) { @@ -187,13 +184,13 @@ svg_create_procedure (PikaPlugIn *plug_in, LOAD_THUMB_PROC); PIKA_PROC_ARG_DOUBLE (procedure, "resolution", - "Resolution", + "Resolu_tion", "Resolution to use for rendering the SVG", - PIKA_MIN_RESOLUTION, PIKA_MAX_RESOLUTION, 90, + PIKA_MIN_RESOLUTION, PIKA_MAX_RESOLUTION, 300, PIKA_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "width", - "Width", + "_Width", "Width (in pixels) to load the SVG in. " "(0 for original width, a negative width to " "specify a maximum width)", @@ -201,19 +198,21 @@ svg_create_procedure (PikaPlugIn *plug_in, PIKA_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "height", - "Height", + "_Height", "Height (in pixels) to load the SVG in. " "(0 for original height, a negative height to " "specify a maximum height)", -PIKA_MAX_IMAGE_SIZE, PIKA_MAX_IMAGE_SIZE, 0, PIKA_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "paths", - "Paths", - "(0) don't import paths, (1) paths individually, " - "(2) paths merged", - 0, 2, 0, - PIKA_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "paths", + _("_Paths"), + _("Whether and how to import paths so that they can be used with the path tool"), + pika_choice_new_with_values ("no-import", 0, _("Don't import paths"), NULL, + "import", 0, _("Import paths individually"), NULL, + "import-merged", 0, _("Merge imported paths"), NULL, + NULL), + "no-import", G_PARAM_READWRITE); } else if (! strcmp (name, LOAD_THUMB_PROC)) { @@ -236,62 +235,58 @@ svg_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -svg_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +svg_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; GError *error = NULL; RsvgHandleFlags rsvg_flags = RSVG_HANDLE_FLAGS_NONE; PikaPDBStatusType status; + gchar *import_paths; + gint width; + gint height; + gdouble resolution; gegl_init (NULL, NULL); - switch (run_mode) + if (run_mode == PIKA_RUN_INTERACTIVE) { - case PIKA_RUN_NONINTERACTIVE: - load_vals.resolution = PIKA_VALUES_GET_DOUBLE (args, 0); - load_vals.width = PIKA_VALUES_GET_INT (args, 1); - load_vals.height = PIKA_VALUES_GET_INT (args, 2); - load_vals.import = PIKA_VALUES_GET_INT (args, 3) != FALSE; - load_vals.merge = PIKA_VALUES_GET_INT (args, 3) == 2; - break; - - case PIKA_RUN_INTERACTIVE: - pika_get_data (LOAD_PROC, &load_vals); - status = load_dialog (file, &rsvg_flags, &error); + status = load_dialog (file, procedure, config, &rsvg_flags, &error); if (status != PIKA_PDB_SUCCESS) return pika_procedure_new_return_values (procedure, status, error); - break; - - case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (LOAD_PROC, &load_vals); - break; } - image = load_image (file, rsvg_flags, &error); + g_object_get (config, + "width", &width, + "height", &height, + "resolution", &resolution, + NULL); + image = load_image (file, width, height, resolution, rsvg_flags, &error); if (! image) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, error); - if (load_vals.import) + + g_object_get (config, "paths", &import_paths, NULL); + if (g_strcmp0 (import_paths, "no-import") != 0) { PikaVectors **vectors; gint num_vectors; pika_vectors_import_from_file (image, file, - load_vals.merge, TRUE, - &num_vectors, &vectors); + g_strcmp0 (import_paths, "import-merged") == 0, + TRUE, &num_vectors, &vectors); if (num_vectors > 0) g_free (vectors); } - - if (run_mode != PIKA_RUN_NONINTERACTIVE) - pika_set_data (LOAD_PROC, &load_vals, sizeof (load_vals)); + g_free (import_paths); return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, @@ -303,31 +298,50 @@ svg_load (PikaProcedure *procedure, } static PikaValueArray * -svg_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +svg_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; - gint width = 0; - gint height = 0; PikaImage *image; - GError *error = NULL; + gint width = 0; + gint height = 0; + gint thumb_width = 0; + gint thumb_height = 0; + GError *error = NULL; + SvgLoadVals vals = + { + SVG_DEFAULT_RESOLUTION, + SVG_PREVIEW_SIZE, + SVG_PREVIEW_SIZE, + }; gegl_init (NULL, NULL); - if (load_rsvg_size (file, &load_vals, RSVG_HANDLE_FLAGS_NONE, NULL)) + if (load_rsvg_size (file, &vals, RSVG_HANDLE_FLAGS_NONE, NULL)) { - width = load_vals.width; - height = load_vals.height; + width = vals.width; + height = vals.height; + if (width > height) + { + thumb_width = size; + thumb_height = size * height / width; + } + else + { + thumb_width = size * width / height; + thumb_height = size; + } + } + else + { + thumb_width = size; + thumb_height = size; } - load_vals.resolution = SVG_DEFAULT_RESOLUTION; - load_vals.width = - size; - load_vals.height = - size; - - image = load_image (file, RSVG_HANDLE_FLAGS_NONE, &error); + image = load_image (file, thumb_width, thumb_height, SVG_DEFAULT_RESOLUTION, RSVG_HANDLE_FLAGS_NONE, &error); if (! image) return pika_procedure_new_return_values (procedure, @@ -349,17 +363,18 @@ svg_load_thumb (PikaProcedure *procedure, static PikaImage * load_image (GFile *file, + gint width, + gint height, + gdouble resolution, RsvgHandleFlags rsvg_flags, GError **load_error) { - PikaImage *image; - PikaLayer *layer; - GdkPixbuf *pixbuf; - gint width; - gint height; - GError *error = NULL; + PikaImage *image; + PikaLayer *layer; + GdkPixbuf *pixbuf; + GError *error = NULL; - pixbuf = load_rsvg_pixbuf (file, &load_vals, rsvg_flags, NULL, &error); + pixbuf = load_rsvg_pixbuf (file, width, height, resolution, rsvg_flags, NULL, &error); if (! pixbuf) { @@ -382,8 +397,7 @@ load_image (GFile *file, image = pika_image_new (width, height, PIKA_RGB); pika_image_undo_disable (image); - pika_image_set_resolution (image, - load_vals.resolution, load_vals.resolution); + pika_image_set_resolution (image, resolution, resolution); layer = pika_layer_new_from_pixbuf (image, _("Rendered SVG"), pixbuf, 100, @@ -461,7 +475,9 @@ load_set_size_callback (gint *width, /* This function renders a pixbuf from an SVG file according to vals. */ static GdkPixbuf * load_rsvg_pixbuf (GFile *file, - SvgLoadVals *vals, + gint width, + gint height, + gdouble resolution, RsvgHandleFlags rsvg_flags, gboolean *allow_retry, GError **error) @@ -475,6 +491,8 @@ load_rsvg_pixbuf (GFile *file, RsvgRectangle viewport = { 0, }; guchar *src; gint y; +#else + SvgLoadVals vals; #endif handle = rsvg_handle_new_from_gfile_sync (file, rsvg_flags, NULL, error); @@ -489,10 +507,9 @@ load_rsvg_pixbuf (GFile *file, return NULL; } - rsvg_handle_set_dpi (handle, vals->resolution); + rsvg_handle_set_dpi (handle, resolution); #if LIBRSVG_CHECK_VERSION(2, 46, 0) - pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, - vals->width, vals->height); + pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height); surf = cairo_image_surface_create_for_data (gdk_pixbuf_get_pixels (pixbuf), CAIRO_FORMAT_ARGB32, gdk_pixbuf_get_width (pixbuf), @@ -500,8 +517,8 @@ load_rsvg_pixbuf (GFile *file, gdk_pixbuf_get_rowstride (pixbuf)); cr = cairo_create (surf); - viewport.width = vals->width; - viewport.height = vals->height; + viewport.width = width; + viewport.height = height; rsvg_handle_render_document (handle, cr, &viewport, NULL); @@ -511,10 +528,10 @@ load_rsvg_pixbuf (GFile *file, /* un-premultiply the data */ src = gdk_pixbuf_get_pixels (pixbuf); - for (y = 0; y < vals->height; y++) + for (y = 0; y < height; y++) { guchar *s = src; - gint w = vals->width; + gint w = width; while (w--) { @@ -525,6 +542,9 @@ load_rsvg_pixbuf (GFile *file, src += gdk_pixbuf_get_rowstride (pixbuf); } #else + vals.resolution = resolution; + vals.width = width; + vals.height = height; rsvg_handle_set_size_callback (handle, load_set_size_callback, vals, NULL); pixbuf = rsvg_handle_get_pixbuf (handle); #endif @@ -656,39 +676,6 @@ load_dialog_ratio_callback (GtkAdjustment *adj, load_dialog_set_ratio (x, y); } -static void -load_dialog_resolution_callback (PikaSizeEntry *res, - GFile *file) -{ - SvgLoadVals vals = { 0.0, 0, 0 }; - RsvgHandleFlags rsvg_flags; - - rsvg_flags = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (file), "rsvg-flags")); - - load_vals.resolution = vals.resolution = pika_size_entry_get_refval (res, 0); - - if (! load_rsvg_size (file, &vals, rsvg_flags, NULL)) - return; - - g_signal_handlers_block_by_func (size, load_dialog_size_callback, NULL); - - pika_size_entry_set_resolution (size, 0, load_vals.resolution, FALSE); - pika_size_entry_set_resolution (size, 1, load_vals.resolution, FALSE); - - g_signal_handlers_unblock_by_func (size, load_dialog_size_callback, NULL); - - if (pika_size_entry_get_unit (size) != PIKA_UNIT_PIXEL) - { - ratio_x = pika_size_entry_get_refval (size, 0) / vals.width; - ratio_y = pika_size_entry_get_refval (size, 1) / vals.height; - } - - svg_width = vals.width; - svg_height = vals.height; - - load_dialog_set_ratio (ratio_x, ratio_y); -} - static void load_dialog_set_ratio (gdouble x, gdouble y) @@ -714,24 +701,19 @@ load_dialog_set_ratio (gdouble x, } static PikaPDBStatusType -load_dialog (GFile *file, - RsvgHandleFlags *rsvg_flags, - GError **load_error) +load_dialog (GFile *file, + PikaProcedure *procedure, + PikaProcedureConfig *config, + RsvgHandleFlags *rsvg_flags, + GError **load_error) { GtkWidget *dialog; GtkWidget *frame; - GtkWidget *hbox; + GtkWidget *main_hbox; GtkWidget *vbox; GtkWidget *image; GdkPixbuf *preview; - GtkWidget *grid; - GtkWidget *grid2; - GtkWidget *res; GtkWidget *label; - GtkWidget *spinbutton; - GtkWidget *toggle; - GtkWidget *toggle2; - GtkAdjustment *adj; gboolean run; GError *error = NULL; gchar *text; @@ -743,7 +725,8 @@ load_dialog (GFile *file, SVG_PREVIEW_SIZE, }; - preview = load_rsvg_pixbuf (file, &vals, *rsvg_flags, &allow_retry, &error); + preview = load_rsvg_pixbuf (file, SVG_PREVIEW_SIZE, SVG_PREVIEW_SIZE, SVG_DEFAULT_RESOLUTION, + *rsvg_flags, &allow_retry, &error); pika_ui_init (PLUG_IN_BINARY); @@ -768,11 +751,11 @@ load_dialog (GFile *file, gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); pika_window_set_transient (GTK_WINDOW (dialog)); - hbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); + main_hbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 12); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - hbox, TRUE, TRUE, 0); - gtk_widget_show (hbox); + main_hbox, TRUE, TRUE, 0); + gtk_widget_show (main_hbox); /* Unfortunately the error returned by librsvg is unclear. While * libxml explicitly returns a "parser error : internal error: @@ -791,7 +774,7 @@ load_dialog (GFile *file, gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_label_set_line_wrap_mode (GTK_LABEL (label), PANGO_WRAP_WORD); gtk_label_set_max_width_chars (GTK_LABEL (label), 80); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (main_hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); label = gtk_label_new (NULL); @@ -800,12 +783,12 @@ load_dialog (GFile *file, gtk_label_set_markup (GTK_LABEL (label), text); g_free (text); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (main_hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); label = gtk_label_new (_("Retry without limits preventing to parse huge data?")); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (main_hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); gtk_widget_show (dialog); @@ -817,7 +800,8 @@ load_dialog (GFile *file, { *rsvg_flags = RSVG_HANDLE_FLAG_UNLIMITED; g_clear_error (&error); - preview = load_rsvg_pixbuf (file, &vals, *rsvg_flags, NULL, &error); + preview = load_rsvg_pixbuf (file, SVG_PREVIEW_SIZE, SVG_PREVIEW_SIZE, SVG_DEFAULT_RESOLUTION, + *rsvg_flags, NULL, &error); } } @@ -835,34 +819,21 @@ load_dialog (GFile *file, } /* Scalable Vector Graphics is SVG, should perhaps not be translated */ - dialog = pika_dialog_new (_("Render Scalable Vector Graphics"), - PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, LOAD_PROC, + dialog = pika_procedure_dialog_new (PIKA_PROCEDURE (procedure), + PIKA_PROCEDURE_CONFIG (config), + _("Render Scalable Vector Graphics")); - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); - - pika_window_set_transient (GTK_WINDOW (dialog)); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - hbox, TRUE, TRUE, 0); - gtk_widget_show (hbox); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "vbox-arguments", + "width", "height", "resolution", "paths", + NULL); + main_hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "main-hbox", + "vbox-arguments", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (main_hbox), GTK_ORIENTATION_HORIZONTAL); /* The SVG preview */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); frame = gtk_frame_new (NULL); @@ -880,202 +851,17 @@ load_dialog (GFile *file, gtk_widget_show (size_label); /* query the initial size after the size label is created */ - vals.resolution = load_vals.resolution; + g_object_get (config, "resolution", &vals.resolution, NULL); load_rsvg_size (file, &vals, *rsvg_flags, NULL); + g_object_set (config, + "width", vals.width, + "height", vals.height, + NULL); - svg_width = vals.width; - svg_height = vals.height; - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (hbox), grid, TRUE, TRUE, 0); - gtk_widget_show (grid); - - /* Width and Height */ - label = gtk_label_new (_("Width:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (label); - - label = gtk_label_new (_("Height:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (label); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_grid_attach (GTK_GRID (grid), hbox, 1, 0, 1, 1); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (hbox); - - adj = gtk_adjustment_new (1, 1, 1, 1, 10, 0); - spinbutton = pika_spin_button_new (adj, 1.0, 2); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_entry_set_width_chars (GTK_ENTRY (spinbutton), 10); - gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_grid_attach (GTK_GRID (grid), hbox, 1, 1, 1, 1); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (hbox); - - size = PIKA_SIZE_ENTRY (pika_size_entry_new (1, PIKA_UNIT_PIXEL, "%a", - TRUE, FALSE, FALSE, 10, - PIKA_SIZE_ENTRY_UPDATE_SIZE)); - - pika_size_entry_add_field (size, GTK_SPIN_BUTTON (spinbutton), NULL); - - gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (size), FALSE, FALSE, 0); - gtk_widget_show (GTK_WIDGET (size)); - - pika_size_entry_set_refval_boundaries (size, 0, - PIKA_MIN_IMAGE_SIZE, - PIKA_MAX_IMAGE_SIZE); - pika_size_entry_set_refval_boundaries (size, 1, - PIKA_MIN_IMAGE_SIZE, - PIKA_MAX_IMAGE_SIZE); - - pika_size_entry_set_refval (size, 0, svg_width); - pika_size_entry_set_refval (size, 1, svg_height); - - pika_size_entry_set_resolution (size, 0, load_vals.resolution, FALSE); - pika_size_entry_set_resolution (size, 1, load_vals.resolution, FALSE); - - g_signal_connect (size, "value-changed", - G_CALLBACK (load_dialog_size_callback), - NULL); - - /* Scale ratio */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_grid_attach (GTK_GRID (grid), hbox, 1, 2, 1, 2); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (hbox); - - grid2 = gtk_grid_new (); - gtk_box_pack_start (GTK_BOX (hbox), grid2, FALSE, FALSE, 0); - - xadj = gtk_adjustment_new (ratio_x, - (gdouble) PIKA_MIN_IMAGE_SIZE / (gdouble) svg_width, - (gdouble) PIKA_MAX_IMAGE_SIZE / (gdouble) svg_width, - 0.01, 0.1, 0); - spinbutton = pika_spin_button_new (xadj, 0.01, 4); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_entry_set_width_chars (GTK_ENTRY (spinbutton), 10); - gtk_grid_attach (GTK_GRID (grid2), spinbutton, 0, 0, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (xadj, "value-changed", - G_CALLBACK (load_dialog_ratio_callback), - NULL); - - label = gtk_label_new_with_mnemonic (_("_X ratio:")); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (label); - - yadj = gtk_adjustment_new (ratio_y, - (gdouble) PIKA_MIN_IMAGE_SIZE / (gdouble) svg_height, - (gdouble) PIKA_MAX_IMAGE_SIZE / (gdouble) svg_height, - 0.01, 0.1, 0); - spinbutton = pika_spin_button_new (yadj, 0.01, 4); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_entry_set_width_chars (GTK_ENTRY (spinbutton), 10); - gtk_grid_attach (GTK_GRID (grid2), spinbutton, 0, 1, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (yadj, "value-changed", - G_CALLBACK (load_dialog_ratio_callback), - NULL); - - label = gtk_label_new_with_mnemonic (_("_Y ratio:")); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (label); - - /* the constrain ratio chainbutton */ - constrain = pika_chain_button_new (PIKA_CHAIN_RIGHT); - pika_chain_button_set_active (PIKA_CHAIN_BUTTON (constrain), TRUE); - gtk_grid_attach (GTK_GRID (grid2), constrain, 1, 0, 1, 2); - gtk_widget_show (constrain); - - pika_help_set_help_data (pika_chain_button_get_button (PIKA_CHAIN_BUTTON (constrain)), - _("Constrain aspect ratio"), NULL); - - gtk_widget_show (grid2); - - /* Resolution */ - label = gtk_label_new (_("Resolution:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 4, 1, 1); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (label); - - res = pika_size_entry_new (1, PIKA_UNIT_INCH, _("pixels/%a"), - FALSE, FALSE, FALSE, 10, - PIKA_SIZE_ENTRY_UPDATE_RESOLUTION); - - gtk_grid_attach (GTK_GRID (grid), res, 1, 4, 1, 1); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (res); - - /* don't let the resolution become too small, librsvg tends to - crash with very small resolutions */ - pika_size_entry_set_refval_boundaries (PIKA_SIZE_ENTRY (res), 0, - 5.0, PIKA_MAX_RESOLUTION); - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (res), 0, load_vals.resolution); - - g_object_set_data (G_OBJECT (file), "rsvg-flags", GINT_TO_POINTER (rsvg_flags)); - g_signal_connect (res, "value-changed", - G_CALLBACK (load_dialog_resolution_callback), - file); - - /* Path Import */ - toggle = gtk_check_button_new_with_mnemonic (_("Import _paths")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), load_vals.import); - gtk_grid_attach (GTK_GRID (grid), toggle, 0, 5, 2, 1); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (toggle); - - pika_help_set_help_data (toggle, - _("Import path elements of the SVG so they " - "can be used with the PIKA path tool"), - NULL); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &load_vals.import); - - toggle2 = gtk_check_button_new_with_mnemonic (_("Merge imported paths")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle2), load_vals.merge); - gtk_grid_attach (GTK_GRID (grid), toggle2, 0, 6, 2, 1); - // GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (toggle2); - - g_signal_connect (toggle2, "toggled", - G_CALLBACK (pika_toggle_button_update), - &load_vals.merge); - - g_object_bind_property (toggle, "active", - toggle2, "sensitive", - G_BINDING_SYNC_CREATE); - - gtk_widget_show (dialog); - - run = (pika_dialog_run (PIKA_DIALOG (dialog)) == GTK_RESPONSE_OK); - - if (run) - { - load_vals.width = ROUND (pika_size_entry_get_refval (size, 0)); - load_vals.height = ROUND (pika_size_entry_get_refval (size, 1)); - } + /* Complete the dialog. */ + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), "main-hbox", NULL); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); gtk_widget_destroy (dialog); diff --git a/plug-ins/common/file-tga.c b/plug-ins/common/file-tga.c index 8a5a8a3..b9289e4 100644 --- a/plug-ins/common/file-tga.c +++ b/plug-ins/common/file-tga.c @@ -170,43 +170,46 @@ struct _TgaClass #define TGA_TYPE (tga_get_type ()) -#define TGA (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TGA_TYPE, Tga)) +#define TGA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TGA_TYPE, Tga)) GType tga_get_type (void) G_GNUC_CONST; -static GList * tga_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * tga_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * tga_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * tga_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * tga_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * tga_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * tga_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * tga_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GObject *config, - GError **error); +static PikaImage * load_image (GFile *file, + GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GObject *config, + GError **error); -static gboolean save_dialog (PikaImage *image, - PikaProcedure *procedure, - GObject *config); +static gboolean save_dialog (PikaImage *image, + PikaProcedure *procedure, + GObject *config); -static PikaImage * ReadImage (FILE *fp, - tga_info *info, - GFile *file); +static PikaImage * ReadImage (FILE *fp, + tga_info *info, + GFile *file); G_DEFINE_TYPE (Tga, tga, PIKA_TYPE_PLUG_IN) @@ -283,7 +286,7 @@ tga_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - tga_save, NULL, NULL); + FALSE, tga_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -322,11 +325,13 @@ tga_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -tga_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +tga_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -357,19 +362,16 @@ tga_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -417,9 +419,6 @@ tga_save (PikaProcedure *procedure, } } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/common/file-wbmp.c b/plug-ins/common/file-wbmp.c index 08157e6..586d3fa 100644 --- a/plug-ins/common/file-wbmp.c +++ b/plug-ins/common/file-wbmp.c @@ -48,28 +48,30 @@ struct _WbmpClass }; #define WBMP_TYPE (wbmp_get_type ()) -#define WBMP (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WBMP_TYPE, Wbmp)) +#define WBMP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WBMP_TYPE, Wbmp)) GType wbmp_get_type (void) G_GNUC_CONST; -static GList * wbmp_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * wbmp_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * wbmp_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * wbmp_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * wbmp_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * wbmp_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); -PikaImage * load_image (GFile *file, - GError **error); +PikaImage * load_image (GFile *file, + GError **error); -static PikaImage * read_image (FILE *fd, - GFile *file, - gint width, - gint height, - GError **error); +static PikaImage * read_image (FILE *fd, + GFile *file, + gint width, + gint height, + GError **error); G_DEFINE_TYPE (Wbmp, wbmp, PIKA_TYPE_PLUG_IN) @@ -134,11 +136,13 @@ wbmp_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -wbmp_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +wbmp_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; diff --git a/plug-ins/common/file-wmf.c b/plug-ins/common/file-wmf.c index 662cf9d..d1a583b 100644 --- a/plug-ins/common/file-wmf.c +++ b/plug-ins/common/file-wmf.c @@ -41,7 +41,7 @@ #define PLUG_IN_BINARY "file-wmf" #define PLUG_IN_ROLE "pika-file-wmf" -#define WMF_DEFAULT_RESOLUTION 90.0 +#define WMF_DEFAULT_RESOLUTION 300.0 #define WMF_DEFAULT_SIZE 500 #define WMF_PREVIEW_SIZE 128 @@ -69,37 +69,47 @@ struct _WmfClass #define WMF_TYPE (wmf_get_type ()) -#define WMF (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WMF_TYPE, Wmf)) +#define WMF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WMF_TYPE, Wmf)) GType wmf_get_type (void) G_GNUC_CONST; -static GList * wmf_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * wmf_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * wmf_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * wmf_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * wmf_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * wmf_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * wmf_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * wmf_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); -static gboolean load_wmf_size (GFile *file, - WmfLoadVals *vals); -static gboolean load_dialog (GFile *file); -static guchar * wmf_get_pixbuf (GFile *file, - gint *width, - gint *height); -static guchar * wmf_load_file (GFile *file, - guint *width, - guint *height, - GError **error); +static PikaImage * load_image (GFile *file, + gint requested_width, + gint requested_height, + gdouble resolution, + GError **error); +static gboolean load_wmf_size (GFile *file, + WmfLoadVals *vals); +static gboolean load_dialog (GFile *file, + PikaProcedure *procedure, + PikaProcedureConfig *config); +static guchar * wmf_get_pixbuf (GFile *file, + gint *width, + gint *height); +static guchar * wmf_load_file (GFile *file, + gint requested_width, + gint requested_height, + gdouble resolution, + guint *width, + guint *height, + GError **error); G_DEFINE_TYPE (Wmf, wmf, PIKA_TYPE_PLUG_IN) @@ -108,14 +118,6 @@ PIKA_MAIN (WMF_TYPE) DEFINE_STD_SET_I18N -static WmfLoadVals load_vals = -{ - WMF_DEFAULT_RESOLUTION, - 0, - 0, -}; - - static void wmf_class_init (WmfClass *klass) { @@ -216,40 +218,34 @@ wmf_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -wmf_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +wmf_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; GError *error = NULL; + gdouble resolution; + gint width; + gint height; gegl_init (NULL, NULL); - switch (run_mode) - { - case PIKA_RUN_NONINTERACTIVE: - load_vals.resolution = PIKA_VALUES_GET_DOUBLE (args, 0); - load_vals.width = PIKA_VALUES_GET_INT (args, 1); - load_vals.height = PIKA_VALUES_GET_INT (args, 2); - break; + if (run_mode == PIKA_RUN_INTERACTIVE && ! load_dialog (file, procedure, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); - case PIKA_RUN_INTERACTIVE: - pika_get_data (LOAD_PROC, &load_vals); - if (! load_dialog (file)) - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - break; - - case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (LOAD_PROC, &load_vals); - break; - } - - image = load_image (file, &error); + g_object_get (config, + "resolution", &resolution, + "width", &width, + "height", &height, + NULL); + image = load_image (file, width, height, resolution, &error); if (! image) return pika_procedure_new_return_values (procedure, @@ -266,17 +262,18 @@ wmf_load (PikaProcedure *procedure, } static PikaValueArray * -wmf_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +wmf_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; - gint width; - gint height; - GError *error = NULL; + gint width = 0; + gint height = 0; + GError *error = NULL; + WmfLoadVals load_vals = { WMF_DEFAULT_RESOLUTION, 0, 0, }; gegl_init (NULL, NULL); @@ -289,8 +286,8 @@ wmf_load_thumb (PikaProcedure *procedure, if ((gdouble) load_vals.width > (gdouble) load_vals.height) { + load_vals.height *= (size / (gdouble) load_vals.width); load_vals.width = size; - load_vals.height *= size / (gdouble) load_vals.width; } else { @@ -305,7 +302,7 @@ wmf_load_thumb (PikaProcedure *procedure, NULL); } - image = load_image (file, &error); + image = load_image (file, load_vals.width, load_vals.height, load_vals.resolution, &error); if (! image) return pika_procedure_new_return_values (procedure, @@ -418,74 +415,6 @@ load_wmf_size (GFile *file, /* User interface */ -static PikaSizeEntry *size = NULL; -static GtkAdjustment *xadj = NULL; -static GtkAdjustment *yadj = NULL; -static GtkWidget *constrain = NULL; -static gdouble ratio_x = 1.0; -static gdouble ratio_y = 1.0; -static gint wmf_width = 0; -static gint wmf_height = 0; - -static void load_dialog_set_ratio (gdouble x, - gdouble y); - - -static void -load_dialog_size_callback (GtkWidget *widget, - gpointer data) -{ - if (pika_chain_button_get_active (PIKA_CHAIN_BUTTON (constrain))) - { - gdouble x = pika_size_entry_get_refval (size, 0) / (gdouble) wmf_width; - gdouble y = pika_size_entry_get_refval (size, 1) / (gdouble) wmf_height; - - if (x != ratio_x) - { - load_dialog_set_ratio (x, x); - } - else if (y != ratio_y) - { - load_dialog_set_ratio (y, y); - } - } -} - -static void -load_dialog_ratio_callback (GtkAdjustment *adj, - gpointer data) -{ - gdouble x = gtk_adjustment_get_value (xadj); - gdouble y = gtk_adjustment_get_value (yadj); - - if (pika_chain_button_get_active (PIKA_CHAIN_BUTTON (constrain))) - { - if (x != ratio_x) - y = x; - else - x = y; - } - - load_dialog_set_ratio (x, y); -} - -static void -load_dialog_resolution_callback (PikaSizeEntry *res, - GFile *file) -{ - WmfLoadVals vals = { 0.0, 0, 0 }; - - load_vals.resolution = vals.resolution = pika_size_entry_get_refval (res, 0); - - if (! load_wmf_size (file, &vals)) - return; - - wmf_width = vals.width; - wmf_height = vals.height; - - load_dialog_set_ratio (ratio_x, ratio_y); -} - static void wmf_preview_callback (GtkWidget *widget, GtkAllocation *allocation, @@ -497,79 +426,45 @@ wmf_preview_callback (GtkWidget *widget, pixels, allocation->width * 4); } -static void -load_dialog_set_ratio (gdouble x, - gdouble y) -{ - ratio_x = x; - ratio_y = y; - - g_signal_handlers_block_by_func (size, load_dialog_size_callback, NULL); - - pika_size_entry_set_refval (size, 0, wmf_width * x); - pika_size_entry_set_refval (size, 1, wmf_height * y); - - g_signal_handlers_unblock_by_func (size, load_dialog_size_callback, NULL); - - g_signal_handlers_block_by_func (xadj, load_dialog_ratio_callback, NULL); - g_signal_handlers_block_by_func (yadj, load_dialog_ratio_callback, NULL); - - gtk_adjustment_set_value (xadj, x); - gtk_adjustment_set_value (yadj, y); - - g_signal_handlers_unblock_by_func (xadj, load_dialog_ratio_callback, NULL); - g_signal_handlers_unblock_by_func (yadj, load_dialog_ratio_callback, NULL); -} - static gboolean -load_dialog (GFile *file) +load_dialog (GFile *file, + PikaProcedure *procedure, + PikaProcedureConfig *config) { GtkWidget *dialog; - GtkWidget *frame; - GtkWidget *hbox; + GtkWidget *main_hbox; GtkWidget *vbox; + GtkWidget *frame; GtkWidget *image; - GtkWidget *grid; - GtkWidget *grid2; - GtkWidget *res; - GtkWidget *label; - GtkWidget *spinbutton; - GtkAdjustment *adj; guchar *pixels; gboolean run = FALSE; - - WmfLoadVals vals = { WMF_DEFAULT_RESOLUTION, - - WMF_PREVIEW_SIZE, - WMF_PREVIEW_SIZE }; + WmfLoadVals vals; pika_ui_init (PLUG_IN_BINARY); - dialog = pika_dialog_new (_("Render Windows Metafile"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, LOAD_PROC, + dialog = pika_procedure_dialog_new (PIKA_PROCEDURE (procedure), + PIKA_PROCEDURE_CONFIG (config), + _("Render Windows Metafile")); - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); - - pika_window_set_transient (GTK_WINDOW (dialog)); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - hbox, TRUE, TRUE, 0); - gtk_widget_show (hbox); + /* TODO: we'll want to have a special widget (or even procedure argument type) + * for dimensions (showing units, possibility to link dimensions and so on). + * TODO 2: in the old version, there used to be X and Y ratio fields which + * could be constrained/linked (or not) and would sync back and forth with the + * width/height fields. Are these needed? If so, should we try to automatize + * such UI when editing dimensions? + */ + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "vbox-arguments", + "width", "height", "resolution", + NULL); + main_hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "main-hbox", + "vbox-arguments", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (main_hbox), GTK_ORIENTATION_HORIZONTAL); /* The WMF preview */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); + gtk_box_reorder_child (GTK_BOX (main_hbox), vbox, 0); gtk_widget_show (vbox); frame = gtk_frame_new (NULL); @@ -577,6 +472,8 @@ load_dialog (GFile *file) gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); + vals.width = - WMF_PREVIEW_SIZE; + vals.height = - WMF_PREVIEW_SIZE; pixels = wmf_get_pixbuf (file, &vals.width, &vals.height); image = pika_preview_area_new (); gtk_widget_set_size_request (image, vals.width, vals.height); @@ -593,163 +490,18 @@ load_dialog (GFile *file) gtk_widget_show (size_label); /* query the initial size after the size label is created */ - vals.resolution = load_vals.resolution; - + g_object_get (config, "resolution", &vals.resolution, NULL); load_wmf_size (file, &vals); + g_object_set (config, + "width", vals.width, + "height", vals.height, + NULL); - wmf_width = vals.width; - wmf_height = vals.height; + /* Complete the dialog. */ + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), "main-hbox", NULL); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (hbox), grid, TRUE, TRUE, 0); - gtk_widget_show (grid); - - /* Width and Height */ - label = gtk_label_new (_("Width:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); - gtk_widget_show (label); - - label = gtk_label_new (_("Height:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); - gtk_widget_show (label); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_grid_attach (GTK_GRID (grid), hbox, 1, 0, 1, 1); - gtk_widget_show (hbox); - - adj = gtk_adjustment_new (1, 1, 1, 1, 10, 0); - spinbutton = pika_spin_button_new (adj, 1.0, 2); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_entry_set_width_chars (GTK_ENTRY (spinbutton), 10); - gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_grid_attach (GTK_GRID (grid), hbox, 1, 1, 1, 1); - gtk_widget_show (hbox); - - size = PIKA_SIZE_ENTRY (pika_size_entry_new (1, PIKA_UNIT_PIXEL, "%a", - TRUE, FALSE, FALSE, 10, - PIKA_SIZE_ENTRY_UPDATE_SIZE)); - - pika_size_entry_add_field (size, GTK_SPIN_BUTTON (spinbutton), NULL); - - gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (size), FALSE, FALSE, 0); - gtk_widget_show (GTK_WIDGET (size)); - - pika_size_entry_set_refval_boundaries (size, 0, - PIKA_MIN_IMAGE_SIZE, - PIKA_MAX_IMAGE_SIZE); - pika_size_entry_set_refval_boundaries (size, 1, - PIKA_MIN_IMAGE_SIZE, - PIKA_MAX_IMAGE_SIZE); - - pika_size_entry_set_refval (size, 0, wmf_width); - pika_size_entry_set_refval (size, 1, wmf_height); - - pika_size_entry_set_resolution (size, 0, load_vals.resolution, FALSE); - pika_size_entry_set_resolution (size, 1, load_vals.resolution, FALSE); - - g_signal_connect (size, "value-changed", - G_CALLBACK (load_dialog_size_callback), - NULL); - - /* Scale ratio */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_grid_attach (GTK_GRID (grid), hbox, 1, 2, 1, 2); - gtk_widget_show (hbox); - - grid2 = gtk_grid_new (); - gtk_box_pack_start (GTK_BOX (hbox), grid2, FALSE, FALSE, 0); - - xadj = gtk_adjustment_new (ratio_x, - (gdouble) PIKA_MIN_IMAGE_SIZE / (gdouble) wmf_width, - (gdouble) PIKA_MAX_IMAGE_SIZE / (gdouble) wmf_width, - 0.01, 0.1, 0); - spinbutton = pika_spin_button_new (xadj, 0.01, 4); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_entry_set_width_chars (GTK_ENTRY (spinbutton), 10); - gtk_grid_attach (GTK_GRID (grid2), spinbutton, 0, 0, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (xadj, "value-changed", - G_CALLBACK (load_dialog_ratio_callback), - NULL); - - label = gtk_label_new_with_mnemonic (_("_X ratio:")); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1); - gtk_widget_show (label); - - yadj = gtk_adjustment_new (ratio_y, - (gdouble) PIKA_MIN_IMAGE_SIZE / (gdouble) wmf_height, - (gdouble) PIKA_MAX_IMAGE_SIZE / (gdouble) wmf_height, - 0.01, 0.1, 0); - spinbutton = pika_spin_button_new (yadj, 0.01, 4); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_entry_set_width_chars (GTK_ENTRY (spinbutton), 10); - gtk_grid_attach (GTK_GRID (grid2), spinbutton, 0, 1, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (yadj, "value-changed", - G_CALLBACK (load_dialog_ratio_callback), - NULL); - - label = gtk_label_new_with_mnemonic (_("_Y ratio:")); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1); - gtk_widget_show (label); - - /* the constrain ratio chainbutton */ - constrain = pika_chain_button_new (PIKA_CHAIN_RIGHT); - pika_chain_button_set_active (PIKA_CHAIN_BUTTON (constrain), TRUE); - gtk_grid_attach (GTK_GRID (grid2), constrain, 1, 0, 1, 2); - gtk_widget_show (constrain); - - pika_help_set_help_data (pika_chain_button_get_button (PIKA_CHAIN_BUTTON (constrain)), - _("Constrain aspect ratio"), NULL); - - gtk_widget_show (grid2); - - /* Resolution */ - label = gtk_label_new (_("Resolution:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 4, 1, 1); - gtk_widget_show (label); - - res = pika_size_entry_new (1, PIKA_UNIT_INCH, _("pixels/%a"), - FALSE, FALSE, FALSE, 10, - PIKA_SIZE_ENTRY_UPDATE_RESOLUTION); - - gtk_grid_attach (GTK_GRID (grid), res, 1, 4, 1, 1); - gtk_widget_show (res); - - /* don't let the resolution become too small ? does libwmf tend to - crash with very small resolutions */ - pika_size_entry_set_refval_boundaries (PIKA_SIZE_ENTRY (res), 0, - 5.0, PIKA_MAX_RESOLUTION); - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (res), 0, load_vals.resolution); - - g_signal_connect (res, "value-changed", - G_CALLBACK (load_dialog_resolution_callback), - file); - - gtk_widget_show (dialog); - - if (pika_dialog_run (PIKA_DIALOG (dialog)) == GTK_RESPONSE_OK) - { - load_vals.width = ROUND (pika_size_entry_get_refval (size, 0)); - load_vals.height = ROUND (pika_size_entry_get_refval (size, 1)); - run = TRUE; - } - - gtk_widget_destroy (GTK_WIDGET (dialog)); + gtk_widget_destroy (dialog); return run; } @@ -915,6 +667,9 @@ wmf_get_pixbuf (GFile *file, static guchar * wmf_load_file (GFile *file, + gint requested_width, + gint requested_height, + gdouble resolution, guint *width, guint *height, GError **error) @@ -970,14 +725,14 @@ wmf_load_file (GFile *file, err = wmf_display_size (API, width, height, - load_vals.resolution, load_vals.resolution); + resolution, resolution); if (err != wmf_E_None || *width <= 0 || *height <= 0) goto _wmf_error; - if (load_vals.width > 0 && load_vals.height > 0) + if (requested_width > 0 && requested_height > 0) { - *width = load_vals.width; - *height = load_vals.height; + *width = requested_width; + *height = requested_height; } ddata->bbox = bbox; @@ -1018,8 +773,11 @@ wmf_load_file (GFile *file, * 'load_image()' - Load a WMF image into a new image window. */ static PikaImage * -load_image (GFile *file, - GError **error) +load_image (GFile *file, + gint requested_width, + gint requested_height, + gdouble resolution, + GError **error) { PikaImage *image; PikaLayer *layer; @@ -1030,14 +788,14 @@ load_image (GFile *file, pika_progress_init_printf (_("Opening '%s'"), pika_file_get_utf8_name (file)); - pixels = wmf_load_file (file, &width, &height, error); + pixels = wmf_load_file (file, requested_width, requested_height, resolution, + &width, &height, error); if (! pixels) return NULL; image = pika_image_new (width, height, PIKA_RGB); - pika_image_set_resolution (image, - load_vals.resolution, load_vals.resolution); + pika_image_set_resolution (image, resolution, resolution); layer = pika_layer_new (image, _("Rendered WMF"), diff --git a/plug-ins/common/file-xbm.c b/plug-ins/common/file-xbm.c index ef7ca37..2c91389 100644 --- a/plug-ins/common/file-xbm.c +++ b/plug-ins/common/file-xbm.c @@ -74,45 +74,48 @@ struct _XbmClass #define XBM_TYPE (xbm_get_type ()) -#define XBM (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XBM_TYPE, Xbm)) +#define XBM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XBM_TYPE, Xbm)) GType xbm_get_type (void) G_GNUC_CONST; -static GList * xbm_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * xbm_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * xbm_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * xbm_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * xbm_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * xbm_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * xbm_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * xbm_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); -static gboolean save_image (GFile *file, - const gchar *prefix, - gboolean save_mask, - PikaImage *image, - PikaDrawable *drawable, - GObject *config, - GError **error); -static gboolean save_dialog (PikaImage *image, - PikaDrawable *drawable, - PikaProcedure *procedure, - GObject *config); +static PikaImage * load_image (GFile *file, + GError **error); +static gboolean save_image (GFile *file, + const gchar *prefix, + gboolean save_mask, + PikaImage *image, + PikaDrawable *drawable, + GObject *config, + GError **error); +static gboolean save_dialog (PikaImage *image, + PikaDrawable *drawable, + PikaProcedure *procedure, + GObject *config); -static gboolean print (GOutputStream *output, - GError **error, - const gchar *format, +static gboolean print (GOutputStream *output, + GError **error, + const gchar *format, ...) G_GNUC_PRINTF (3, 4); @@ -184,7 +187,7 @@ xbm_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - xbm_save, NULL, NULL); + FALSE, xbm_save, NULL, NULL); pika_procedure_set_image_types (procedure, "INDEXED"); @@ -274,11 +277,13 @@ xbm_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -xbm_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +xbm_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaPDBStatusType status = PIKA_PDB_SUCCESS; @@ -340,10 +345,10 @@ xbm_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; PikaPDBStatusType status = PIKA_PDB_SUCCESS; PikaExportReturn export = PIKA_EXPORT_CANCEL; gchar *mask_basename = NULL; @@ -351,9 +356,6 @@ xbm_save (PikaProcedure *procedure, gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_export (config, image, run_mode, args, NULL); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -490,9 +492,6 @@ xbm_save (PikaProcedure *procedure, g_object_unref (mask_file); } - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/common/file-xmc.c b/plug-ins/common/file-xmc.c index dbe555d..0520a37 100644 --- a/plug-ins/common/file-xmc.c +++ b/plug-ins/common/file-xmc.c @@ -149,106 +149,108 @@ struct _XmcClass #define XMC_TYPE (xmc_get_type ()) -#define XMC (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XMC_TYPE, Xmc)) +#define XMC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XMC_TYPE, Xmc)) -GType xmc_get_type (void) G_GNUC_CONST; +GType xmc_get_type (void) G_GNUC_CONST; -static GList * xmc_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * xmc_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * xmc_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * xmc_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * xmc_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * xmc_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * xmc_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * xmc_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * xmc_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * xmc_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); +static PikaImage * load_image (GFile *file, + GError **error); -static PikaImage * load_thumbnail (GFile *file, - gint32 thumb_size, - gint32 *width, - gint32 *height, - gint32 *num_layers, - GError **error); +static PikaImage * load_thumbnail (GFile *file, + gint32 thumb_size, + gint32 *width, + gint32 *height, + gint32 *num_layers, + GError **error); -static guint32 read32 (FILE *f, - GError **error); +static guint32 read32 (FILE *f, + GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - PikaImage *orig_image, - GObject *config, - GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + PikaImage *orig_image, + GObject *config, + GError **error); -static gboolean save_dialog (PikaProcedure *procedure, - GObject *config, - PikaImage *image, - GeglRectangle *hotspot_range); +static gboolean save_dialog (PikaProcedure *procedure, + GObject *config, + PikaImage *image, + GeglRectangle *hotspot_range); -static void load_default_hotspot (PikaImage *image, - GeglRectangle *hotspot_range, - GObject *config); +static void load_default_hotspot (PikaImage *image, + GeglRectangle *hotspot_range, + GObject *config); -static inline guint32 separate_alpha (guint32 pixel); +static inline guint32 separate_alpha (guint32 pixel); -static inline guint32 premultiply_alpha (guint32 pixel); +static inline guint32 premultiply_alpha (guint32 pixel); -static XcursorComments *set_cursor_comments (GObject *config); +static XcursorComments *set_cursor_comments (GObject *config); -static gboolean set_hotspot_to_parasite (PikaImage *image, - gint hot_spot_x, - gint hot_spot_y); +static gboolean set_hotspot_to_parasite (PikaImage *image, + gint hot_spot_x, + gint hot_spot_y); -static gboolean get_hotspot_from_parasite (PikaImage *image, - gint *hot_spot_x, - gint *hot_spot_y); +static gboolean get_hotspot_from_parasite (PikaImage *image, + gint *hot_spot_x, + gint *hot_spot_y); -static void set_size_and_delay (GObject *config, - const gchar *framename, - guint32 *sizep, - guint32 *delayp, - GRegex *re, - gboolean *size_warnp); +static void set_size_and_delay (GObject *config, + const gchar *framename, + guint32 *sizep, + guint32 *delayp, + GRegex *re, + gboolean *size_warnp); -static gchar * make_framename (guint32 size, - guint32 delay, - guint indent, - GError **errorp); +static gchar * make_framename (guint32 size, + guint32 delay, + guint indent, + GError **errorp); -static void get_cropped_region (GeglRectangle *retrun_rgn, - GeglBuffer *buffer); +static void get_cropped_region (GeglRectangle *retrun_rgn, + GeglBuffer *buffer); -static inline gboolean pix_is_opaque (guint32 pix); +static inline gboolean pix_is_opaque (guint32 pix); -static GeglRectangle * get_intersection_of_frames (PikaImage *image); +static GeglRectangle * get_intersection_of_frames (PikaImage *image); -static gboolean pix_in_region (gint32 x, - gint32 y, - GeglRectangle *xmcrp); +static gboolean pix_in_region (gint32 x, + gint32 y, + GeglRectangle *xmcrp); -static void find_hotspots_and_dimensions - (XcursorImages *xcIs, - gint32 *xhot, - gint32 *yhot, - gint32 *width, - gint32 *height); +static void find_hotspots_and_dimensions (XcursorImages *xcIs, + gint32 *xhot, + gint32 *yhot, + gint32 *width, + gint32 *height); G_DEFINE_TYPE (Xmc, xmc, PIKA_TYPE_PLUG_IN) @@ -341,7 +343,7 @@ xmc_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - xmc_save, NULL, NULL); + FALSE, xmc_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGBA"); @@ -438,11 +440,13 @@ xmc_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -xmc_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +xmc_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -467,11 +471,11 @@ xmc_load (PikaProcedure *procedure, } static PikaValueArray * -xmc_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +xmc_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; gint width; @@ -513,17 +517,17 @@ xmc_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - PikaImage *orig_image; - GeglRectangle *hotspot_range; - gint hot_spot_x; - gint hot_spot_y; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + PikaImage *orig_image; + GeglRectangle *hotspot_range; + gint hot_spot_x; + gint hot_spot_y; + GError *error = NULL; gegl_init (NULL, NULL); @@ -543,9 +547,6 @@ xmc_save (PikaProcedure *procedure, error); } - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_export (config, image, run_mode, args, NULL); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -616,9 +617,6 @@ xmc_save (PikaProcedure *procedure, g_free (hotspot_range); - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, status, error); } @@ -853,9 +851,9 @@ load_image (GFile *file, static PikaImage * load_thumbnail (GFile *file, gint32 thumb_size, - gint32 *thumb_width, - gint32 *thumb_height, - gint32 *thumb_num_layers, + gint32 *img_width, + gint32 *img_height, + gint32 *num_layers, GError **error) { /* Return only one frame for thumbnail. @@ -881,13 +879,13 @@ load_thumbnail (GFile *file, gint height; gint i; - g_return_val_if_fail (thumb_width, NULL); - g_return_val_if_fail (thumb_height, NULL); - g_return_val_if_fail (thumb_num_layers, NULL); + g_return_val_if_fail (img_width, NULL); + g_return_val_if_fail (img_height, NULL); + g_return_val_if_fail (num_layers, NULL); - *thumb_width = 0; - *thumb_height = 0; - *thumb_num_layers = 0; + *img_width = 0; + *img_height = 0; + *num_layers = 0; fp = g_fopen (g_file_peek_path (file), "rb"); @@ -939,15 +937,15 @@ load_thumbnail (GFile *file, /* this content is image */ size = READ32 (fp, error) - positions[*thumb_num_layers] = READ32 (fp, error) + positions[*num_layers] = READ32 (fp, error) /* is this image is more preferred than selected before? */ diff = MAX (thumb_size, size) - MIN (thumb_size, size); if (diff < min_diff) {/* the image size is closer than current selected image */ min_diff = diff; - sel_num = *thumb_num_layers; + sel_num = *num_layers; } - ++*thumb_num_layers; + ++*num_layers; } } @@ -963,8 +961,8 @@ load_thumbnail (GFile *file, /* get width and height of entire image */ /* Let's make XcursorImages */ - xcIs = XcursorImagesCreate (*thumb_num_layers); - xcIs->nimage = *thumb_num_layers; + xcIs = XcursorImagesCreate (*num_layers); + xcIs->nimage = *num_layers; for (i = 0; i < xcIs->nimage; ++i) { /* make XcursorImage with no pixel buffer */ @@ -986,13 +984,13 @@ load_thumbnail (GFile *file, thumb_size - min_diff, thumb_size + min_diff); /* get entire image dimensions */ - find_hotspots_and_dimensions (xcIs, NULL, NULL, thumb_width, thumb_height); + find_hotspots_and_dimensions (xcIs, NULL, NULL, img_width, img_height); DM_XMC ("width=%i\theight=%i\tnum-layers=%i\n", - *thumb_width, *thumb_height, xcIs->nimage); + *img_width, *img_height, xcIs->nimage); /* dimension check */ - if (*thumb_width > MAX_LOAD_DIMENSION) + if (*img_width > MAX_LOAD_DIMENSION) { g_set_error (error, 0, 0, _("'%s' is too wide for an X cursor."), @@ -1001,7 +999,7 @@ load_thumbnail (GFile *file, return NULL; } - if (*thumb_height > MAX_LOAD_DIMENSION) + if (*img_height > MAX_LOAD_DIMENSION) { g_set_error (error, 0, 0, _("'%s' is too high for an X cursor."), diff --git a/plug-ins/common/file-xpm.c b/plug-ins/common/file-xpm.c index cd70249..41dce1d 100644 --- a/plug-ins/common/file-xpm.c +++ b/plug-ins/common/file-xpm.c @@ -100,42 +100,45 @@ struct _XpmClass #define XPM_TYPE (xpm_get_type ()) -#define XPM (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XPM_TYPE, Xpm)) +#define XPM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XPM_TYPE, Xpm)) GType xpm_get_type (void) G_GNUC_CONST; -static GList * xpm_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * xpm_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * xpm_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * xpm_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * xpm_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * xpm_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * xpm_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * xpm_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); -static guchar * parse_colors (XpmImage *xpm_image); -static void parse_image (PikaImage *image, - XpmImage *xpm_image, - guchar *cmap); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GObject *config, - GError **error); -static gboolean save_dialog (PikaImage *image, - PikaProcedure *procedure, - GObject *config); +static PikaImage * load_image (GFile *file, + GError **error); +static guchar * parse_colors (XpmImage *xpm_image); +static void parse_image (PikaImage *image, + XpmImage *xpm_image, + guchar *cmap); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GObject *config, + GError **error); +static gboolean save_dialog (PikaImage *image, + PikaProcedure *procedure, + GObject *config); G_DEFINE_TYPE (Xpm, xpm, PIKA_TYPE_PLUG_IN) @@ -228,7 +231,7 @@ xpm_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - xpm_save, NULL, NULL); + FALSE, xpm_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -270,11 +273,13 @@ xpm_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -xpm_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +xpm_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -305,19 +310,16 @@ xpm_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -366,9 +368,6 @@ xpm_save (PikaProcedure *procedure, } } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/common/file-xwd.c b/plug-ins/common/file-xwd.c index 57b0702..d63ab52 100644 --- a/plug-ins/common/file-xwd.c +++ b/plug-ins/common/file-xwd.c @@ -155,130 +155,133 @@ struct _XwdClass #define XWD_TYPE (xwd_get_type ()) -#define XWD (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XWD_TYPE, Xwd)) +#define XWD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XWD_TYPE, Xwd)) GType xwd_get_type (void) G_GNUC_CONST; -static GList * xwd_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * xwd_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * xwd_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * xwd_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * xwd_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * xwd_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * xwd_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * xwd_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); -static gboolean save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GError **error); -static PikaImage * create_new_image (GFile *file, - guint width, - guint height, - PikaImageBaseType type, - PikaImageType gdtype, - PikaLayer **layer, - GeglBuffer **buffer); +static PikaImage * load_image (GFile *file, + GError **error); +static gboolean save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GError **error); +static PikaImage * create_new_image (GFile *file, + guint width, + guint height, + PikaImageBaseType type, + PikaImageType gdtype, + PikaLayer **layer, + GeglBuffer **buffer); -static int set_pixelmap (gint ncols, - L_XWDCOLOR *xwdcol, - PIXEL_MAP *pixelmap); -static gboolean get_pixelmap (L_CARD32 pixelval, - PIXEL_MAP *pixelmap, - guchar *red, - guchar *green, - guchar *glue); +static int set_pixelmap (gint ncols, + L_XWDCOLOR *xwdcol, + PIXEL_MAP *pixelmap); +static gboolean get_pixelmap (L_CARD32 pixelval, + PIXEL_MAP *pixelmap, + guchar *red, + guchar *green, + guchar *glue); -static void set_bw_color_table (PikaImage *image); -static void set_color_table (PikaImage *image, - L_XWDFILEHEADER *xwdhdr, - L_XWDCOLOR *xwdcolmap); +static void set_bw_color_table (PikaImage *image); +static void set_color_table (PikaImage *image, + L_XWDFILEHEADER *xwdhdr, + L_XWDCOLOR *xwdcolmap); -static PikaImage * load_xwd_f2_d1_b1 (GFile *file, - FILE *ifp, - L_XWDFILEHEADER *xwdhdr, - L_XWDCOLOR *xwdcolmap, - GError **error); -static PikaImage * load_xwd_f2_d8_b8 (GFile *file, - FILE *ifp, - L_XWDFILEHEADER *xwdhdr, - L_XWDCOLOR *xwdcolmap, - GError **error); -static PikaImage * load_xwd_f2_d16_b16 (GFile *file, - FILE *ifp, - L_XWDFILEHEADER *xwdhdr, - L_XWDCOLOR *xwdcolmap, - GError **error); -static PikaImage * load_xwd_f2_d24_b32 (GFile *file, - FILE *ifp, - L_XWDFILEHEADER *xwdhdr, - L_XWDCOLOR *xwdcolmap, - GError **error); -static PikaImage * load_xwd_f2_d32_b32 (GFile *file, - FILE *ifp, - L_XWDFILEHEADER *xwdhdr, - L_XWDCOLOR *xwdcolmap, - GError **error); -static PikaImage * load_xwd_f1_d24_b1 (GFile *file, - FILE *ifp, - L_XWDFILEHEADER *xwdhdr, - L_XWDCOLOR *xwdcolmap, - GError **error); +static PikaImage * load_xwd_f2_d1_b1 (GFile *file, + FILE *ifp, + L_XWDFILEHEADER *xwdhdr, + L_XWDCOLOR *xwdcolmap, + GError **error); +static PikaImage * load_xwd_f2_d8_b8 (GFile *file, + FILE *ifp, + L_XWDFILEHEADER *xwdhdr, + L_XWDCOLOR *xwdcolmap, + GError **error); +static PikaImage * load_xwd_f2_d16_b16 (GFile *file, + FILE *ifp, + L_XWDFILEHEADER *xwdhdr, + L_XWDCOLOR *xwdcolmap, + GError **error); +static PikaImage * load_xwd_f2_d24_b32 (GFile *file, + FILE *ifp, + L_XWDFILEHEADER *xwdhdr, + L_XWDCOLOR *xwdcolmap, + GError **error); +static PikaImage * load_xwd_f2_d32_b32 (GFile *file, + FILE *ifp, + L_XWDFILEHEADER *xwdhdr, + L_XWDCOLOR *xwdcolmap, + GError **error); +static PikaImage * load_xwd_f1_d24_b1 (GFile *file, + FILE *ifp, + L_XWDFILEHEADER *xwdhdr, + L_XWDCOLOR *xwdcolmap, + GError **error); -static L_CARD32 read_card32 (FILE *ifp, - gint *err); -static L_CARD16 read_card16 (FILE *ifp, - gint *err); -static L_CARD8 read_card8 (FILE *ifp, - gint *err); +static L_CARD32 read_card32 (FILE *ifp, + gint *err); +static L_CARD16 read_card16 (FILE *ifp, + gint *err); +static L_CARD8 read_card8 (FILE *ifp, + gint *err); -static gboolean write_card32 (GOutputStream *output, - L_CARD32 c, - GError **error); -static gboolean write_card16 (GOutputStream *output, - L_CARD32 c, - GError **error); -static gboolean write_card8 (GOutputStream *output, - L_CARD32 c, - GError **error); +static gboolean write_card32 (GOutputStream *output, + L_CARD32 c, + GError **error); +static gboolean write_card16 (GOutputStream *output, + L_CARD32 c, + GError **error); +static gboolean write_card8 (GOutputStream *output, + L_CARD32 c, + GError **error); -static void read_xwd_header (FILE *ifp, - L_XWDFILEHEADER *xwdhdr); +static void read_xwd_header (FILE *ifp, + L_XWDFILEHEADER *xwdhdr); -static gboolean write_xwd_header (GOutputStream *output, - L_XWDFILEHEADER *xwdhdr, - GError **error); +static gboolean write_xwd_header (GOutputStream *output, + L_XWDFILEHEADER *xwdhdr, + GError **error); -static void read_xwd_cols (FILE *ifp, - L_XWDFILEHEADER *xwdhdr, - L_XWDCOLOR *xwdcolmap, - GError **error); +static void read_xwd_cols (FILE *ifp, + L_XWDFILEHEADER *xwdhdr, + L_XWDCOLOR *xwdcolmap, + GError **error); -static gboolean write_xwd_cols (GOutputStream *output, - L_XWDFILEHEADER *xwdhdr, - L_XWDCOLOR *colormap, - GError **error); +static gboolean write_xwd_cols (GOutputStream *output, + L_XWDFILEHEADER *xwdhdr, + L_XWDCOLOR *colormap, + GError **error); -static gint save_index (GOutputStream *output, - PikaImage *image, - PikaDrawable *drawable, - gboolean gray, - GError **error); -static gint save_rgb (GOutputStream *output, - PikaImage *image, - PikaDrawable *drawable, - GError **error); +static gint save_index (GOutputStream *output, + PikaImage *image, + PikaDrawable *drawable, + gboolean gray, + GError **error); +static gint save_rgb (GOutputStream *output, + PikaImage *image, + PikaDrawable *drawable, + GError **error); G_DEFINE_TYPE (Xwd, xwd, PIKA_TYPE_PLUG_IN) @@ -351,7 +354,7 @@ xwd_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - xwd_save, NULL, NULL); + FALSE, xwd_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB, GRAY, INDEXED"); @@ -380,11 +383,13 @@ xwd_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -xwd_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +xwd_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -415,12 +420,13 @@ xwd_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); diff --git a/plug-ins/common/film.c b/plug-ins/common/film.c index ef92477..5f15cf3 100644 --- a/plug-ins/common/film.c +++ b/plug-ins/common/film.c @@ -40,36 +40,12 @@ #define PLUG_IN_ROLE "pika-film" /* Maximum number of pictures per film */ -#define MAX_FILM_PICTURES 64 +#define MAX_FILM_PICTURES 1024 #define COLOR_BUTTON_WIDTH 50 #define COLOR_BUTTON_HEIGHT 20 #define FONT_LEN 256 -/* Define how the plug-in works. Values marked (r) are with regard */ -/* to film_height (i.e. it should be a value from 0.0 to 1.0) */ -/* Saved as settings. Must be trivially serializable; no pointers. */ -typedef struct -{ - gint film_height; /* height of the film */ - PikaRGB film_color; /* color of film */ - gdouble picture_height; /* height of picture (r) */ - gdouble picture_space; /* space between pictures (r) */ - gdouble hole_offset; /* distance from hole to edge of film (r) */ - gdouble hole_width; /* width of hole (r) */ - gdouble hole_height; /* height of holes (r) */ - gdouble hole_space; /* distance of holes (r) */ - gdouble number_height; /* height of picture numbering (r) */ - gint number_start; /* number for first picture */ - PikaRGB number_color; /* color of number */ - PikaFont *number_font; /* font family for numbering */ - gchar font_name[FONT_LEN]; /* serializable name of font for numbering */ - gint number_pos[2]; /* flags where to draw numbers (top/bottom) */ - gint keep_height; /* flag if to keep max. image height */ - gint num_images; /* number of images */ - gint32 images[MAX_FILM_PICTURES]; /* list of image IDs */ -} FilmVals; - /* Data to use for the dialog */ typedef struct { @@ -94,7 +70,7 @@ struct _FilmClass #define FILM_TYPE (film_get_type ()) -#define FILM (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FILM_TYPE, Film)) +#define FILM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FILM_TYPE, Film)) GType film_get_type (void) G_GNUC_CONST; @@ -107,7 +83,7 @@ static PikaValueArray * film_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaImage * create_new_image (guint width, @@ -115,26 +91,27 @@ static PikaImage * create_new_image (guint width, PikaImageType gdtype, PikaLayer **layer); -static gchar * compose_image_name (PikaImage *image); +static PikaImage * film (PikaProcedureConfig *config); -static PikaImage * film (void); - -static gboolean check_filmvals (void); +static gboolean check_filmvals (PikaProcedureConfig *config, + GError **error); static void set_pixels (gint numpix, guchar *dst, PikaRGB *color); static guchar * create_hole_rgb (gint width, - gint height); + gint height, + PikaRGB *film_color); static void draw_number (PikaLayer *layer, gint num, gint x, gint y, - gint height); - + gint height, + PikaFont *font); +static gchar * compose_image_name (PikaImage *image); static void add_list_item_callback (GtkWidget *widget, GtkTreeSelection *sel); static void del_list_item_callback (GtkWidget *widget, @@ -143,20 +120,12 @@ static void del_list_item_callback (GtkWidget *widget, static GtkTreeModel * add_image_list (gboolean add_box_flag, GList *images, GtkWidget *hbox); +static void create_selection_tab (PikaProcedureDialog *dialog, + PikaImage *image); +static gboolean film_dialog (PikaImage *image, + PikaProcedure *procedure, + PikaProcedureConfig *config); -static gboolean film_dialog (PikaImage *image); -static void film_reset_callback (GtkWidget *widget, - gpointer data); -static void film_font_select_callback (PikaFontSelectButton *button, - PikaResource *font, - gboolean closing, - gpointer data); - -static void film_scale_entry_update_double (PikaLabelSpin *entry, - gdouble *value); - -static void film_load_settings (void); -static void film_save_settings (void); G_DEFINE_TYPE (Film, film, PIKA_TYPE_PLUG_IN) @@ -164,38 +133,6 @@ PIKA_MAIN (FILM_TYPE) DEFINE_STD_SET_I18N -static gdouble advanced_defaults[] = -{ - 0.695, /* Picture height */ - 0.040, /* Picture spacing */ - 0.058, /* Hole offset to edge of film */ - 0.052, /* Hole width */ - 0.081, /* Hole height */ - 0.081, /* Hole distance */ - 0.052 /* Image number height */ -}; - -static FilmVals filmvals = -{ - 256, /* Height of film */ - { 0.0, 0.0, 0.0, 1.0 }, /* Color of film */ - 0.695, /* Picture height */ - 0.040, /* Picture spacing */ - 0.058, /* Hole offset to edge of film */ - 0.052, /* Hole width */ - 0.081, /* Hole height */ - 0.081, /* Hole distance */ - 0.052, /* Image number height */ - 1, /* Start index of numbering */ - { 0.93, 0.61, 0.0, 1.0 }, /* Color of number */ - NULL, /* !!! No default, must be set later. */ - "Monospace", /* Case sensitive, must be name of an installed font. */ - { TRUE, TRUE }, /* Numbering on top and bottom */ - 0, /* Don't keep max. image height */ - 0, /* Number of images */ - { 0 } /* Input image list */ -}; - static FilmInterface filmint = { { NULL }, /* advanced adjustments */ @@ -229,6 +166,8 @@ film_create_procedure (PikaPlugIn *plug_in, const gchar *name) { PikaProcedure *procedure = NULL; + const PikaRGB default_film_color = { 0.0, 0.0, 0.0, 1.0 }; + const PikaRGB default_number_color = { 0.93, 0.61, 0.0, 1.0 }; if (! strcmp (name, PLUG_IN_PROC)) { @@ -256,58 +195,108 @@ film_create_procedure (PikaPlugIn *plug_in, "1997"); PIKA_PROC_ARG_INT (procedure, "film-height", - "Film height", + "Film _height", "Height of film (0: fit to images)", 0, PIKA_MAX_IMAGE_SIZE, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_RGB (procedure, "film-color", - "Film color", + "_Film color", "Color of the film", - TRUE, NULL, + TRUE, &default_film_color, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "number-start", - "Number start", + "Start _index", "Start index for numbering", - G_MININT, G_MAXINT, 1, + 0, G_MAXINT, 1, G_PARAM_READWRITE); PIKA_PROC_ARG_FONT (procedure, "number-font", - "Number font", + "Number _font", "Font for drawing numbers", G_PARAM_READWRITE); PIKA_PROC_ARG_RGB (procedure, "number-color", - "Number color", + "_Number color", "Color for numbers", - TRUE, NULL, + TRUE, &default_number_color, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "at-top", - "At top", + "At _top", "Draw numbers at top", TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "at-bottom", - "At bottom", + "At _bottom", "Draw numbers at bottom", TRUE, G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "num-images", - "Num images", - "Number of images to be used for film", - 1, MAX_FILM_PICTURES, 1, - G_PARAM_READWRITE); + /* Arguments ignored in interactive mode. */ PIKA_PROC_ARG_OBJECT_ARRAY (procedure, "images", "Images", - "num-images images to be used for film", + "Images to be used for film", PIKA_TYPE_IMAGE, G_PARAM_READWRITE); + /* The more specific settings. */ + + PIKA_PROC_ARG_DOUBLE (procedure, "picture-height", + _("Image _height"), + _("As fraction of the strip height"), + 0.0, 1.0, 0.695, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "picture-spacing", + _("Image s_pacing"), + _("The spacing between 2 images, as fraction of the strip height"), + 0.0, 1.0, 0.040, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "hole-offset", + _("Hole offse_t"), + _("The offset from the edge of film, as fraction of the strip height"), + 0.0, 1.0, 0.058, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "hole-width", + _("Hole _width"), + _("The width of the holes, as fraction of the strip height"), + 0.0, 1.0, 0.052, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "hole-height", + _("Hole hei_ght"), + _("The height of the holes, as fraction of the strip height"), + 0.0, 1.0, 0.081, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "hole-spacing", + _("Hole _distance"), + _("The distance between holes, as fraction of the strip height"), + 0.0, 1.0, 0.081, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "number-height", + _("_Number height"), + _("The height of drawn numbers, as fraction of the strip height"), + 0.0, 1.0, 0.052, + G_PARAM_READWRITE); + + /* Auxiliary argument mostly for the GUI. */ + + PIKA_PROC_AUX_ARG_BOOLEAN (procedure, "keep-height", + _("F_it height to images"), + "Keep maximum image height", + TRUE, + G_PARAM_READWRITE); + + /* Returned image. */ + PIKA_PROC_VAL_IMAGE (procedure, "new-image", "New image", "Output image", @@ -324,61 +313,53 @@ film_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals = NULL; PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaImage **images; - gint i; + GError *error = NULL; + gint film_height; gegl_init (NULL, NULL); switch (run_mode) { case PIKA_RUN_INTERACTIVE: - film_load_settings(); - - if (! film_dialog (image)) { - return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, - NULL); + GParamSpec *spec; + gint default_value; + + /* In interactive mode, not only do we always use the current image's + * height as initial value, but also as factory default. Any other + * value makes no sense as a "default". + */ + default_value = pika_image_get_height (image); + spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "film-height"); + G_PARAM_SPEC_INT (spec)->default_value = default_value; + g_object_set (config, "film-height", default_value, NULL); + + if (! film_dialog (image, procedure, config)) + return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, + NULL); } break; case PIKA_RUN_NONINTERACTIVE: - filmvals.film_height = PIKA_VALUES_GET_INT (args, 0); - if (filmvals.film_height <= 0) - { - filmvals.keep_height = TRUE; - filmvals.film_height = 128; /* arbitrary */ - } - else - { - filmvals.keep_height = FALSE; - } - PIKA_VALUES_GET_RGB (args, 1, &filmvals.film_color); - filmvals.number_start = PIKA_VALUES_GET_INT (args, 2); - filmvals.number_font = PIKA_VALUES_GET_FONT (args, 3); - PIKA_VALUES_GET_RGB (args, 4, &filmvals.number_color); - filmvals.number_pos[0] = PIKA_VALUES_GET_INT (args, 5); - filmvals.number_pos[1] = PIKA_VALUES_GET_INT (args, 6); - filmvals.num_images = PIKA_VALUES_GET_INT (args, 7); - images = PIKA_VALUES_GET_OBJECT_ARRAY (args, 8); - - for (i = 0; i < filmvals.num_images; i++) - filmvals.images[i] = pika_image_get_id (images[i]); + g_object_get (config, "film-height", &film_height, NULL); + g_object_set (config, + "keep-height", (film_height == 0), + NULL); break; case PIKA_RUN_WITH_LAST_VALS: - film_load_settings(); break; default: break; } - if (! check_filmvals ()) + if (! check_filmvals (config, &error)) status = PIKA_PDB_CALLING_ERROR; if (status == PIKA_PDB_SUCCESS) @@ -387,7 +368,7 @@ film_run (PikaProcedure *procedure, pika_progress_init (_("Composing images")); - image = film (); + image = film (config); if (! image) { @@ -406,102 +387,127 @@ film_run (PikaProcedure *procedure, if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_display_new (image); } - - if (run_mode == PIKA_RUN_INTERACTIVE) - film_save_settings(); } if (! return_vals) - return_vals = pika_procedure_new_return_values (procedure, status, NULL); + return_vals = pika_procedure_new_return_values (procedure, status, error); return return_vals; } /* Compose a roll film image from several images */ static PikaImage * -film (void) +film (PikaProcedureConfig *config) { - gint width, height; - guchar *hole; - gint film_height, film_width; - gint picture_width, picture_height; - gint picture_space, picture_x0, picture_y0; - gint hole_offset, hole_width, hole_height, hole_space, hole_x; - gint number_height, num_images, num_pictures; - gint picture_count; - gdouble f; - PikaImage *image_dst; - PikaImage *image_tmp; - PikaLayer *layer_src; - PikaLayer *layer_dst; - PikaLayer *new_layer; - PikaLayer *floating_sel; + PikaObjectArray *images; + gint width, height; + guchar *hole; + gint film_height; + gint film_width; + gint picture_width; + gdouble picture_height; + gdouble picture_space; + gint picture_x0; + gint picture_y0; + gdouble hole_offset; + gdouble hole_width; + gdouble hole_height; + gdouble hole_space; + gint hole_x; + gdouble number_height; + gint num_pictures; + gint number_start; + gboolean at_top; + gboolean at_bottom; + gint picture_count; + PikaRGB *number_color; + PikaRGB *film_color; + gboolean keep_height; + gdouble f; + PikaImage *image_dst; + PikaImage *image_tmp; + PikaLayer *layer_src; + PikaLayer *layer_dst; + PikaLayer *new_layer; + PikaLayer *floating_sel; - GList *images_src = NULL; - GList *layers = NULL; - GList *iter; - GList *iter2; - gint i; + PikaFont *number_font; + GList *layers = NULL; + GList *iter2; + gint i; - num_images = filmvals.num_images; + g_object_get (config, + "images", &images, + "film-height", &film_height, + "keep-height", &keep_height, + "number-color", &number_color, + "number-font", &number_font, + "film-color", &film_color, + "picture-height", &picture_height, + "picture-spacing", &picture_space, + "number-height", &number_height, + "hole-offset", &hole_offset, + "hole-width", &hole_width, + "hole-height", &hole_height, + "hole-spacing", &hole_space, + "number-start", &number_start, + "at-top", &at_top, + "at-bottom", &at_bottom, + NULL); - if (num_images <= 0) + if (images->length <= 0) return NULL; - for (i = 0; i < filmvals.num_images; i++) - { - images_src = g_list_append (images_src, - pika_image_get_by_id (filmvals.images[i])); - } - pika_context_push (); - pika_context_set_foreground (&filmvals.number_color); - pika_context_set_background (&filmvals.film_color); + pika_context_set_foreground (number_color); + pika_context_set_background (film_color); - if (filmvals.keep_height) /* Search maximum picture height */ + if (keep_height) /* Search maximum picture height */ { - picture_height = 0; - for (iter = images_src; iter; iter = iter->next) + gdouble max_height = 0; + + for (i = 0; i < images->length; i++) { - height = pika_image_get_height (iter->data); - if (height > picture_height) picture_height = height; + PikaImage *image = PIKA_IMAGE (images->data[i]); + + height = pika_image_get_height (image); + if ((gdouble) height > max_height) + max_height = (gdouble) height; } - film_height = (int)(picture_height / filmvals.picture_height + 0.5); - filmvals.film_height = film_height; - } - else - { - film_height = filmvals.film_height; - picture_height = (int)(film_height * filmvals.picture_height + 0.5); + film_height = (int) (max_height / picture_height + 0.5); } - picture_space = (int)(film_height * filmvals.picture_space + 0.5); - picture_y0 = (film_height - picture_height)/2; + picture_height = film_height * picture_height + 0.5; - number_height = film_height * filmvals.number_height; + picture_space = (gdouble) film_height * picture_space + 0.5; + picture_y0 = (film_height - picture_height) / 2; + + number_height = film_height * number_height; /* Calculate total film width */ film_width = 0; num_pictures = 0; - for (iter = images_src; iter; iter = g_list_next (iter)) + for (i = 0; i < images->length; i++) { - layers = pika_image_list_layers (iter->data); + PikaImage *image = PIKA_IMAGE (images->data[i]); + + layers = pika_image_list_layers (image); /* Get scaled image size */ - width = pika_image_get_width (iter->data); - height = pika_image_get_height (iter->data); - f = ((double)picture_height) / (double)height; - picture_width = width * f; + width = pika_image_get_width (image); + height = pika_image_get_height (image); + f = picture_height / (gdouble) height; + picture_width = (gint) width * f; for (iter2 = layers; iter2; iter2 = g_list_next (iter2)) { if (pika_layer_is_floating_sel (iter2->data)) continue; - film_width += (picture_space/2); /* Leading space */ + film_width += (gint) (picture_space / 2.0); /* Leading space */ film_width += picture_width; /* Scaled image width */ - film_width += (picture_space/2); /* Trailing space */ + film_width += (gint) (picture_space / 2.0); /* Trailing space */ num_pictures++; } @@ -510,7 +516,7 @@ film (void) #ifdef FILM_DEBUG g_printerr ("film_height = %d, film_width = %d\n", film_height, film_width); - g_printerr ("picture_height = %d, picture_space = %d, picture_y0 = %d\n", + g_printerr ("picture_height = %f, picture_space = %f, picture_y0 = %d\n", picture_height, picture_space, picture_y0); g_printerr ("Number of pictures = %d\n", num_pictures); #endif @@ -522,10 +528,10 @@ film (void) pika_drawable_fill (PIKA_DRAWABLE (layer_dst), PIKA_FILL_BACKGROUND); /* Draw all the holes */ - hole_offset = film_height * filmvals.hole_offset; - hole_width = film_height * filmvals.hole_width; - hole_height = film_height * filmvals.hole_height; - hole_space = film_height * filmvals.hole_space; + hole_offset = film_height * hole_offset; + hole_width = film_height * hole_width; + hole_height = film_height * hole_height; + hole_space = film_height * hole_space; hole_x = hole_space / 2; #ifdef FILM_DEBUG @@ -533,7 +539,7 @@ film (void) hole_x, hole_offset, hole_width, hole_height, hole_space ); #endif - hole = create_hole_rgb (hole_width, hole_height); + hole = create_hole_rgb ((gint) hole_width, (gint) hole_height, film_color); if (hole) { GeglBuffer *buffer = pika_drawable_get_buffer (PIKA_DRAWABLE (layer_dst)); @@ -566,9 +572,11 @@ film (void) /* Compose all images and layers */ picture_x0 = 0; picture_count = 0; - for (iter = images_src; iter; iter = iter->next) + for (i = 0; i < images->length; i++) { - image_tmp = pika_image_duplicate (iter->data); + PikaImage *image = PIKA_IMAGE (images->data[i]); + + image_tmp = pika_image_duplicate (image); width = pika_image_get_width (image_tmp); height = pika_image_get_height (image_tmp); f = ((gdouble) picture_height) / (gdouble) height; @@ -594,20 +602,21 @@ film (void) pika_layer_set_offsets (new_layer, picture_x0, picture_y0); /* Draw picture numbers */ - if ((number_height > 0) && - (filmvals.number_pos[0] || filmvals.number_pos[1])) + if (number_height > 0.0 && (at_top || at_bottom)) { - if (filmvals.number_pos[0]) + if (at_top) draw_number (layer_dst, - filmvals.number_start + picture_count, + number_start + picture_count, picture_x0 + picture_width/2, - (hole_offset-number_height)/2, number_height); - if (filmvals.number_pos[1]) + (hole_offset-number_height)/2, number_height, + number_font); + if (at_bottom) draw_number (layer_dst, - filmvals.number_start + picture_count, + number_start + picture_count, picture_x0 + picture_width/2, film_height - (hole_offset + number_height)/2, - number_height); + number_height, + number_font); } picture_x0 += picture_width + (picture_space/2); @@ -623,8 +632,6 @@ film (void) pika_image_delete (image_tmp); } - g_list_free (images_src); - pika_progress_update (1.0); pika_image_flatten (image_dst); @@ -636,41 +643,70 @@ film (void) pika_context_pop (); + pika_object_array_free (images); + g_free (number_color); + g_free (film_color); + g_clear_object (&number_font); + return image_dst; } -/* Check filmvals. Unreasonable values are reset to a default. */ +/* Unreasonable values are reset to a default. */ /* If this is not possible, FALSE is returned. Otherwise TRUE is returned. */ static gboolean -check_filmvals (void) +check_filmvals (PikaProcedureConfig *config, + GError **error) { - gint i, j; + PikaFont *font = NULL; + PikaObjectArray *images; + gint film_height; + gint i, j; + gboolean success = FALSE; - if (filmvals.film_height < 10) - filmvals.film_height = 10; + g_object_get (config, + "images", &images, + "number-font", &font, + "film-height", &film_height, + NULL); - if (filmvals.number_start < 0) - filmvals.number_start = 0; + if (film_height < 10) + g_object_set (config, "film-height", 10, NULL); - if (filmvals.number_font == NULL) - filmvals.number_font = pika_context_get_font (); - g_assert (PIKA_IS_FONT (filmvals.number_font)); - - for (i = 0, j = 0; i < filmvals.num_images; i++) + if (font == NULL) { - if (pika_image_id_is_valid (filmvals.images[i])) + g_assert (PIKA_IS_FONT (pika_context_get_font ())); + g_object_set (config, "number-font", pika_context_get_font (), NULL); + } + + if (images != NULL) + { + for (i = 0, j = 0; i < images->length; i++) { - filmvals.images[j] = filmvals.images[i]; - j++; + if (pika_image_is_valid (PIKA_IMAGE (images->data[i]))) + { + images->data[j] = images->data[i]; + j++; + } + } + + if (j > 0) + { + images->length = j; + g_object_set (config, + "images", images, + NULL); + success = TRUE; } } - filmvals.num_images = j; + if (images == NULL || images->length == 0) + g_set_error_literal (error, PIKA_PLUG_IN_ERROR, 0, + _("\"Filmstrip\" cannot be run without any input images")); - if (filmvals.num_images < 1) - return FALSE; + pika_object_array_free (images); + g_clear_object (&font); - return TRUE; + return success; } /* Assigns numpix pixels starting at dst with color r,g,b */ @@ -698,12 +734,16 @@ set_pixels (gint numpix, /* Create the RGB-pixels that make up the hole */ static guchar * -create_hole_rgb (gint width, - gint height) +create_hole_rgb (gint width, + gint height, + PikaRGB *film_color) { guchar *hole, *top, *bottom; gint radius, length, k; + if (width <= 0 || height <= 0) + return NULL; + hole = g_new (guchar, width * height * 3); /* Fill a rectangle with white */ @@ -712,17 +752,17 @@ create_hole_rgb (gint width, if (radius > width / 2) radius = width / 2; top = hole; - bottom = hole + (height-1)*width*3; + bottom = hole + (height-1) * width * 3; for (k = radius-1; k > 0; k--) /* Rounding corners */ { length = (int)(radius - sqrt ((gdouble) (radius * radius - k * k)) - 0.5); if (length > 0) { - set_pixels (length, top, &filmvals.film_color); - set_pixels (length, top + (width-length)*3, &filmvals.film_color); - set_pixels (length, bottom, &filmvals.film_color); - set_pixels (length, bottom + (width-length)*3, &filmvals.film_color); + set_pixels (length, top, film_color); + set_pixels (length, top + (width-length)*3, film_color); + set_pixels (length, bottom, film_color); + set_pixels (length, bottom + (width-length)*3, film_color); } top += width*3; bottom -= width*3; @@ -737,18 +777,14 @@ draw_number (PikaLayer *layer, gint num, gint x, gint y, - gint height) + gint height, + PikaFont *font) { - gchar buf[32]; - gint k, delta, max_delta; - PikaImage *image; - PikaLayer *text_layer; - gint text_width, text_height, text_ascent, descent; - - PikaFont *font = filmvals.number_font; - gchar *fontname; - - fontname = pika_resource_get_name (PIKA_RESOURCE (font)); + gchar buf[32]; + gint k, delta, max_delta; + PikaImage *image; + PikaLayer *text_layer; + gint text_width, text_height, text_ascent, descent; g_snprintf (buf, sizeof (buf), "%d", num); @@ -769,11 +805,9 @@ draw_number (PikaLayer *layer, if ((k & 1) == 0) delta = -delta; - success = pika_text_get_extents_fontname (buf, - height + delta, PIKA_PIXELS, - fontname, - &text_width, &text_height, - &text_ascent, &descent); + success = pika_text_get_extents_font (buf, height + delta, font, + &text_width, &text_height, + &text_ascent, &descent); if (success) { @@ -782,11 +816,10 @@ draw_number (PikaLayer *layer, } } - text_layer = pika_text_fontname (image, PIKA_DRAWABLE (layer), - x, y + descent / 2, - buf, 1, FALSE, - height, PIKA_PIXELS, - fontname); + text_layer = pika_text_font (image, PIKA_DRAWABLE (layer), + x, y - descent / 2, + buf, 1, FALSE, + height, font); if (! text_layer) g_message ("draw_number: Error in drawing text\n"); @@ -1004,187 +1037,63 @@ add_image_list (gboolean add_box_flag, } static void -create_selection_tab (GtkWidget *notebook, - PikaImage *image) +create_selection_tab (PikaProcedureDialog *dialog, + PikaImage *image) { - PikaColorConfig *config; - GtkSizeGroup *group; - GtkWidget *vbox; - GtkWidget *vbox2; - GtkWidget *hbox; - GtkWidget *grid; - GtkWidget *label; - GtkWidget *frame; - GtkWidget *toggle; - GtkWidget *spinbutton; - GtkAdjustment *adj; - GtkWidget *button; - GtkWidget *font_button; - GList *image_list; - gint j; + GtkWidget *paned; + GtkWidget *frame; + GtkWidget *hbox; + GList *image_list; - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), hbox, - gtk_label_new_with_mnemonic (_("Selection"))); - gtk_widget_show (hbox); + pika_procedure_dialog_fill_frame (dialog, + "fit-height-frame", + "keep-height", TRUE, + "film-height"); + pika_procedure_dialog_fill_box (dialog, + "filmstrip-box", + "fit-height-frame", + "film-color", + NULL); + pika_procedure_dialog_get_label (dialog, "filmstrip-title", _("Filmstrip"), FALSE, FALSE); + pika_procedure_dialog_fill_frame (dialog, + "filmstrip-frame", + "filmstrip-title", FALSE, + "filmstrip-box"); - vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0); - gtk_widget_set_hexpand (vbox2, FALSE); - gtk_widget_show (vbox2); + pika_procedure_dialog_fill_box (dialog, + "numbering-box", + "number-start", + "number-font", + "number-color", + "at-top", + "at-bottom", + NULL); + pika_procedure_dialog_get_label (dialog, "numbering-title", _("Numbering"), FALSE, FALSE); + pika_procedure_dialog_fill_frame (dialog, + "numbering-frame", + "numbering-title", FALSE, + "numbering-box"); - group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - - /* Film height/color */ - frame = pika_frame_new (_("Filmstrip")); - gtk_box_pack_start (GTK_BOX (vbox2), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); - - /* Keep maximum image height */ - toggle = gtk_check_button_new_with_mnemonic (_("_Fit height to images")); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &filmvals.keep_height); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - /* Film height */ - adj = gtk_adjustment_new (filmvals.film_height, 10, - PIKA_MAX_IMAGE_SIZE, 1, 10, 0); - spinbutton = pika_spin_button_new (adj, 1, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("_Height:"), 0.0, 0.5, - spinbutton, 1); - gtk_size_group_add_widget (group, label); - g_object_unref (group); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (pika_int_adjustment_update), - &filmvals.film_height); - - g_object_bind_property (toggle, "active", - spinbutton, "sensitive", - G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN); - g_object_bind_property (toggle, "active", - /* FIXME: eeeeeek */ - g_list_nth_data (gtk_container_get_children (GTK_CONTAINER (grid)), 1), "sensitive", - G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN); - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - filmvals.keep_height); - - /* Film color */ - button = pika_color_button_new (_("Select Film Color"), - COLOR_BUTTON_WIDTH, COLOR_BUTTON_HEIGHT, - &filmvals.film_color, - PIKA_COLOR_AREA_FLAT); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("Co_lor:"), 0.0, 0.5, - button, 1); - gtk_size_group_add_widget (group, label); - - g_signal_connect (button, "color-changed", - G_CALLBACK (pika_color_button_get_color), - &filmvals.film_color); - - config = pika_get_color_configuration (); - pika_color_button_set_color_config (PIKA_COLOR_BUTTON (button), config); - - /* Film numbering: Startindex/Font/color */ - frame = pika_frame_new (_("Numbering")); - gtk_box_pack_start (GTK_BOX (vbox2), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - /* Startindex */ - adj = gtk_adjustment_new (filmvals.number_start, 0, - PIKA_MAX_IMAGE_SIZE, 1, 10, 0); - spinbutton = pika_spin_button_new (adj, 1, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("Start _index:"), 0.0, 0.5, - spinbutton, 1); - gtk_size_group_add_widget (group, label); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (pika_int_adjustment_update), - &filmvals.number_start); - - /* Fontfamily for numbering */ - /* Require filmvals.number_font is NULL or a valid PikaFont. */ - font_button = pika_font_select_button_new (NULL, PIKA_RESOURCE (filmvals.number_font)); - g_signal_connect (font_button, "resource-set", - G_CALLBACK (film_font_select_callback), &filmvals); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("_Font:"), 0.0, 0.5, - font_button, 1); - gtk_size_group_add_widget (group, label); - - /* Numbering color */ - button = pika_color_button_new (_("Select Number Color"), - COLOR_BUTTON_WIDTH, COLOR_BUTTON_HEIGHT, - &filmvals.number_color, - PIKA_COLOR_AREA_FLAT); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 2, - _("Co_lor:"), 0.0, 0.5, - button, 1); - gtk_size_group_add_widget (group, label); - - g_signal_connect (button, "color-changed", - G_CALLBACK (pika_color_button_get_color), - &filmvals.number_color); - - pika_color_button_set_color_config (PIKA_COLOR_BUTTON (button), config); - g_object_unref (config); - - for (j = 0; j < 2; j++) - { - toggle = gtk_check_button_new_with_mnemonic (j ? _("At _bottom") - : _("At _top")); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - filmvals.number_pos[j]); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &filmvals.number_pos[j]); - } + pika_procedure_dialog_fill_box (dialog, + "selection-box", + "filmstrip-frame", + "numbering-frame", + NULL); + paned = pika_procedure_dialog_fill_paned (dialog, + "selection-paned", + GTK_ORIENTATION_HORIZONTAL, + "selection-box", NULL); /*** The right frame keeps the image selection ***/ frame = pika_frame_new (_("Image Selection")); gtk_widget_set_hexpand (frame, TRUE); - gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); gtk_widget_show (frame); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE); gtk_container_add (GTK_CONTAINER (frame), hbox); + gtk_widget_show (hbox); /* Get a list of all image names */ image_list = pika_list_images (); @@ -1196,169 +1105,63 @@ create_selection_tab (GtkWidget *notebook, filmint.image_list_film = add_image_list (FALSE, image_list, hbox); g_list_free (image_list); - gtk_widget_show (hbox); -} - -static void -create_advanced_tab (GtkWidget *notebook) -{ - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *grid; - GtkWidget *frame; - GtkWidget *scale; - GtkWidget *button; - gint row; - - frame = pika_frame_new (_("All Values are Fractions of the Strip Height")); - gtk_container_set_border_width (GTK_CONTAINER (frame), 12); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, - gtk_label_new_with_mnemonic (_("Ad_vanced"))); - gtk_widget_show (frame); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - row = 0; - - filmint.scales[0] = scale = - pika_scale_entry_new (_("Image _height:"), filmvals.picture_height, 0.0, 1.0, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (film_scale_entry_update_double), - &filmvals.picture_height); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - filmint.scales[1] = scale = - pika_scale_entry_new (_("Image spac_ing:"), filmvals.picture_space, 0.0, 1.0, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (film_scale_entry_update_double), - &filmvals.picture_space); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_set_margin_bottom (pika_labeled_get_label (PIKA_LABELED (scale)), 6); - gtk_widget_set_margin_bottom (pika_scale_entry_get_range (PIKA_SCALE_ENTRY (scale)), 6); - gtk_widget_set_margin_bottom (pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)), 6); - gtk_widget_show (scale); - - filmint.scales[2] = scale = - pika_scale_entry_new (_("_Hole offset:"), filmvals.hole_offset, 0.0, 1.0, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (film_scale_entry_update_double), - &filmvals.hole_offset); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - filmint.scales[3] = scale = - pika_scale_entry_new (_("Ho_le width:"), filmvals.hole_width, 0.0, 1.0, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (film_scale_entry_update_double), - &filmvals.hole_width); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - filmint.scales[4] = scale = - pika_scale_entry_new (_("Hol_e height:"), filmvals.hole_height, 0.0, 1.0, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (film_scale_entry_update_double), - &filmvals.hole_height); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - filmint.scales[5] = scale = - pika_scale_entry_new (_("Hole sp_acing:"), filmvals.hole_space, 0.0, 1.0, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (film_scale_entry_update_double), - &filmvals.hole_space); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_set_margin_bottom (pika_labeled_get_label (PIKA_LABELED (scale)), 6); - gtk_widget_set_margin_bottom (pika_scale_entry_get_range (PIKA_SCALE_ENTRY (scale)), 6); - gtk_widget_set_margin_bottom (pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)), 6); - gtk_widget_show (scale); - - filmint.scales[6] = scale = - pika_scale_entry_new (_("_Number height:"), filmvals.number_height, 0.0, 1.0, 3); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.001, 0.01); - g_signal_connect (scale, "value-changed", - G_CALLBACK (film_scale_entry_update_double), - &filmvals.number_height); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - button = gtk_button_new_with_mnemonic (_("Re_set")); - gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - g_signal_connect (button, "clicked", - G_CALLBACK (film_reset_callback), - NULL); + gtk_paned_pack2 (GTK_PANED (paned), frame, TRUE, FALSE); } static gboolean -film_dialog (PikaImage *image) +film_dialog (PikaImage *image, + PikaProcedure *procedure, + PikaProcedureConfig *config) { - GtkWidget *dlg; - GtkWidget *main_vbox; - GtkWidget *notebook; + GtkWidget *dialog; gboolean run; pika_ui_init (PLUG_IN_BINARY); - dlg = pika_dialog_new (_("Filmstrip"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, + dialog = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Filmstrip")); - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, + create_selection_tab (PIKA_PROCEDURE_DIALOG (dialog), image); - NULL); + /* Create Advanced tab. */ + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "advanced-box", + "picture-height", + "picture-spacing", + "hole-offset", + "hole-width", + "hole-height", + "hole-spacing", + "number-height", + NULL); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "advanced-frame-label", + _("All Values are Fractions of the Strip Height"), FALSE, FALSE); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "advanced-frame", + "advanced-frame-label", FALSE, + "advanced-box"); - pika_dialog_set_alternative_button_order (GTK_DIALOG (dlg), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - pika_window_set_transient (GTK_WINDOW (dlg)); - - main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))), - main_vbox, TRUE, TRUE, 0); - gtk_widget_show (main_vbox); - - notebook = gtk_notebook_new (); - gtk_box_pack_start (GTK_BOX (main_vbox), notebook, TRUE, TRUE, 0); - - create_selection_tab (notebook, image); - create_advanced_tab (notebook); - - gtk_widget_show (notebook); - - gtk_widget_show (dlg); - - run = (pika_dialog_run (PIKA_DIALOG (dlg)) == GTK_RESPONSE_OK); + /* Fill the notebook. */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "advanced-tab", _("Ad_vanced"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "selection-tab", _("_Selection"), FALSE, TRUE); + pika_procedure_dialog_fill_notebook (PIKA_PROCEDURE_DIALOG (dialog), + "main-notebook", + "selection-tab", + "selection-paned", + "advanced-tab", + "advanced-frame", + NULL); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), "main-notebook", NULL); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); if (run) { - gint num_images = 0; - gboolean iter_valid; - GtkTreeIter iter; + PikaObjectArray *images_array; + PikaImage *images[MAX_FILM_PICTURES]; + gint num_images = 0; + gboolean iter_valid; + GtkTreeIter iter; for (iter_valid = gtk_tree_model_get_iter_first (filmint.image_list_film, &iter); @@ -1374,73 +1177,21 @@ film_dialog (PikaImage *image) if ((image_id >= 0) && (num_images < MAX_FILM_PICTURES)) { - filmvals.images[num_images] = image_id; + images[num_images] = pika_image_get_by_id (image_id); num_images++; } } - filmvals.num_images = num_images; + images_array = pika_object_array_new (PIKA_TYPE_IMAGE, (GObject **) images, num_images, TRUE); + + g_object_set (config, + "images", images_array, + NULL); + + pika_object_array_free (images_array); } - gtk_widget_destroy (dlg); + gtk_widget_destroy (dialog); return run; } - -static void -film_reset_callback (GtkWidget *widget, - gpointer data) -{ - gint i; - - for (i = 0; i < G_N_ELEMENTS (advanced_defaults) ; i++) - pika_label_spin_set_value (PIKA_LABEL_SPIN (filmint.scales[i]), - advanced_defaults[i]); -} - -static void -film_font_select_callback (PikaFontSelectButton *button, - PikaResource *resource, - gboolean closing, - gpointer data) -{ - FilmVals *vals = (FilmVals *) data; - - vals->number_font = PIKA_FONT (resource); -} - -static void -film_scale_entry_update_double (PikaLabelSpin *entry, - gdouble *value) -{ - *value = pika_label_spin_get_value (entry); -} - -/* FIXME: use PikaProcedureConfig - * - * Now using the old method: get_data. - * And chunking the settings into global struct filmvals instead of properties. - */ -static void -film_load_settings (void) -{ - (void) pika_get_data (PLUG_IN_PROC, &filmvals); - /* When no data, returns false and filmvals is as statically initialized. */ - - /* The PikaFont pointer was unserialized but garbage. - * Restore pointer from the name which was also serialized. - * A hack that goes away when PikaProcedureConfig is used. - */ - filmvals.number_font = pika_font_get_by_name (filmvals.font_name); -} - -static void -film_save_settings (void) -{ - /* Copy font name from font, i.e. serialize string not pointer. */ - g_strlcpy (filmvals.font_name, - pika_resource_get_name (PIKA_RESOURCE (filmvals.number_font)), - FONT_LEN); - - pika_set_data (PLUG_IN_PROC, &filmvals, sizeof (FilmVals)); -} diff --git a/plug-ins/common/gradient-map.c b/plug-ins/common/gradient-map.c index 4c9dac1..5a99944 100644 --- a/plug-ins/common/gradient-map.c +++ b/plug-ins/common/gradient-map.c @@ -59,7 +59,7 @@ struct _MapClass #define MAP_TYPE (map_get_type ()) -#define MAP (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAP_TYPE, Map)) +#define MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAP_TYPE, Map)) GType map_get_type (void) G_GNUC_CONST; @@ -72,7 +72,7 @@ static PikaValueArray * map_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void map (GeglBuffer *buffer, @@ -197,13 +197,13 @@ map_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -map_run (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - const PikaValueArray *args, - gpointer run_data) +map_run (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + PikaProcedureConfig *config, + gpointer run_data) { MapMode mode = GPOINTER_TO_INT (run_data); GeglBuffer *shadow_buffer; diff --git a/plug-ins/common/grid.c b/plug-ins/common/grid.c index c0caa93..ba0cbbe 100644 --- a/plug-ins/common/grid.c +++ b/plug-ins/common/grid.c @@ -57,29 +57,19 @@ #define COLOR_BUTTON_WIDTH 55 -typedef struct -{ - gint hwidth; - gint hspace; - gint hoffset; - PikaRGB hcolor; - gint vwidth; - gint vspace; - gint voffset; - PikaRGB vcolor; - gint iwidth; - gint ispace; - gint ioffset; - PikaRGB icolor; -} Config; - - typedef struct _Grid Grid; typedef struct _GridClass GridClass; struct _Grid { - PikaPlugIn parent_instance; + PikaPlugIn parent_instance; + + PikaDrawable *drawable; + PikaProcedureConfig *config; + GtkWidget *hcolor_button; + GtkWidget *vcolor_button; + GtkWidget *icolor_button; + GtkWidget *color_chain; }; struct _GridClass @@ -89,7 +79,7 @@ struct _GridClass #define GRID_TYPE (grid_get_type ()) -#define GRID (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GRID_TYPE, Grid)) +#define GRID(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GRID_TYPE, Grid)) GType grid_get_type (void) G_GNUC_CONST; @@ -102,17 +92,20 @@ static PikaValueArray * grid_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static guchar best_cmap_match (const guchar *cmap, gint ncolors, const PikaRGB *color); -static void grid (PikaImage *image, +static void render_grid (PikaImage *image, PikaDrawable *drawable, + PikaProcedureConfig *config, PikaPreview *preview); static gint dialog (PikaImage *image, - PikaDrawable *drawable); + PikaDrawable *drawable, + PikaProcedure *procedure, + PikaProcedureConfig *config); G_DEFINE_TYPE (Grid, grid, PIKA_TYPE_PLUG_IN) @@ -124,15 +117,6 @@ DEFINE_STD_SET_I18N static gint sx1, sy1, sx2, sy2; static GtkWidget *main_dialog = NULL; -static GtkWidget *hcolor_button = NULL; -static GtkWidget *vcolor_button = NULL; - -static Config grid_cfg = -{ - 1, 16, 8, { 0.0, 0.0, 0.0, 1.0 }, /* horizontal */ - 1, 16, 8, { 0.0, 0.0, 0.0, 1.0 }, /* vertical */ - 0, 2, 6, { 0.0, 0.0, 0.0, 1.0 }, /* intersection */ -}; static void @@ -208,6 +192,11 @@ grid_create_procedure (PikaPlugIn *plug_in, 0, PIKA_MAX_IMAGE_SIZE, 8, G_PARAM_READWRITE); + /* TODO: for "hcolor", "icolor" and "vcolor", the original code would use + * the foreground color as default. It would be interesting if + * PIKA_PROC_ARG_RGB() had a way to specify the foreground or background + * colors as default (instead of a hardcoded color). + */ PIKA_PROC_ARG_RGB (procedure, "hcolor", "H color", "Horizontal color", @@ -272,7 +261,7 @@ grid_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; @@ -296,51 +285,18 @@ grid_run (PikaProcedure *procedure, drawable = drawables[0]; } - if (run_mode == PIKA_RUN_NONINTERACTIVE) - { - grid_cfg.hwidth = PIKA_VALUES_GET_INT (args, 0); - grid_cfg.hspace = PIKA_VALUES_GET_INT (args, 1); - grid_cfg.hoffset = PIKA_VALUES_GET_INT (args, 2); - PIKA_VALUES_GET_RGB (args, 3, &grid_cfg.hcolor); - - grid_cfg.vwidth = PIKA_VALUES_GET_INT (args, 4); - grid_cfg.vspace = PIKA_VALUES_GET_INT (args, 5); - grid_cfg.voffset = PIKA_VALUES_GET_INT (args, 6); - PIKA_VALUES_GET_RGB (args, 7, &grid_cfg.vcolor); - - grid_cfg.iwidth = PIKA_VALUES_GET_INT (args, 8); - grid_cfg.ispace = PIKA_VALUES_GET_INT (args, 9); - grid_cfg.ioffset = PIKA_VALUES_GET_INT (args, 10); - PIKA_VALUES_GET_RGB (args, 11, &grid_cfg.icolor); - } - else - { - pika_context_get_foreground (&grid_cfg.hcolor); - grid_cfg.vcolor = grid_cfg.icolor = grid_cfg.hcolor; - - pika_get_data (PLUG_IN_PROC, &grid_cfg); - } - - if (run_mode == PIKA_RUN_INTERACTIVE) - { - if (! dialog (image, drawable)) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - } + if (run_mode == PIKA_RUN_INTERACTIVE && ! dialog (image, drawable, procedure, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); pika_progress_init (_("Drawing grid")); - grid (image, drawable, NULL); + render_grid (image, drawable, config, NULL); if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &grid_cfg, sizeof (grid_cfg)); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } @@ -413,9 +369,10 @@ pix_composite (guchar *p1, } static void -grid (PikaImage *image, - PikaDrawable *drawable, - PikaPreview *preview) +render_grid (PikaImage *image, + PikaDrawable *drawable, + PikaProcedureConfig *config, + PikaPreview *preview) { GeglBuffer *src_buffer = NULL; GeglBuffer *dest_buffer = NULL; @@ -434,11 +391,39 @@ grid (PikaImage *image, guchar *cmap; gint ncolors; - pika_rgba_get_uchar (&grid_cfg.hcolor, + gint hwidth; + gint hspace; + gint hoffset; + PikaRGB *hcolor_rgb; + gint vwidth; + gint vspace; + gint voffset; + PikaRGB *vcolor_rgb; + gint iwidth; + gint ispace; + gint ioffset; + PikaRGB *icolor_rgb; + + g_object_get (config, + "hwidth", &hwidth, + "hspace", &hspace, + "hoffset", &hoffset, + "hcolor", &hcolor_rgb, + "vwidth", &vwidth, + "vspace", &vspace, + "voffset", &voffset, + "vcolor", &vcolor_rgb, + "iwidth", &iwidth, + "ispace", &ispace, + "ioffset", &ioffset, + "icolor", &icolor_rgb, + NULL); + + pika_rgba_get_uchar (hcolor_rgb, hcolor, hcolor + 1, hcolor + 2, hcolor + 3); - pika_rgba_get_uchar (&grid_cfg.vcolor, + pika_rgba_get_uchar (vcolor_rgb, vcolor, vcolor + 1, vcolor + 2, vcolor + 3); - pika_rgba_get_uchar (&grid_cfg.icolor, + pika_rgba_get_uchar (icolor_rgb, icolor, icolor + 1, icolor + 2, icolor + 3); alpha = pika_drawable_has_alpha (drawable); @@ -455,9 +440,9 @@ grid (PikaImage *image, break; case PIKA_GRAY: - hcolor[0] = pika_rgb_luminance_uchar (&grid_cfg.hcolor); - vcolor[0] = pika_rgb_luminance_uchar (&grid_cfg.vcolor); - icolor[0] = pika_rgb_luminance_uchar (&grid_cfg.icolor); + hcolor[0] = pika_rgb_luminance_uchar (hcolor_rgb); + vcolor[0] = pika_rgb_luminance_uchar (vcolor_rgb); + icolor[0] = pika_rgb_luminance_uchar (icolor_rgb); blend = TRUE; if (alpha) @@ -469,9 +454,9 @@ grid (PikaImage *image, case PIKA_INDEXED: cmap = pika_image_get_colormap (image, NULL, &ncolors); - hcolor[0] = best_cmap_match (cmap, ncolors, &grid_cfg.hcolor); - vcolor[0] = best_cmap_match (cmap, ncolors, &grid_cfg.vcolor); - icolor[0] = best_cmap_match (cmap, ncolors, &grid_cfg.icolor); + hcolor[0] = best_cmap_match (cmap, ncolors, hcolor_rgb); + vcolor[0] = best_cmap_match (cmap, ncolors, vcolor_rgb); + icolor[0] = best_cmap_match (cmap, ncolors, icolor_rgb); g_free (cmap); blend = FALSE; @@ -520,12 +505,11 @@ grid (PikaImage *image, format, dest, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); - y_offset = y - grid_cfg.hoffset; + y_offset = y - hoffset; while (y_offset < 0) - y_offset += grid_cfg.hspace; + y_offset += hspace; - if ((y_offset + - (grid_cfg.hwidth / 2)) % grid_cfg.hspace < grid_cfg.hwidth) + if ((y_offset + (hwidth / 2)) % hspace < hwidth) { for (x = sx1; x < sx2; x++) { @@ -536,53 +520,50 @@ grid (PikaImage *image, for (x = sx1; x < sx2; x++) { - x_offset = grid_cfg.vspace + x - grid_cfg.voffset; + x_offset = vspace + x - voffset; while (x_offset < 0) - x_offset += grid_cfg.vspace; + x_offset += vspace; - if ((x_offset + - (grid_cfg.vwidth / 2)) % grid_cfg.vspace < grid_cfg.vwidth) + if ((x_offset + (vwidth / 2)) % vspace < vwidth) { pix_composite (&dest[(x-sx1) * bytes], vcolor, bytes, blend, alpha); } - if ((x_offset + - (grid_cfg.iwidth / 2)) % grid_cfg.vspace < grid_cfg.iwidth + if ((x_offset + (iwidth / 2)) % vspace < iwidth && - ((y_offset % grid_cfg.hspace >= grid_cfg.ispace + ((y_offset % hspace >= ispace && - y_offset % grid_cfg.hspace < grid_cfg.ioffset) + y_offset % hspace < ioffset) || - (grid_cfg.hspace - - (y_offset % grid_cfg.hspace) >= grid_cfg.ispace + (hspace - + (y_offset % hspace) >= ispace && - grid_cfg.hspace - - (y_offset % grid_cfg.hspace) < grid_cfg.ioffset))) + hspace - + (y_offset % hspace) < ioffset))) { pix_composite (&dest[(x-sx1) * bytes], icolor, bytes, blend, alpha); } } - if ((y_offset + - (grid_cfg.iwidth / 2)) % grid_cfg.hspace < grid_cfg.iwidth) + if ((y_offset + (iwidth / 2)) % hspace < iwidth) { for (x = sx1; x < sx2; x++) { - x_offset = grid_cfg.vspace + x - grid_cfg.voffset; + x_offset = vspace + x - voffset; while (x_offset < 0) - x_offset += grid_cfg.vspace; + x_offset += vspace; - if ((x_offset % grid_cfg.vspace >= grid_cfg.ispace + if ((x_offset % vspace >= ispace && - x_offset % grid_cfg.vspace < grid_cfg.ioffset) + x_offset % vspace < ioffset) || - (grid_cfg.vspace - - (x_offset % grid_cfg.vspace) >= grid_cfg.ispace + (vspace - + (x_offset % vspace) >= ispace && - grid_cfg.vspace - - (x_offset % grid_cfg.vspace) < grid_cfg.ioffset)) + vspace - + (x_offset % vspace) < ioffset)) { pix_composite (&dest[(x-sx1) * bytes], icolor, bytes, blend, alpha); @@ -636,46 +617,57 @@ grid (PikaImage *image, static void -update_values (void) +update_values (Grid *grid) { GtkWidget *entry; + PikaRGB color; entry = g_object_get_data (G_OBJECT (main_dialog), "width"); - - grid_cfg.hwidth = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 0)); - grid_cfg.vwidth = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 1)); - grid_cfg.iwidth = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 2)); + g_object_set (grid->config, + "hwidth", + (gint) RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 0)), + "vwidth", + (gint) RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 1)), + "iwidth", + (gint) RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 2)), + NULL); entry = g_object_get_data (G_OBJECT (main_dialog), "space"); - - grid_cfg.hspace = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 0)); - grid_cfg.vspace = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 1)); - grid_cfg.ispace = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 2)); + g_object_set (grid->config, + "hspace", + (gint) RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 0)), + "vspace", + (gint) RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 1)), + "ispace", + (gint) RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 2)), + NULL); entry = g_object_get_data (G_OBJECT (main_dialog), "offset"); + g_object_set (grid->config, + "hoffset", + (gint) RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 0)), + "voffset", + (gint) RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 1)), + "ioffset", + (gint) RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 2)), + NULL); - grid_cfg.hoffset = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 0)); - grid_cfg.voffset = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 1)); - grid_cfg.ioffset = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (entry), 2)); + pika_color_button_get_color (PIKA_COLOR_BUTTON (grid->hcolor_button), &color); + g_object_set (grid->config, "hcolor", &color, NULL); + pika_color_button_get_color (PIKA_COLOR_BUTTON (grid->vcolor_button), &color); + g_object_set (grid->config, "vcolor", &color, NULL); + pika_color_button_get_color (PIKA_COLOR_BUTTON (grid->icolor_button), &color); + g_object_set (grid->config, "icolor", &color, NULL); } static void -update_preview (PikaPreview *preview, - PikaDrawable *drawable) +update_preview (PikaPreview *preview, + Grid *grid) { - update_values (); + update_values (grid); - grid (pika_item_get_image (PIKA_ITEM (drawable)), - drawable, preview); + render_grid (pika_item_get_image (PIKA_ITEM (grid->drawable)), + grid->drawable, grid->config, preview); } static void @@ -714,32 +706,37 @@ static void color_callback (GtkWidget *widget, gpointer data) { - if (pika_chain_button_get_active (PIKA_CHAIN_BUTTON (data))) + Grid *grid = GRID (data); + GtkWidget *chain_button = grid->color_chain; + + if (pika_chain_button_get_active (PIKA_CHAIN_BUTTON (chain_button))) { - PikaRGB color; + PikaRGB color; pika_color_button_get_color (PIKA_COLOR_BUTTON (widget), &color); - if (widget == vcolor_button) - pika_color_button_set_color (PIKA_COLOR_BUTTON (hcolor_button), &color); - else if (widget == hcolor_button) - pika_color_button_set_color (PIKA_COLOR_BUTTON (vcolor_button), &color); + if (widget == grid->vcolor_button) + pika_color_button_set_color (PIKA_COLOR_BUTTON (grid->hcolor_button), &color); + else if (widget == grid->hcolor_button) + pika_color_button_set_color (PIKA_COLOR_BUTTON (grid->vcolor_button), &color); } } static gint -dialog (PikaImage *image, - PikaDrawable *drawable) +dialog (PikaImage *image, + PikaDrawable *drawable, + PikaProcedure *procedure, + PikaProcedureConfig *config) { - PikaColorConfig *config; + Grid *grid; + PikaColorConfig *color_config; GtkWidget *dlg; GtkWidget *main_vbox; GtkWidget *vbox; GtkSizeGroup *group; GtkWidget *label; GtkWidget *preview; - GtkWidget *button; GtkWidget *width; GtkWidget *space; GtkWidget *offset; @@ -751,8 +748,36 @@ dialog (PikaImage *image, gdouble yres; gboolean run; + gint hwidth; + gint hspace; + gint hoffset; + PikaRGB *hcolor; + gint vwidth; + gint vspace; + gint voffset; + PikaRGB *vcolor; + gint iwidth; + gint ispace; + gint ioffset; + PikaRGB *icolor; + g_return_val_if_fail (main_dialog == NULL, FALSE); + g_object_get (config, + "hwidth", &hwidth, + "hspace", &hspace, + "hoffset", &hoffset, + "hcolor", &hcolor, + "vwidth", &vwidth, + "vspace", &vspace, + "voffset", &voffset, + "vcolor", &vcolor, + "iwidth", &iwidth, + "ispace", &ispace, + "ioffset", &ioffset, + "icolor", &icolor, + NULL); + pika_ui_init (PLUG_IN_BINARY); d_width = pika_drawable_get_width (drawable); @@ -788,9 +813,12 @@ dialog (PikaImage *image, gtk_box_pack_start (GTK_BOX (main_vbox), preview, TRUE, TRUE, 0); gtk_widget_show (preview); + grid = GRID (pika_procedure_get_plug_in (procedure)); + grid->drawable = drawable; + grid->config = config; g_signal_connect (preview, "invalidated", G_CALLBACK (update_preview), - drawable); + grid); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0); @@ -806,7 +834,6 @@ dialog (PikaImage *image, SPIN_BUTTON_WIDTH, /* spinbutton_usize */ PIKA_SIZE_ENTRY_UPDATE_SIZE); /* update_policy */ - gtk_box_pack_start (GTK_BOX (vbox), width, FALSE, FALSE, 0); gtk_widget_show (width); @@ -833,9 +860,9 @@ dialog (PikaImage *image, gtk_grid_set_column_spacing (GTK_GRID (width), 6); /* initialize the values */ - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (width), 0, grid_cfg.hwidth); - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (width), 1, grid_cfg.vwidth); - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (width), 2, grid_cfg.iwidth); + pika_size_entry_set_refval (PIKA_SIZE_ENTRY (width), 0, hwidth); + pika_size_entry_set_refval (PIKA_SIZE_ENTRY (width), 1, vwidth); + pika_size_entry_set_refval (PIKA_SIZE_ENTRY (width), 2, iwidth); /* attach labels */ pika_size_entry_attach_label (PIKA_SIZE_ENTRY (width), _("Horizontal\nLines"), @@ -854,7 +881,7 @@ dialog (PikaImage *image, /* put a chain_button under the size_entries */ chain_button = pika_chain_button_new (PIKA_CHAIN_BOTTOM); - if (grid_cfg.hwidth == grid_cfg.vwidth) + if (hwidth == vwidth) pika_chain_button_set_active (PIKA_CHAIN_BUTTON (chain_button), TRUE); gtk_grid_attach (GTK_GRID (width), chain_button, 1, 2, 2, 1); gtk_widget_show (chain_button); @@ -904,9 +931,9 @@ dialog (PikaImage *image, gtk_grid_set_column_spacing (GTK_GRID (space), 6); /* initialize the values */ - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (space), 0, grid_cfg.hspace); - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (space), 1, grid_cfg.vspace); - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (space), 2, grid_cfg.ispace); + pika_size_entry_set_refval (PIKA_SIZE_ENTRY (space), 0, hspace); + pika_size_entry_set_refval (PIKA_SIZE_ENTRY (space), 1, vspace); + pika_size_entry_set_refval (PIKA_SIZE_ENTRY (space), 2, ispace); /* attach labels */ label = pika_size_entry_attach_label (PIKA_SIZE_ENTRY (space), _("Spacing:"), @@ -915,7 +942,7 @@ dialog (PikaImage *image, /* put a chain_button under the spacing_entries */ chain_button = pika_chain_button_new (PIKA_CHAIN_BOTTOM); - if (grid_cfg.hspace == grid_cfg.vspace) + if (hspace == vspace) pika_chain_button_set_active (PIKA_CHAIN_BUTTON (chain_button), TRUE); gtk_grid_attach (GTK_GRID (space), chain_button, 1, 2, 2, 1); gtk_widget_show (chain_button); @@ -969,9 +996,9 @@ dialog (PikaImage *image, gtk_grid_set_column_spacing (GTK_GRID (offset), 6); /* initialize the values */ - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (offset), 0, grid_cfg.hoffset); - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (offset), 1, grid_cfg.voffset); - pika_size_entry_set_refval (PIKA_SIZE_ENTRY (offset), 2, grid_cfg.ioffset); + pika_size_entry_set_refval (PIKA_SIZE_ENTRY (offset), 0, hoffset); + pika_size_entry_set_refval (PIKA_SIZE_ENTRY (offset), 1, voffset); + pika_size_entry_set_refval (PIKA_SIZE_ENTRY (offset), 2, ioffset); /* attach labels */ label = pika_size_entry_attach_label (PIKA_SIZE_ENTRY (offset), _("Offset:"), @@ -980,7 +1007,7 @@ dialog (PikaImage *image, /* put a chain_button under the offset_entries */ chain_button = pika_chain_button_new (PIKA_CHAIN_BOTTOM); - if (grid_cfg.hoffset == grid_cfg.voffset) + if (hoffset == voffset) pika_chain_button_set_active (PIKA_CHAIN_BUTTON (chain_button), TRUE); gtk_grid_attach (GTK_GRID (offset), chain_button, 1, 2, 2, 1); gtk_widget_show (chain_button); @@ -1000,72 +1027,72 @@ dialog (PikaImage *image, preview); /* put a chain_button under the color_buttons */ - chain_button = pika_chain_button_new (PIKA_CHAIN_BOTTOM); - if (pika_rgba_distance (&grid_cfg.hcolor, &grid_cfg.vcolor) < 0.0001) - pika_chain_button_set_active (PIKA_CHAIN_BUTTON (chain_button), TRUE); - gtk_grid_attach (GTK_GRID (offset), chain_button, 1, 4, 2, 1); - gtk_widget_show (chain_button); + grid->color_chain = pika_chain_button_new (PIKA_CHAIN_BOTTOM); + if (pika_rgba_distance (hcolor, vcolor) < 0.0001) + pika_chain_button_set_active (PIKA_CHAIN_BUTTON (grid->color_chain), TRUE); + gtk_grid_attach (GTK_GRID (offset), grid->color_chain, 1, 4, 2, 1); + gtk_widget_show (grid->color_chain); /* attach color selectors */ - hcolor_button = pika_color_button_new (_("Horizontal Color"), - COLOR_BUTTON_WIDTH, 16, - &grid_cfg.hcolor, - PIKA_COLOR_AREA_SMALL_CHECKS); - pika_color_button_set_update (PIKA_COLOR_BUTTON (hcolor_button), TRUE); - gtk_grid_attach (GTK_GRID (offset), hcolor_button, 1, 3, 1, 1); - gtk_widget_show (hcolor_button); + grid->hcolor_button = pika_color_button_new (_("Horizontal Color"), + COLOR_BUTTON_WIDTH, 16, + hcolor, + PIKA_COLOR_AREA_SMALL_CHECKS); + pika_color_button_set_update (PIKA_COLOR_BUTTON (grid->hcolor_button), TRUE); + gtk_grid_attach (GTK_GRID (offset), grid->hcolor_button, 1, 3, 1, 1); + gtk_widget_show (grid->hcolor_button); - config = pika_get_color_configuration (); - pika_color_button_set_color_config (PIKA_COLOR_BUTTON (hcolor_button), - config); + color_config = pika_get_color_configuration (); + pika_color_button_set_color_config (PIKA_COLOR_BUTTON (grid->hcolor_button), + color_config); - g_signal_connect (hcolor_button, "color-changed", + g_signal_connect (grid->hcolor_button, "color-changed", G_CALLBACK (pika_color_button_get_color), - &grid_cfg.hcolor); - g_signal_connect (hcolor_button, "color-changed", + hcolor); + g_signal_connect (grid->hcolor_button, "color-changed", G_CALLBACK (color_callback), - chain_button); - g_signal_connect_swapped (hcolor_button, "color-changed", + grid); + g_signal_connect_swapped (grid->hcolor_button, "color-changed", G_CALLBACK (pika_preview_invalidate), preview); - vcolor_button = pika_color_button_new (_("Vertical Color"), - COLOR_BUTTON_WIDTH, 16, - &grid_cfg.vcolor, - PIKA_COLOR_AREA_SMALL_CHECKS); - pika_color_button_set_update (PIKA_COLOR_BUTTON (vcolor_button), TRUE); - gtk_grid_attach (GTK_GRID (offset), vcolor_button, 2, 3, 1, 1); - gtk_widget_show (vcolor_button); + grid->vcolor_button = pika_color_button_new (_("Vertical Color"), + COLOR_BUTTON_WIDTH, 16, + vcolor, + PIKA_COLOR_AREA_SMALL_CHECKS); + pika_color_button_set_update (PIKA_COLOR_BUTTON (grid->vcolor_button), TRUE); + gtk_grid_attach (GTK_GRID (offset), grid->vcolor_button, 2, 3, 1, 1); + gtk_widget_show (grid->vcolor_button); - pika_color_button_set_color_config (PIKA_COLOR_BUTTON (vcolor_button), - config); + pika_color_button_set_color_config (PIKA_COLOR_BUTTON (grid->vcolor_button), + color_config); - g_signal_connect (vcolor_button, "color-changed", + g_signal_connect (grid->vcolor_button, "color-changed", G_CALLBACK (pika_color_button_get_color), - &grid_cfg.vcolor); - g_signal_connect (vcolor_button, "color-changed", + vcolor); + g_signal_connect (grid->vcolor_button, "color-changed", G_CALLBACK (color_callback), - chain_button); - g_signal_connect_swapped (vcolor_button, "color-changed", + grid); + g_signal_connect_swapped (grid->vcolor_button, "color-changed", G_CALLBACK (pika_preview_invalidate), preview); - button = pika_color_button_new (_("Intersection Color"), - COLOR_BUTTON_WIDTH, 16, - &grid_cfg.icolor, - PIKA_COLOR_AREA_SMALL_CHECKS); - pika_color_button_set_update (PIKA_COLOR_BUTTON (button), TRUE); - gtk_grid_attach (GTK_GRID (offset), button, 3, 3, 1, 1); - gtk_widget_show (button); + grid->icolor_button = pika_color_button_new (_("Intersection Color"), + COLOR_BUTTON_WIDTH, 16, + icolor, + PIKA_COLOR_AREA_SMALL_CHECKS); + pika_color_button_set_update (PIKA_COLOR_BUTTON (grid->icolor_button), TRUE); + gtk_grid_attach (GTK_GRID (offset), grid->icolor_button, 3, 3, 1, 1); + gtk_widget_show (grid->icolor_button); - pika_color_button_set_color_config (PIKA_COLOR_BUTTON (button), - config); - g_object_unref (config); + pika_color_button_set_color_config (PIKA_COLOR_BUTTON (grid->icolor_button), + color_config); + g_object_unref (color_config); - g_signal_connect (button, "color-changed", + g_signal_connect (grid->icolor_button, "color-changed", G_CALLBACK (pika_color_button_get_color), - &grid_cfg.icolor); - g_signal_connect_swapped (button, "color-changed", + icolor); + g_signal_connect_swapped (grid->icolor_button, "color-changed", G_CALLBACK (pika_preview_invalidate), preview); @@ -1078,10 +1105,9 @@ dialog (PikaImage *image, run = (pika_dialog_run (PIKA_DIALOG (dlg)) == GTK_RESPONSE_OK); if (run) - update_values (); + update_values (grid); gtk_widget_destroy (dlg); return run; } - diff --git a/plug-ins/common/guillotine.c b/plug-ins/common/guillotine.c index 80db93e..1bd0137 100644 --- a/plug-ins/common/guillotine.c +++ b/plug-ins/common/guillotine.c @@ -50,7 +50,7 @@ struct _GuillotineClass #define GUILLOTINE_TYPE (guillotine_get_type ()) -#define GUILLOTINE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GUILLOTINE_TYPE, Guillotine)) +#define GUILLOTINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GUILLOTINE_TYPE, Guillotine)) GType guillotine_get_type (void) G_GNUC_CONST; @@ -63,7 +63,7 @@ static PikaValueArray * guillotine_run (PikaProcedure *proce PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static GList * guillotine (PikaImage *image, gboolean interactive); @@ -151,7 +151,7 @@ guillotine_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals = NULL; diff --git a/plug-ins/common/hot.c b/plug-ins/common/hot.c index c4dfc92..69954e5 100644 --- a/plug-ins/common/hot.c +++ b/plug-ins/common/hot.c @@ -145,7 +145,7 @@ struct _HotClass #define HOT_TYPE (hot_get_type ()) -#define HOT (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HOT_TYPE, Hot)) +#define HOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HOT_TYPE, Hot)) GType hot_get_type (void) G_GNUC_CONST; @@ -158,7 +158,7 @@ static PikaValueArray * hot_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gboolean pluginCore (PikaImage *image, @@ -295,11 +295,10 @@ hot_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaDrawable *drawable; + PikaDrawable *drawable; gegl_init (NULL, NULL); @@ -320,41 +319,15 @@ hot_run (PikaProcedure *procedure, drawable = drawables[0]; } - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - - if (! plugin_dialog (procedure, G_OBJECT (config))) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - case PIKA_RUN_NONINTERACTIVE: - case PIKA_RUN_WITH_LAST_VALS: - break; - } + if (run_mode == PIKA_RUN_INTERACTIVE && ! plugin_dialog (procedure, G_OBJECT (config))) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); if (! pluginCore (image, drawable, G_OBJECT (config))) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - NULL); - } - - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + NULL); if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); diff --git a/plug-ins/common/jigsaw.c b/plug-ins/common/jigsaw.c index ef3c409..cfa9c66 100644 --- a/plug-ins/common/jigsaw.c +++ b/plug-ins/common/jigsaw.c @@ -188,7 +188,7 @@ struct _JigsawClass #define JIGSAW_TYPE (jigsaw_get_type ()) -#define JIGSAW (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), JIGSAW_TYPE, Jigsaw)) +#define JIGSAW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), JIGSAW_TYPE, Jigsaw)) GType jigsaw_get_type (void) G_GNUC_CONST; @@ -201,7 +201,7 @@ static PikaValueArray * jigsaw_run (PikaProcedure *procedure PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void jigsaw (GObject *config, @@ -451,24 +451,17 @@ jigsaw_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaDrawable *drawable; + PikaDrawable *drawable; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - if (n_drawables != 1) { GError *error = NULL; - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, _("Procedure '%s' only works with one drawable."), PLUG_IN_PROC); @@ -482,23 +475,10 @@ jigsaw_run (PikaProcedure *procedure, drawable = drawables[0]; } - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! jigsaw_dialog (procedure, G_OBJECT (config), drawable)) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - default: - break; - }; + if (run_mode == PIKA_RUN_INTERACTIVE && ! jigsaw_dialog (procedure, G_OBJECT (config), drawable)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); pika_progress_init (_("Assembling jigsaw")); @@ -507,9 +487,6 @@ jigsaw_run (PikaProcedure *procedure, if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } @@ -2515,7 +2492,8 @@ jigsaw_dialog (PikaProcedure *procedure, gtk_widget_set_margin_bottom (scale, 12); pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "num-tiles-label", _("Number of Tiles")); + "num-tiles-label", _("Number of Tiles"), + FALSE, FALSE); pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "num-tiles-vbox", "x", "y", NULL); pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), @@ -2532,7 +2510,8 @@ jigsaw_dialog (PikaProcedure *procedure, gtk_widget_set_margin_bottom (scale, 12); pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "bevel-label", _("Bevel Edges")); + "bevel-label", _("Bevel Edges"), + FALSE, FALSE); pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "bevel-vbox", "blend-lines", "blend-amount", NULL); diff --git a/plug-ins/common/mail.c b/plug-ins/common/mail.c index 558b1f0..8ef283e 100644 --- a/plug-ins/common/mail.c +++ b/plug-ins/common/mail.c @@ -71,7 +71,7 @@ struct _MailClass #define MAIL_TYPE (mail_get_type ()) -#define MAIL (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAIL_TYPE, Mail)) +#define MAIL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAIL_TYPE, Mail)) GType mail_get_type (void) G_GNUC_CONST; @@ -84,7 +84,7 @@ static PikaValueArray * mail_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaPDBStatusType send_image (GObject *config, @@ -251,48 +251,31 @@ mail_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - - switch (run_mode) + if (run_mode == PIKA_RUN_INTERACTIVE) { - case PIKA_RUN_INTERACTIVE: - { - gchar *filename = g_file_get_path (pika_image_get_file (image)); + gchar *filename = g_file_get_path (pika_image_get_file (image)); - if (filename) - { - gchar *basename = g_filename_display_basename (filename); - gchar buffername[BUFFER_SIZE]; + if (filename) + { + gchar *basename = g_filename_display_basename (filename); + gchar buffername[BUFFER_SIZE]; - g_strlcpy (buffername, basename, BUFFER_SIZE); + g_strlcpy (buffername, basename, BUFFER_SIZE); - g_object_set (config, - "filename", buffername, - NULL); - g_free (basename); - g_free (filename); - } - } + g_object_set (config, + "filename", buffername, + NULL); + g_free (basename); + g_free (filename); + } if (! send_dialog (procedure, G_OBJECT (config))) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, - NULL); - } - break; - - default: - break; + return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, NULL); } status = send_image (G_OBJECT (config), @@ -300,9 +283,6 @@ mail_run (PikaProcedure *procedure, n_drawables, drawables, run_mode); - pika_procedure_config_end_run (config, status); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, status, NULL); } diff --git a/plug-ins/common/meson.build b/plug-ins/common/meson.build index 5549043..56c7745 100644 --- a/plug-ins/common/meson.build +++ b/plug-ins/common/meson.build @@ -21,7 +21,7 @@ common_plugins_list = [ { 'name': 'destripe', }, { 'name': 'file-cel', }, { 'name': 'file-compressor', - 'deps': [ gegl, gdk_pixbuf, cairo, gio, liblzma, bz2, zlib, ], + 'deps': [ gegl, gdk_pixbuf, cairo, gio, liblzma, pango, bz2, zlib, ], }, { 'name': 'file-csource', }, { 'name': 'file-desktop-link', diff --git a/plug-ins/common/nl-filter.c b/plug-ins/common/nl-filter.c index 93a7e39..72047d6 100644 --- a/plug-ins/common/nl-filter.c +++ b/plug-ins/common/nl-filter.c @@ -73,7 +73,7 @@ struct _NlfilterClass #define NLFILTER_TYPE (nlfilter_get_type ()) -#define NLFILTER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NLFILTER_TYPE, Nlfilter)) +#define NLFILTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NLFILTER_TYPE, Nlfilter)) GType nlfilter_get_type (void) G_GNUC_CONST; @@ -86,7 +86,7 @@ static PikaValueArray * nlfilter_run (PikaProcedure *procedu PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void nlfilter (GObject *config, @@ -202,24 +202,17 @@ nlfilter_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaDrawable *drawable; + PikaDrawable *drawable; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - if (n_drawables != 1) { GError *error = NULL; - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, _("Procedure '%s' only works with one drawable."), pika_procedure_get_name (procedure)); @@ -233,32 +226,16 @@ nlfilter_run (PikaProcedure *procedure, drawable = drawables[0]; } - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! nlfilter_dialog (procedure, G_OBJECT (config), drawable)) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - default: - break; - }; + if (run_mode == PIKA_RUN_INTERACTIVE && ! nlfilter_dialog (procedure, G_OBJECT (config), drawable)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); nlfilter (G_OBJECT (config), drawable, NULL); if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } diff --git a/plug-ins/common/plugin-browser.c b/plug-ins/common/plugin-browser.c index 83dd279..da88a01 100644 --- a/plug-ins/common/plugin-browser.c +++ b/plug-ins/common/plugin-browser.c @@ -101,7 +101,7 @@ struct _BrowserClass */ #define BROWSER_TYPE (browser_get_type ()) -#define BROWSER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BROWSER_TYPE, Browser)) +#define BROWSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BROWSER_TYPE, Browser)) GType browser_get_type (void) G_GNUC_CONST; @@ -110,7 +110,7 @@ static PikaProcedure * browser_create_procedure (PikaPlugIn *plug_in, const gchar *name); static PikaValueArray * browser_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static GtkWidget * browser_dialog_new (void); @@ -199,7 +199,7 @@ browser_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * browser_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { browser_dialog_new (); @@ -361,6 +361,7 @@ browser_search (PikaBrowser *pika_browser, gint search_type, PluginBrowser *browser) { + PikaProcedure *procedure; PikaValueArray *return_vals; const gchar **procedure_strs; gint num_plugins = 0; @@ -371,10 +372,11 @@ browser_search (PikaBrowser *pika_browser, pika_browser_show_message (PIKA_BROWSER (browser->browser), _("Searching by name")); - return_vals = pika_pdb_run_procedure (pika_get_pdb (), - "pika-plug-ins-query", - G_TYPE_STRING, search_text, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), + "pika-plug-ins-query"); + return_vals = pika_procedure_run (procedure, + "search-string", search_text, + NULL); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) { diff --git a/plug-ins/common/procedure-browser.c b/plug-ins/common/procedure-browser.c index e0b07dd..d86225d 100644 --- a/plug-ins/common/procedure-browser.c +++ b/plug-ins/common/procedure-browser.c @@ -75,7 +75,7 @@ struct _BrowserClass */ #define BROWSER_TYPE (browser_get_type ()) -#define BROWSER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BROWSER_TYPE, Browser)) +#define BROWSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BROWSER_TYPE, Browser)) GType browser_get_type (void) G_GNUC_CONST; @@ -84,7 +84,7 @@ static PikaProcedure * browser_create_procedure (PikaPlugIn *plug_in, const gchar *name); static PikaValueArray * browser_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); @@ -152,11 +152,12 @@ browser_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * browser_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaRunMode run_mode = PIKA_VALUES_GET_ENUM (args, 0); + PikaRunMode run_mode; + g_object_get (config, "run-mode", &run_mode, NULL); switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -180,11 +181,17 @@ browser_run (PikaProcedure *procedure, case PIKA_RUN_WITH_LAST_VALS: case PIKA_RUN_NONINTERACTIVE: - g_printerr (PLUG_IN_PROC " allows only interactive invocation"); + { + GError *error = NULL; - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CALLING_ERROR, - NULL); + g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, + _("Procedure %s allows only interactive invocation."), + pika_procedure_get_name (procedure)); + + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CALLING_ERROR, + error); + } break; default: diff --git a/plug-ins/common/qbist.c b/plug-ins/common/qbist.c index 625c732..66ba676 100644 --- a/plug-ins/common/qbist.c +++ b/plug-ins/common/qbist.c @@ -99,7 +99,7 @@ struct _QbistClass #define QBIST_TYPE (qbist_get_type ()) -#define QBIST (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), QBIST_TYPE, Qbist)) +#define QBIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), QBIST_TYPE, Qbist)) GType qbist_get_type (void) G_GNUC_CONST; @@ -112,7 +112,7 @@ static PikaValueArray * qbist_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gboolean dialog_run (void); @@ -228,20 +228,19 @@ qbist_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - gint sel_x1, sel_y1, sel_width, sel_height; - gint img_height, img_width; - GeglBuffer *buffer; - GeglBufferIterator *iter; - PikaDrawable *drawable; - PikaParasite *pattern_parasite; - gconstpointer pattern_data; - guint32 pattern_data_length; - gint total_pixels; - gint done_pixels; + gint sel_x1, sel_y1, sel_width, sel_height; + gint img_height, img_width; + GeglBuffer *buffer; + GeglBufferIterator *iter; + PikaDrawable *drawable; + PikaParasite *pattern_parasite; + gconstpointer pattern_data; + guint32 pattern_data_length; + gint total_pixels; + gint done_pixels; gegl_init (NULL, NULL); @@ -262,9 +261,6 @@ qbist_run (PikaProcedure *procedure, drawable = drawables[0]; } - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - img_width = pika_drawable_get_width (drawable); img_height = pika_drawable_get_height (drawable); @@ -308,13 +304,9 @@ qbist_run (PikaProcedure *procedure, } if (! dialog_run ()) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); pattern_parasite = pika_parasite_new ("pattern", 0, sizeof (qbist_info.info), @@ -328,7 +320,6 @@ qbist_run (PikaProcedure *procedure, break; case PIKA_RUN_NONINTERACTIVE: - pika_procedure_config_end_run (config, PIKA_PDB_CALLING_ERROR); return pika_procedure_new_return_values (procedure, PIKA_PDB_CALLING_ERROR, NULL); @@ -404,9 +395,6 @@ qbist_run (PikaProcedure *procedure, g_rand_free (gr); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } diff --git a/plug-ins/common/sample-colorize.c b/plug-ins/common/sample-colorize.c index bdd8673..6314056 100644 --- a/plug-ins/common/sample-colorize.c +++ b/plug-ins/common/sample-colorize.c @@ -36,10 +36,6 @@ #include "libpika/stdplugins-intl.h" -/* Some useful macros */ -#define RESPONSE_RESET 1 -#define RESPONSE_GET_COLORS 2 - #define PLUG_IN_PROC "plug-in-sample-colorize" #define PLUG_IN_BINARY "sample-colorize" #define PLUG_IN_ROLE "pika-sample-colorize" @@ -88,10 +84,8 @@ typedef struct { PikaDrawable *dst; gint32 sample_id; + PikaDrawable *sample; - gint32 hold_inten; /* TRUE or FALSE */ - gint32 orig_inten; /* TRUE or FALSE */ - gint32 rnd_subcolors; /* TRUE or FALSE */ gint32 guess_missing; /* TRUE or FALSE */ gint32 lvl_in_min; /* 0 up to 254 */ gint32 lvl_in_max; /* 1 up to 255 */ @@ -109,27 +103,24 @@ typedef struct typedef struct { - GtkWidget *dialog; - GtkWidget *sample_preview; - GtkWidget *dst_preview; - GtkWidget *sample_colortab_preview; - GtkWidget *sample_drawarea; - GtkWidget *in_lvl_gray_preview; - GtkWidget *in_lvl_drawarea; - GtkAdjustment *adj_lvl_in_min; - GtkAdjustment *adj_lvl_in_max; - GtkAdjustment *adj_lvl_in_gamma; - GtkAdjustment *adj_lvl_out_min; - GtkAdjustment *adj_lvl_out_max; - GtkWidget *orig_inten_button; - gint active_slider; - gint slider_pos[5]; /* positions for the five sliders */ + PikaProcedureConfig *config; - gboolean enable_preview_update; - gboolean sample_show_selection; - gboolean dst_show_selection; - gboolean sample_show_color; - gboolean dst_show_color; + GtkWidget *dialog; + GtkWidget *sample_preview; + GtkWidget *dst_preview; + GtkWidget *sample_colortab_preview; + GtkWidget *sample_drawarea; + GtkWidget *in_lvl_gray_preview; + GtkWidget *in_lvl_drawarea; + GtkWidget *sample_button; + gint active_slider; + gint slider_pos[5]; /* positions for the five sliders */ + + gboolean enable_preview_update; + gboolean sample_show_selection; + gboolean dst_show_selection; + gboolean sample_show_color; + gboolean dst_show_color; } t_samp_interface; @@ -188,7 +179,7 @@ struct _ColorizeClass #define COLORIZE_TYPE (colorize_get_type ()) -#define COLORIZE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COLORIZE_TYPE, Colorize)) +#define COLORIZE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COLORIZE_TYPE, Colorize)) GType colorize_get_type (void) G_GNUC_CONST; @@ -201,12 +192,15 @@ static PikaValueArray * colorize_run (PikaProcedure *procedu PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static gint main_colorize (gint mc_flags); +static gint main_colorize (gint mc_flags, + PikaProcedureConfig *config); static void get_filevalues (void); -static void smp_dialog (void); +static gboolean smp_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config); + static void refresh_dst_preview (GtkWidget *preview, guchar *src_buffer); static void update_preview (PikaDrawable *drawable); @@ -232,7 +226,9 @@ static void init_gdrw (t_GDRW *gdrw, static void end_gdrw (t_GDRW *gdrw); static void remap_pixel (guchar *pixel, const guchar *original, - gint bpp2); + gint bpp2, + PikaProcedureConfig + *config); static void guess_missing_colors (void); static void fill_missing_colors (void); static void smp_get_colors (GtkWidget *dialog); @@ -247,7 +243,7 @@ DEFINE_STD_SET_I18N static t_samp_interface g_di; /* global dialog interface variables */ -static t_values g_values = { NULL, -1, 1, 1, 0, 1, 0, 255, 1.0, 0, 255, 5.5 }; +static t_values g_values = { NULL, -1, NULL, 1, 0, 255, 1.0, 0, 255, 5.5 }; static t_samp_table_elem g_lum_tab[256]; static guchar g_lvl_trans_tab[256]; static guchar g_out_trans_tab[256]; @@ -337,7 +333,7 @@ colorize_create_procedure (PikaPlugIn *plug_in, pika_procedure_set_documentation (procedure, _("Colorize image using a sample " "image as a guide"), - help_string, + _(help_string), name); pika_procedure_set_attribution (procedure, "Wolfgang Hofer", @@ -345,67 +341,67 @@ colorize_create_procedure (PikaPlugIn *plug_in, "02/2000"); PIKA_PROC_ARG_DRAWABLE (procedure, "sample-drawable", - "Sample drawable", - "Sample drawable (should be of Type RGB or RGBA)", + _("Sample drawable"), + _("Sample drawable (should be of Type RGB or RGBA)"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "hold-inten", - "Hold inten", - "Hold brightness intensity levels", + _("Hold _intensity"), + _("Hold brightness intensity levels"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "orig-inten", - "Orig inten", - "TRUE: hold brightness of original intensity " - "levels, " - "FALSE: Hold Intensity of input levels", + _("Original i_ntensity"), + _("TRUE: hold brightness of original intensity " + "levels, " + "FALSE: Hold Intensity of input levels"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "rnd-subcolors", - "Rnd subcolors", - "TRUE: Use all subcolors of same intensity, " - "FALSE: Use only one color per intensity", + _("Us_e subcolors"), + _("TRUE: Use all subcolors of same intensity, " + "FALSE: Use only one color per intensity"), FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "guess-missing", - "Guess missing", - "TRUE: guess samplecolors for the missing " - "intensity values, " - "FALSE: use only colors found in the sample", + _("Smooth sam_ples"), + _("TRUE: guess samplecolors for the missing " + "intensity values, " + "FALSE: use only colors found in the sample"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "in-low", - "In low", - "Intensity of lowest input", + _("_Low"), + _("Intensity of lowest input"), 0, 254, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "in-high", - "In high", - "Intensity of highest input", + _("_High"), + _("Intensity of highest input"), 1, 255, 255, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "gamma", - "Gamma", - "Gamma adjustment factor, 1.0 is linear", - 0.1, 1.0, 1.0, + _("Ga_mma"), + _("Gamma adjustment factor, 1.0 is linear"), + 0.1, 10.0, 1.0, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "out-low", - "out low", - "Lowest sample color intensity", + _("Lo_w"), + _("Lowest sample color intensity"), 0, 254, 0, G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "ouz-high", - "Out high", - "Highest sample color intensity", + PIKA_PROC_ARG_INT (procedure, "out-high", + _("Hi_gh"), + _("Highest sample color intensity"), 1, 255, 255, G_PARAM_READWRITE); } @@ -419,7 +415,7 @@ colorize_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { const gchar *env; @@ -452,17 +448,18 @@ colorize_run (PikaProcedure *procedure, g_printf ("sample colorize run\n"); g_show_progress = FALSE; - g_values.lvl_out_min = 0; - g_values.lvl_out_max = 255; - g_values.lvl_in_gamma = 1.0; - g_values.lvl_in_min = 0; - g_values.lvl_in_max = 255; + g_di.config = config; + g_object_get (config, + "sample-drawable", &g_values.sample, + "guess_missing", &g_values.guess_missing, + "in-low", &g_values.lvl_in_min, + "in-high", &g_values.lvl_in_max, + "gamma", &g_values.lvl_in_gamma, + "out-low", &g_values.lvl_out_min, + "out-high", &g_values.lvl_out_max, + NULL); - /* Possibly retrieve data from a previous run */ - pika_get_data (PLUG_IN_PROC, &g_values); - if (g_values.sample_id == SMP_GRADIENT || - g_values.sample_id == SMP_INV_GRADIENT) - g_values.sample_id = -1; + g_values.sample_id = -1; /* fix value */ g_values.tol_col_err = 5.5; @@ -479,27 +476,31 @@ colorize_run (PikaProcedure *procedure, switch (run_mode) { case PIKA_RUN_INTERACTIVE: - smp_dialog (); + if (! smp_dialog (procedure, config)) + { + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); + } + + g_show_progress = TRUE; + if (main_colorize (MC_DST_REMAP, config) == 0) + { + pika_displays_flush (); + g_show_progress = FALSE; + } + free_colors (); - pika_set_data (PLUG_IN_PROC, &g_values, sizeof (t_values)); pika_displays_flush (); break; case PIKA_RUN_NONINTERACTIVE: - g_values.sample_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 0); - g_values.hold_inten = PIKA_VALUES_GET_BOOLEAN (args, 1); - g_values.orig_inten = PIKA_VALUES_GET_BOOLEAN (args, 2); - g_values.rnd_subcolors = PIKA_VALUES_GET_BOOLEAN (args, 3); - g_values.guess_missing = PIKA_VALUES_GET_BOOLEAN (args, 4); - g_values.lvl_in_min = PIKA_VALUES_GET_INT (args, 5); - g_values.lvl_in_max = PIKA_VALUES_GET_INT (args, 6); - g_values.lvl_in_gamma = PIKA_VALUES_GET_DOUBLE (args, 7); - g_values.lvl_out_min = PIKA_VALUES_GET_INT (args, 8); - g_values.lvl_out_max = PIKA_VALUES_GET_INT (args, 9); + if (g_values.sample) + g_values.sample_id = pika_item_get_id (PIKA_ITEM (g_values.sample)); - if (main_colorize (MC_GET_SAMPLE_COLORS) >= 0) + if (main_colorize (MC_GET_SAMPLE_COLORS, config) >= 0) { - main_colorize (MC_DST_REMAP); + main_colorize (MC_DST_REMAP, config); } else { @@ -528,52 +529,21 @@ colorize_run (PikaProcedure *procedure, * ============================================================================ */ -static void -smp_response_callback (GtkWidget *widget, - gint response_id) -{ - switch (response_id) - { - case RESPONSE_RESET: - g_values.lvl_in_min = 0; - g_values.lvl_in_max = 255; - g_values.lvl_in_gamma = 1.0; - g_values.lvl_out_min = 0; - g_values.lvl_out_max = 255; - - levels_update (ALL); - break; - - case RESPONSE_GET_COLORS: - smp_get_colors (widget); - break; - - case GTK_RESPONSE_APPLY: - g_show_progress = TRUE; - if (main_colorize (MC_DST_REMAP) == 0) - { - pika_displays_flush (); - g_show_progress = FALSE; - return; - } - gtk_dialog_set_response_sensitive (GTK_DIALOG (widget), - GTK_RESPONSE_APPLY, FALSE); - break; - - default: - gtk_widget_destroy (widget); - gtk_main_quit (); - break; - } -} - static void smp_toggle_callback (GtkWidget *widget, gpointer data) { - gboolean *toggle_val = (gboolean *)data; + gboolean hold_inten; + gboolean orig_inten; + gboolean rnd_subcolors; + gboolean guess_missing; - *toggle_val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); + g_object_get (g_di.config, + "hold-inten", &hold_inten, + "orig-inten", &orig_inten, + "rnd_subcolors", &rnd_subcolors, + "guess_missing", &guess_missing, + NULL); if ((data == &g_di.sample_show_selection) || (data == &g_di.sample_show_color)) @@ -589,23 +559,20 @@ smp_toggle_callback (GtkWidget *widget, return; } - if ((data == &g_values.hold_inten) || - (data == &g_values.orig_inten) || - (data == &g_values.rnd_subcolors)) + if (hold_inten || orig_inten || rnd_subcolors) { - if (g_di.orig_inten_button) - gtk_widget_set_sensitive (g_di.orig_inten_button,g_values.hold_inten); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (g_di.dialog), + "orig-inten", hold_inten, NULL, + NULL, FALSE); + refresh_dst_preview (g_di.dst_preview, &g_dst_preview_buffer[0]); } - if (data == &g_values.guess_missing) - { - if (g_values.guess_missing) - guess_missing_colors (); - else - fill_missing_colors (); - smp_get_colors (NULL); - } + if (guess_missing) + guess_missing_colors (); + else + fill_missing_colors (); + smp_get_colors (NULL); } static void @@ -625,17 +592,15 @@ smp_sample_combo_callback (GtkWidget *widget) if (g_di.sample_preview) clear_preview (g_di.sample_preview); - gtk_dialog_set_response_sensitive (GTK_DIALOG (g_di.dialog), - GTK_RESPONSE_APPLY, TRUE); - gtk_dialog_set_response_sensitive (GTK_DIALOG (g_di.dialog), - RESPONSE_GET_COLORS, FALSE); + if (g_di.sample_button) + gtk_widget_set_sensitive (g_di.sample_button, FALSE); } else { update_preview (pika_drawable_get_by_id (g_values.sample_id)); - gtk_dialog_set_response_sensitive (GTK_DIALOG (g_di.dialog), - RESPONSE_GET_COLORS, TRUE); + if (g_di.sample_button) + gtk_widget_set_sensitive (g_di.sample_button, TRUE); } } @@ -650,8 +615,8 @@ smp_dest_combo_callback (GtkWidget *widget) update_preview (g_values.dst); - gtk_dialog_set_response_sensitive (GTK_DIALOG (g_di.dialog), - RESPONSE_GET_COLORS, TRUE); + if (g_di.sample_button) + gtk_widget_set_sensitive (g_di.sample_button, TRUE); } static gint @@ -668,12 +633,17 @@ smp_constrain (PikaImage *image, static void -smp_adj_lvl_in_max_upd_callback (GtkAdjustment *adjustment) +smp_adj_lvl_in_max_upd_callback (GObject *config, + const GParamSpec *pspec, + gpointer *data) { gint32 value; gint upd_flags; - value = CLAMP ((gtk_adjustment_get_value (adjustment)), 1, 255); + g_object_get (config, + "in-high", &value, + NULL); + value = CLAMP (value, 1, 255); if (value != g_values.lvl_in_max) { @@ -689,12 +659,17 @@ smp_adj_lvl_in_max_upd_callback (GtkAdjustment *adjustment) } static void -smp_adj_lvl_in_min_upd_callback (GtkAdjustment *adjustment) +smp_adj_lvl_in_min_upd_callback (GObject *config, + const GParamSpec *pspec, + gpointer *data) { - double value; + gint32 value; gint upd_flags; - value = CLAMP ((gtk_adjustment_get_value (adjustment)), 0, 254); + g_object_get (config, + "in-low", &value, + NULL); + value = CLAMP (value, 0, 254); if (value != g_values.lvl_in_min) { @@ -710,11 +685,16 @@ smp_adj_lvl_in_min_upd_callback (GtkAdjustment *adjustment) } static void -smp_text_gamma_upd_callback (GtkAdjustment *adjustment) +smp_text_gamma_upd_callback (GObject *config, + const GParamSpec *pspec, + gpointer *data) { double value; - value = CLAMP ((gtk_adjustment_get_value (adjustment)), 0.1, 10.0); + g_object_get (config, + "gamma", &value, + NULL); + value = CLAMP (value, 0.1, 10.0); if (value != g_values.lvl_in_gamma) { @@ -724,12 +704,17 @@ smp_text_gamma_upd_callback (GtkAdjustment *adjustment) } static void -smp_adj_lvl_out_max_upd_callback (GtkAdjustment *adjustment) +smp_adj_lvl_out_max_upd_callback (GObject *config, + const GParamSpec *pspec, + gpointer *data) { gint32 value; gint upd_flags; - value = CLAMP ((gtk_adjustment_get_value (adjustment)), 1, 255); + g_object_get (config, + "out-high", &value, + NULL); + value = CLAMP (value, 1, 255); if (value != g_values.lvl_out_max) { @@ -745,17 +730,22 @@ smp_adj_lvl_out_max_upd_callback (GtkAdjustment *adjustment) } static void -smp_adj_lvl_out_min_upd_callback (GtkAdjustment *adjustment) +smp_adj_lvl_out_min_upd_callback (GObject *config, + const GParamSpec *pspec, + gpointer *data) { - double value; + gint32 value; gint upd_flags; - value = CLAMP ((gtk_adjustment_get_value (adjustment)), 0, 254); + g_object_get (config, + "out-low", &value, + NULL); + value = CLAMP (value, 0, 254); if (value != g_values.lvl_out_min) { g_values.lvl_out_min = value; - upd_flags = OUTPUT_SLIDERS | OUTPUT_LEVELS | DRAW | REFRESH_DST; + upd_flags = OUTPUT_SLIDERS | OUTPUT_LEVELS | DRAW | REFRESH_DST; if (g_values.lvl_out_min > g_values.lvl_out_max) { g_values.lvl_out_max = g_values.lvl_out_min; @@ -803,7 +793,7 @@ refresh_dst_preview (GtkWidget *preview, { if (g_di.dst_show_color) { - remap_pixel (ptr, src_ptr, 3); + remap_pixel (ptr, src_ptr, 3, g_di.config); } else { @@ -1047,9 +1037,10 @@ smp_get_colors (GtkWidget *dialog) update_preview (pika_drawable_get_by_id (g_values.sample_id)); - if (dialog && main_colorize (MC_GET_SAMPLE_COLORS) >= 0) /* do not colorize, just analyze sample colors */ - gtk_dialog_set_response_sensitive (GTK_DIALOG (g_di.dialog), - GTK_RESPONSE_APPLY, TRUE); + /* do not colorize, just analyze sample colors */ + if (dialog) + main_colorize (MC_GET_SAMPLE_COLORS, g_di.config); + for (i = 0; i < GRADIENT_HEIGHT; i++) memcpy (buffer + i * 3 * DA_WIDTH, g_sample_color_tab, 3 * DA_WIDTH); @@ -1078,20 +1069,25 @@ levels_update (gint update) /* update the spinbutton entry widgets */ if (update & LOW_INPUT) - gtk_adjustment_set_value (g_di.adj_lvl_in_min, - g_values.lvl_in_min); + g_object_set (g_di.config, + "in-low", g_values.lvl_in_min, + NULL); if (update & GAMMA) - gtk_adjustment_set_value (g_di.adj_lvl_in_gamma, - g_values.lvl_in_gamma); + g_object_set (g_di.config, + "gamma", g_values.lvl_in_gamma, + NULL); if (update & HIGH_INPUT) - gtk_adjustment_set_value (g_di.adj_lvl_in_max, - g_values.lvl_in_max); + g_object_set (g_di.config, + "in-high", g_values.lvl_in_max, + NULL); if (update & LOW_OUTPUT) - gtk_adjustment_set_value (g_di.adj_lvl_out_min, - g_values.lvl_out_min); + g_object_set (g_di.config, + "out-low", g_values.lvl_out_min, + NULL); if (update & HIGH_OUTPUT) - gtk_adjustment_set_value (g_di.adj_lvl_out_max, - g_values.lvl_out_max); + g_object_set (g_di.config, + "out-high", g_values.lvl_out_max, + NULL); if (update & INPUT_LEVELS) { guchar buffer[DA_WIDTH * GRADIENT_HEIGHT]; @@ -1378,8 +1374,9 @@ level_out_draw (GtkWidget *widget, * The Interactive Dialog * ============================================================================ */ -static void -smp_dialog (void) +static gboolean +smp_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config) { GtkWidget *dialog; GtkWidget *hbox; @@ -1389,9 +1386,8 @@ smp_dialog (void) GtkWidget *check_button; GtkWidget *label; GtkWidget *combo; - GtkWidget *spinbutton; - GtkAdjustment *data; gint ty; + gboolean run; /* set flags for check buttons from mode value bits */ if (g_Sdebug) @@ -1403,36 +1399,15 @@ smp_dialog (void) g_di.dst_show_selection = TRUE; g_di.dst_show_color = TRUE; g_di.sample_show_color = TRUE; - g_di.orig_inten_button = NULL; /* Init GTK */ pika_ui_init (PLUG_IN_BINARY); /* Main Dialog */ g_di.dialog = dialog = - pika_dialog_new (_("Sample Colorize"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Reset"), RESPONSE_RESET, - _("Get _Sample Colors"), RESPONSE_GET_COLORS, - _("_Close"), GTK_RESPONSE_CLOSE, - _("_Apply"), GTK_RESPONSE_APPLY, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - RESPONSE_GET_COLORS, - RESPONSE_RESET, - GTK_RESPONSE_APPLY, - GTK_RESPONSE_CLOSE, - -1); - - pika_window_set_transient (GTK_WINDOW (dialog)); - - g_signal_connect (dialog, "response", - G_CALLBACK (smp_response_callback), - NULL); + pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Sample Colorize")); /* grid for values */ grid = gtk_grid_new (); @@ -1486,7 +1461,6 @@ smp_dialog (void) ty++; - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_grid_attach (GTK_GRID (grid), hbox, 0, ty, 2, 1); gtk_widget_show (hbox); @@ -1606,9 +1580,10 @@ smp_dialog (void) g_signal_connect (g_di.in_lvl_drawarea, "event", G_CALLBACK (level_in_events), NULL); - g_signal_connect (g_di.in_lvl_drawarea, "draw", - G_CALLBACK (level_in_draw), - NULL); + /* TODO: Fix crash when editing inputs with this enabled */ + /* g_signal_connect (g_di.in_lvl_drawarea, "draw", + G_CALLBACK (level_in_draw), + NULL); */ gtk_widget_show (vbox2); gtk_widget_show (frame); @@ -1648,157 +1623,115 @@ smp_dialog (void) gtk_widget_show (vbox2); gtk_widget_show (frame); - ty++; - /* Horizontal box for INPUT levels text widget */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE); - gtk_grid_attach (GTK_GRID (grid), hbox, 0, ty, 2, 1); + /* PikaProcedureDialog */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "input-label", _("Input levels:"), FALSE, + FALSE); + pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), "in-low", + PIKA_TYPE_SPIN_BUTTON); + pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), "gamma", + PIKA_TYPE_SPIN_BUTTON); + pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), "in-high", + PIKA_TYPE_SPIN_BUTTON); - label = gtk_label_new (_("Input levels:")); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - /* min input spinbutton */ - data = gtk_adjustment_new ((gfloat)g_values.lvl_in_min, 0.0, 254.0, 1, 10, 0); - g_di.adj_lvl_in_min = data; - - spinbutton = pika_spin_button_new (g_di.adj_lvl_in_min, 0.5, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - g_signal_connect (g_di.adj_lvl_in_min, "value-changed", + g_signal_connect (config, "notify::in-low", G_CALLBACK (smp_adj_lvl_in_min_upd_callback), - &g_di); - - /* input gamma spinbutton */ - data = gtk_adjustment_new ((gfloat)g_values.lvl_in_gamma, 0.1, 10.0, 0.02, 0.2, 0); - g_di.adj_lvl_in_gamma = data; - - spinbutton = pika_spin_button_new (g_di.adj_lvl_in_gamma, 0.5, 2); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - g_signal_connect (g_di.adj_lvl_in_gamma, "value-changed", + NULL); + g_signal_connect (config, "notify::gamma", G_CALLBACK (smp_text_gamma_upd_callback), - &g_di); - - /* high input spinbutton */ - data = gtk_adjustment_new ((gfloat)g_values.lvl_in_max, 1.0, 255.0, 1, 10, 0); - g_di.adj_lvl_in_max = data; - - spinbutton = pika_spin_button_new (g_di.adj_lvl_in_max, 0.5, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - g_signal_connect (g_di.adj_lvl_in_max, "value-changed", + NULL); + g_signal_connect (config, "notify::in-high", G_CALLBACK (smp_adj_lvl_in_max_upd_callback), - &g_di); + NULL); - gtk_widget_show (hbox); + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "low-hbox","input-label", "in-low", + "gamma", "in-high", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + gtk_widget_set_halign (hbox, GTK_ALIGN_CENTER); - /* Horizontal box for OUTPUT levels text widget */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); - gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE); - gtk_grid_attach (GTK_GRID (grid), hbox, 3, ty, 2, 1); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "output-label", _("Output levels:"), FALSE, + FALSE); + pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), "out-low", + PIKA_TYPE_SPIN_BUTTON); + pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), "out-high", + PIKA_TYPE_SPIN_BUTTON); - label = gtk_label_new (_("Output levels:")); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - /* min output spinbutton */ - data = gtk_adjustment_new ((gfloat)g_values.lvl_out_min, 0.0, 254.0, 1, 10, 0); - g_di.adj_lvl_out_min = data; - - spinbutton = pika_spin_button_new (g_di.adj_lvl_out_min, 0.5, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - g_signal_connect (g_di.adj_lvl_out_min, "value-changed", + g_signal_connect (config, "notify::out-low", G_CALLBACK (smp_adj_lvl_out_min_upd_callback), - &g_di); - - /* high output spinbutton */ - data = gtk_adjustment_new ((gfloat)g_values.lvl_out_max, 0.0, 255.0, 1, 10, 0); - g_di.adj_lvl_out_max = data; - - spinbutton = pika_spin_button_new (g_di.adj_lvl_out_max, 0.5, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - g_signal_connect (g_di.adj_lvl_out_max, "value-changed", + NULL); + g_signal_connect (config, "notify::out-high", G_CALLBACK (smp_adj_lvl_out_max_upd_callback), - &g_di); + NULL); - gtk_widget_show (hbox); + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "high-hbox","output-label", "out-low", + "out-high", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + gtk_widget_set_halign (hbox, GTK_ALIGN_CENTER); - ty++; + /* Checkboxes */ + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "intensity-hbox", "hold-inten", + "orig-inten", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + gtk_widget_set_halign (hbox, GTK_ALIGN_CENTER); - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_grid_attach (GTK_GRID (grid), hbox, 0, ty, 2, 1); - gtk_widget_show (hbox); - - /* check button */ - check_button = gtk_check_button_new_with_mnemonic (_("Hold _intensity")); - gtk_box_pack_start (GTK_BOX (hbox), check_button, FALSE, FALSE, 0); - gtk_widget_show (check_button); - - g_signal_connect (check_button, "toggled", + g_signal_connect (config, "notify::hold-inten", G_CALLBACK (smp_toggle_callback), - &g_values.hold_inten); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), - g_values.hold_inten); - - /* check button */ - check_button = gtk_check_button_new_with_mnemonic (_("Original i_ntensity")); - g_di.orig_inten_button = check_button; - gtk_box_pack_start (GTK_BOX (hbox), check_button, FALSE, FALSE, 0); - gtk_widget_set_sensitive (g_di.orig_inten_button, g_values.hold_inten); - gtk_widget_show (check_button); - - g_signal_connect (check_button, "toggled", + NULL); + g_signal_connect (config, "notify::orig-inten", G_CALLBACK (smp_toggle_callback), - &g_values.orig_inten); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), - g_values.orig_inten); + NULL); - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); - gtk_grid_attach (GTK_GRID (grid), hbox, 3, ty, 2, 1); - gtk_widget_show (hbox); + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "sample-hbox", "rnd-subcolors", + "guess-missing", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + gtk_widget_set_halign (hbox, GTK_ALIGN_CENTER); - /* check button */ - check_button = gtk_check_button_new_with_mnemonic (_("Us_e subcolors")); - gtk_box_pack_start (GTK_BOX (hbox), check_button, FALSE, FALSE, 0); - gtk_widget_show (check_button); - - g_signal_connect (check_button, "toggled", + g_signal_connect (config, "notify::rnd-subcolors", G_CALLBACK (smp_toggle_callback), - &g_values.rnd_subcolors); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), - g_values.rnd_subcolors); - - /* check button */ - check_button = gtk_check_button_new_with_mnemonic (_("S_mooth samples")); - gtk_box_pack_start (GTK_BOX (hbox), check_button, FALSE, FALSE, 0); - gtk_widget_show (check_button); - - g_signal_connect (check_button, "toggled", + NULL); + g_signal_connect (config, "notify::guess-missing", G_CALLBACK (smp_toggle_callback), - &g_values.guess_missing); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), - g_values.guess_missing); + NULL); - ty++; + g_di.sample_button = gtk_button_new_with_mnemonic (_("Get _Sample Colors")); + gtk_box_pack_start (GTK_BOX (hbox), g_di.sample_button, FALSE, FALSE, 12); + g_signal_connect (g_di.sample_button, "clicked", + G_CALLBACK (smp_get_colors), + dialog); + gtk_widget_set_visible (g_di.sample_button, TRUE); gtk_widget_show (grid); - gtk_widget_show (frame); + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "slider-row", "low-hbox", + "high-hbox", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "check-row", "intensity-hbox", + "sample-hbox", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + + vbox2 = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "option-box", "slider-row", + "check-row", NULL); + gtk_box_set_spacing (GTK_BOX (vbox2), 12); + + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), + "option-box", NULL); gtk_widget_show (dialog); /* set old_id's different (to force updates of the previews) */ @@ -1807,7 +1740,10 @@ smp_dialog (void) update_preview (g_values.dst); levels_update (INPUT_SLIDERS | INPUT_LEVELS | DRAW); - gtk_main (); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); + + gtk_widget_destroy (dialog); + return run; } /* ----------------------------- @@ -1918,26 +1854,6 @@ print_transtable (FILE *fp) } } -static void -print_values (FILE *fp) -{ - if (fp == NULL) - return; - - fprintf (fp, "sample_colorize: params\n"); - fprintf (fp, "g_values.hold_inten :%d\n", (int)g_values.hold_inten); - fprintf (fp, "g_values.orig_inten :%d\n", (int)g_values.orig_inten); - fprintf (fp, "g_values.rnd_subcolors :%d\n", (int)g_values.rnd_subcolors); - fprintf (fp, "g_values.guess_missing :%d\n", (int)g_values.guess_missing); - fprintf (fp, "g_values.lvl_in_min :%d\n", (int)g_values.lvl_in_min); - fprintf (fp, "g_values.lvl_in_max :%d\n", (int)g_values.lvl_in_max); - fprintf (fp, "g_values.lvl_in_gamma :%f\n", g_values.lvl_in_gamma); - fprintf (fp, "g_values.lvl_out_min :%d\n", (int)g_values.lvl_out_min); - fprintf (fp, "g_values.lvl_out_max :%d\n", (int)g_values.lvl_out_max); - - fprintf (fp, "g_values.tol_col_err :%f\n", g_values.tol_col_err); -} - /* ----------------------------- * DEBUG print procedures END * ----------------------------- @@ -2667,7 +2583,6 @@ sample_analyze (t_GDRW *sample_gdrw) prot_fp = NULL; if (g_Sdebug) prot_fp = g_fopen ("sample_colors.dump", "w"); - print_values (prot_fp); /* ------------------------------------------------ * foreach pixel in the SAMPLE_drawable: @@ -2817,28 +2732,38 @@ rnd_remap (gint32 lum, } static void -remap_pixel (guchar *pixel, - const guchar *original, - gint bpp2) +remap_pixel (guchar *pixel, + const guchar *original, + gint bpp2, + PikaProcedureConfig *config) { - guchar mapped_color[4]; - gint lum; - double orig_lum, mapped_lum; - double grn, red, blu; - double mg, mr, mb; - double dg, dr, db; - double dlum; + guchar mapped_color[4]; + gint lum; + gdouble orig_lum, mapped_lum; + gdouble grn, red, blu; + gdouble mg, mr, mb; + gdouble dg, dr, db; + gdouble dlum; + gboolean hold_inten = FALSE; + gboolean orig_inten = FALSE; + gboolean rnd_subcolors = FALSE; + + g_object_get (config, + "hold-inten", &hold_inten, + "orig-inten", &orig_inten, + "rnd-subcolors", &rnd_subcolors, + NULL); /* get brightness from (uncolorized) original */ lum = g_out_trans_tab[g_lvl_trans_tab[LUMINOSITY_1 (original)]]; - if (g_values.rnd_subcolors) + if (rnd_subcolors) rnd_remap (lum, mapped_color); else memcpy (mapped_color, &g_sample_color_tab[3 * lum], 3); - if (g_values.hold_inten) + if (hold_inten) { - if (g_values.orig_inten) + if (orig_inten) orig_lum = LUMINOSITY_0(original); else orig_lum = 100.0 * g_lvl_trans_tab[LUMINOSITY_1 (original)]; @@ -3019,10 +2944,11 @@ remap_pixel (guchar *pixel, } static void -colorize_func (const guchar *src, - guchar *dest, - gint bpp, - gboolean has_alpha) +colorize_func (const guchar *src, + guchar *dest, + gint bpp, + gboolean has_alpha, + PikaProcedureConfig *config) { if (has_alpha) { @@ -3030,11 +2956,12 @@ colorize_func (const guchar *src, dest[bpp] = src[bpp]; } - remap_pixel (dest, src, bpp); + remap_pixel (dest, src, bpp, config); } static void -colorize_drawable (PikaDrawable *drawable) +colorize_drawable (PikaDrawable *drawable, + PikaProcedureConfig *config) { GeglBuffer *src_buffer; GeglBuffer *dest_buffer; @@ -3093,7 +3020,7 @@ colorize_drawable (PikaDrawable *drawable) while (pixels--) { - colorize_func (s, d, bpp, has_alpha); + colorize_func (s, d, bpp, has_alpha, config); s += bpp; d += bpp; @@ -3121,7 +3048,8 @@ colorize_drawable (PikaDrawable *drawable) /* colorize dst_drawable like sample_drawable */ static int -main_colorize (gint mc_flags) +main_colorize (gint mc_flags, + PikaProcedureConfig *config) { t_GDRW sample_gdrw; gboolean sample_drawable = FALSE; @@ -3164,7 +3092,7 @@ main_colorize (gint mc_flags) pika_image_convert_rgb (pika_item_get_image (PIKA_ITEM (g_values.dst))); } - colorize_drawable (g_values.dst); + colorize_drawable (g_values.dst, config); } if (sample_drawable) diff --git a/plug-ins/common/smooth-palette.c b/plug-ins/common/smooth-palette.c index ba43682..57f92bd 100644 --- a/plug-ins/common/smooth-palette.c +++ b/plug-ins/common/smooth-palette.c @@ -49,7 +49,7 @@ struct _PaletteClass #define PALETTE_TYPE (palette_get_type ()) -#define PALETTE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PALETTE_TYPE, Palette)) +#define PALETTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PALETTE_TYPE, Palette)) GType palette_get_type (void) G_GNUC_CONST; @@ -62,12 +62,15 @@ static PikaValueArray * palette_run (PikaProcedure *procedur PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static gboolean dialog (PikaDrawable *drawable); +static gboolean dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable); -static PikaImage * smooth_palette (PikaDrawable *drawable, +static PikaImage * smooth_palette (PikaProcedureConfig *config, + PikaDrawable *drawable, PikaLayer **layer); @@ -76,23 +79,7 @@ G_DEFINE_TYPE (Palette, palette, PIKA_TYPE_PLUG_IN) PIKA_MAIN (PALETTE_TYPE) DEFINE_STD_SET_I18N - -static struct -{ - gint width; - gint height; - gint ntries; - gint try_size; - gboolean show_image; -} config = -{ - 256, - 64, - 50, - 10000, - TRUE -}; - +#define TRY_SIZE 10000 static void palette_class_init (PaletteClass *klass) @@ -145,38 +132,38 @@ palette_create_procedure (PikaPlugIn *plug_in, "1997"); PIKA_PROC_ARG_INT (procedure, "width", - "Widtg", - "Widtg", + _("_Width"), + _("Width"), 2, PIKA_MAX_IMAGE_SIZE, 256, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "height", - "Height", - "Height", + _("_Height"), + _("Height"), 2, PIKA_MAX_IMAGE_SIZE, 64, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "n-tries", - "N tries", - "Search septh", + _("Search _depth"), + _("Search depth"), 1, 1024, 50, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "show-image", - "Show image", - "Show image", + _("Show image"), + _("Show image"), TRUE, G_PARAM_READWRITE); PIKA_PROC_VAL_IMAGE (procedure, "new-image", - "New image", - "Output image", + _("New image"), + _("Output image"), FALSE, G_PARAM_READWRITE); PIKA_PROC_VAL_LAYER (procedure, "new-layer", - "New layer", - "Output layer", + _("New layer"), + _("Output layer"), FALSE, G_PARAM_READWRITE); } @@ -190,13 +177,13 @@ palette_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaValueArray *return_vals; - PikaImage *new_image; - PikaLayer *new_layer; - PikaDrawable *drawable; + PikaImage *new_image; + PikaLayer *new_layer; + PikaDrawable *drawable; + gboolean show_image; gegl_init (NULL, NULL); @@ -217,41 +204,21 @@ palette_run (PikaProcedure *procedure, drawable = drawables[0]; } - switch (run_mode) + if (run_mode == PIKA_RUN_INTERACTIVE && ! dialog (procedure, config, drawable)) { - case PIKA_RUN_INTERACTIVE: - pika_get_data (PLUG_IN_PROC, &config); - - if (! dialog (drawable)) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - case PIKA_RUN_NONINTERACTIVE: - config.width = PIKA_VALUES_GET_INT (args, 0); - config.height = PIKA_VALUES_GET_INT (args, 1); - config.ntries = PIKA_VALUES_GET_INT (args, 2); - config.show_image = PIKA_VALUES_GET_BOOLEAN (args, 3); - break; - - case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (PLUG_IN_PROC, &config); - break; + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); } if (pika_drawable_is_rgb (drawable)) { pika_progress_init (_("Deriving smooth palette")); - new_image = smooth_palette (drawable, &new_layer); + new_image = smooth_palette (config, drawable, &new_layer); - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &config, sizeof (config)); - - if (config.show_image) + g_object_get (config, "show-image", &show_image, NULL); + if (show_image) pika_display_new (new_image); } else @@ -261,14 +228,7 @@ palette_run (PikaProcedure *procedure, NULL); } - return_vals = pika_procedure_new_return_values (procedure, - PIKA_PDB_SUCCESS, - NULL); - - PIKA_VALUES_SET_IMAGE (return_vals, 1, new_image); - PIKA_VALUES_SET_LAYER (return_vals, 2, new_layer); - - return return_vals; + return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } static gfloat @@ -307,14 +267,18 @@ pix_swap (gfloat *pal, } static PikaImage * -smooth_palette (PikaDrawable *drawable, - PikaLayer **layer) +smooth_palette (PikaProcedureConfig *config, + PikaDrawable *drawable, + PikaLayer **layer) { PikaImage *new_image; gint psize, i, j; guint bpp; gint sel_x1, sel_y1; gint width, height; + gint config_width; + gint config_height; + gint config_n_tries; GeglBuffer *buffer; GeglSampler *sampler; gfloat *pal; @@ -322,15 +286,21 @@ smooth_palette (PikaDrawable *drawable, const Babl *format = babl_format ("RGB float"); - new_image = pika_image_new_with_precision (config.width, - config.height, + g_object_get (config, + "width", &config_width, + "height", &config_height, + "n-tries", &config_n_tries, + NULL); + + new_image = pika_image_new_with_precision (config_width, + config_height, PIKA_RGB, PIKA_PRECISION_FLOAT_LINEAR); pika_image_undo_disable (new_image); *layer = pika_layer_new (new_image, _("Background"), - config.width, config.height, + config_width, config_height, pika_drawable_type (drawable), 100, pika_image_get_default_new_layer_mode (new_image)); @@ -343,7 +313,7 @@ smooth_palette (PikaDrawable *drawable, gr = g_rand_new (); - psize = config.width; + psize = config_width; buffer = pika_drawable_get_buffer (drawable); @@ -379,12 +349,12 @@ smooth_palette (PikaDrawable *drawable, pal_best = g_memdup2 (pal, bpp * psize); original = g_memdup2 (pal, bpp * psize); - for (try = 0; try < config.ntries; try++) + for (try = 0; try < config_n_tries; try++) { gdouble len; - if (!(try%5)) - pika_progress_update (try / (double) config.ntries); + if (! (try % 5)) + pika_progress_update (try / (double) config_n_tries); memcpy (pal, original, bpp * psize); /* scramble */ @@ -397,7 +367,7 @@ smooth_palette (PikaDrawable *drawable, len += pix_diff (pal, bpp, i, i-1); /* improve */ - for (i = 0; i < config.try_size; i++) + for (i = 0; i < TRY_SIZE; i++) { gint i0 = 1 + g_rand_int_range (gr, 0, psize-2); gint i1 = 1 + g_rand_int_range (gr, 0, psize-2); @@ -471,16 +441,16 @@ smooth_palette (PikaDrawable *drawable, buffer = pika_drawable_get_buffer (PIKA_DRAWABLE (*layer)); - for (j = 0; j < config.height; j++) + for (j = 0; j < config_height; j++) { - GeglRectangle row = {0, j, config.width, 1}; + GeglRectangle row = {0, j, config_width, 1}; gegl_buffer_set (buffer, &row, 0, format, pal, GEGL_AUTO_ROWSTRIDE); } gegl_buffer_flush (buffer); pika_drawable_update (PIKA_DRAWABLE (*layer), 0, 0, - config.width, config.height); + config_width, config_height); pika_image_undo_enable (new_image); g_object_unref (buffer); @@ -491,32 +461,34 @@ smooth_palette (PikaDrawable *drawable, } static gboolean -dialog (PikaDrawable *drawable) +dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable) { GtkWidget *dlg; - GtkWidget *spinbutton; - GtkAdjustment *adj; GtkWidget *sizeentry; PikaImage *image; PikaUnit unit; gdouble xres, yres; + gint width; + gint height; gboolean run; + g_object_get (config, + "width", &width, + "height", &height, + NULL); + pika_ui_init (PLUG_IN_BINARY); - dlg = pika_dialog_new (_("Smooth Palette"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); + dlg = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Smooth Palette")); pika_dialog_set_alternative_button_order (GTK_DIALOG (dlg), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); + GTK_RESPONSE_OK, + GTK_RESPONSE_CANCEL, + -1); pika_window_set_transient (GTK_WINDOW (dlg)); @@ -529,12 +501,12 @@ dialog (PikaDrawable *drawable) FALSE, FALSE, _("_Width:"), - config.width, xres, + width, xres, 2, PIKA_MAX_IMAGE_SIZE, 2, PIKA_MAX_IMAGE_SIZE, _("_Height:"), - config.height, yres, + height, yres, 1, PIKA_MAX_IMAGE_SIZE, 1, PIKA_MAX_IMAGE_SIZE); gtk_container_set_border_width (GTK_CONTAINER (sizeentry), 12); @@ -542,16 +514,8 @@ dialog (PikaDrawable *drawable) sizeentry, FALSE, FALSE, 0); gtk_widget_show (sizeentry); - adj = gtk_adjustment_new (config.ntries, 1, 1024, 1, 10, 0); - spinbutton = pika_spin_button_new (adj, 1, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - - pika_grid_attach_aligned (GTK_GRID (sizeentry), 0, 2, - _("_Search depth:"), 0.0, 0.5, - spinbutton, 1); - g_signal_connect (adj, "value-changed", - G_CALLBACK (pika_int_adjustment_update), - &config.ntries); + /* We don't want to have the "Show Image" option in the GUI */ + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dlg), "n-tries", NULL); gtk_widget_show (dlg); @@ -559,10 +523,13 @@ dialog (PikaDrawable *drawable) if (run) { - config.width = pika_size_entry_get_refval (PIKA_SIZE_ENTRY (sizeentry), - 0); - config.height = pika_size_entry_get_refval (PIKA_SIZE_ENTRY (sizeentry), - 1); + width = pika_size_entry_get_refval (PIKA_SIZE_ENTRY (sizeentry), 0); + height = pika_size_entry_get_refval (PIKA_SIZE_ENTRY (sizeentry), 1); + + g_object_set (config, + "width", width, + "height", height, + NULL); } gtk_widget_destroy (dlg); diff --git a/plug-ins/common/sparkle.c b/plug-ins/common/sparkle.c index 7eda72a..497d657 100644 --- a/plug-ins/common/sparkle.c +++ b/plug-ins/common/sparkle.c @@ -65,7 +65,7 @@ struct _SparkleClass #define SPARKLE_TYPE (sparkle_get_type ()) -#define SPARKLE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SPARKLE_TYPE, Sparkle)) +#define SPARKLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SPARKLE_TYPE, Sparkle)) GType sparkle_get_type (void) G_GNUC_CONST; @@ -78,7 +78,7 @@ static PikaValueArray * sparkle_run (PikaProcedure *procedur PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gboolean sparkle_dialog (PikaProcedure *procedure, @@ -284,25 +284,18 @@ sparkle_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaDrawable *drawable; - gint x, y, w, h; + PikaDrawable *drawable; + gint x, y, w, h; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - if (n_drawables != 1) { GError *error = NULL; - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, _("Procedure '%s' only works with one drawable."), PLUG_IN_PROC); @@ -320,32 +313,15 @@ sparkle_run (PikaProcedure *procedure, { g_message (_("Region selected for filter is empty")); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! sparkle_dialog (procedure, G_OBJECT (config), drawable)) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - - default: - break; - } + if (run_mode == PIKA_RUN_INTERACTIVE && ! sparkle_dialog (procedure, G_OBJECT (config), drawable)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); if (pika_drawable_is_rgb (drawable) || pika_drawable_is_gray (drawable)) @@ -359,17 +335,11 @@ sparkle_run (PikaProcedure *procedure, } else { - pika_procedure_config_end_run (config, PIKA_PDB_EXECUTION_ERROR); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); } - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } @@ -444,7 +414,8 @@ sparkle_dialog (PikaProcedure *procedure, pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "sparkle-bool-label", - _("Additional Options")); + _("Additional Options"), + FALSE, FALSE); pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), "sparkle-bool-frame", "sparkle-bool-label", FALSE, "sparkle-bool-vbox"); diff --git a/plug-ins/common/sphere-designer.c b/plug-ins/common/sphere-designer.c index 9d6b79e..fe459cd 100644 --- a/plug-ins/common/sphere-designer.c +++ b/plug-ins/common/sphere-designer.c @@ -272,7 +272,7 @@ struct _DesignerClass #define DESIGNER_TYPE (designer_get_type ()) -#define DESIGNER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DESIGNER_TYPE, Designer)) +#define DESIGNER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DESIGNER_TYPE, Designer)) GType designer_get_type (void) G_GNUC_CONST; @@ -285,7 +285,7 @@ static PikaValueArray * designer_run (PikaProcedure *procedu PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static inline void vset (PikaVector4 *v, @@ -423,6 +423,11 @@ designer_create_procedure (PikaPlugIn *plug_in, "Vidar Madsen", "Vidar Madsen", "1999"); + + PIKA_PROC_AUX_ARG_BYTES (procedure, "settings-data", + "Settings data", + "TODO: eventually we must implement proper args for every settings", + PIKA_PARAM_READWRITE); } return procedure; @@ -3163,9 +3168,10 @@ designer_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { + GBytes *settings_bytes = NULL; PikaDrawable *drawable; gint x, y, w, h; @@ -3197,24 +3203,27 @@ designer_run (PikaProcedure *procedure, NULL); } + s.com.numtexture = 0; + /* Temporary code replacing legacy pika_[gs]et_data() using an AUX argument. + * This doesn't actually fix the "Reset to initial values|factory defaults" + * features, but at least makes per-run value storage work. + * TODO: eventually we want proper separate arguments as a complete fix. + */ + g_object_get (config, "settings-data", &settings_bytes, NULL); + if (settings_bytes != NULL && g_bytes_get_size (settings_bytes) == sizeof (sphere)) + s = *((sphere *) g_bytes_get_data (settings_bytes, NULL)); + g_bytes_unref (settings_bytes); + switch (run_mode) { case PIKA_RUN_INTERACTIVE: - s.com.numtexture = 0; - pika_get_data (PLUG_IN_PROC, &s); - if (! sphere_main (drawable)) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); break; case PIKA_RUN_WITH_LAST_VALS: - s.com.numtexture = 0; - pika_get_data (PLUG_IN_PROC, &s); - if (s.com.numtexture == 0) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, @@ -3227,7 +3236,9 @@ designer_run (PikaProcedure *procedure, NULL); } - pika_set_data (PLUG_IN_PROC, &s, sizeof (s)); + settings_bytes = g_bytes_new (&s, sizeof (sphere)); + g_object_set (config, "settings-data", settings_bytes, NULL); + g_bytes_unref (settings_bytes); realrender (drawable); pika_displays_flush (); diff --git a/plug-ins/common/tile-small.c b/plug-ins/common/tile-small.c index 2d31aa1..1461875 100644 --- a/plug-ins/common/tile-small.c +++ b/plug-ins/common/tile-small.c @@ -98,7 +98,7 @@ struct _TileClass #define TILE_TYPE (tile_get_type ()) -#define TILE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TILE_TYPE, Tile)) +#define TILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TILE_TYPE, Tile)) GType tile_get_type (void) G_GNUC_CONST; @@ -111,43 +111,49 @@ static PikaValueArray * tile_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static gboolean tileit_dialog (PikaDrawable *drawable); +static gboolean tileit_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable); -static void tileit_scale_update (PikaLabelSpin *entry, - gint *value); +static void tileit_scale_update (PikaLabelSpin *entry, + gint *value); +static void tileit_config_update (PikaLabelSpin *entry, + PikaProcedureConfig *config); -static void tileit_exp_update (GtkWidget *widget, - gpointer value); -static void tileit_exp_update_f (GtkWidget *widget, - gpointer value); +static void tileit_exp_update (GtkWidget *widget, + gpointer value); +static void tileit_exp_update_f (GtkWidget *widget, + gpointer value); -static void tileit_reset (GtkWidget *widget, - gpointer value); -static void tileit_radio_update (GtkWidget *widget, - gpointer data); -static void tileit_hvtoggle_update (GtkWidget *widget, - gpointer data); +static void tileit_reset (GtkWidget *widget, + gpointer value); +static void tileit_radio_update (GtkWidget *widget, + gpointer data); +static void tileit_hvtoggle_update (GtkWidget *widget, + gpointer data); -static void do_tiles (PikaDrawable *drawable); -static gint tiles_xy (gint width, - gint height, - gint x, - gint y, - gint *nx, - gint *ny); +static void do_tiles (PikaProcedureConfig *config, + PikaDrawable *drawable); +static gint tiles_xy (PikaProcedureConfig *config, + gint width, + gint height, + gint x, + gint y, + gint *nx, + gint *ny); static void all_update (void); static void alt_update (void); static void explicit_update (gboolean); static void dialog_update_preview (void); -static void cache_preview (PikaDrawable *drawable); -static gboolean tileit_preview_draw (GtkWidget *widget, - cairo_t *cr); -static gboolean tileit_preview_events (GtkWidget *widget, - GdkEvent *event); +static void cache_preview (PikaDrawable *drawable); +static gboolean tileit_preview_draw (GtkWidget *widget, + cairo_t *cr); +static gboolean tileit_preview_events (GtkWidget *widget, + GdkEvent *event); G_DEFINE_TYPE (Tile, tile, PIKA_TYPE_PLUG_IN) @@ -276,8 +282,8 @@ tile_create_procedure (PikaPlugIn *plug_in, "1997"); PIKA_PROC_ARG_INT (procedure, "num-tiles", - "Num tiles", - "Number of tiles to make", + _("_n²"), + _("Number of tiles to make"), 2, MAX_SEGS, 2, G_PARAM_READWRITE); } @@ -291,7 +297,7 @@ tile_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; @@ -352,9 +358,7 @@ tile_run (PikaProcedure *procedure, switch (run_mode) { case PIKA_RUN_INTERACTIVE: - pika_get_data (PLUG_IN_PROC, &itvals); - - if (! tileit_dialog (drawable)) + if (! tileit_dialog (procedure, config, drawable)) { return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, @@ -363,11 +367,7 @@ tile_run (PikaProcedure *procedure, break; case PIKA_RUN_NONINTERACTIVE: - itvals.numtiles = PIKA_VALUES_GET_INT (args, 0); - break; - case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (PLUG_IN_PROC, &itvals); break; } @@ -376,13 +376,10 @@ tile_run (PikaProcedure *procedure, { pika_progress_init (_("Tiling")); - do_tiles (drawable); + do_tiles (config, drawable); if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); - - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &itvals, sizeof (TileItVals)); } else { @@ -418,9 +415,11 @@ spin_button_new (GtkAdjustment **adjustment, /* return value */ } static gboolean -tileit_dialog (PikaDrawable *drawable) +tileit_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable) { - GtkWidget *dlg; + GtkWidget *dialog; GtkWidget *main_vbox; GtkWidget *hbox; GtkWidget *vbox; @@ -439,25 +438,20 @@ tileit_dialog (PikaDrawable *drawable) cache_preview (drawable); /* Get the preview image */ - dlg = pika_dialog_new (_("Small Tiles"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, + dialog = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Small Tiles")); - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, + pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), + GTK_RESPONSE_OK, + GTK_RESPONSE_CANCEL, + -1); - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dlg), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - pika_window_set_transient (GTK_WINDOW (dlg)); + pika_window_set_transient (GTK_WINDOW (dialog)); main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))), + gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), main_vbox, TRUE, TRUE, 0); gtk_widget_show (main_vbox); @@ -658,23 +652,31 @@ tileit_dialog (PikaDrawable *drawable) gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 6); /* Lower frame saying how many segments */ - frame = pika_frame_new (_("Number of Segments")); - gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - scale = pika_scale_entry_new ("_n²", itvals.numtiles, 2, MAX_SEGS, 0); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), "segments-label", + _("Number of Segments"), FALSE, FALSE); + scale = pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "num-tiles", 1); g_signal_connect (scale, "value-changed", - G_CALLBACK (tileit_scale_update), - &itvals.numtiles); - gtk_container_add (GTK_CONTAINER (frame), scale); - gtk_widget_show (scale); + G_CALLBACK (tileit_config_update), + config); - gtk_widget_show (dlg); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "num-tiles-frame", + "segments-label", FALSE, + "num-tiles"); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), "num-tiles-frame", + NULL); + + gtk_widget_show (dialog); + + g_object_get (config, + "num-tiles", &itvals.numtiles, + NULL); dialog_update_preview (); - run = (pika_dialog_run (PIKA_DIALOG (dlg)) == GTK_RESPONSE_OK); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); - gtk_widget_destroy (dlg); + gtk_widget_destroy (dialog); return run; } @@ -895,6 +897,17 @@ tileit_scale_update (PikaLabelSpin *scale, dialog_update_preview (); } +static void +tileit_config_update (PikaLabelSpin *scale, + PikaProcedureConfig *config) +{ + g_object_get (config, + "num-tiles", &itvals.numtiles, + NULL); + + dialog_update_preview (); +} + static void tileit_reset (GtkWidget *widget, gpointer data) @@ -979,7 +992,8 @@ cache_preview (PikaDrawable *drawable) } static void -do_tiles (PikaDrawable *drawable) +do_tiles (PikaProcedureConfig *config, + PikaDrawable *drawable) { GeglBuffer *src_buffer; GeglBuffer *dest_buffer; @@ -1027,7 +1041,8 @@ do_tiles (PikaDrawable *drawable) for (col = dest_roi.x; col < (dest_roi.x + dest_roi.width); col++) { - tiles_xy (sel_width, + tiles_xy (config, + sel_width, sel_height, col - sel_x1, row - sel_y1, @@ -1066,23 +1081,31 @@ do_tiles (PikaDrawable *drawable) /* Get the xy pos and any action */ static gint -tiles_xy (gint width, - gint height, - gint x, - gint y, - gint *nx, - gint *ny) +tiles_xy (PikaProcedureConfig *config, + gint width, + gint height, + gint x, + gint y, + gint *nx, + gint *ny) { gint px,py; gint rnum,cnum; gint actiontype; - gdouble rnd = 1 - (1.0 / (gdouble) itvals.numtiles) + 0.01; + gint num_tiles; + gdouble rnd; - rnum = y * itvals.numtiles / height; + g_object_get (config, + "num-tiles", &num_tiles, + NULL); - py = (y * itvals.numtiles) % height; - px = (x * itvals.numtiles) % width; - cnum = x * itvals.numtiles / width; + rnd = 1 - (1.0 / (gdouble) num_tiles) + 0.01; + + rnum = y * num_tiles / height; + + py = (y * num_tiles) % height; + px = (x * num_tiles) % width; + cnum = x * num_tiles / width; if ((actiontype = tileactions[cnum][rnum])) { @@ -1091,7 +1114,7 @@ tiles_xy (gint width, gdouble pyr; pyr = height - y - 1 + rnd; - py = ((gint) (pyr * (gdouble) itvals.numtiles)) % height; + py = ((gint) (pyr * (gdouble) num_tiles)) % height; } if (actiontype & HORIZONTAL) @@ -1099,14 +1122,14 @@ tiles_xy (gint width, gdouble pxr; pxr = width - x - 1 + rnd; - px = ((gint) (pxr * (gdouble) itvals.numtiles)) % width; + px = ((gint) (pxr * (gdouble) num_tiles)) % width; } } *nx = px; *ny = py; - return(actiontype); + return (actiontype); } diff --git a/plug-ins/common/tile.c b/plug-ins/common/tile.c index 0187c13..bf917aa 100644 --- a/plug-ins/common/tile.c +++ b/plug-ins/common/tile.c @@ -37,15 +37,6 @@ #define PLUG_IN_ROLE "pika-tile" -typedef struct -{ - gint new_width; - gint new_height; - gint constrain; - gint new_image; -} TileVals; - - typedef struct _Tile Tile; typedef struct _TileClass TileClass; @@ -61,7 +52,7 @@ struct _TileClass #define TILE_TYPE (tile_get_type ()) -#define TILE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TILE_TYPE, Tile)) +#define TILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TILE_TYPE, Tile)) GType tile_get_type (void) G_GNUC_CONST; @@ -74,11 +65,14 @@ static PikaValueArray * tile_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void tile (PikaImage *image, PikaDrawable *drawable, + gint new_width, + gint new_height, + gboolean create_new_image, PikaImage **new_image, PikaLayer **new_layer); @@ -89,7 +83,9 @@ static void tile_gegl (GeglBuffer *src, gint dst_width, gint dst_height); -static gboolean tile_dialog (PikaImage *image, +static gboolean tile_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaImage *image, PikaDrawable *drawable); @@ -99,15 +95,6 @@ PIKA_MAIN (TILE_TYPE) DEFINE_STD_SET_I18N -static TileVals tvals = -{ - 1, /* new_width */ - 1, /* new_height */ - TRUE, /* constrain */ - TRUE /* new_image */ -}; - - static void tile_class_init (TileClass *klass) { @@ -166,20 +153,28 @@ tile_create_procedure (PikaPlugIn *plug_in, "Spencer Kimball & Peter Mattis", "1996-1997"); + /* XXX: we actually don't care about the default value as we always set + * the width/height of the active image, though it would be nice to reuse + * the previously stored value if we run tile on the same image twice. + * TODO: a flag and/or some special handler function would be interesting + * for such specific cases where a hardcoded default value doesn't make + * sense or when we want stored values to only apply when run on a same + * image. + */ PIKA_PROC_ARG_INT (procedure, "new-width", - "New width", + "New _width", "New (tiled) image width", 1, PIKA_MAX_IMAGE_SIZE, 1, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "new-height", - "New height", + "New _height", "New (tiled) image height", 1, PIKA_MAX_IMAGE_SIZE, 1, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "new-image", - "New image", + "New _image", "Create a new image", TRUE, G_PARAM_READWRITE); @@ -206,13 +201,16 @@ tile_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals; PikaLayer *new_layer; PikaImage *new_image; PikaDrawable *drawable; + gint new_width; + gint new_height; + gboolean create_new_image; gegl_init (NULL, NULL); @@ -236,9 +234,7 @@ tile_run (PikaProcedure *procedure, switch (run_mode) { case PIKA_RUN_INTERACTIVE: - pika_get_data (PLUG_IN_PROC, &tvals); - - if (! tile_dialog (image, drawable)) + if (! tile_dialog (procedure, config, image, drawable)) { return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, @@ -247,29 +243,26 @@ tile_run (PikaProcedure *procedure, break; case PIKA_RUN_NONINTERACTIVE: - tvals.new_width = PIKA_VALUES_GET_INT (args, 0); - tvals.new_height = PIKA_VALUES_GET_INT (args, 1); - tvals.new_image = PIKA_VALUES_GET_BOOLEAN (args, 2); break; case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (PLUG_IN_PROC, &tvals); break; } + g_object_get (config, + "new-width", &new_width, + "new-height", &new_height, + "new-image", &create_new_image, + NULL); + pika_progress_init (_("Tiling")); - tile (image, - drawable, - &new_image, - &new_layer); - - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &tvals, sizeof (TileVals)); + tile (image, drawable, new_width, new_height, + create_new_image, &new_image, &new_layer); if (run_mode != PIKA_RUN_NONINTERACTIVE) { - if (tvals.new_image) + if (create_new_image) pika_display_new (new_image); else pika_displays_flush (); @@ -353,20 +346,21 @@ tile_gegl (GeglBuffer *src, static void tile (PikaImage *image, PikaDrawable *drawable, + gint new_width, + gint new_height, + gboolean create_new_image, PikaImage **new_image, PikaLayer **new_layer) { PikaDrawable *dst_drawable; GeglBuffer *dst_buffer; GeglBuffer *src_buffer; - gint dst_width = tvals.new_width; - gint dst_height = tvals.new_height; gint src_width = pika_drawable_get_width (drawable); gint src_height = pika_drawable_get_height (drawable); PikaImageBaseType image_type = PIKA_RGB; - if (tvals.new_image) + if (create_new_image) { /* create a new image */ gint32 precision = pika_image_get_precision (image); @@ -389,8 +383,8 @@ tile (PikaImage *image, break; } - *new_image = pika_image_new_with_precision (dst_width, - dst_height, + *new_image = pika_image_new_with_precision (new_width, + new_height, image_type, precision); pika_image_undo_disable (*new_image); @@ -407,7 +401,7 @@ tile (PikaImage *image, } *new_layer = pika_layer_new (*new_image, _("Background"), - dst_width, dst_height, + new_width, new_height, pika_drawable_type (drawable), 100, pika_image_get_default_new_layer_mode (*new_image)); @@ -424,17 +418,17 @@ tile (PikaImage *image, *new_layer = NULL; pika_image_undo_group_start (image); - pika_image_resize (image, dst_width, dst_height, 0, 0); + pika_image_resize (image, new_width, new_height, 0, 0); if (pika_item_is_layer (PIKA_ITEM (drawable))) { - pika_layer_resize (PIKA_LAYER (drawable), dst_width, dst_height, 0, 0); + pika_layer_resize (PIKA_LAYER (drawable), new_width, new_height, 0, 0); } else if (pika_item_is_layer_mask (PIKA_ITEM (drawable))) { PikaLayer *layer = pika_layer_from_mask (PIKA_LAYER_MASK (drawable)); - pika_layer_resize (layer, dst_width, dst_height, 0, 0); + pika_layer_resize (layer, new_width, new_height, 0, 0); } dst_drawable = drawable; @@ -444,12 +438,12 @@ tile (PikaImage *image, dst_buffer = pika_drawable_get_buffer (dst_drawable); tile_gegl (src_buffer, src_width, src_height, - dst_buffer, dst_width, dst_height); + dst_buffer, new_width, new_height); gegl_buffer_flush (dst_buffer); - pika_drawable_update (dst_drawable, 0, 0, dst_width, dst_height); + pika_drawable_update (dst_drawable, 0, 0, new_width, new_height); - if (tvals.new_image) + if (create_new_image) { pika_image_undo_enable (*new_image); } @@ -463,98 +457,46 @@ tile (PikaImage *image, } static gboolean -tile_dialog (PikaImage *image, - PikaDrawable *drawable) +tile_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaImage *image, + PikaDrawable *drawable) { GtkWidget *dlg; - GtkWidget *vbox; - GtkWidget *frame; - GtkWidget *sizeentry; - GtkWidget *chainbutton; - GtkWidget *toggle; gint width; gint height; - gdouble xres; - gdouble yres; - PikaUnit unit; gboolean run; pika_ui_init (PLUG_IN_BINARY); width = pika_drawable_get_width (drawable); height = pika_drawable_get_height (drawable); - unit = pika_image_get_unit (image); - pika_image_get_resolution (image, &xres, &yres); - tvals.new_width = width; - tvals.new_height = height; + g_object_set (config, + "new-width", width, + "new-height", height, + NULL); - dlg = pika_dialog_new (_("Tile"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, + dlg = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Tile")); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dlg), + "new-size-label", _("Tile to New Size"), + FALSE, FALSE); + /* TODO: we should have a new PikaProcedureDialog widget which would tie 2 + * arguments for dimensions (or coordinates), and possibly more aux args for + * the constrain boolean choice, the unit, etc. + */ + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dlg), + "new-size-box", + "new-width", "new-height", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dlg), + "new-size-frame", "new-size-label", FALSE, + "new-size-box"); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dlg), "new-size-frame", "new-image", NULL); - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dlg), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - pika_window_set_transient (GTK_WINDOW (dlg)); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))), - vbox, TRUE, TRUE, 0); - gtk_widget_show (vbox); - - frame = pika_frame_new (_("Tile to New Size")); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - sizeentry = pika_coordinates_new (unit, "%a", TRUE, TRUE, 8, - PIKA_SIZE_ENTRY_UPDATE_SIZE, - - tvals.constrain, TRUE, - - _("_Width:"), width, xres, - 1, PIKA_MAX_IMAGE_SIZE, - 0, width, - - _("_Height:"), height, yres, - 1, PIKA_MAX_IMAGE_SIZE, - 0, height); - gtk_container_add (GTK_CONTAINER (frame), sizeentry); - gtk_widget_show (sizeentry); - - chainbutton = GTK_WIDGET (PIKA_COORDINATES_CHAINBUTTON (sizeentry)); - - toggle = gtk_check_button_new_with_mnemonic (_("C_reate new image")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), tvals.new_image); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &tvals.new_image); - - gtk_widget_show (dlg); - - run = (pika_dialog_run (PIKA_DIALOG (dlg)) == GTK_RESPONSE_OK); - - if (run) - { - tvals.new_width = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (sizeentry), 0)); - tvals.new_height = - RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (sizeentry), 1)); - - tvals.constrain = - pika_chain_button_get_active (PIKA_CHAIN_BUTTON (chainbutton)); - } + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dlg)); gtk_widget_destroy (dlg); diff --git a/plug-ins/common/unit-editor.c b/plug-ins/common/unit-editor.c index 5daa595..b56dd5f 100644 --- a/plug-ins/common/unit-editor.c +++ b/plug-ins/common/unit-editor.c @@ -49,7 +49,6 @@ enum PLURAL, UNIT, USER_UNIT, - BG_COLOR, NUM_COLUMNS }; @@ -80,7 +79,7 @@ static PikaProcedure * editor_create_procedure (PikaPlugIn *plug_in, const gchar *name); static PikaValueArray * editor_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaUnit new_unit_dialog (GtkWindow *main_window, @@ -224,8 +223,7 @@ on_app_activate (GApplication *gapp, gpointer user_data) G_TYPE_STRING, /* SINGULAR */ G_TYPE_STRING, /* PLURAL */ PIKA_TYPE_UNIT, /* UNIT */ - G_TYPE_BOOLEAN, /* USER_UNIT */ - GDK_TYPE_RGBA); /* BG_COLOR */ + G_TYPE_BOOLEAN); /* USER_UNIT */ self->tv = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store)); g_object_unref (list_store); @@ -322,9 +320,8 @@ on_app_activate (GApplication *gapp, gpointer user_data) col = gtk_tree_view_column_new_with_attributes (gettext (columns[SAVE].title), rend, - "active", SAVE, - "activatable", USER_UNIT, - "cell-background-rgba", BG_COLOR, + "active", SAVE, + "activatable", USER_UNIT, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (self->tv), col); @@ -351,8 +348,7 @@ on_app_activate (GApplication *gapp, gpointer user_data) col = gtk_tree_view_column_new_with_attributes (gettext (columns[i].title), gtk_cell_renderer_text_new (), - "text", i, - "cell-background-rgba", BG_COLOR, + "text", i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (self->tv), col); @@ -396,7 +392,7 @@ unit_editor_help_clicked (GtkWidget *window) static PikaValueArray * editor_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaUnitEditor *editor = PIKA_UNIT_EDITOR (run_data); @@ -736,7 +732,6 @@ unit_list_init (GtkTreeView *tv) GtkTreeIter iter; gint num_units; PikaUnit unit; - GdkRGBA color; list_store = GTK_LIST_STORE (gtk_tree_view_get_model (tv)); @@ -744,11 +739,6 @@ unit_list_init (GtkTreeView *tv) num_units = pika_unit_get_number_of_units (); - color.red = 0.87; - color.green = 0.87; - color.blue = 1; - color.alpha = 1; - for (unit = PIKA_UNIT_INCH; unit < num_units; unit++) { gboolean user_unit = (unit >= pika_unit_get_number_of_built_in_units ()); @@ -765,9 +755,6 @@ unit_list_init (GtkTreeView *tv) PLURAL, pika_unit_get_plural (unit), UNIT, unit, USER_UNIT, user_unit, - - user_unit ? -1 : BG_COLOR, &color, - -1); } diff --git a/plug-ins/common/van-gogh-lic.c b/plug-ins/common/van-gogh-lic.c index 3df439e..d61a35d 100644 --- a/plug-ins/common/van-gogh-lic.c +++ b/plug-ins/common/van-gogh-lic.c @@ -90,11 +90,13 @@ static PikaValueArray * lic_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static void lic_scale_entry_update (PikaLabelSpin *entry, - gdouble *value); +static gboolean create_main_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config); +static void compute_image (PikaProcedureConfig *config, + PikaDrawable *drawable); G_DEFINE_TYPE (Lic, lic, PIKA_TYPE_PLUG_IN) @@ -117,6 +119,172 @@ lic_init (Lic *lic) { } +static GList * +lic_query_procedures (PikaPlugIn *plug_in) +{ + return g_list_append (NULL, g_strdup (PLUG_IN_PROC)); +} + +static PikaProcedure * +lic_create_procedure (PikaPlugIn *plug_in, + const gchar *name) +{ + PikaProcedure *procedure = NULL; + + if (! strcmp (name, PLUG_IN_PROC)) + { + procedure = pika_image_procedure_new (plug_in, name, + PIKA_PDB_PROC_TYPE_PLUGIN, + lic_run, NULL, NULL); + + pika_procedure_set_image_types (procedure, "RGB*"); + pika_procedure_set_sensitivity_mask (procedure, + PIKA_PROCEDURE_SENSITIVE_DRAWABLE); + + pika_procedure_set_menu_label (procedure, _("_Van Gogh (LIC)...")); + pika_procedure_add_menu_path (procedure, "/Filters/Artistic"); + + pika_procedure_set_documentation (procedure, + _("Special effects that nobody " + "understands"), + "No help yet", + name); + pika_procedure_set_attribution (procedure, + "Tom Bech & Federico Mena Quintero", + "Tom Bech & Federico Mena Quintero", + "Version 0.14, September 24 1997"); + + PIKA_PROC_ARG_CHOICE (procedure, "effect-channel", + _("E_ffect Channel"), + _("Effect Channel"), + pika_choice_new_with_values ("hue", LIC_HUE, _("Hue"), NULL, + "saturation", LIC_SATURATION, _("Saturation"), NULL, + "brightness", LIC_BRIGHTNESS, _("Brightness"), NULL, + NULL), + "brightness", + G_PARAM_READWRITE); + + PIKA_PROC_ARG_CHOICE (procedure, "effect-operator", + _("Effect O_perator"), + _("Effect Operator"), + pika_choice_new_with_values ("derivative", 0, _("Derivative"), NULL, + "gradient", 1, _("Gradient"), NULL, + NULL), + "gradient", + G_PARAM_READWRITE); + + PIKA_PROC_ARG_CHOICE (procedure, "effect-convolve", + _("Con_volve"), + _("Convolve"), + pika_choice_new_with_values ("with-white-noise", 0, _("With white noise"), NULL, + "with-source-image", 1, _("With source image"), NULL, + NULL), + "with-source-image", + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DRAWABLE (procedure, "effect-image", + _("Effect i_mage"), + _("Effect image"), + TRUE, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "filter-length", + _("Fil_ter length"), + _("Filter length"), + 0.1, 64.0, 5.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "noise-magnitude", + _("_Noise Magnitude"), + _("Noise Magnitude"), + 1.0, 5.0, 2.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "integration-steps", + _("Inte_gration steps"), + _("Integration steps"), + 1.0, 40.0, 25.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "min-value", + _("Minimum v_alue"), + _("Minimum value"), + -100.0, 0, -25.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "max-value", + _("Ma_ximum value"), + _("Maximum value"), + 0.0, 100, 25.0, + G_PARAM_READWRITE); + } + + return procedure; +} + +static PikaValueArray * +lic_run (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + PikaProcedureConfig *config, + gpointer run_data) +{ + PikaDrawable *drawable; + + gegl_init (NULL, NULL); + + if (n_drawables != 1) + { + GError *error = NULL; + + g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, + _("Procedure '%s' only works with one drawable."), + PLUG_IN_PROC); + + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CALLING_ERROR, + error); + } + else + { + drawable = drawables[0]; + } + + /* Make sure that the drawable is RGBA or RGB color */ + /* ================================================ */ + + if (pika_drawable_is_rgb (drawable)) + { + switch (run_mode) + { + case PIKA_RUN_INTERACTIVE: + if (! create_main_dialog (procedure, config)) + { + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); + } + /* fallthrough */ + + case PIKA_RUN_WITH_LAST_VALS: + compute_image (config, drawable); + break; + + default: + break; + } + } + else + { + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + NULL); + } + + return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); +} /*****************************/ /* Global variables and such */ @@ -124,21 +292,6 @@ lic_init (Lic *lic) static gdouble G[numx][numy][2]; -typedef struct -{ - gdouble filtlen; - gdouble noisemag; - gdouble intsteps; - gdouble minv; - gdouble maxv; - gint effect_channel; - gint effect_operator; - gint effect_convolve; - gint32 effect_image_id; -} LicValues; - -static LicValues licvals; - static gdouble l = 10.0; static gdouble dx = 2.0; static gdouble dy = 2.0; @@ -151,8 +304,6 @@ static gboolean source_drw_has_alpha = FALSE; static gint effect_width, effect_height; static gint border_x, border_y, border_w, border_h; -static GtkWidget *dialog; - /************************/ /* Convenience routines */ /************************/ @@ -546,15 +697,20 @@ rgb_to_hsl (PikaDrawable *drawable, static void -compute_lic (PikaDrawable *drawable, - const guchar *scalarfield, - gboolean rotate) +compute_lic (PikaProcedureConfig *config, + PikaDrawable *drawable, + const guchar *scalarfield, + gboolean rotate) { GeglBuffer *src_buffer; GeglBuffer *dest_buffer; gint xcount, ycount; PikaRGB color; gdouble vx, vy, tmp; + gint effect_convolve; + + effect_convolve = pika_procedure_config_get_choice_id (config, + "effect-convolve"); src_buffer = pika_drawable_get_buffer (drawable); dest_buffer = pika_drawable_get_shadow_buffer (drawable); @@ -588,7 +744,7 @@ compute_lic (PikaDrawable *drawable, /* Convolve with the LIC at (x,y) */ /* ============================== */ - if (licvals.effect_convolve == 0) + if (effect_convolve == 0) { peek (src_buffer, xcount, ycount, &color); @@ -617,10 +773,37 @@ compute_lic (PikaDrawable *drawable, } static void -compute_image (PikaDrawable *drawable) +compute_image (PikaProcedureConfig *config, + PikaDrawable *drawable) { PikaDrawable *effect_image; guchar *scalarfield = NULL; + gdouble filtlen; + gdouble noisemag; + gdouble intsteps; + gdouble minv; + gdouble maxv; + gint effect_channel; + gint effect_operator; + gint effect_convolve; + + g_object_get (config, + "filter-length", &filtlen, + "noise-magnitude", &noisemag, + "effect-image", &effect_image, + "integration-steps", &intsteps, + "min-value", &minv, + "max-value", &maxv, + NULL); + effect_channel = pika_procedure_config_get_choice_id (config, + "effect-channel"); + effect_operator = pika_procedure_config_get_choice_id (config, + "effect-operator"); + effect_convolve = pika_procedure_config_get_choice_id (config, + "effect-convolve"); + + if (! effect_image) + return; /* Get some useful info on the input drawable */ /* ========================================== */ @@ -631,39 +814,38 @@ compute_image (PikaDrawable *drawable) pika_progress_init (_("Van Gogh (LIC)")); - if (licvals.effect_convolve == 0) + if (effect_convolve == 0) generatevectors (); - if (licvals.filtlen < 0.1) - licvals.filtlen = 0.1; + if (filtlen < 0.1) + filtlen = 0.1; - l = licvals.filtlen; - dx = dy = licvals.noisemag; - minv = licvals.minv / 10.0; - maxv = licvals.maxv / 10.0; - isteps = licvals.intsteps; + l = filtlen; + dx = dy = noisemag; + minv = minv / 10.0; + maxv = maxv / 10.0; + isteps = intsteps; source_drw_has_alpha = pika_drawable_has_alpha (drawable); - effect_image = pika_drawable_get_by_id (licvals.effect_image_id); - effect_width = pika_drawable_get_width (effect_image); effect_height = pika_drawable_get_height (effect_image); - switch (licvals.effect_channel) + switch (effect_channel) { - case 0: + case LIC_HUE: scalarfield = rgb_to_hsl (effect_image, LIC_HUE); break; - case 1: + case LIC_SATURATION: scalarfield = rgb_to_hsl (effect_image, LIC_SATURATION); break; - case 2: + case LIC_BRIGHTNESS: scalarfield = rgb_to_hsl (effect_image, LIC_BRIGHTNESS); break; } + g_clear_object (&effect_image); - compute_lic (drawable, scalarfield, licvals.effect_operator); + compute_lic (config, drawable, scalarfield, effect_operator); g_free (scalarfield); @@ -681,301 +863,36 @@ compute_image (PikaDrawable *drawable) /**************************/ static gboolean -effect_image_constrain (PikaImage *image, - PikaItem *item, - gpointer data) +create_main_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config) { - return pika_drawable_is_rgb (PIKA_DRAWABLE (item)); -} - -static gboolean -create_main_dialog (void) -{ - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *frame; - GtkWidget *grid; - GtkWidget *combo; - GtkWidget *scale; - gint row; + GtkWidget *dialog; gboolean run; pika_ui_init (PLUG_IN_BINARY); - dialog = pika_dialog_new (_("Van Gogh (LIC)"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, + dialog = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Van Gogh (LIC)")); - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "filter-length", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "noise-magnitude", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "integration-steps", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "min-value", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "max-value", 1.0); - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - pika_window_set_transient (GTK_WINDOW (dialog)); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - vbox, TRUE, TRUE, 0); - gtk_widget_show (vbox); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - frame = pika_int_radio_group_new (TRUE, _("Effect Channel"), - G_CALLBACK (pika_radio_button_update), - &licvals.effect_channel, NULL, - licvals.effect_channel, - - _("_Hue"), 0, NULL, - _("_Saturation"), 1, NULL, - _("_Brightness"), 2, NULL, - - NULL); - gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - frame = pika_int_radio_group_new (TRUE, _("Effect Operator"), - G_CALLBACK (pika_radio_button_update), - &licvals.effect_operator, NULL, - licvals.effect_operator, - - _("_Derivative"), 0, NULL, - _("_Gradient"), 1, NULL, - - NULL); - gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - frame = pika_int_radio_group_new (TRUE, _("Convolve"), - G_CALLBACK (pika_radio_button_update), - &licvals.effect_convolve, NULL, - licvals.effect_convolve, - - _("_With white noise"), 0, NULL, - _("W_ith source image"), 1, NULL, - - NULL); - gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - /* Effect image menu */ - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - combo = pika_drawable_combo_box_new (effect_image_constrain, NULL, NULL); - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), - licvals.effect_image_id, - G_CALLBACK (pika_int_combo_box_get_active), - &licvals.effect_image_id, NULL); - - pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("_Effect image:"), 0.0, 0.5, combo, 2); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - row = 0; - - scale = pika_scale_entry_new (_("_Filter length:"), licvals.filtlen, 0.1, 64, 1); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 1.0, 8.0); - g_signal_connect (scale, "value-changed", - G_CALLBACK (lic_scale_entry_update), - &licvals.filtlen); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("_Noise magnitude:"), licvals.noisemag, 1, 5, 1); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.1, 1.0); - g_signal_connect (scale, "value-changed", - G_CALLBACK (lic_scale_entry_update), - &licvals.noisemag); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("In_tegration steps:"), licvals.intsteps, 1, 40, 1); - g_signal_connect (scale, "value-changed", - G_CALLBACK (lic_scale_entry_update), - &licvals.intsteps); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("_Minimum value:"), licvals.minv, -100, 0, 1); - g_signal_connect (scale, "value-changed", - G_CALLBACK (lic_scale_entry_update), - &licvals.minv); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("M_aximum value:"), - licvals.maxv, 0, 100, 1); - g_signal_connect (scale, "value-changed", - G_CALLBACK (lic_scale_entry_update), - &licvals.maxv); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), NULL); gtk_widget_show (dialog); - run = (pika_dialog_run (PIKA_DIALOG (dialog)) == GTK_RESPONSE_OK); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); gtk_widget_destroy (dialog); return run; } - -/*************************************/ -/* Set parameters to standard values */ -/*************************************/ - -static void -set_default_settings (void) -{ - licvals.filtlen = 5; - licvals.noisemag = 2; - licvals.intsteps = 25; - licvals.minv = -25; - licvals.maxv = 25; - licvals.effect_channel = 2; - licvals.effect_operator = 1; - licvals.effect_convolve = 1; - licvals.effect_image_id = -1; -} - -static GList * -lic_query_procedures (PikaPlugIn *plug_in) -{ - return g_list_append (NULL, g_strdup (PLUG_IN_PROC)); -} - -static PikaProcedure * -lic_create_procedure (PikaPlugIn *plug_in, - const gchar *name) -{ - PikaProcedure *procedure = NULL; - - if (! strcmp (name, PLUG_IN_PROC)) - { - procedure = pika_image_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - lic_run, NULL, NULL); - - pika_procedure_set_image_types (procedure, "RGB*"); - pika_procedure_set_sensitivity_mask (procedure, - PIKA_PROCEDURE_SENSITIVE_DRAWABLE); - - pika_procedure_set_menu_label (procedure, _("_Van Gogh (LIC)...")); - pika_procedure_add_menu_path (procedure, "/Filters/Artistic"); - - pika_procedure_set_documentation (procedure, - _("Special effects that nobody " - "understands"), - "No help yet", - name); - pika_procedure_set_attribution (procedure, - "Tom Bech & Federico Mena Quintero", - "Tom Bech & Federico Mena Quintero", - "Version 0.14, September 24 1997"); - } - - return procedure; -} - -static PikaValueArray * -lic_run (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - const PikaValueArray *args, - gpointer run_data) -{ - PikaDrawable *drawable; - - gegl_init (NULL, NULL); - - if (n_drawables != 1) - { - GError *error = NULL; - - g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, - _("Procedure '%s' only works with one drawable."), - PLUG_IN_PROC); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CALLING_ERROR, - error); - } - else - { - drawable = drawables[0]; - } - - /* Set default values */ - /* ================== */ - - set_default_settings (); - - /* Possibly retrieve data */ - /* ====================== */ - - pika_get_data (PLUG_IN_PROC, &licvals); - - if (! pika_item_id_is_valid (licvals.effect_image_id)) - licvals.effect_image_id = -1; - - /* Make sure that the drawable is RGBA or RGB color */ - /* ================================================ */ - - if (pika_drawable_is_rgb (drawable)) - { - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! create_main_dialog ()) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - - compute_image (drawable); - - pika_set_data (PLUG_IN_PROC, &licvals, sizeof (LicValues)); - break; - - case PIKA_RUN_WITH_LAST_VALS: - compute_image (drawable); - break; - - default: - break; - } - } - else - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - NULL); - } - - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); -} - -static void -lic_scale_entry_update (PikaLabelSpin *entry, - gdouble *value) -{ - *value = pika_label_spin_get_value (entry); -} diff --git a/plug-ins/common/warp.c b/plug-ins/common/warp.c index f8b6992..42611a8 100644 --- a/plug-ins/common/warp.c +++ b/plug-ins/common/warp.c @@ -87,24 +87,6 @@ enum COLOR }; -typedef struct -{ - gdouble amount; - gint warp_map_id; - gint iter; - gdouble dither; - gdouble angle; - gint wrap_type; - gint mag_map_id; - gint mag_use; - gint substeps; - gint grad_map_id; - gdouble grad_scale; - gint vector_map_id; - gdouble vector_scale; - gdouble vector_angle; -} WarpVals; - typedef struct _Warp Warp; typedef struct _WarpClass WarpClass; @@ -121,7 +103,7 @@ struct _WarpClass #define WARP_TYPE (warp_get_type ()) -#define WARP (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WARP_TYPE, Warp)) +#define WARP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WARP_TYPE, Warp)) GType warp_get_type (void) G_GNUC_CONST; @@ -134,14 +116,15 @@ static PikaValueArray * warp_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void blur16 (PikaDrawable *drawable); -static void diff (PikaDrawable *drawable, - PikaDrawable **xl, - PikaDrawable **yl); +static void diff (PikaDrawable *drawable, + PikaProcedureConfig *config, + PikaDrawable **xl, + PikaDrawable **yl); static void diff_prepare_row (GeglBuffer *buffer, const Babl *format, @@ -150,28 +133,32 @@ static void diff_prepare_row (GeglBuffer *buffer, gint y, gint w); -static void warp_one (PikaDrawable *draw, - PikaDrawable *newid, - PikaDrawable *map_x, - PikaDrawable *map_y, - PikaDrawable *mag_draw, - gboolean first_time, - gint step); +static void warp_one (PikaDrawable *draw, + PikaDrawable *newid, + PikaDrawable *map_x, + PikaDrawable *map_y, + PikaDrawable *mag_draw, + gboolean first_time, + gint step, + PikaProcedureConfig *config); -static void warp (PikaDrawable *drawable); +static void warp (PikaDrawable *drawable, + PikaProcedureConfig *config); -static gboolean warp_dialog (PikaDrawable *drawable); -static void warp_pixel (GeglBuffer *buffer, - const Babl *format, - gint width, - gint height, - gint x1, - gint y1, - gint x2, - gint y2, - gint x, - gint y, - guchar *pixel); +static gboolean warp_dialog (PikaDrawable *drawable, + PikaProcedureConfig *config); +static void warp_pixel (GeglBuffer *buffer, + const Babl *format, + gint width, + gint height, + gint x1, + gint y1, + gint x2, + gint y2, + gint x, + gint y, + guchar *pixel, + PikaProcedureConfig *config); static gboolean warp_map_constrain (PikaImage *image, PikaItem *item, @@ -187,24 +174,6 @@ PIKA_MAIN (WARP_TYPE) DEFINE_STD_SET_I18N -static WarpVals dvals = -{ - 10.0, /* amount */ - -1, /* warp_map_id */ - 5, /* iterations */ - 0.0, /* dither */ - 90.0, /* angle */ - WRAP, /* wrap_type */ - -1, /* mag_map_id */ - FALSE, /* mag_use */ - 1, /* substeps */ - -1, /* grad_map_id */ - 0.0, /* grad_scale */ - -1, /* vector_map_id */ - 0.0, /* vector_scale */ - 0.0 /* vector_angle */ -}; - static gint progress = 0; /* progress indicator bar */ static PikaRunMode run_mode; /* interactive, non-, etc. */ static guchar color_pixel[4] = {0, 0, 0, 255}; /* current fg color */ @@ -359,7 +328,7 @@ warp_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; @@ -393,45 +362,12 @@ warp_run (PikaProcedure *procedure, run_mode = _run_mode; - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - pika_get_data (PLUG_IN_PROC, &dvals); + if (run_mode == PIKA_RUN_INTERACTIVE && ! warp_dialog (drawable, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); - if (! warp_dialog (drawable)) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - case PIKA_RUN_NONINTERACTIVE: - dvals.amount = PIKA_VALUES_GET_DOUBLE (args, 0); - dvals.warp_map_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 1); - dvals.iter = PIKA_VALUES_GET_INT (args, 2); - dvals.dither = PIKA_VALUES_GET_DOUBLE (args, 3); - dvals.angle = PIKA_VALUES_GET_DOUBLE (args, 4); - dvals.wrap_type = PIKA_VALUES_GET_INT (args, 5); - dvals.mag_map_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 6); - dvals.mag_use = PIKA_VALUES_GET_BOOLEAN (args, 7); - dvals.substeps = PIKA_VALUES_GET_INT (args, 8); - dvals.grad_map_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 9); - dvals.grad_scale = PIKA_VALUES_GET_DOUBLE (args, 10); - dvals.vector_map_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 11); - dvals.vector_scale = PIKA_VALUES_GET_DOUBLE (args, 12); - dvals.vector_angle = PIKA_VALUES_GET_DOUBLE (args, 13); - break; - - case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (PLUG_IN_PROC, &dvals); - break; - } - - warp (drawable); - - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &dvals, sizeof (WarpVals)); + warp (drawable, config); if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); @@ -464,7 +400,8 @@ spin_button_new (GtkAdjustment **adjustment, /* return value */ } static gboolean -warp_dialog (PikaDrawable *drawable) +warp_dialog (PikaDrawable *drawable, + PikaProcedureConfig *config) { GtkWidget *dlg; GtkWidget *vbox; @@ -481,8 +418,53 @@ warp_dialog (PikaDrawable *drawable) GSList *group = NULL; gboolean run; + PikaDrawable *warp_map; + PikaDrawable *mag_map; + PikaDrawable *grad_map; + PikaDrawable *vector_map; + gdouble amount; + gdouble dither; + gdouble angle; + gdouble grad_scale; + gdouble vector_scale; + gdouble vector_angle; + gboolean use_mag; + gint substeps; + gint iter_count; + gint wrap_type; + + gint32 warp_map_id; + gint32 mag_map_id; + gint32 grad_map_id; + gint32 vector_map_id; + pika_ui_init (PLUG_IN_BINARY); + g_object_get (config, + "amount", &amount, + "warp-map", &warp_map, + "iter", &iter_count, + "dither", &dither, + "angle", &angle, + "wrap-type", &wrap_type, + "mag-map", &mag_map, + "mag-use", &use_mag, + "substeps", &substeps, + "grad-map", &grad_map, + "grad-scale", &grad_scale, + "vector-map", &vector_map, + "vector-scale", &vector_scale, + "vector-angle", &vector_angle, + NULL); + warp_map_id = pika_item_get_id (PIKA_ITEM (warp_map)); + mag_map_id = pika_item_get_id (PIKA_ITEM (mag_map)); + grad_map_id = pika_item_get_id (PIKA_ITEM (grad_map)); + vector_map_id = pika_item_get_id (PIKA_ITEM (vector_map)); + g_clear_object (&warp_map); + g_clear_object (&mag_map); + g_clear_object (&grad_map); + g_clear_object (&vector_map); + dlg = pika_dialog_new (_("Warp"), PLUG_IN_ROLE, NULL, 0, pika_standard_help_func, PLUG_IN_PROC, @@ -519,7 +501,7 @@ warp_dialog (PikaDrawable *drawable) label_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); /* amount, iter */ - spinbutton = spin_button_new (&adj, dvals.amount, + spinbutton = spin_button_new (&adj, amount, -1000, 1000, /* ??? */ 1, 10, 0, 1, 2); gtk_size_group_add_widget (spin_group, spinbutton); @@ -533,9 +515,9 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (adj, "value-changed", G_CALLBACK (pika_double_adjustment_update), - &dvals.amount); + &amount); - spinbutton = spin_button_new (&adj, dvals.iter, + spinbutton = spin_button_new (&adj, iter_count, 1, 100, 1, 5, 0, 1, 0); gtk_size_group_add_widget (spin_group, spinbutton); @@ -546,7 +528,7 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (adj, "value-changed", G_CALLBACK (pika_int_adjustment_update), - &dvals.iter); + &iter_count); /* Displacement map menu */ label = gtk_label_new (_("Displacement map:")); @@ -562,9 +544,9 @@ warp_dialog (PikaDrawable *drawable) NULL); gtk_widget_set_margin_start (combo, 12); pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), - dvals.warp_map_id, + warp_map_id, G_CALLBACK (pika_int_combo_box_get_active), - &dvals.warp_map_id, NULL); + &warp_map_id, NULL); gtk_grid_attach (GTK_GRID (grid), combo, 2, 1, 1, 1); // GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); @@ -594,10 +576,10 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (toggle, "toggled", G_CALLBACK (pika_radio_button_update), - &dvals.wrap_type); + &wrap_type); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - dvals.wrap_type == WRAP); + wrap_type == WRAP); toggle = gtk_radio_button_new_with_label (group, _("Smear")); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); @@ -609,10 +591,10 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (toggle, "toggled", G_CALLBACK (pika_radio_button_update), - &dvals.wrap_type); + &wrap_type); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - dvals.wrap_type == SMEAR); + wrap_type == SMEAR); toggle = gtk_radio_button_new_with_label (group, _("Black")); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); @@ -624,10 +606,10 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (toggle, "toggled", G_CALLBACK (pika_radio_button_update), - &dvals.wrap_type); + &wrap_type); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - dvals.wrap_type == BLACK); + wrap_type == BLACK); toggle = gtk_radio_button_new_with_label (group, _("Foreground color")); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); @@ -639,10 +621,10 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (toggle, "toggled", G_CALLBACK (pika_radio_button_update), - &dvals.wrap_type); + &wrap_type); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - dvals.wrap_type == COLOR); + wrap_type == COLOR); @@ -659,7 +641,7 @@ warp_dialog (PikaDrawable *drawable) gtk_container_add (GTK_CONTAINER (frame), grid); gtk_widget_show (grid); - spinbutton = spin_button_new (&adj, dvals.dither, + spinbutton = spin_button_new (&adj, dither, 0, 100, 1, 10, 0, 1, 2); gtk_size_group_add_widget (spin_group, spinbutton); @@ -670,9 +652,9 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (adj, "value-changed", G_CALLBACK (pika_double_adjustment_update), - &dvals.dither); + &dither); - spinbutton = spin_button_new (&adj, dvals.angle, + spinbutton = spin_button_new (&adj, angle, 0, 360, 1, 15, 0, 1, 1); gtk_size_group_add_widget (spin_group, spinbutton); @@ -683,9 +665,9 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (adj, "value-changed", G_CALLBACK (pika_double_adjustment_update), - &dvals.angle); + &angle); - spinbutton = spin_button_new (&adj, dvals.substeps, + spinbutton = spin_button_new (&adj, substeps, 1, 100, 1, 5, 0, 1, 0); gtk_size_group_add_widget (spin_group, spinbutton); @@ -696,7 +678,7 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (adj, "value-changed", G_CALLBACK (pika_int_adjustment_update), - &dvals.substeps); + &substeps); /* Magnitude map menu */ label = gtk_label_new (_("Magnitude map:")); @@ -712,9 +694,9 @@ warp_dialog (PikaDrawable *drawable) NULL); gtk_widget_set_margin_start (combo, 12); pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), - dvals.mag_map_id, + mag_map_id, G_CALLBACK (pika_int_combo_box_get_active), - &dvals.mag_map_id, NULL); + &mag_map_id, NULL); gtk_grid_attach (GTK_GRID (grid), combo, 2, 1, 1, 1); // GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); @@ -730,12 +712,12 @@ warp_dialog (PikaDrawable *drawable) toggle = gtk_check_button_new_with_label (_("Use magnitude map")); gtk_widget_set_margin_start (toggle, 12); gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), dvals.mag_use); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_mag); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (pika_toggle_button_update), - &dvals.mag_use); + &use_mag); /* -------------------------------------------------------------------- */ @@ -751,7 +733,7 @@ warp_dialog (PikaDrawable *drawable) gtk_container_add (GTK_CONTAINER (frame), grid); gtk_widget_show (grid); - spinbutton = spin_button_new (&adj, dvals.grad_scale, + spinbutton = spin_button_new (&adj, grad_scale, -1000, 1000, /* ??? */ 0.01, 0.1, 0, 1, 3); gtk_size_group_add_widget (spin_group, spinbutton); @@ -763,7 +745,7 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (adj, "value-changed", G_CALLBACK (pika_double_adjustment_update), - &dvals.grad_scale); + &grad_scale); /* --------- Gradient map menu ---------------- */ @@ -776,15 +758,15 @@ warp_dialog (PikaDrawable *drawable) gtk_widget_show (combo); pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), - dvals.grad_map_id, + grad_map_id, G_CALLBACK (pika_int_combo_box_get_active), - &dvals.grad_map_id, NULL); + &grad_map_id, NULL); pika_help_set_help_data (combo, _("Gradient map selection menu"), NULL); /* ---------------------------------------------- */ - spinbutton = spin_button_new (&adj, dvals.vector_scale, + spinbutton = spin_button_new (&adj, vector_scale, -1000, 1000, /* ??? */ 0.01, 0.1, 0, 1, 3); gtk_size_group_add_widget (spin_group, spinbutton); @@ -796,11 +778,11 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (adj, "value-changed", G_CALLBACK (pika_double_adjustment_update), - &dvals.vector_scale); + &vector_scale); /* -------------------------------------------------------- */ - spinbutton = spin_button_new (&adj, dvals.vector_angle, + spinbutton = spin_button_new (&adj, vector_angle, 0, 360, 1, 15, 0, 1, 1); gtk_size_group_add_widget (spin_group, spinbutton); @@ -811,7 +793,7 @@ warp_dialog (PikaDrawable *drawable) g_signal_connect (adj, "value-changed", G_CALLBACK (pika_double_adjustment_update), - &dvals.vector_angle); + &vector_angle); /* --------- Vector map menu ---------------- */ combo = pika_drawable_combo_box_new (warp_map_constrain, @@ -823,9 +805,9 @@ warp_dialog (PikaDrawable *drawable) gtk_widget_show (combo); pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), - dvals.vector_map_id, + vector_map_id, G_CALLBACK (pika_int_combo_box_get_active), - &dvals.vector_map_id, NULL); + &vector_map_id, NULL); pika_help_set_help_data (combo, _("Fixed-direction-vector map selection menu"), @@ -837,6 +819,23 @@ warp_dialog (PikaDrawable *drawable) gtk_widget_destroy (dlg); + g_object_set (config, + "amount", amount, + "warp-map", pika_drawable_get_by_id (warp_map_id), + "iter", iter_count, + "dither", dither, + "angle", angle, + "wrap-type", wrap_type, + "mag-map", pika_drawable_get_by_id (mag_map_id), + "mag-use", use_mag, + "substeps", substeps, + "grad-map", pika_drawable_get_by_id (grad_map_id), + "grad-scale", grad_scale, + "vector-map", pika_drawable_get_by_id (vector_map_id), + "vector-scale", vector_scale, + "vector-angle", vector_angle, + NULL); + return run; } @@ -1016,15 +1015,13 @@ diff_prepare_row (GeglBuffer *buffer, /* -------------------------------------------------------------------------- */ static void -diff (PikaDrawable *drawable, - PikaDrawable **xl, - PikaDrawable **yl) +diff (PikaDrawable *drawable, + PikaProcedureConfig *config, + PikaDrawable **xl, + PikaDrawable **yl) { PikaDrawable *draw_xd; PikaDrawable *draw_yd; /* vector disp. drawables */ - PikaDrawable *mdraw; - PikaDrawable *vdraw; - PikaDrawable *gdraw; PikaImage *image; /* image holding X and Y diff. arrays */ PikaImage *new_image; /* image holding X and Y diff. layers */ GList *selected_layers; /* currently selected layers */ @@ -1074,15 +1071,34 @@ diff (PikaDrawable *drawable, gdouble r, theta, dtheta; /* rectangular<-> spherical coordinate transform for vector rotation */ gdouble scale_vec_x, scale_vec_y; /* fixed vector X,Y component scaling factors */ + PikaDrawable *mag_map; + PikaDrawable *grad_map; + PikaDrawable *vector_map; + gdouble angle; + gdouble grad_scale; + gdouble vector_scale; + gdouble vector_angle; + gboolean use_mag; + + pika_ui_init (PLUG_IN_BINARY); + + g_object_get (config, + "angle", &angle, + "mag-use", &use_mag, + "grad-scale", &grad_scale, + "vector-scale", &vector_scale, + "vector-angle", &vector_angle, + NULL); + /* ----------------------------------------------------------------------- */ - if (dvals.grad_scale != 0.0) + if (grad_scale != 0.0) do_gradmap = TRUE; /* add in gradient of gradmap if scale != 0.000 */ - if (dvals.vector_scale != 0.0) /* add in gradient of vectormap if scale != 0.000 */ + if (vector_scale != 0.0) /* add in gradient of vectormap if scale != 0.000 */ do_vecmap = TRUE; - do_magmap = (dvals.mag_use == TRUE); /* multiply by magnitude map if so requested */ + do_magmap = (use_mag == TRUE); /* multiply by magnitude map if so requested */ /* Get the input area. This is the bounding box of the selection in * the image (or the entire image if there is no selection). Only @@ -1094,6 +1110,12 @@ diff (PikaDrawable *drawable, &x1, &y1, &width, &height)) return; + g_object_get (config, + "mag-map", &mag_map, + "grad-map", &grad_map, + "vector-map", &vector_map, + NULL); + x2 = x1 + width; y2 = y1 + height; @@ -1180,21 +1202,19 @@ diff (PikaDrawable *drawable, diff_prepare_row (src_buffer, src_format, cr, x1, y1+1, (x2 - x1)); /* fixed-vector (x,y) component scale factors */ - scale_vec_x = (dvals.vector_scale * - cos ((90 - dvals.vector_angle) * G_PI / 180.0) * 256.0 / 10); - scale_vec_y = (dvals.vector_scale * - sin ((90 - dvals.vector_angle) * G_PI / 180.0) * 256.0 / 10); + scale_vec_x = (vector_scale * + cos ((90 - vector_angle) * G_PI / 180.0) * 256.0 / 10); + scale_vec_y = (vector_scale * + sin ((90 - vector_angle) * G_PI / 180.0) * 256.0 / 10); if (do_vecmap) { - vdraw = pika_drawable_get_by_id (dvals.vector_map_id); - /* bytes per pixel in SOURCE drawable */ - vformat = get_u8_format (vdraw); + vformat = get_u8_format (vector_map); vbytes = babl_format_get_bytes_per_pixel (vformat); /* fixed-vector scale-map */ - vec_buffer = pika_drawable_get_buffer (vdraw); + vec_buffer = pika_drawable_get_buffer (vector_map); crv = cur_row_v + vbytes; diff_prepare_row (vec_buffer, vformat, crv, x1, y1, (x2 - x1)); @@ -1202,13 +1222,11 @@ diff (PikaDrawable *drawable, if (do_gradmap) { - gdraw = pika_drawable_get_by_id (dvals.grad_map_id); - - gformat = get_u8_format (gdraw); + gformat = get_u8_format (grad_map); gbytes = babl_format_get_bytes_per_pixel (gformat); /* fixed-vector scale-map */ - grad_buffer = pika_drawable_get_buffer (gdraw); + grad_buffer = pika_drawable_get_buffer (grad_map); prg = prev_row_g + gbytes; crg = cur_row_g + gbytes; @@ -1219,23 +1237,21 @@ diff (PikaDrawable *drawable, if (do_magmap) { - mdraw = pika_drawable_get_by_id (dvals.mag_map_id); - - mformat = get_u8_format (mdraw); + mformat = get_u8_format (mag_map); mbytes = babl_format_get_bytes_per_pixel (mformat); /* fixed-vector scale-map */ - mag_buffer = pika_drawable_get_buffer (mdraw); + mag_buffer = pika_drawable_get_buffer (mag_map); crm = cur_row_m + mbytes; diff_prepare_row (mag_buffer, mformat, crm, x1, y1, (x2 - x1)); } - dtheta = dvals.angle * G_PI / 180.0; + dtheta = angle * G_PI / 180.0; /* note that '3' is rather arbitrary here. */ rscalefac = 256.0 / (3 * src_bytes); /* scale factor for gradient map components */ - gscalefac = dvals.grad_scale * 256.0 / (3 * gbytes); + gscalefac = grad_scale * 256.0 / (3 * gbytes); /* loop through the rows, applying the differential convolution */ for (row = y1; row < y2; row++) @@ -1377,6 +1393,10 @@ diff (PikaDrawable *drawable, g_object_unref (destx_buffer); g_object_unref (desty_buffer); + g_clear_object (&mag_map); + g_clear_object (&grad_map); + g_clear_object (&vector_map); + pika_drawable_update (draw_xd, x1, y1, (x2 - x1), (y2 - y1)); pika_drawable_update (draw_yd, x1, y1, (x2 - x1), (y2 - y1)); @@ -1409,13 +1429,15 @@ diff (PikaDrawable *drawable, /* -------------------------------------------------------------------------- */ static void -warp (PikaDrawable *orig_draw) +warp (PikaDrawable *orig_draw, + PikaProcedureConfig *config) { PikaDrawable *disp_map; /* Displacement map, ie, control array */ PikaDrawable *mag_draw; /* Magnitude multiplier factor map */ PikaDrawable *map_x = NULL; PikaDrawable *map_y = NULL; gboolean first_time = TRUE; + gint iter_count; gint width; gint height; gint x1, y1, x2, y2; @@ -1424,9 +1446,6 @@ warp (PikaDrawable *orig_draw) /* index var. over all "warp" Displacement iterations */ gint warp_iter; - disp_map = pika_drawable_get_by_id (dvals.warp_map_id); - mag_draw = pika_drawable_get_by_id (dvals.mag_map_id); - /* calculate new X,Y Displacement image maps */ pika_progress_init (_("Finding XY gradient")); @@ -1436,6 +1455,12 @@ warp (PikaDrawable *orig_draw) &x1, &y1, &width, &height)) return; + g_object_get (config, + "warp-map", &disp_map, + "mag-map", &mag_draw, + "iter", &iter_count, + NULL); + x2 = x1 + width; y2 = y1 + height; @@ -1443,16 +1468,16 @@ warp (PikaDrawable *orig_draw) height = pika_drawable_get_height (orig_draw); /* generate x,y differential images (arrays) */ - diff (disp_map, &map_x, &map_y); + diff (disp_map, config, &map_x, &map_y); - for (warp_iter = 0; warp_iter < dvals.iter; warp_iter++) + for (warp_iter = 0; warp_iter < iter_count; warp_iter++) { pika_progress_init_printf (_("Flow step %d"), warp_iter+1); progress = 0; warp_one (orig_draw, orig_draw, map_x, map_y, mag_draw, - first_time, warp_iter); + first_time, warp_iter, config); pika_drawable_update (orig_draw, x1, y1, (x2 - x1), (y2 - y1)); @@ -1466,18 +1491,21 @@ warp (PikaDrawable *orig_draw) image = pika_item_get_image (PIKA_ITEM (map_x)); pika_image_delete (image); + g_clear_object (&disp_map); + g_clear_object (&mag_draw); } /* -------------------------------------------------------------------------- */ static void -warp_one (PikaDrawable *draw, - PikaDrawable *new, - PikaDrawable *map_x, - PikaDrawable *map_y, - PikaDrawable *mag_draw, - gboolean first_time, - gint step) +warp_one (PikaDrawable *draw, + PikaDrawable *new, + PikaDrawable *map_x, + PikaDrawable *map_y, + PikaDrawable *mag_draw, + gboolean first_time, + gint step, + PikaProcedureConfig *config) { GeglBuffer *src_buffer; GeglBuffer *dest_buffer; @@ -1524,7 +1552,12 @@ warp_one (PikaDrawable *draw, gint mag_bytes = 1; gboolean mag_alpha = FALSE; - GRand *gr; + GRand *gr; + + gdouble amount; + gdouble dither; + gboolean use_mag; + gint substeps; gr = g_rand_new (); /* Seed Pseudo Random Number Generator */ @@ -1536,6 +1569,13 @@ warp_one (PikaDrawable *draw, &x1, &y1, &width, &height)) return; + g_object_get (config, + "amount", &amount, + "dither", &dither, + "mag-use", &use_mag, + "substeps", &substeps, + NULL); + x2 = x1 + width; y2 = y1 + height; @@ -1592,7 +1632,7 @@ warp_one (PikaDrawable *draw, GEGL_ACCESS_READ, GEGL_ABYSS_NONE); - if (dvals.mag_use) + if (use_mag) { mag_buffer = pika_drawable_get_buffer (mag_draw); @@ -1608,7 +1648,7 @@ warp_one (PikaDrawable *draw, } /* substep displacement vector scale factor */ - dscalefac = dvals.amount / (256 * 127.5 * dvals.substeps); + dscalefac = amount / (256 * 127.5 * substeps); while (gegl_buffer_iterator_next (iter)) { @@ -1619,7 +1659,7 @@ warp_one (PikaDrawable *draw, guchar *myrow = iter->items[3].data; guchar *mmagrow = NULL; - if (dvals.mag_use) + if (use_mag) mmagrow = iter->items[4].data; /* loop over destination pixels */ @@ -1630,7 +1670,7 @@ warp_one (PikaDrawable *draw, guchar *my = myrow; guchar *mmag = NULL; - if (dvals.mag_use == TRUE) + if (use_mag == TRUE) mmag = mmagrow; for (x = roi.x; x < (roi.x + roi.width); x++) @@ -1640,7 +1680,7 @@ warp_one (PikaDrawable *draw, dx = dscalefac * ((256.0 * mx[0]) + mx[1] -32768); /* 16-bit values */ dy = dscalefac * ((256.0 * my[0]) + my[1] -32768); - if (dvals.mag_use) + if (use_mag) { scalefac = warp_map_mag_give_value (mmag, mag_alpha, @@ -1649,15 +1689,15 @@ warp_one (PikaDrawable *draw, dy *= scalefac; } - if (dvals.dither != 0.0) - { /* random dither is +/- dvals.dither pixels */ - dx += g_rand_double_range (gr, -dvals.dither, dvals.dither); - dy += g_rand_double_range (gr, -dvals.dither, dvals.dither); + if (dither != 0.0) + { /* random dither is +/- dither pixels */ + dx += g_rand_double_range (gr, -dither, dither); + dy += g_rand_double_range (gr, -dither, dither); } - if (dvals.substeps != 1) + if (substeps != 1) { /* trace (substeps) iterations of displacement vector */ - for (substep = 1; substep < dvals.substeps; substep++) + for (substep = 1; substep < substeps; substep++) { /* In this (substep) loop, (x,y) remain fixed. (dx,dy) vary each step. */ needx = x + dx; @@ -1678,22 +1718,22 @@ warp_one (PikaDrawable *draw, width, height, x1, y1, x2, y2, xi, yi, - pixel[0]); + pixel[0], config); warp_pixel (map_x_buffer, map_x_format, width, height, x1, y1, x2, y2, xi + 1, yi, - pixel[1]); + pixel[1], config); warp_pixel (map_x_buffer, map_x_format, width, height, x1, y1, x2, y2, xi, yi + 1, - pixel[2]); + pixel[2], config); warp_pixel (map_x_buffer, map_x_format, width, height, x1, y1, x2, y2, xi + 1, yi + 1, - pixel[3]); + pixel[3], config); ivalues[0] = 256 * pixel[0][0] + pixel[0][1]; ivalues[1] = 256 * pixel[1][0] + pixel[1][1]; @@ -1707,22 +1747,22 @@ warp_one (PikaDrawable *draw, width, height, x1, y1, x2, y2, xi, yi, - pixel[0]); + pixel[0], config); warp_pixel (map_y_buffer, map_y_format, width, height, x1, y1, x2, y2, xi + 1, yi, - pixel[1]); + pixel[1], config); warp_pixel (map_y_buffer, map_y_format, width, height, x1, y1, x2, y2, xi, yi + 1, - pixel[2]); + pixel[2], config); warp_pixel (map_y_buffer, map_y_format, width, height, x1, y1, x2, y2, xi + 1, yi + 1, - pixel[3]); + pixel[3], config); ivalues[0] = 256 * pixel[0][0] + pixel[0][1]; ivalues[1] = 256 * pixel[1][0] + pixel[1][1]; @@ -1746,7 +1786,7 @@ warp_one (PikaDrawable *draw, mx += map_x_bytes; /* pointers into x,y displacement maps */ my += map_y_bytes; - if (dvals.mag_use == TRUE) + if (use_mag == TRUE) mmag += mag_bytes; /* Calculations complete; now copy the proper pixel */ @@ -1768,22 +1808,22 @@ warp_one (PikaDrawable *draw, width, height, x1, y1, x2, y2, xi, yi, - pixel[0]); + pixel[0], config); warp_pixel (src_buffer, src_format, width, height, x1, y1, x2, y2, xi + 1, yi, - pixel[1]); + pixel[1], config); warp_pixel (src_buffer, src_format, width, height, x1, y1, x2, y2, xi, yi + 1, - pixel[2]); + pixel[2], config); warp_pixel (src_buffer, src_format, width, height, x1, y1, x2, y2, xi + 1, yi + 1, - pixel[3]); + pixel[3], config); for (k = 0; k < dest_bytes; k++) { @@ -1804,7 +1844,7 @@ warp_one (PikaDrawable *draw, mxrow += map_x_bytes * roi.width; myrow += map_y_bytes * roi.width; - if (dvals.mag_use == TRUE) + if (use_mag == TRUE) mmagrow += mag_bytes * roi.width; } @@ -1817,7 +1857,7 @@ warp_one (PikaDrawable *draw, g_object_unref (map_x_buffer); g_object_unref (map_y_buffer); - if (dvals.mag_use == TRUE) + if (use_mag == TRUE) g_object_unref (mag_buffer); pika_progress_update (1.0); @@ -1852,23 +1892,29 @@ warp_map_mag_give_value (guchar *pt, static void -warp_pixel (GeglBuffer *buffer, - const Babl *format, - gint width, - gint height, - gint x1, - gint y1, - gint x2, - gint y2, - gint x, - gint y, - guchar *pixel) +warp_pixel (GeglBuffer *buffer, + const Babl *format, + gint width, + gint height, + gint x1, + gint y1, + gint x2, + gint y2, + gint x, + gint y, + guchar *pixel, + PikaProcedureConfig *config) { static guchar empty_pixel[4] = { 0, 0, 0, 0 }; guchar *data; + gint wrap_type; + + g_object_get (config, + "wrap-type", &wrap_type, + NULL); /* Tile the image. */ - if (dvals.wrap_type == WRAP) + if (wrap_type == WRAP) { if (x < 0) x = width - (-x % width); @@ -1881,7 +1927,7 @@ warp_pixel (GeglBuffer *buffer, y %= height; } /* Smear out the edges of the image by repeating pixels. */ - else if (dvals.wrap_type == SMEAR) + else if (wrap_type == SMEAR) { if (x < 0) x = 0; @@ -1904,7 +1950,7 @@ warp_pixel (GeglBuffer *buffer, gint bpp = babl_format_get_bytes_per_pixel (format); gint b; - if (dvals.wrap_type == BLACK) + if (wrap_type == BLACK) data = empty_pixel; else data = color_pixel; /* must have selected COLOR type */ diff --git a/plug-ins/common/wavelet-decompose.c b/plug-ins/common/wavelet-decompose.c index 3ee73f1..e821404 100644 --- a/plug-ins/common/wavelet-decompose.c +++ b/plug-ins/common/wavelet-decompose.c @@ -47,7 +47,7 @@ struct _WaveletClass #define WAVELET_TYPE (wavelet_get_type ()) -#define WAVELET (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WAVELET_TYPE, Wavelet)) +#define WAVELET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WAVELET_TYPE, Wavelet)) GType wavelet_get_type (void) G_GNUC_CONST; @@ -60,7 +60,7 @@ static PikaValueArray * wavelet_run (PikaProcedure *procedur PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void wavelet_blur (PikaDrawable *drawable, @@ -157,20 +157,19 @@ wavelet_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaLayer **scale_layers; - PikaLayer *new_scale; - PikaLayer *parent = NULL; - PikaDrawable *drawable; - PikaLayerMode grain_extract_mode = PIKA_LAYER_MODE_GRAIN_EXTRACT; - PikaLayerMode grain_merge_mode = PIKA_LAYER_MODE_GRAIN_MERGE; - gint id; - gint scales; - gboolean create_group; - gboolean create_masks; + PikaLayer **scale_layers; + PikaLayer *new_scale; + PikaLayer *parent = NULL; + PikaDrawable *drawable; + PikaLayerMode grain_extract_mode = PIKA_LAYER_MODE_GRAIN_EXTRACT; + PikaLayerMode grain_merge_mode = PIKA_LAYER_MODE_GRAIN_MERGE; + gint id; + gint scales; + gboolean create_group; + gboolean create_masks; gegl_init (NULL, NULL); @@ -191,36 +190,16 @@ wavelet_run (PikaProcedure *procedure, drawable = drawables[0]; } - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); + if (run_mode == PIKA_RUN_INTERACTIVE && ! wavelet_decompose_dialog (procedure, G_OBJECT (config))) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! wavelet_decompose_dialog (procedure, G_OBJECT (config))) - { - pika_procedure_config_end_run (config, PIKA_PDB_CANCEL); - g_object_unref (config); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - case PIKA_RUN_NONINTERACTIVE: - case PIKA_RUN_WITH_LAST_VALS: - break; - - default: - break; - } - - g_object_get (config, - "scales", &scales, - "create-group", &create_group, - "create-masks", &create_masks, - NULL); + g_object_get (config, + "scales", &scales, + "create-group", &create_group, + "create-masks", &create_masks, + NULL); pika_progress_init (_("Wavelet-Decompose")); @@ -356,9 +335,6 @@ wavelet_run (PikaProcedure *procedure, pika_displays_flush (); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - gegl_exit (); return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); diff --git a/plug-ins/common/web-browser.c b/plug-ins/common/web-browser.c index 5c6acfc..389b9a0 100644 --- a/plug-ins/common/web-browser.c +++ b/plug-ins/common/web-browser.c @@ -62,7 +62,7 @@ struct _BrowserClass #define BROWSER_TYPE (browser_get_type ()) -#define BROWSER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BROWSER_TYPE, Browser)) +#define BROWSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BROWSER_TYPE, Browser)) GType browser_get_type (void) G_GNUC_CONST; @@ -71,7 +71,7 @@ static PikaProcedure * browser_create_procedure (PikaPlugIn *plug_in, const gchar *name); static PikaValueArray * browser_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gboolean browser_open_url (GtkWindow *window, @@ -141,19 +141,22 @@ browser_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * browser_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { GError *error = NULL; + gchar *url = NULL; - if (! browser_open_url (NULL, PIKA_VALUES_GET_STRING (args, 0), - &error)) + g_object_get (config, "url", &url, NULL); + if (! browser_open_url (NULL, url, &error)) { + g_free (url); return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, error); } + g_free (url); return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); diff --git a/plug-ins/common/web-page.c b/plug-ins/common/web-page.c index 49d2f40..c5906c0 100644 --- a/plug-ins/common/web-page.c +++ b/plug-ins/common/web-page.c @@ -43,20 +43,9 @@ typedef struct { - char *url; - gint32 width; - gint font_size; PikaImage *image; GError *error; -} WebpageVals; - -typedef struct -{ - char url[MAX_URL_LEN]; - gint32 width; - gint font_size; -} WebpageSaveVals; - +} WebpageResult; typedef struct _Webpage Webpage; typedef struct _WebpageClass WebpageClass; @@ -73,7 +62,7 @@ struct _WebpageClass #define WEBPAGE_TYPE (webpage_get_type ()) -#define WEBPAGE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WEBPAGE_TYPE, Webpage)) +#define WEBPAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WEBPAGE_TYPE, Webpage)) GType webpage_get_type (void) G_GNUC_CONST; @@ -82,11 +71,13 @@ static PikaProcedure * webpage_create_procedure (PikaPlugIn *plug_in, const gchar *name); static PikaValueArray * webpage_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static gboolean webpage_dialog (void); -static PikaImage * webpage_capture (void); +static gboolean webpage_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config); +static PikaImage * webpage_capture (PikaProcedureConfig *config, + GError **error); G_DEFINE_TYPE (Webpage, webpage, PIKA_TYPE_PLUG_IN) @@ -95,9 +86,6 @@ PIKA_MAIN (WEBPAGE_TYPE) DEFINE_STD_SET_I18N -static WebpageVals webpagevals; - - static void webpage_class_init (WebpageClass *klass) { @@ -152,20 +140,20 @@ webpage_create_procedure (PikaPlugIn *plug_in, G_PARAM_READWRITE); PIKA_PROC_ARG_STRING (procedure, "url", - "URL", - "URL of the webpage to screenshot", + _("Enter location (_URI)"), + _("URL of the webpage to screenshot"), "https://heckin.technology/AlderconeStudio/PIKApp/", G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "width", - "Width", - "The width of the screenshot (in pixels)", + _("_Width (pixels)"), + _("The width of the screenshot (in pixels)"), 100, PIKA_MAX_IMAGE_SIZE, 1024, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "font-size", - "Font size", - "The font size to use in the page (in pt)", + _("_Font size"), + _("The font size to use in the page (in pt)"), 1, 1000, 12, G_PARAM_READWRITE); @@ -181,68 +169,27 @@ webpage_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * webpage_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals; PikaRunMode run_mode; PikaImage *image; - WebpageSaveVals save = { "https://heckin.technology/AlderconeStudio/PIKApp/", 1024, 12 }; + GError *error = NULL; - pika_get_data (PLUG_IN_PROC, &save); + g_object_get (config, "run-mode", &run_mode, NULL); - run_mode = PIKA_VALUES_GET_ENUM (args, 0); - - webpagevals.url = g_strdup (save.url); - webpagevals.width = save.width; - webpagevals.font_size = save.font_size; - - /* how are we running today? */ - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (! webpage_dialog ()) - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - break; - - case PIKA_RUN_WITH_LAST_VALS: - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CALLING_ERROR, - NULL); - break; - - case PIKA_RUN_NONINTERACTIVE: - webpagevals.url = (gchar *) PIKA_VALUES_GET_STRING (args, 1); - webpagevals.width = PIKA_VALUES_GET_INT (args, 2); - webpagevals.font_size = PIKA_VALUES_GET_INT (args, 3); - break; - - default: - break; - } - - image = webpage_capture (); + if (run_mode == PIKA_RUN_INTERACTIVE && + ! webpage_dialog (procedure, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); + image = webpage_capture (config, &error); if (! image) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, - webpagevals.error); - - save.width = webpagevals.width; - save.font_size = webpagevals.font_size; - - if (strlen (webpagevals.url) < MAX_URL_LEN) - { - g_strlcpy (save.url, webpagevals.url, MAX_URL_LEN); - } - else - { - memset (save.url, 0, MAX_URL_LEN); - } - - pika_set_data (PLUG_IN_PROC, &save, sizeof save); + error); if (run_mode == PIKA_RUN_INTERACTIVE) pika_display_new (image); @@ -257,152 +204,34 @@ webpage_run (PikaProcedure *procedure, } static gboolean -webpage_dialog (void) +webpage_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config) { - GtkWidget *dialog; - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *image; - GtkWidget *label; - GtkWidget *entry; - GtkSizeGroup *sizegroup; - GtkAdjustment *adjustment; - GtkWidget *spinbutton; - GtkWidget *combo; - gint active; - gint status; - gboolean ret = FALSE; + GtkWidget *dialog; + GtkListStore *store; + gboolean run; pika_ui_init (PLUG_IN_BINARY); - dialog = pika_dialog_new (_("Create from webpage"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("Cre_ate"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - pika_window_set_transient (GTK_WINDOW (dialog)); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); - gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); - gtk_widget_show (vbox); - - image = gtk_image_new_from_icon_name (PIKA_ICON_WEB, - GTK_ICON_SIZE_BUTTON); - gtk_box_pack_start (GTK_BOX (vbox), image, FALSE, FALSE, 0); - gtk_widget_show (image); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); - gtk_widget_show (vbox); - - label = gtk_label_new (_("Enter location (URI):")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - entry = gtk_entry_new (); - gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); - gtk_widget_set_size_request (entry, 400, -1); - gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0); - - if (webpagevals.url) - gtk_entry_set_text (GTK_ENTRY (entry), - webpagevals.url); - gtk_widget_show (entry); - - sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - - /* Width */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_box_pack_start (GTK_BOX (vbox), - hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - label = gtk_label_new (_("Width (pixels):")); - gtk_size_group_add_widget (sizegroup, label); - - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - adjustment = gtk_adjustment_new (webpagevals.width, - 1, 8192, 1, 10, 0); - spinbutton = pika_spin_button_new (adjustment, 1.0, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); - gtk_widget_show (spinbutton); - - /* Font size */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_box_pack_start (GTK_BOX (vbox), - hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - label = gtk_label_new (_("Font size:")); - gtk_size_group_add_widget (sizegroup, label); - - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - combo = pika_int_combo_box_new (_("Huge"), 16, - _("Large"), 14, - C_("web-page", "Default"), 12, - _("Small"), 10, - _("Tiny"), 8, - NULL); - - switch (webpagevals.font_size) - { - case 16: - case 14: - case 12: - case 10: - case 8: - active = webpagevals.font_size; - break; - default: - active = 12; - } - - pika_int_combo_box_set_active (PIKA_INT_COMBO_BOX (combo), active); - - gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); - gtk_widget_show (combo); - - g_object_unref (sizegroup); - - status = pika_dialog_run (PIKA_DIALOG (dialog)); - if (status == GTK_RESPONSE_OK) - { - g_free (webpagevals.url); - webpagevals.url = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); - - webpagevals.width = (gint) gtk_adjustment_get_value (adjustment); - - pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (combo), - &webpagevals.font_size); - - ret = TRUE; - } - + dialog = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Create from webpage")); + pika_procedure_dialog_set_ok_label (PIKA_PROCEDURE_DIALOG (dialog), + _("Cre_ate")); + store = pika_int_store_new (_("Huge"), 16, + _("Large"), 14, + C_("web-page", "Default"), 12, + _("Small"), 10, + _("Tiny"), 8, + NULL); + pika_procedure_dialog_get_int_combo (PIKA_PROCEDURE_DIALOG (dialog), + "font-size", PIKA_INT_STORE (store)); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), + "url", "width", "font-size", NULL); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); gtk_widget_destroy (dialog); - return ret; + return run; } static void @@ -411,8 +240,9 @@ notify_progress_cb (WebKitWebView *view, gpointer user_data) { static gdouble old_progress = 0.0; - gdouble progress = webkit_web_view_get_estimated_load_progress (view); + gdouble progress; + progress = webkit_web_view_get_estimated_load_progress (view); if ((progress - old_progress) > 0.01) { pika_progress_update (progress); @@ -427,7 +257,9 @@ load_failed_cb (WebKitWebView *view, gpointer web_error, gpointer user_data) { - webpagevals.error = g_error_copy ((GError *) web_error); + GError **error = user_data; + + *error = g_error_copy ((GError *) web_error); gtk_main_quit (); @@ -439,11 +271,14 @@ snapshot_ready (GObject *source_object, GAsyncResult *result, gpointer user_data) { - WebKitWebView *view = WEBKIT_WEB_VIEW (source_object); + WebpageResult *retval = user_data; + WebKitWebView *view = WEBKIT_WEB_VIEW (source_object); cairo_surface_t *surface; + pika_progress_pulse (); surface = webkit_web_view_get_snapshot_finish (view, result, - &webpagevals.error); + &retval->error); + pika_progress_pulse (); if (surface) { @@ -454,70 +289,33 @@ snapshot_ready (GObject *source_object, width = cairo_image_surface_get_width (surface); height = cairo_image_surface_get_height (surface); - webpagevals.image = pika_image_new (width, height, PIKA_RGB); + retval->image = pika_image_new (width, height, PIKA_RGB); - pika_image_undo_disable (webpagevals.image); - layer = pika_layer_new_from_surface (webpagevals.image, _("Webpage"), + pika_image_undo_disable (retval->image); + layer = pika_layer_new_from_surface (retval->image, _("Webpage"), surface, 0.25, 1.0); - pika_image_insert_layer (webpagevals.image, layer, NULL, 0); - pika_image_undo_enable (webpagevals.image); + pika_image_insert_layer (retval->image, layer, NULL, 0); + pika_image_undo_enable (retval->image); cairo_surface_destroy (surface); } - pika_progress_update (1.0); - gtk_main_quit (); } -static gboolean -load_finished_idle (gpointer data) -{ - static gint count = 0; - - pika_progress_update ((gdouble) count * 0.025); - - count++; - - if (count < 10) - return G_SOURCE_CONTINUE; - - webkit_web_view_get_snapshot (WEBKIT_WEB_VIEW (data), - WEBKIT_SNAPSHOT_REGION_FULL_DOCUMENT, - WEBKIT_SNAPSHOT_OPTIONS_NONE, - NULL, - snapshot_ready, - NULL); - - count = 0; - - return G_SOURCE_REMOVE; -} - static void load_changed_cb (WebKitWebView *view, WebKitLoadEvent event, gpointer user_data) { if (event == WEBKIT_LOAD_FINISHED) - { - if (! webpagevals.error) - { - pika_progress_init_printf (_("Transferring webpage image for '%s'"), - webpagevals.url); - - g_timeout_add (100, load_finished_idle, view); - - return; - } - - gtk_main_quit (); - } + gtk_main_quit (); } static PikaImage * -webpage_capture (void) +webpage_capture (PikaProcedureConfig *config, + GError **error) { gchar *scheme; GtkWidget *window; @@ -525,37 +323,43 @@ webpage_capture (void) WebKitSettings *settings; char *ua; - if (! webpagevals.url || strlen (webpagevals.url) == 0) + gchar *url; + gint width; + gint font_size; + WebpageResult result; + + g_object_get (config, + "url", &url, + "width", &width, + "font-size", &font_size, + NULL); + if (! url || strlen (url) == 0) { - g_set_error (&webpagevals.error, 0, 0, _("No URL was specified")); + g_set_error (error, 0, 0, _("No URL was specified")); return NULL; } - scheme = g_uri_parse_scheme (webpagevals.url); + scheme = g_uri_parse_scheme (url); if (! scheme) { - char *url; + gchar *scheme_url; /* If we were not given a well-formed URL, make one. */ - - url = g_strconcat ("http://", webpagevals.url, NULL); - g_free (webpagevals.url); - webpagevals.url = url; - - g_free (scheme); + scheme_url = g_strconcat ("https://", url, NULL); + g_free (url); + url = scheme_url; } + g_free (scheme); - if (webpagevals.width < 32) + if (width < 32) { - g_warning ("Width '%d' is too small. Clamped to 32.", - webpagevals.width); - webpagevals.width = 32; + g_warning ("Width '%d' is too small. Clamped to 32.", width); + width = 32; } - else if (webpagevals.width > 8192) + else if (width > 8192) { - g_warning ("Width '%d' is too large. Clamped to 8192.", - webpagevals.width); - webpagevals.width = 8192; + g_warning ("Width '%d' is too large. Clamped to 8192.", width); + width = 8192; } window = gtk_offscreen_window_new (); @@ -565,7 +369,7 @@ webpage_capture (void) gtk_widget_show (view); gtk_widget_set_vexpand (view, TRUE); - gtk_widget_set_size_request (view, webpagevals.width, -1); + gtk_widget_set_size_request (view, width, -1); gtk_container_add (GTK_CONTAINER (window), view); /* Append "PIKA/" to the user agent string */ @@ -577,28 +381,45 @@ webpage_capture (void) g_free (ua); /* Set font size */ - webkit_settings_set_default_font_size (settings, webpagevals.font_size); + webkit_settings_set_default_font_size (settings, font_size); g_signal_connect (view, "notify::estimated-load-progress", G_CALLBACK (notify_progress_cb), window); g_signal_connect (view, "load-failed", G_CALLBACK (load_failed_cb), - window); + error); g_signal_connect (view, "load-changed", G_CALLBACK (load_changed_cb), window); - pika_progress_init_printf (_("Downloading webpage '%s'"), webpagevals.url); - - webkit_web_view_load_uri (WEBKIT_WEB_VIEW (view), - webpagevals.url); + pika_progress_init_printf (_("Downloading webpage '%s'"), url); + webkit_web_view_load_uri (WEBKIT_WEB_VIEW (view), url); gtk_main (); + result.error = NULL; + result.image = NULL; + if (*error == NULL) + { + pika_progress_init_printf (_("Transferring webpage image for '%s'"), url); + pika_progress_pulse (); + webkit_web_view_get_snapshot (WEBKIT_WEB_VIEW (view), + WEBKIT_SNAPSHOT_REGION_FULL_DOCUMENT, + WEBKIT_SNAPSHOT_OPTIONS_NONE, + NULL, + snapshot_ready, + &result); + + gtk_main (); + + if (result.error != NULL) + g_propagate_error (error, result.error); + } + gtk_widget_destroy (window); pika_progress_update (1.0); - return webpagevals.image; + return result.image; } diff --git a/plug-ins/file-bmp/bmp-save.c b/plug-ins/file-bmp/bmp-save.c index 5145178..c9feb66 100644 --- a/plug-ins/file-bmp/bmp-save.c +++ b/plug-ins/file-bmp/bmp-save.c @@ -1006,7 +1006,8 @@ save_dialog (PikaProcedure *procedure, /* Compatibility Options */ pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "color-space-title", _("Compatibility")); + "color-space-title", _("Compatibility"), + FALSE, FALSE); toggle = pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), "write-color-space", GTK_TYPE_CHECK_BUTTON); diff --git a/plug-ins/file-bmp/bmp.c b/plug-ins/file-bmp/bmp.c index caa1705..d31686f 100644 --- a/plug-ins/file-bmp/bmp.c +++ b/plug-ins/file-bmp/bmp.c @@ -81,27 +81,30 @@ struct _BmpClass #define BMP_TYPE (bmp_get_type ()) -#define BMP (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BMP_TYPE, Bmp)) +#define BMP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BMP_TYPE, Bmp)) GType bmp_get_type (void) G_GNUC_CONST; -static GList * bmp_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * bmp_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * bmp_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * bmp_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * bmp_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * bmp_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * bmp_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * bmp_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); @@ -171,7 +174,7 @@ bmp_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - bmp_save, NULL, NULL); + FALSE, bmp_save, NULL, NULL); pika_procedure_set_image_types (procedure, "INDEXED, GRAY, RGB*"); @@ -220,11 +223,13 @@ bmp_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -bmp_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +bmp_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -255,19 +260,16 @@ bmp_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -304,9 +306,6 @@ bmp_save (PikaProcedure *procedure, procedure, G_OBJECT (config), &error); - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/file-dds/dds.c b/plug-ins/file-dds/dds.c index 8201912..2f4be26 100644 --- a/plug-ins/file-dds/dds.c +++ b/plug-ins/file-dds/dds.c @@ -62,35 +62,38 @@ struct _DdsClass #define DDS_TYPE (dds_get_type ()) -#define DDS (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DDS_TYPE, Dds)) +#define DDS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DDS_TYPE, Dds)) GType dds_get_type (void) G_GNUC_CONST; -static GList * dds_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * dds_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * dds_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * dds_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * dds_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * dds_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * dds_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * dds_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + 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, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * dds_decode (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + PikaProcedureConfig *config, + gpointer run_data); #endif @@ -177,15 +180,18 @@ dds_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - dds_save, NULL, NULL); + FALSE, dds_save, NULL, NULL); pika_procedure_set_image_types (procedure, "INDEXED, GRAY, RGB"); pika_procedure_set_menu_label (procedure, _("DDS image")); + pika_file_procedure_set_format_name (PIKA_FILE_PROCEDURE (procedure), + _("DDS")); + pika_procedure_set_documentation (procedure, - "Saves files in DDS image format", - "Saves files in DDS image format", + _("Saves files in DDS image format"), + _("Saves files in DDS image format"), name); pika_procedure_set_attribution (procedure, "Shawn Kirst", @@ -197,14 +203,77 @@ dds_create_procedure (PikaPlugIn *plug_in, pika_file_procedure_set_extensions (PIKA_FILE_PROCEDURE (procedure), "dds"); - PIKA_PROC_ARG_INT (procedure, "compression-format", - "Compression format", - "Compression format (0 = None, 1 = BC1/DXT1, " - "2 = BC2/DXT3, 3 = BC3/DXT5, 4 = BC3n/DXT5nm, " - "5 = BC4/ATI1N, 6 = BC5/ATI2N, 7 = RXGB (DXT5), " - "8 = Alpha Exponent (DXT5), 9 = YCoCg (DXT5), " - "10 = YCoCg scaled (DXT5))", - 0, 10, DDS_COMPRESS_NONE, + PIKA_PROC_ARG_CHOICE (procedure, "compression-format", + _("Compressio_n"), + _("Compression format"), + pika_choice_new_with_values ("none", DDS_COMPRESS_NONE, _("None"), NULL, + "bc1", DDS_COMPRESS_BC1, _("BC1 / DXT1"), NULL, + "bc2", DDS_COMPRESS_BC2, _("BC2 / DXT3"), NULL, + "bc3, ", DDS_COMPRESS_BC3, _("BC3 / DXT5"), NULL, + "bc3n", DDS_COMPRESS_BC3N, _("BC3nm / DXT5nm"), NULL, + "bc4", DDS_COMPRESS_BC4, _("BC4 / ATI1 (3Dc+)"), NULL, + "bc5", DDS_COMPRESS_BC5, _("BC5 / ATI2 (3Dc)"), NULL, + "rxgb", DDS_COMPRESS_RXGB, _("RXGB (DXT5)"), NULL, + "aexp", DDS_COMPRESS_AEXP, _("Alpha Exponent (DXT5)"), NULL, + "ycocg", DDS_COMPRESS_YCOCG, _("YCoCg (DXT5)"), NULL, + "ycocgs", DDS_COMPRESS_YCOCGS, _("YCoCg scaled (DXT5)"), NULL, + NULL), + "none", + G_PARAM_READWRITE); + + PIKA_PROC_ARG_BOOLEAN (procedure, "perceptual-metric", + _("Use percept_ual error metric"), + _("Use a perceptual error metric during compression"), + FALSE, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_CHOICE (procedure, "format", + _("_Format"), + _("Pixel format"), + pika_choice_new_with_values ("default", DDS_FORMAT_DEFAULT, _("Default"), NULL, + "rgb8", DDS_FORMAT_RGB8, _("RGB8"), NULL, + "rgba8", DDS_FORMAT_RGBA8, _("RGBA8"), NULL, + "bgr8", DDS_FORMAT_BGR8, _("BGR8"), NULL, + "abgr8, ", DDS_FORMAT_ABGR8, _("ABGR8"), NULL, + "r5g6b5", DDS_FORMAT_R5G6B5, _("R5G6B5"), NULL, + "rgba4", DDS_FORMAT_RGBA4, _("RGBA4"), NULL, + "rgb5a1", DDS_FORMAT_RGB5A1, _("RGB5A1"), NULL, + "rgb10a2", DDS_FORMAT_RGB10A2, _("RGB10A2"), NULL, + "r3g3b2", DDS_FORMAT_R3G3B2, _("R3G3B2"), NULL, + "a8", DDS_FORMAT_A8, _("A8"), NULL, + "l8", DDS_FORMAT_L8, _("L8"), NULL, + "l8a8", DDS_FORMAT_L8A8, _("L8A8"), NULL, + "aexp", DDS_FORMAT_AEXP, _("AEXP"), NULL, + "ycocg", DDS_FORMAT_YCOCG, _("YCOCG"), NULL, + NULL), + "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_BOOLEAN (procedure, "flip-image", + _("Flip image _vertically on export"), + _("Flip the image vertically on export"), + FALSE, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_BOOLEAN (procedure, "transparent-color", + _("Set _transparent color"), + _("Make an indexed color transparent"), + FALSE, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_INT (procedure, "transparent-index", + _("Transparent inde_x"), + _("Index of transparent color or -1 to disable " + "(for indexed images only)."), + 0, 255, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "mipmaps", @@ -215,97 +284,62 @@ dds_create_procedure (PikaPlugIn *plug_in, 0, 2, DDS_MIPMAP_NONE, 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, "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, + NULL), + "default", + G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "format", - "Format", - "Pixel format (0 = default, 1 = DDS_FORMAT_RGB8, " - "2 = DDS_FORMAT_RGBA8, 3 = DDS_FORMAT_BGR8, " - "4 = DDS_FORMAT_ABGR8, 5 = DDS_FORMAT_R5G6B5, " - "6 = DDS_FORMAT_RGBA4, 7 = DDS_FORMAT_RGB5A1, " - "8 = DDS_FORMAT_RGB10A2, 9 = DDS_FORMAT_R3G3B2, " - "10 = DDS_FORMAT_A8, 11 = DDS_FORMAT_L8, " - "12 = DDS_FORMAT_L8A8, 13 = DDS_FORMAT_AEXP, " - "14 = DDS_FORMAT_YCOCG)", - 0, 14, DDS_FORMAT_DEFAULT, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_BOOLEAN (procedure, "flip-image", - "Flip image vertically", - "Flip the image vertically on export", - FALSE, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_BOOLEAN (procedure, "transparent-color", - "Transparent color", - "Make an indexed color transparent", - FALSE, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_INT (procedure, "transparent-index", - "Transparent index", - "Index of transparent color or -1 to disable " - "(for indexed images only).", - 0, 255, 0, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_INT (procedure, "mipmap-filter", - "Mipmap filter", - "Filtering to use when generating mipmaps " - "(0 = default, 1 = nearest, 2 = box, 3 = triangle, " - "4 = quadratic, 5 = bspline, 6 = mitchell, " - "7 = lanczos, 8 = kaiser)", - 0, 8, DDS_MIPMAP_FILTER_DEFAULT, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_INT (procedure, "mipmap-wrap", - "Mipmap wrap", - "Wrap mode to use when generating mipmaps " - "(0 = default, 1 = mirror, 2 = repeat, 3 = clamp)", - 0, 3, DDS_MIPMAP_WRAP_DEFAULT, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "mipmap-wrap", + _("_Wrap mode"), + _("Wrap mode to use when generating mipmaps"), + pika_choice_new_with_values ("default", DDS_MIPMAP_WRAP_DEFAULT, _("Default"), NULL, + "mirror", DDS_MIPMAP_WRAP_MIRROR, _("Mirror"), NULL, + "repeat", DDS_MIPMAP_WRAP_REPEAT, _("Repeat"), NULL, + "clamp", DDS_MIPMAP_WRAP_CLAMP, _("Clamp"), NULL, + NULL), + "default", + G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "gamma-correct", - "Gamma correct", - "Use gamma correct mipmap filtering", + _("Appl_y gamma correction"), + _("Use gamma correct mipmap filtering"), FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "srgb", - "sRGB", - "Use sRGB colorspace for gamma correction", + _("Use sRG_B colorspace"), + _("Use sRGB colorspace for gamma correction"), FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "gamma", - "Gamma", - "Gamma value to use for gamma correction (i.e. 2.2)", + _("_Gamma"), + _("Gamma value to use for gamma correction (e.g. 2.2)"), 0.0, 10.0, 0.0, G_PARAM_READWRITE); - PIKA_PROC_ARG_BOOLEAN (procedure, "perceptual-metric", - "Perceptual metric", - "Use a perceptual error metric during compression", - FALSE, - G_PARAM_READWRITE); - PIKA_PROC_ARG_BOOLEAN (procedure, "preserve-alpha-coverage", - "Preserve alpha coverage", - "Preserve alpha test converage for alpha " - "channel maps", + _("Preserve al_pha test coverage"), + _("Preserve alpha test coverage for alpha " + "channel maps"), FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "alpha-test-threshold", - "Alpha test threshold", - "Alpha test threshold value for which alpha test " - "converage should be preserved", + _("Alp_ha test threshold"), + _("Alpha test threshold value for which alpha test " + "coverage should be preserved"), 0.0, 1.0, 0.5, G_PARAM_READWRITE); } @@ -386,13 +420,14 @@ dds_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -dds_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +dds_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; PikaValueArray *return_vals; PikaPDBStatusType status; PikaImage *image; @@ -400,15 +435,9 @@ dds_load (PikaProcedure *procedure, gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - status = read_dds (file, &image, run_mode == PIKA_RUN_INTERACTIVE, procedure, G_OBJECT (config), &error); - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (status != PIKA_PDB_SUCCESS) return pika_procedure_new_return_values (procedure, status, error); @@ -428,20 +457,17 @@ dds_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; - gdouble gamma; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; + gdouble gamma; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -483,7 +509,7 @@ dds_save (PikaProcedure *procedure, */ status = write_dds (file, image, drawables[0], run_mode == PIKA_RUN_INTERACTIVE, - procedure, G_OBJECT (config), + procedure, config, export == PIKA_EXPORT_EXPORT); if (export == PIKA_EXPORT_EXPORT) @@ -492,9 +518,6 @@ dds_save (PikaProcedure *procedure, g_free (drawables); } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, status, error); } @@ -505,7 +528,7 @@ dds_decode (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { const gchar *name = pika_procedure_get_name (procedure); diff --git a/plug-ins/file-dds/ddsread.c b/plug-ins/file-dds/ddsread.c index 7702234..60277a2 100644 --- a/plug-ins/file-dds/ddsread.c +++ b/plug-ins/file-dds/ddsread.c @@ -124,6 +124,7 @@ read_dds (GFile *file, guint l = 0; guchar *pixels; FILE *fp; + gsize file_size; dds_header_t hdr; dds_header_dx10_t dx10hdr; dds_load_info_t d; @@ -157,6 +158,10 @@ read_dds (GFile *file, return PIKA_PDB_EXECUTION_ERROR; } + fseek (fp, 0L, SEEK_END); + file_size = ftell (fp); + fseek (fp, 0, SEEK_SET); + pika_progress_init_printf ("Loading %s:", pika_file_get_utf8_name (file)); /* read header */ @@ -358,6 +363,16 @@ read_dds (GFile *file, precision = PIKA_PRECISION_U8_NON_LINEAR; } + /* verify header information is accurate */ + if (d.bpp < 1 || + (hdr.pitch_or_linsize > (file_size - sizeof (hdr)))) + { + fclose (fp); + g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), + _("Invalid or corrupted DDS header")); + return PIKA_PDB_EXECUTION_ERROR; + } + image = pika_image_new_with_precision (hdr.width, hdr.height, type, precision); if (! image) @@ -1012,6 +1027,13 @@ load_layer (FILE *fp, guint size = hdr->pitch_or_linsize >> (2 * level); guint layerw; gint format = DDS_COMPRESS_NONE; + gsize file_size; + gsize current_position; + + current_position = ftell (fp); + fseek (fp, 0L, SEEK_END); + file_size = ftell (fp); + fseek (fp, current_position, SEEK_SET); if (width < 1) width = 1; if (height < 1) height = 1; @@ -1128,6 +1150,14 @@ load_layer (FILE *fp, size *= 16; } + if (size > (file_size - current_position) || + size > hdr->pitch_or_linsize) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Requested data exceeds size of file.\n")); + return FALSE; + } + if ((hdr->flags & DDSD_LINEARSIZE) && !fread (buf, size, 1, fp)) { @@ -1167,6 +1197,16 @@ load_layer (FILE *fp, pika_progress_update ((double) y / (double) 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)) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Requested data exceeds size of file.\n")); + return FALSE; + } + if ((hdr->flags & DDSD_PITCH) && ! fread (buf, width * d->bpp, 1, fp)) { diff --git a/plug-ins/file-dds/ddswrite.c b/plug-ins/file-dds/ddswrite.c index d0e2d04..4f197d0 100644 --- a/plug-ins/file-dds/ddswrite.c +++ b/plug-ins/file-dds/ddswrite.c @@ -44,14 +44,14 @@ #include "color.h" -static gboolean write_image (FILE *fp, - PikaImage *image, - PikaDrawable *drawable, - GObject *config); -static gboolean save_dialog (PikaImage *image, - PikaDrawable *drawable, - PikaProcedure *procedure, - GObject *config); +static gboolean write_image (FILE *fp, + PikaImage *image, + PikaDrawable *drawable, + PikaProcedureConfig *config); +static gboolean save_dialog (PikaImage *image, + PikaDrawable *drawable, + PikaProcedure *procedure, + PikaProcedureConfig *config); static const char *cubemap_face_names[4][6] = @@ -78,25 +78,14 @@ static const char *cubemap_face_names[4][6] = } }; +static PikaImage *global_image = NULL; static PikaLayer *cubemap_faces[6]; static gboolean is_cubemap = FALSE; static gboolean is_volume = FALSE; static gboolean is_array = FALSE; static gboolean is_mipmap_chain_valid = FALSE; -static GtkWidget *compress_opt; -static GtkWidget *format_opt; -static GtkWidget *mipmap_opt; -static GtkWidget *mipmap_filter_opt; -static GtkWidget *mipmap_wrap_opt; -static GtkWidget *transparent_spin; -static GtkWidget *srgb_check; -static GtkWidget *flip_check; -static GtkWidget *gamma_check; -static GtkWidget *gamma_spin; -static GtkWidget *pm_check; -static GtkWidget *alpha_coverage_check; -static GtkWidget *alpha_test_threshold_spin; +static GtkWidget *transparent_check; static struct { @@ -128,8 +117,7 @@ static struct static gboolean -check_mipmaps (PikaImage *image, - gint savetype) +check_mipmaps (gint savetype) { GList *layers; GList *list; @@ -159,11 +147,11 @@ check_mipmaps (PikaImage *image, max_surfaces = INT_MAX; } - layers = pika_image_list_layers (image); + layers = pika_image_list_layers (global_image); num_layers = g_list_length (layers); - w = pika_image_get_width (image); - h = pika_image_get_height (image); + w = pika_image_get_width (global_image); + h = pika_image_get_height (global_image); num_mipmaps = get_num_mipmaps (w, h); @@ -237,7 +225,7 @@ check_cubemap (PikaImage *image) if (num_layers > 6) { /* check that mipmap layers are in order for a cubemap */ - if (! check_mipmaps (image, DDS_SAVE_CUBEMAP)) + if (! check_mipmaps (DDS_SAVE_CUBEMAP)) return FALSE; /* invalidate cubemap faces */ @@ -425,7 +413,7 @@ check_array (PikaImage *image) gint w, h; PikaImageType type; - if (check_mipmaps (image, DDS_SAVE_ARRAY)) + if (check_mipmaps (DDS_SAVE_ARRAY)) return 1; layers = pika_image_list_layers (image); @@ -506,13 +494,13 @@ get_array_size (PikaImage *image) } PikaPDBStatusType -write_dds (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - gboolean interactive, - PikaProcedure *procedure, - GObject *config, - gboolean is_duplicate_image) +write_dds (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + gboolean interactive, + PikaProcedure *procedure, + PikaProcedureConfig *config, + gboolean is_duplicate_image) { FILE *fp; gint rc = 0; @@ -520,13 +508,16 @@ write_dds (GFile *file, gint mipmaps; gint savetype; + compression = pika_procedure_config_get_choice_id (config, + "compression-format"); g_object_get (config, - "compression-format", &compression, - "mipmaps", &mipmaps, - "save-type", &savetype, + "save-type", &savetype, + "mipmaps", &mipmaps, NULL); - is_mipmap_chain_valid = check_mipmaps (image, savetype); + global_image = image; + + is_mipmap_chain_valid = check_mipmaps (savetype); is_cubemap = check_cubemap (image); is_volume = check_volume (image); @@ -850,15 +841,15 @@ get_mipmap_chain (unsigned char *dst, } static void -write_layer (FILE *fp, - PikaImage *image, - PikaDrawable *drawable, - GObject *config, - int w, - int h, - int bpp, - int fmtbpp, - int num_mipmaps) +write_layer (FILE *fp, + PikaImage *image, + PikaDrawable *drawable, + PikaProcedureConfig *config, + int w, + int h, + int bpp, + int fmtbpp, + int num_mipmaps) { GeglBuffer *buffer; const Babl *format; @@ -882,11 +873,12 @@ write_layer (FILE *fp, gint flags = 0; g_object_get (config, - "compression-format", &compression, - "mipmaps", &mipmaps, - "format", &pixel_format, "perceptual-metric", &perceptual_metric, + "mipmaps", &mipmaps, NULL); + compression = pika_procedure_config_get_choice_id (config, + "compression-format"); + pixel_format = pika_procedure_config_get_choice_id (config, "format"); basetype = pika_image_get_base_type (image); type = pika_drawable_type (drawable); @@ -1037,14 +1029,16 @@ write_layer (FILE *fp, gdouble alpha_test_threshold; g_object_get (config, - "mipmap-filter", &mipmap_filter, - "mipmap-wrap", &mipmap_wrap, "gamma-correct", &gamma_correct, "srgb", &srgb, "gamma", &gamma, "preserve-alpha-coverage", &preserve_alpha_coverage, "alpha-test-threshold", &alpha_test_threshold, NULL); + mipmap_filter = pika_procedure_config_get_choice_id (config, + "mipmap-filter"); + mipmap_wrap = pika_procedure_config_get_choice_id (config, + "mipmap-wrap"); generate_mipmaps (dst, src, w, h, bpp, palette != NULL, num_mipmaps, @@ -1135,14 +1129,16 @@ write_layer (FILE *fp, gdouble alpha_test_threshold; g_object_get (config, - "mipmap-filter", &mipmap_filter, - "mipmap-wrap", &mipmap_wrap, "gamma-correct", &gamma_correct, "srgb", &srgb, "gamma", &gamma, "preserve-alpha-coverage", &preserve_alpha_coverage, "alpha-test-threshold", &alpha_test_threshold, NULL); + mipmap_filter = pika_procedure_config_get_choice_id (config, + "mipmap-filter"); + mipmap_wrap = pika_procedure_config_get_choice_id (config, + "mipmap-wrap"); generate_mipmaps (fmtdst, src, w, h, bpp, 0, num_mipmaps, mipmap_filter, @@ -1179,16 +1175,16 @@ write_layer (FILE *fp, } static void -write_volume_mipmaps (FILE *fp, - PikaImage *image, - GObject *config, - GList *layers, - int w, - int h, - int d, - int bpp, - int fmtbpp, - int num_mipmaps) +write_volume_mipmaps (FILE *fp, + PikaImage *image, + PikaProcedureConfig *config, + GList *layers, + int w, + int h, + int d, + int bpp, + int fmtbpp, + int num_mipmaps) { GList *list; gint i; @@ -1212,14 +1208,16 @@ write_volume_mipmaps (FILE *fp, gdouble gamma; g_object_get (config, - "compression-format", &compression, - "format", &pixel_format, - "mipmap-filter", &mipmap_filter, - "mipmap-wrap", &mipmap_wrap, "gamma-correct", &gamma_correct, "srgb", &srgb, "gamma", &gamma, NULL); + compression = pika_procedure_config_get_choice_id (config, + "compression-format"); + pixel_format = pika_procedure_config_get_choice_id (config, "format"); + mipmap_filter = pika_procedure_config_get_choice_id (config, + "mipmap-filter"); + mipmap_wrap = pika_procedure_config_get_choice_id (config, "mipmap-wrap"); type = pika_image_get_base_type (image); @@ -1317,10 +1315,10 @@ write_volume_mipmaps (FILE *fp, } static gboolean -write_image (FILE *fp, - PikaImage *image, - PikaDrawable *drawable, - GObject *config) +write_image (FILE *fp, + PikaImage *image, + PikaDrawable *drawable, + PikaProcedureConfig *config) { PikaImageType drawable_type; PikaImageBaseType basetype; @@ -1351,13 +1349,14 @@ write_image (FILE *fp, gboolean flip_export; g_object_get (config, - "compression-format", &compression, - "mipmaps", &mipmaps, - "save-type", &savetype, - "format", &pixel_format, "transparent-index", &transindex, "flip-image", &flip_export, + "mipmaps", &mipmaps, + "save-type", &savetype, NULL); + compression = pika_procedure_config_get_choice_id (config, + "compression-format"); + pixel_format = pika_procedure_config_get_choice_id (config, "format"); if (flip_export) pika_image_flip (image, PIKA_ORIENTATION_VERTICAL); @@ -1804,29 +1803,32 @@ combo_set_item_sensitive (GtkWidget *widget, } static void -config_notify (GObject *config, - const GParamSpec *pspec, - PikaImage *image) +config_notify (PikaProcedureConfig *config, + const GParamSpec *pspec, + PikaProcedureDialog *dialog) { if (! strcmp (pspec->name, "compression-format")) { gint compression; - g_object_get (config, - "compression-format", &compression, - NULL); + compression = pika_procedure_config_get_choice_id (config, + "compression-format"); - if (format_opt) - gtk_widget_set_sensitive (format_opt, - compression == DDS_COMPRESS_NONE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "format", + compression == DDS_COMPRESS_NONE, + NULL, NULL, FALSE); - if (pm_check) - gtk_widget_set_sensitive (pm_check, - compression != DDS_COMPRESS_NONE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "perceptual-metric", + compression != DDS_COMPRESS_NONE, + NULL, NULL, FALSE); } else if (! strcmp (pspec->name, "save-type")) { - gint savetype; + gint savetype; + GtkWidget *widget; + GtkWidget *combo; g_object_get (config, "save-type", &savetype, @@ -1838,20 +1840,26 @@ config_notify (GObject *config, case DDS_SAVE_VISIBLE_LAYERS: case DDS_SAVE_CUBEMAP: case DDS_SAVE_ARRAY: - gtk_widget_set_sensitive (compress_opt, TRUE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "compression-format", TRUE, + NULL, NULL, FALSE); break; case DDS_SAVE_VOLUMEMAP: g_object_set (config, - "compression-format", DDS_COMPRESS_NONE, + "compression-format", "none", NULL); - gtk_widget_set_sensitive (compress_opt, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "compression-format", FALSE, + NULL, NULL, FALSE); break; } - if (mipmap_opt) - combo_set_item_sensitive (mipmap_opt, DDS_MIPMAP_EXISTING, - check_mipmaps (image, savetype)); + 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)); } else if (! strcmp (pspec->name, "mipmaps")) { @@ -1861,59 +1869,64 @@ config_notify (GObject *config, gboolean preserve_alpha_coverage; g_object_get (config, - "mipmaps", &mipmaps, "gamma-correct", &gamma_correct, "srgb", &srgb, "preserve-alpha-coverage", &preserve_alpha_coverage, + "mipmaps", &mipmaps, NULL); - if (mipmap_filter_opt) - gtk_widget_set_sensitive (mipmap_filter_opt, - mipmaps == DDS_MIPMAP_GENERATE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "mipmap-filter", + mipmaps == DDS_MIPMAP_GENERATE, + NULL, NULL, FALSE); - if (mipmap_wrap_opt) - gtk_widget_set_sensitive (mipmap_wrap_opt, - mipmaps == DDS_MIPMAP_GENERATE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "mipmap-wrap", + mipmaps == DDS_MIPMAP_GENERATE, + NULL, NULL, FALSE); - if (gamma_check) - gtk_widget_set_sensitive (gamma_check, - mipmaps == DDS_MIPMAP_GENERATE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "gamma-correct", + mipmaps == DDS_MIPMAP_GENERATE, + NULL, NULL, FALSE); - if (srgb_check) - gtk_widget_set_sensitive (srgb_check, - (mipmaps == DDS_MIPMAP_GENERATE) && - gamma_correct); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "srgb", + ((mipmaps == DDS_MIPMAP_GENERATE) && + gamma_correct), + NULL, NULL, FALSE); - if (gamma_spin) - gtk_widget_set_sensitive (gamma_spin, - (mipmaps == DDS_MIPMAP_GENERATE) && - gamma_correct && - ! srgb); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "gamma", + ((mipmaps == DDS_MIPMAP_GENERATE) && + gamma_correct && ! srgb), + NULL, NULL, FALSE); - if (alpha_coverage_check) - gtk_widget_set_sensitive (alpha_coverage_check, - mipmaps == DDS_MIPMAP_GENERATE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "preserve-alpha-coverage", + mipmaps == DDS_MIPMAP_GENERATE, + NULL, NULL, FALSE); - if (alpha_test_threshold_spin) - gtk_widget_set_sensitive (alpha_test_threshold_spin, - (mipmaps == DDS_MIPMAP_GENERATE) && - preserve_alpha_coverage); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "alpha-test-threshold", + ((mipmaps == DDS_MIPMAP_GENERATE) && + preserve_alpha_coverage), + NULL, NULL, FALSE); } else if (! strcmp (pspec->name, "transparent-color")) { - PikaImageBaseType base_type; - gboolean transparent_color; - - base_type = pika_image_get_base_type (image); + gboolean transparent_color; g_object_get (config, "transparent-color", &transparent_color, NULL); - if (transparent_spin) - gtk_widget_set_sensitive (transparent_spin, - transparent_color && - base_type == PIKA_INDEXED); + if (transparent_check && + gtk_widget_get_sensitive (transparent_check)) + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "transparent-index", + transparent_color, + NULL, NULL, FALSE); } else if (! strcmp (pspec->name, "gamma-correct")) { @@ -1925,11 +1938,14 @@ config_notify (GObject *config, "srgb", &srgb, NULL); - if (srgb_check) - gtk_widget_set_sensitive (srgb_check, gamma_correct); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "srgb", gamma_correct, + NULL, NULL, FALSE); - if (gamma_spin) - gtk_widget_set_sensitive (gamma_spin, gamma_correct && ! srgb); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "gamma", + (gamma_correct && ! srgb), + NULL, NULL, FALSE); } else if (! strcmp (pspec->name, "srgb")) { @@ -1941,8 +1957,10 @@ config_notify (GObject *config, "srgb", &srgb, NULL); - if (gamma_spin) - gtk_widget_set_sensitive (gamma_spin, gamma_correct && ! srgb); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "gamma", + (gamma_correct && ! srgb), + NULL, NULL, FALSE); } else if (! strcmp (pspec->name, "preserve-alpha-coverage")) { @@ -1952,251 +1970,137 @@ config_notify (GObject *config, "preserve-alpha-coverage", &preserve_alpha_coverage, NULL); - if (alpha_test_threshold_spin) - gtk_widget_set_sensitive (alpha_test_threshold_spin, - preserve_alpha_coverage); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + "alpha-test-threshold", + preserve_alpha_coverage, + NULL, NULL, FALSE); } } static gboolean -save_dialog (PikaImage *image, - PikaDrawable *drawable, - PikaProcedure *procedure, - GObject *config) +save_dialog (PikaImage *image, + PikaDrawable *drawable, + PikaProcedure *procedure, + PikaProcedureConfig *config) { - GtkWidget *dialog; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *grid; - GtkListStore *store; - GtkWidget *opt; - GtkWidget *check; - GtkWidget *frame; - gboolean run; + GtkWidget *dialog; + GtkWidget *widget; + GtkWidget *combo; + GtkListStore *store; + 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, NULL); - dialog = pika_procedure_dialog_new (procedure, - PIKA_PROCEDURE_CONFIG (config), - _("Export Image as DDS")); + dialog = pika_save_procedure_dialog_new (PIKA_SAVE_PROCEDURE (procedure), + PIKA_PROCEDURE_CONFIG (config), + image); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - vbox, TRUE, TRUE, 0); - gtk_widget_show (vbox); + transparent_check = + 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, + NULL, NULL, FALSE); - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "transparency-frame", + "transparent-color", FALSE, + "transparent-index"); - store = pika_int_store_new ("None", DDS_COMPRESS_NONE, - "BC1 / DXT1", DDS_COMPRESS_BC1, - "BC2 / DXT3", DDS_COMPRESS_BC2, - "BC3 / DXT5", DDS_COMPRESS_BC3, - "BC3nm / DXT5nm", DDS_COMPRESS_BC3N, - "BC4 / ATI1 (3Dc+)", DDS_COMPRESS_BC4, - "BC5 / ATI2 (3Dc)", DDS_COMPRESS_BC5, - "RXGB (DXT5)", DDS_COMPRESS_RXGB, - "Alpha Exponent (DXT5)", DDS_COMPRESS_AEXP, - "YCoCg (DXT5)", DDS_COMPRESS_YCOCG, - "YCoCg scaled (DXT5)", DDS_COMPRESS_YCOCGS, + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "mipmap-options-label", + _("Mipmap Options"), + FALSE, FALSE); + + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "mipmap-options-box", + "mipmap-filter", "mipmap-wrap", + "gamma-correct", "srgb", "gamma", + "preserve-alpha-coverage", + "alpha-test-threshold", NULL); + + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "mipmap-options-frame", + "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); - compress_opt = pika_prop_int_combo_box_new (config, "compression-format", - PIKA_INT_STORE (store)); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("_Compression:"), - 0.0, 0.5, - compress_opt, 1); - - pm_check = pika_prop_check_button_new (config, "perceptual-metric", - _("Use _perceptual error metric")); - gtk_grid_attach (GTK_GRID (grid), pm_check, 1, 1, 1, 1); - - store = pika_int_store_new ("Default", DDS_FORMAT_DEFAULT, - "RGB8", DDS_FORMAT_RGB8, - "RGBA8", DDS_FORMAT_RGBA8, - "BGR8", DDS_FORMAT_BGR8, - "ABGR8", DDS_FORMAT_ABGR8, - "R5G6B5", DDS_FORMAT_R5G6B5, - "RGBA4", DDS_FORMAT_RGBA4, - "RGB5A1", DDS_FORMAT_RGB5A1, - "RGB10A2", DDS_FORMAT_RGB10A2, - "R3G3B2", DDS_FORMAT_R3G3B2, - "A8", DDS_FORMAT_A8, - "L8", DDS_FORMAT_L8, - "L8A8", DDS_FORMAT_L8A8, - "AExp", DDS_FORMAT_AEXP, - "YCoCg", DDS_FORMAT_YCOCG, - NULL); - format_opt = pika_prop_int_combo_box_new (config, "format", - PIKA_INT_STORE (store)); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 2, - _("_Format:"), - 0.0, 0.5, - format_opt, 1); - - 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); - opt = pika_prop_int_combo_box_new (config, "save-type", - PIKA_INT_STORE (store)); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 3, - _("_Save:"), - 0.0, 0.5, - opt, 1); - - pika_int_combo_box_set_sensitivity (PIKA_INT_COMBO_BOX (opt), - combo_sensitivity_func, - opt, NULL); - - combo_set_item_sensitive (opt, DDS_SAVE_CUBEMAP, is_cubemap); - combo_set_item_sensitive (opt, DDS_SAVE_VOLUMEMAP, is_volume); - combo_set_item_sensitive (opt, DDS_SAVE_ARRAY, is_array); - - flip_check = pika_prop_check_button_new (config, "flip-image", - _("Flip image _vertically on export")); - gtk_grid_attach (GTK_GRID (grid), flip_check, 1, 4, 1, 1); + 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); store = pika_int_store_new (_("No mipmaps"), DDS_MIPMAP_NONE, _("Generate mipmaps"), DDS_MIPMAP_GENERATE, _("Use existing mipmaps"), DDS_MIPMAP_EXISTING, NULL); - mipmap_opt = pika_prop_int_combo_box_new (config, "mipmaps", - PIKA_INT_STORE (store)); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 5, - _("_Mipmaps:"), - 0.0, 0.5, - mipmap_opt, 1); - - pika_int_combo_box_set_sensitivity (PIKA_INT_COMBO_BOX (mipmap_opt), - combo_sensitivity_func, - mipmap_opt, NULL); - - combo_set_item_sensitive (mipmap_opt, DDS_MIPMAP_EXISTING, + 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_fill (PIKA_PROCEDURE_DIALOG (dialog), + "compression-format", "perceptual-metric", + "format", "save-type", "flip-image", + "mipmaps", "transparency-frame", + "mipmap-options-frame", NULL); - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - check = pika_prop_check_button_new (config, "transparent-color", - _("Transparent index:")); - gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0); - gtk_widget_show (check); - - transparent_spin = pika_prop_spin_button_new (config, "transparent-index", - 1, 8, 0); - gtk_box_pack_start (GTK_BOX (hbox), transparent_spin, TRUE, TRUE, 0); - - frame = pika_frame_new (_("Mipmap Options")); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 8); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - store = pika_int_store_new ("Default", DDS_MIPMAP_FILTER_DEFAULT, - "Nearest", DDS_MIPMAP_FILTER_NEAREST, - "Box", DDS_MIPMAP_FILTER_BOX, - "Triangle", DDS_MIPMAP_FILTER_TRIANGLE, - "Quadratic", DDS_MIPMAP_FILTER_QUADRATIC, - "B-Spline", DDS_MIPMAP_FILTER_BSPLINE, - "Mitchell", DDS_MIPMAP_FILTER_MITCHELL, - "Lanczos", DDS_MIPMAP_FILTER_LANCZOS, - "Kaiser", DDS_MIPMAP_FILTER_KAISER, - NULL); - mipmap_filter_opt = pika_prop_int_combo_box_new (config, "mipmap-filter", - PIKA_INT_STORE (store)); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("F_ilter:"), - 0.0, 0.5, - mipmap_filter_opt, 1); - - store = pika_int_store_new ("Default", DDS_MIPMAP_WRAP_DEFAULT, - "Mirror", DDS_MIPMAP_WRAP_MIRROR, - "Repeat", DDS_MIPMAP_WRAP_REPEAT, - "Clamp", DDS_MIPMAP_WRAP_CLAMP, - NULL); - mipmap_wrap_opt = pika_prop_int_combo_box_new (config, "mipmap-wrap", - PIKA_INT_STORE (store)); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("_Wrap mode:"), - 0.0, 0.5, - mipmap_wrap_opt, 1); - - gamma_check = pika_prop_check_button_new (config, "gamma-correct", - _("Appl_y gamma correction")); - gtk_grid_attach (GTK_GRID (grid), gamma_check, 1, 2, 1, 1); - - srgb_check = pika_prop_check_button_new (config, "srgb", - _("Use s_RGB colorspace")); - gtk_grid_attach (GTK_GRID (grid), srgb_check, 1, 3, 1, 1); - - gamma_spin = pika_prop_spin_button_new (config, "gamma", - 0.1, 0.5, 1); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 4, - _("_Gamma:"), 0.0, 0.5, - gamma_spin, 1); - - alpha_coverage_check = - pika_prop_check_button_new (config, "preserve-alpha-coverage", - _("Preserve alpha _test coverage")); - gtk_grid_attach (GTK_GRID (grid), alpha_coverage_check, 1, 5, 1, 1); - - alpha_test_threshold_spin = - pika_prop_spin_button_new (config, "alpha-test-threshold", - 0.01, 0.1, 2); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 6, - _("_Alpha test threshold:"), 0.0, 0.5, - alpha_test_threshold_spin, 1); - - config_notify (config, + config_notify (PIKA_PROCEDURE_CONFIG (config), g_object_class_find_property (G_OBJECT_GET_CLASS (config), "compression-format"), - image); + PIKA_PROCEDURE_DIALOG (dialog)); - config_notify (config, + config_notify (PIKA_PROCEDURE_CONFIG (config), g_object_class_find_property (G_OBJECT_GET_CLASS (config), "mipmaps"), - image); + PIKA_PROCEDURE_DIALOG (dialog)); - config_notify (config, + config_notify (PIKA_PROCEDURE_CONFIG (config), g_object_class_find_property (G_OBJECT_GET_CLASS (config), "save-type"), - image); + PIKA_PROCEDURE_DIALOG (dialog)); - config_notify (config, + config_notify (PIKA_PROCEDURE_CONFIG (config), g_object_class_find_property (G_OBJECT_GET_CLASS (config), "transparent-color"), - image); + PIKA_PROCEDURE_DIALOG (dialog)); - g_signal_connect (config, "notify", + g_signal_connect (PIKA_PROCEDURE_CONFIG (config), "notify", G_CALLBACK (config_notify), - image); + PIKA_PROCEDURE_DIALOG (dialog)); gtk_widget_show (dialog); run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); - g_signal_handlers_disconnect_by_func (config, + g_signal_handlers_disconnect_by_func (PIKA_PROCEDURE_CONFIG (config), config_notify, - image); + PIKA_PROCEDURE_DIALOG (dialog)); gtk_widget_destroy (dialog); diff --git a/plug-ins/file-dds/ddswrite.h b/plug-ins/file-dds/ddswrite.h index 81d0ec5..6d6b592 100644 --- a/plug-ins/file-dds/ddswrite.h +++ b/plug-ins/file-dds/ddswrite.h @@ -22,13 +22,13 @@ #define __DDSWRITE_H__ -extern PikaPDBStatusType write_dds (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - gboolean interactive, - PikaProcedure *procedure, - GObject *config, - gboolean is_duplicate_image); +extern PikaPDBStatusType write_dds (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + gboolean interactive, + PikaProcedure *procedure, + PikaProcedureConfig *config, + gboolean is_duplicate_image); #endif /* __DDSWRITE_H__ */ diff --git a/plug-ins/file-exr/file-exr.c b/plug-ins/file-exr/file-exr.c index 3add7cf..4e8b20b 100644 --- a/plug-ins/file-exr/file-exr.c +++ b/plug-ins/file-exr/file-exr.c @@ -48,28 +48,29 @@ struct _ExrClass #define EXR_TYPE (exr_get_type ()) -#define EXR (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXR_TYPE, Exr)) +#define EXR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXR_TYPE, Exr)) GType exr_get_type (void) G_GNUC_CONST; -static GList * exr_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * exr_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * exr_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * exr_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * exr_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * exr_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - gboolean interactive, - GError **error); -static void sanitize_comment (gchar *comment); +static PikaImage * load_image (GFile *file, + gboolean interactive, + GError **error); +static void sanitize_comment (gchar *comment); void load_dialog (void); - G_DEFINE_TYPE (Exr, exr, PIKA_TYPE_PLUG_IN) PIKA_MAIN (EXR_TYPE) @@ -134,11 +135,13 @@ exr_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -exr_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +exr_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; diff --git a/plug-ins/file-faxg3/faxg3.c b/plug-ins/file-faxg3/faxg3.c index 441178b..fc32f23 100644 --- a/plug-ins/file-faxg3/faxg3.c +++ b/plug-ins/file-faxg3/faxg3.c @@ -71,25 +71,27 @@ struct _Faxg3Class GType faxg3_get_type (void) G_GNUC_CONST; -static GList * faxg3_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * faxg3_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * faxg3_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * faxg3_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * faxg3_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * faxg3_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); +static PikaImage * load_image (GFile *file, + GError **error); -static PikaImage * emitpika (gint hcol, - gint row, - const gchar *bitmap, - gint bperrow, - GFile *file, - GError **error); +static PikaImage * emitpika (gint hcol, + gint row, + const gchar *bitmap, + gint bperrow, + GFile *file, + GError **error); G_DEFINE_TYPE (Faxg3, faxg3, PIKA_TYPE_PLUG_IN) @@ -155,11 +157,13 @@ faxg3_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -faxg3_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +faxg3_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; diff --git a/plug-ins/file-fits/fits.c b/plug-ins/file-fits/fits.c index 65e75b1..c79a1ab 100644 --- a/plug-ins/file-fits/fits.c +++ b/plug-ins/file-fits/fits.c @@ -74,7 +74,7 @@ struct _FitsClass #define FITS_TYPE (fits_get_type ()) -#define FITS (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FITS_TYPE, Fits)) +#define FITS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FITS_TYPE, Fits)) GType fits_get_type (void) G_GNUC_CONST; @@ -87,50 +87,53 @@ typedef struct gint datatype; } FitsHduData; -static GList * fits_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * fits_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * fits_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * fits_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * fits_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * fits_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * fits_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * fits_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GObject *config, - PikaRunMode run_mode, - GError **error); -static gint save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GError **error); +static PikaImage * load_image (GFile *file, + GObject *config, + PikaRunMode run_mode, + GError **error); +static gint save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GError **error); -static gint save_fits (GFile *file, - PikaImage *image, - PikaDrawable *drawable); +static gint save_fits (GFile *file, + PikaImage *image, + PikaDrawable *drawable); -static PikaImage * create_new_image (GFile *file, - guint pagenum, - guint width, - guint height, - PikaImageBaseType itype, - PikaImageType dtype, - PikaPrecision iprecision, - PikaLayer **layer, - GeglBuffer **buffer); +static PikaImage * create_new_image (GFile *file, + guint pagenum, + guint width, + guint height, + PikaImageBaseType itype, + PikaImageType dtype, + PikaPrecision iprecision, + PikaLayer **layer, + GeglBuffer **buffer); -static gboolean load_dialog (PikaProcedure *procedure, - GObject *config); -static void show_fits_errors (gint status); +static gboolean load_dialog (PikaProcedure *procedure, + GObject *config); +static void show_fits_errors (gint status); G_DEFINE_TYPE (Fits, fits, PIKA_TYPE_PLUG_IN) @@ -214,7 +217,7 @@ fits_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - fits_save, NULL, NULL); + FALSE, fits_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB, GRAY, INDEXED"); @@ -242,22 +245,20 @@ fits_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -fits_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +fits_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaImage *image; - GError *error = NULL; + PikaValueArray *return_vals; + PikaImage *image; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - if (run_mode == PIKA_RUN_INTERACTIVE) { if (! load_dialog (procedure, G_OBJECT (config))) @@ -273,9 +274,6 @@ fits_load (PikaProcedure *procedure, PIKA_PDB_EXECUTION_ERROR, error); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); @@ -292,7 +290,8 @@ fits_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { PikaImage *duplicate_image; @@ -1065,4 +1064,4 @@ show_fits_errors (gint status) /* Write out error messages of FITS-Library */ fits_get_errstatus (status, status_str); g_message ("FITS: %s\n", status_str); -} \ No newline at end of file +} diff --git a/plug-ins/file-fli/fli-pika.c b/plug-ins/file-fli/fli-pika.c index bf40de1..25ee02c 100644 --- a/plug-ins/file-fli/fli-pika.c +++ b/plug-ins/file-fli/fli-pika.c @@ -86,51 +86,54 @@ struct _FliClass #define FLI_TYPE (fli_get_type ()) -#define FLI (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLI_TYPE, Fli)) +#define FLI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLI_TYPE, Fli)) GType fli_get_type (void) G_GNUC_CONST; -static GList * fli_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * fli_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * fli_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * fli_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * fli_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * fli_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * fli_info (PikaProcedure *procedure, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * fli_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * fli_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * fli_info (PikaProcedure *procedure, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GObject *config, - GError **error); -static gboolean load_dialog (GFile *file, - PikaProcedure *procedure, - GObject *config); +static PikaImage * load_image (GFile *file, + GObject *config, + GError **error); +static gboolean load_dialog (GFile *file, + PikaProcedure *procedure, + GObject *config); -static gboolean save_image (GFile *file, - PikaImage *image, - GObject *config, - GError **error); -static gboolean save_dialog (PikaImage *image, - PikaProcedure *procedure, - GObject *config); +static gboolean save_image (GFile *file, + PikaImage *image, + GObject *config, + GError **error); +static gboolean save_dialog (PikaImage *image, + PikaProcedure *procedure, + GObject *config); -static gboolean get_info (GFile *file, - gint32 *width, - gint32 *height, - gint32 *frames, - GError **error); +static gboolean get_info (GFile *file, + gint32 *width, + gint32 *height, + gint32 *frames, + GError **error); G_DEFINE_TYPE (Fli, fli, PIKA_TYPE_PLUG_IN) @@ -211,7 +214,7 @@ fli_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - fli_save, NULL, NULL); + FALSE, fli_save, NULL, NULL); pika_procedure_set_image_types (procedure, "INDEXED, GRAY"); @@ -290,22 +293,20 @@ fli_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -fli_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +fli_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { - PikaProcedureConfig *config; - PikaValueArray *return_vals; - PikaImage *image; - GError *error = NULL; + PikaValueArray *return_vals; + PikaImage *image; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, run_mode, args); - if (run_mode == PIKA_RUN_INTERACTIVE) { if (! load_dialog (file, procedure, G_OBJECT (config))) @@ -314,17 +315,13 @@ fli_load (PikaProcedure *procedure, NULL); } - image = load_image (file, G_OBJECT (config), - &error); + image = load_image (file, G_OBJECT (config), &error); if (! image) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, error); - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); - g_object_unref (config); - return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); @@ -341,19 +338,16 @@ fli_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -391,9 +385,6 @@ fli_save (PikaProcedure *procedure, } } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); @@ -405,7 +396,7 @@ fli_save (PikaProcedure *procedure, static PikaValueArray * fli_info (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals; @@ -415,7 +406,7 @@ fli_info (PikaProcedure *procedure, gint32 frames; GError *error = NULL; - file = PIKA_VALUES_GET_FILE (args, 0); + g_object_get (config, "file", &file, NULL); if (! get_info (file, &width, &height, &frames, &error)) diff --git a/plug-ins/file-icns/file-icns-load.c b/plug-ins/file-icns/file-icns-load.c index 21a4ab8..b01b61c 100644 --- a/plug-ins/file-icns/file-icns-load.c +++ b/plug-ins/file-icns/file-icns-load.c @@ -427,6 +427,8 @@ icns_attach_image (PikaImage *image, if (temp_file_type && procedure_name) { + PikaProcedure *procedure; + temp_file = pika_temp_file (temp_file_type); fp = g_fopen (g_file_peek_path (temp_file), "wb"); @@ -443,12 +445,11 @@ icns_attach_image (PikaImage *image, fwrite (icns->data + 8, sizeof (guchar), icns->size - 8, fp); fclose (fp); - return_vals = - pika_pdb_run_procedure (pika_get_pdb (), - procedure_name, - PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE, - G_TYPE_FILE, temp_file, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), procedure_name); + return_vals = pika_procedure_run (procedure, + "run-mode", PIKA_RUN_NONINTERACTIVE, + "file", temp_file, + NULL); } if (temp_image && return_vals) @@ -464,9 +465,9 @@ icns_attach_image (PikaImage *image, g_file_delete (temp_file, NULL, NULL); g_object_unref (temp_file); - pika_value_array_unref (return_vals); g_free (layers); } + g_clear_pointer (&return_vals, pika_value_array_unref); } else { @@ -548,6 +549,7 @@ icns_load_thumbnail_image (GFile *file, GError **error) { gint w = 0; + gint target_w = *width; FILE *fp; PikaImage *image = NULL; IcnsResource *icns; @@ -586,16 +588,38 @@ icns_load_thumbnail_image (GFile *file, resources = g_new (IcnsResource, 256); while (resource_get_next (icns, &resources[nResources++])) {} + *width = 0; + *height = 0; for (i = 0; iconTypes[i].type; i++) { if ((icns = resource_find (resources, iconTypes[i].type, nResources))) { - if (iconTypes[i].width > w) + if (iconTypes[i].width > w && iconTypes[i].width <= target_w) { w = iconTypes[i].width; match = i; } } + *width = MAX (*width, iconTypes[i].width); + *height = MAX (*height, iconTypes[i].height); + } + + if (match == -1) + { + /* We didn't find any icon with size smaller or equal to the target. + * Settle with the smallest bigger icon instead. + */ + for (i = 0; iconTypes[i].type; i++) + { + if ((icns = resource_find (resources, iconTypes[i].type, nResources))) + { + if (match == -1 || iconTypes[i].width < w) + { + w = iconTypes[i].width; + match = i; + } + } + } } if (match > -1) diff --git a/plug-ins/file-icns/file-icns-save.c b/plug-ins/file-icns/file-icns-save.c index 508457f..a28bdf2 100644 --- a/plug-ins/file-icns/file-icns-save.c +++ b/plug-ins/file-icns/file-icns-save.c @@ -417,7 +417,6 @@ icns_export_image (GFile *file, GList *iter; gint i; guint32 file_size = 8; - PikaValueArray *return_vals = NULL; gint duplicates[ICNS_TYPE_NUM]; for (i = 0; i < ICNS_TYPE_NUM; i++) @@ -456,6 +455,8 @@ icns_export_image (GFile *file, /* MacOS X format icons */ if (match != -1 && duplicates[match] == 0) { + PikaProcedure *procedure; + PikaValueArray *return_vals; PikaDrawable **drawables = NULL; GFile *temp_file = NULL; PikaObjectArray *args; @@ -470,23 +471,22 @@ icns_export_image (GFile *file, args = pika_object_array_new (PIKA_TYPE_DRAWABLE, (GObject **) drawables, 1, FALSE); - return_vals = - pika_pdb_run_procedure (pika_get_pdb (), - "file-png-save", - PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE, - PIKA_TYPE_IMAGE, image, - G_TYPE_INT, 1, - PIKA_TYPE_OBJECT_ARRAY, args, - G_TYPE_FILE, temp_file, - G_TYPE_BOOLEAN, FALSE, - G_TYPE_INT, 9, - G_TYPE_BOOLEAN, FALSE, - G_TYPE_BOOLEAN, FALSE, - G_TYPE_BOOLEAN, FALSE, - G_TYPE_BOOLEAN, FALSE, - G_TYPE_BOOLEAN, FALSE, - G_TYPE_BOOLEAN, FALSE, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), "file-png-save"); + return_vals = pika_procedure_run (procedure, + "run-mode", PIKA_RUN_NONINTERACTIVE, + "image", image, + "num-drawables", 1, + "drawables", args, + "file", temp_file, + "interlaced", FALSE, + "compression", 9, + "bkgd", FALSE, + "offs", FALSE, + "phys", FALSE, + "time", FALSE, + "save-transparent", FALSE, + "optimize-palette", FALSE, + NULL); pika_object_array_free (args); g_clear_pointer (&drawables, g_free); diff --git a/plug-ins/file-icns/file-icns.c b/plug-ins/file-icns/file-icns.c index d325adc..da06c4c 100644 --- a/plug-ins/file-icns/file-icns.c +++ b/plug-ins/file-icns/file-icns.c @@ -59,33 +59,36 @@ struct _IcnsClass }; -#define ICNS_TYPE (icns_get_type ()) -#define ICNS (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ICNS_TYPE, Icns)) +#define ICNS_TYPE (icns_get_type ()) +#define ICNS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ICNS_TYPE, Icns)) GType icns_get_type (void) G_GNUC_CONST; -static GList * icns_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * icns_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * icns_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * icns_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * icns_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * icns_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * icns_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * icns_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * icns_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * icns_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); G_DEFINE_TYPE (Icns, icns, PIKA_TYPE_PLUG_IN) @@ -172,7 +175,7 @@ icns_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - icns_save, NULL, NULL); + FALSE, icns_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -198,11 +201,13 @@ icns_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -icns_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +icns_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -227,11 +232,11 @@ icns_load (PikaProcedure *procedure, } static PikaValueArray * -icns_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +icns_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; gint width; @@ -272,7 +277,8 @@ icns_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status; diff --git a/plug-ins/file-ico/ico-dialog.c b/plug-ins/file-ico/ico-dialog.c index e81f2c5..32b1632 100644 --- a/plug-ins/file-ico/ico-dialog.c +++ b/plug-ins/file-ico/ico-dialog.c @@ -474,6 +474,7 @@ ico_dialog_update_icon_preview (GtkWidget *dialog, PikaImage *image; PikaImage *tmp_image; PikaLayer *tmp_layer; + PikaProcedure *procedure; PikaValueArray *return_vals; image = pika_item_get_image (PIKA_ITEM (layer)); @@ -508,14 +509,14 @@ ico_dialog_update_icon_preview (GtkWidget *dialog, if (pika_drawable_is_indexed (layer)) pika_image_convert_rgb (tmp_image); - return_vals = - pika_pdb_run_procedure (pika_get_pdb (), - "plug-in-threshold-alpha", - PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE, - PIKA_TYPE_IMAGE, tmp_image, - PIKA_TYPE_DRAWABLE, tmp_layer, - G_TYPE_INT, ICO_ALPHA_THRESHOLD, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), + "plug-in-threshold-alpha"); + return_vals = pika_procedure_run (procedure, + "run-mode", PIKA_RUN_NONINTERACTIVE, + "image", tmp_image, + "drawable", tmp_layer, + "threshold", ICO_ALPHA_THRESHOLD, + NULL); pika_value_array_unref (return_vals); diff --git a/plug-ins/file-ico/ico-load.c b/plug-ins/file-ico/ico-load.c index f60eddb..137a053 100644 --- a/plug-ins/file-ico/ico-load.c +++ b/plug-ins/file-ico/ico-load.c @@ -1005,6 +1005,8 @@ ico_load_thumbnail_image (GFile *file, IcoLoadInfo *info; IcoFileHeader header; PikaImage *image; + gint max_width; + gint max_height; gint w = 0; gint h = 0; gint bpp = 0; @@ -1046,9 +1048,17 @@ ico_load_thumbnail_image (GFile *file, return NULL; } + max_width = 0; + max_height = 0; + /* Do a quick scan of the icons in the file to find the best match */ for (i = 0; i < icon_count; i++) { + if (info[i].width > max_width) + max_width = info[i].width; + if (info[i].height > max_height) + max_height = info[i].height; + if ((info[i].width > w && w < *width) || (info[i].height > h && h < *height)) { @@ -1077,8 +1087,8 @@ ico_load_thumbnail_image (GFile *file, "Thumbnail", info + match); g_free (buf); - *width = w; - *height = h; + *width = max_width; + *height = max_height; D(("*** thumbnail successfully loaded.\n\n")); diff --git a/plug-ins/file-ico/ico-save.c b/plug-ins/file-ico/ico-save.c index c9ea85f..5faa5ae 100644 --- a/plug-ins/file-ico/ico-save.c +++ b/plug-ins/file-ico/ico-save.c @@ -827,16 +827,17 @@ ico_image_get_reduced_buf (PikaDrawable *layer, } else if (bpp == 24) { + PikaProcedure *procedure; PikaValueArray *return_vals; - return_vals = - pika_pdb_run_procedure (pika_get_pdb (), - "plug-in-threshold-alpha", - PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE, - PIKA_TYPE_IMAGE, tmp_image, - PIKA_TYPE_DRAWABLE, tmp_layer, - G_TYPE_INT, ICO_ALPHA_THRESHOLD, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), + "plug-in-threshold-alpha"); + return_vals = pika_procedure_run (procedure, + "run-mode", PIKA_RUN_NONINTERACTIVE, + "image", tmp_image, + "drawable", tmp_layer, + "threshold", ICO_ALPHA_THRESHOLD, + NULL); pika_value_array_unref (return_vals); } diff --git a/plug-ins/file-ico/ico.c b/plug-ins/file-ico/ico.c index 1b814f0..c167a8c 100644 --- a/plug-ins/file-ico/ico.c +++ b/plug-ins/file-ico/ico.c @@ -65,33 +65,37 @@ struct _IcoClass #define ICO_TYPE (ico_get_type ()) -#define ICO (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ICO_TYPE, Ico)) +#define ICO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ICO_TYPE, Ico)) GType ico_get_type (void) G_GNUC_CONST; -static GList * ico_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * ico_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * ico_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * ico_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * ico_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * ani_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, +static PikaValueArray * ico_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * ani_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, gpointer run_data); static PikaValueArray * ico_load_thumb (PikaProcedure *procedure, GFile *file, gint size, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaValueArray * ani_load_thumb (PikaProcedure *procedure, GFile *file, gint size, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaValueArray * ico_save (PikaProcedure *procedure, PikaRunMode run_mode, @@ -99,7 +103,8 @@ static PikaValueArray * ico_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static PikaValueArray * cur_save (PikaProcedure *procedure, PikaRunMode run_mode, @@ -107,7 +112,8 @@ static PikaValueArray * cur_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); static PikaValueArray * ani_save (PikaProcedure *procedure, PikaRunMode run_mode, @@ -115,7 +121,8 @@ static PikaValueArray * ani_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data); @@ -166,8 +173,8 @@ ico_create_procedure (PikaPlugIn *plug_in, if (! strcmp (name, LOAD_PROC)) { procedure = pika_load_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - ico_load, NULL, NULL); + PIKA_PDB_PROC_TYPE_PLUGIN, + ico_load, NULL, NULL); pika_procedure_set_menu_label (procedure, _("Microsoft Windows icon")); pika_procedure_set_icon_name (procedure, PIKA_ICON_BRUSH); @@ -194,8 +201,8 @@ ico_create_procedure (PikaPlugIn *plug_in, else if (! strcmp (name, LOAD_CUR_PROC)) { procedure = pika_load_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - ico_load, NULL, NULL); + PIKA_PDB_PROC_TYPE_PLUGIN, + ico_load, NULL, NULL); pika_procedure_set_menu_label (procedure, _("Microsoft Windows cursor")); pika_procedure_set_icon_name (procedure, PIKA_ICON_BRUSH); @@ -224,8 +231,8 @@ ico_create_procedure (PikaPlugIn *plug_in, else if (! strcmp (name, LOAD_ANI_PROC)) { procedure = pika_load_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - ani_load, NULL, NULL); + PIKA_PDB_PROC_TYPE_PLUGIN, + ani_load, NULL, NULL); pika_procedure_set_menu_label (procedure, _("Microsoft Windows animated cursor")); pika_procedure_set_icon_name (procedure, PIKA_ICON_BRUSH); @@ -288,7 +295,7 @@ ico_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - ico_save, NULL, NULL); + FALSE, ico_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -313,7 +320,7 @@ ico_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - cur_save, NULL, NULL); + FALSE, cur_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -360,7 +367,7 @@ ico_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - ani_save, NULL, NULL); + FALSE, ani_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -427,11 +434,13 @@ ico_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -ico_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +ico_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -456,11 +465,13 @@ ico_load (PikaProcedure *procedure, } static PikaValueArray * -ani_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +ani_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -486,11 +497,11 @@ ani_load (PikaProcedure *procedure, } static PikaValueArray * -ico_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +ico_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; gint width; @@ -528,7 +539,7 @@ static PikaValueArray * ani_load_thumb (PikaProcedure *procedure, GFile *file, gint size, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals; @@ -570,7 +581,8 @@ ico_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status; @@ -590,22 +602,19 @@ cur_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status; - GError *error = NULL; - gint32 *hot_spot_x = NULL; - gint32 *hot_spot_y = NULL; - gint n_hot_spot_x = 0; - gint n_hot_spot_y = 0; + PikaPDBStatusType status; + GError *error = NULL; + gint32 *hot_spot_x = NULL; + gint32 *hot_spot_y = NULL; + gint n_hot_spot_x = 0; + gint n_hot_spot_y = 0; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - g_object_get (config, "n-hot-spot-x", &n_hot_spot_x, "n-hot-spot-y", &n_hot_spot_y, @@ -634,9 +643,6 @@ cur_save (PikaProcedure *procedure, g_free (hot_spot_y); } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, status, error); } @@ -647,27 +653,24 @@ ani_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status; - GError *error = NULL; - gchar *inam = NULL; - gchar *iart = NULL; - gint jif_rate = 0; - gint32 *hot_spot_x = NULL; - gint32 *hot_spot_y = NULL; - gint n_hot_spot_x = 0; - gint n_hot_spot_y = 0; - AniFileHeader header; - AniSaveInfo ani_info; + PikaPDBStatusType status; + GError *error = NULL; + gchar *inam = NULL; + gchar *iart = NULL; + gint jif_rate = 0; + gint32 *hot_spot_x = NULL; + gint32 *hot_spot_y = NULL; + gint n_hot_spot_x = 0; + gint n_hot_spot_y = 0; + AniFileHeader header; + AniSaveInfo ani_info; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - g_object_get (config, "cursor-name", &inam, "author-name", &iart, @@ -713,9 +716,6 @@ ani_save (PikaProcedure *procedure, memset (&ani_info, 0, sizeof (AniSaveInfo)); } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, status, error); } diff --git a/plug-ins/file-jpeg/jpeg-load.c b/plug-ins/file-jpeg/jpeg-load.c index db4d4a5..b5f5b81 100644 --- a/plug-ins/file-jpeg/jpeg-load.c +++ b/plug-ins/file-jpeg/jpeg-load.c @@ -479,6 +479,7 @@ load_image (GFile *file, { FILE *fp; GFile *temp_file = NULL; + PikaProcedure *procedure; PikaValueArray *return_vals = NULL; temp_file = pika_temp_file ("tmp"); @@ -500,15 +501,15 @@ load_image (GFile *file, g_free (photoshop_data); - return_vals = - pika_pdb_run_procedure (pika_get_pdb (), - "file-psd-load-metadata", - PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE, - G_TYPE_FILE, temp_file, - G_TYPE_INT, photoshop_len, - PIKA_TYPE_IMAGE, image, - G_TYPE_BOOLEAN, FALSE, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), + "file-psd-load-metadata"); + return_vals = pika_procedure_run (procedure, + "run-mode", PIKA_RUN_NONINTERACTIVE, + "file", temp_file, + "size", photoshop_len, + "image", image, + "metadata-type", FALSE, + NULL); g_file_delete (temp_file, NULL, NULL); g_object_unref (temp_file); diff --git a/plug-ins/file-jpeg/jpeg-save.c b/plug-ins/file-jpeg/jpeg-save.c index 43be0cf..7859f37 100644 --- a/plug-ins/file-jpeg/jpeg-save.c +++ b/plug-ins/file-jpeg/jpeg-save.c @@ -880,7 +880,8 @@ save_dialog (PikaProcedure *procedure, /* File size label. */ preview_size = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "preview-size", _("File size: unknown")); + "preview-size", _("File size: unknown"), + FALSE, FALSE); gtk_label_set_xalign (GTK_LABEL (preview_size), 0.0); gtk_label_set_ellipsize (GTK_LABEL (preview_size), PANGO_ELLIPSIZE_END); pika_label_set_attributes (GTK_LABEL (preview_size), @@ -892,7 +893,8 @@ save_dialog (PikaProcedure *procedure, /* Profile label. */ profile_label = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "profile-label", _("No soft-proofing profile")); + "profile-label", _("No soft-proofing profile"), + FALSE, FALSE); gtk_label_set_xalign (GTK_LABEL (profile_label), 0.0); gtk_label_set_ellipsize (GTK_LABEL (profile_label), PANGO_ELLIPSIZE_END); pika_label_set_attributes (GTK_LABEL (profile_label), @@ -969,7 +971,8 @@ save_dialog (PikaProcedure *procedure, "dct", PIKA_INT_STORE (store)); pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "advanced-title", _("Advanced Options")); + "advanced-title", _("Advanced Options"), + FALSE, FALSE); widget = pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), "smoothing", PIKA_TYPE_SPIN_SCALE); pika_help_set_help_data (widget, NULL, "file-jpeg-save-smoothing"); diff --git a/plug-ins/file-jpeg/jpeg.c b/plug-ins/file-jpeg/jpeg.c index d71bc39..4ead45d 100644 --- a/plug-ins/file-jpeg/jpeg.c +++ b/plug-ins/file-jpeg/jpeg.c @@ -54,32 +54,35 @@ struct _JpegClass #define JPEG_TYPE (jpeg_get_type ()) -#define JPEG (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), JPEG_TYPE, Jpeg)) +#define JPEG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), JPEG_TYPE, Jpeg)) GType jpeg_get_type (void) G_GNUC_CONST; -static GList * jpeg_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * jpeg_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * jpeg_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * jpeg_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * jpeg_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * jpeg_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * jpeg_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * jpeg_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * jpeg_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * jpeg_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); G_DEFINE_TYPE (Jpeg, jpeg, PIKA_TYPE_PLUG_IN) @@ -177,7 +180,7 @@ jpeg_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - jpeg_save, NULL, NULL); + TRUE, jpeg_save, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB*, GRAY*"); @@ -318,11 +321,13 @@ jpeg_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -jpeg_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +jpeg_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -351,23 +356,8 @@ jpeg_load (PikaProcedure *procedure, if (image) { - PikaMetadata *metadata; - - metadata = pika_image_metadata_load_prepare (image, "image/jpeg", - file, NULL); - - if (metadata) - { - PikaMetadataLoadFlags flags = PIKA_METADATA_LOAD_ALL; - - if (resolution_loaded) - flags &= ~PIKA_METADATA_LOAD_RESOLUTION; - - pika_image_metadata_load_finish (image, "image/jpeg", - metadata, flags); - - g_object_unref (metadata); - } + if (resolution_loaded) + *flags &= ~PIKA_METADATA_LOAD_RESOLUTION; } if (! image) @@ -385,11 +375,11 @@ jpeg_load (PikaProcedure *procedure, } static PikaValueArray * -jpeg_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +jpeg_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -432,15 +422,14 @@ jpeg_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaProcedureConfig *config; - PikaMetadata *metadata; - PikaImage *orig_image; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaImage *orig_image; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gint orig_num_quant_tables = -1; gint orig_quality = -1; @@ -448,9 +437,6 @@ jpeg_save (PikaProcedure *procedure, gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - metadata = pika_procedure_config_begin_export (config, image, run_mode, - args, "image/jpeg"); preview_image = NULL; preview_layer = NULL; @@ -614,9 +600,6 @@ jpeg_save (PikaProcedure *procedure, pika_metadata_set_bits_per_sample (metadata, 8); } - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { /* If the image was exported, delete the new display. This also diff --git a/plug-ins/file-psd/psd-load.c b/plug-ins/file-psd/psd-load.c index c3a9e19..f7ffcb8 100644 --- a/plug-ins/file-psd/psd-load.c +++ b/plug-ins/file-psd/psd-load.c @@ -2226,6 +2226,22 @@ add_layers (PikaImage *image, l_y = lyr_a[lidx]->top; l_w = lyr_a[lidx]->right - lyr_a[lidx]->left; l_h = lyr_a[lidx]->bottom - lyr_a[lidx]->top; + + if (l_h <= 0) + { + /* For fill layers this can be -1 apparently; + e.g. test file CT_SkillTest_v1.psd + Mark as empty and set height to 1. + */ + empty = TRUE; + l_h = 1; + } + if (l_w <= 0) + { + g_warning ("Unexpected layer width: %d", l_w); + empty = TRUE; + l_w = 1; + } } image_type = get_pika_image_type (img_a->base_type, TRUE); diff --git a/plug-ins/file-psd/psd-save.c b/plug-ins/file-psd/psd-save.c index 3087206..ceab185 100644 --- a/plug-ins/file-psd/psd-save.c +++ b/plug-ins/file-psd/psd-save.c @@ -2448,7 +2448,8 @@ save_dialog (PikaImage *image, /* CMYK profile label */ profile_label = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "profile-label", _("No soft-proofing profile")); + "profile-label", _("No soft-proofing profile"), + FALSE, FALSE); gtk_label_set_xalign (GTK_LABEL (profile_label), 0.0); gtk_label_set_ellipsize (GTK_LABEL (profile_label), PANGO_ELLIPSIZE_END); pika_label_set_attributes (GTK_LABEL (profile_label), @@ -2492,7 +2493,8 @@ save_dialog (PikaImage *image, "duotone-notice", _("Duotone color space information " "from the original\nimported image " - "will be used.")); + "will be used."), + FALSE, FALSE); gtk_label_set_xalign (GTK_LABEL (duotone_notice), 0.0); gtk_label_set_ellipsize (GTK_LABEL (duotone_notice), PANGO_ELLIPSIZE_END); pika_label_set_attributes (GTK_LABEL (duotone_notice), @@ -2560,7 +2562,8 @@ save_dialog (PikaImage *image, "path-warning", _("PSD files can store up to " "998 paths. \nThe rest " - "will be discarded.")); + "will be discarded."), + FALSE, FALSE); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); pika_label_set_attributes (GTK_LABEL (label), @@ -2666,7 +2669,8 @@ save_dialog (PikaImage *image, "switching to those layer modes.")); label = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "compat-notice", "Compatibility Notice"); + "compat-notice", "Compatibility Notice", + FALSE, FALSE); gtk_label_set_markup (GTK_LABEL (label), text); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_max_width_chars (GTK_LABEL (label), 50); diff --git a/plug-ins/file-psd/psd-util.c b/plug-ins/file-psd/psd-util.c index 217cd29..cfa9d39 100644 --- a/plug-ins/file-psd/psd-util.c +++ b/plug-ins/file-psd/psd-util.c @@ -587,6 +587,7 @@ decode_packbits (const gchar *src, { IFDBG(2) g_debug ("Overrun in packbits replicate of %d chars", n - unpack_left); error_code = 2; + break; } memset (dst, *src, n); src++; diff --git a/plug-ins/file-psd/psd.c b/plug-ins/file-psd/psd.c index a420b2b..e3388b6 100644 --- a/plug-ins/file-psd/psd.c +++ b/plug-ins/file-psd/psd.c @@ -52,37 +52,42 @@ struct _PsdClass #define PSD_TYPE (psd_get_type ()) -#define PSD (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSD_TYPE, Psd)) +#define PSD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSD_TYPE, Psd)) GType psd_get_type (void) G_GNUC_CONST; -static GList * psd_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * psd_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * psd_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * psd_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * psd_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * psd_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * psd_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * psd_load_metadata (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, +static PikaValueArray * psd_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, gpointer run_data); +static PikaValueArray * psd_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * psd_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * psd_load_metadata (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); G_DEFINE_TYPE (Psd, psd, PIKA_TYPE_PLUG_IN) @@ -208,7 +213,7 @@ psd_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - psd_save, NULL, NULL); + TRUE, psd_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -313,17 +318,18 @@ psd_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -psd_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +psd_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; gboolean resolution_loaded = FALSE; gboolean profile_loaded = FALSE; PikaImage *image; - PikaMetadata *metadata; PikaParasite *parasite = NULL; GError *error = NULL; PSDSupport unsupported_features; @@ -368,23 +374,11 @@ psd_load (PikaProcedure *procedure, pika_parasite_free (parasite); } - metadata = pika_image_metadata_load_prepare (image, "image/x-psd", - file, NULL); - if (metadata) - { - PikaMetadataLoadFlags flags = PIKA_METADATA_LOAD_ALL; + if (resolution_loaded) + *flags &= ~PIKA_METADATA_LOAD_RESOLUTION; - if (resolution_loaded) - flags &= ~PIKA_METADATA_LOAD_RESOLUTION; - - if (profile_loaded) - flags &= ~PIKA_METADATA_LOAD_COLORSPACE; - - pika_image_metadata_load_finish (image, "image/x-psd", - metadata, flags); - - g_object_unref (metadata); - } + if (profile_loaded) + *flags &= ~PIKA_METADATA_LOAD_COLORSPACE; return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, @@ -396,11 +390,11 @@ psd_load (PikaProcedure *procedure, } static PikaValueArray * -psd_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +psd_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; gint width = 0; @@ -437,21 +431,16 @@ psd_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaMetadata *metadata; - PikaExportReturn export = PIKA_EXPORT_IGNORE; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_IGNORE; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - metadata = pika_procedure_config_begin_export (config, image, run_mode, - args, "image/x-psd"); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -492,9 +481,6 @@ psd_save (PikaProcedure *procedure, status = PIKA_PDB_EXECUTION_ERROR; } - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); @@ -505,11 +491,13 @@ psd_save (PikaProcedure *procedure, } static PikaValueArray * -psd_load_metadata (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +psd_load_metadata (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -522,22 +510,12 @@ psd_load_metadata (PikaProcedure *procedure, gegl_init (NULL, NULL); /* Retrieve image */ - if (pika_value_array_length (args) > 1) - { - data_length = g_value_get_int (pika_value_array_index (args, 0)); - image = g_value_get_object (pika_value_array_index (args, 1)); - } - else - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - error); - } - - if (pika_value_array_length (args) > 2) - is_layer = g_value_get_boolean (pika_value_array_index (args, 2)); - if (pika_value_array_length (args) > 3) - is_cmyk = g_value_get_boolean (pika_value_array_index (args, 3)); + g_object_get (config, + "image", &image, + "size", &data_length, + "metadata-type", &is_layer, + "cmyk", &is_cmyk, + NULL); image = load_image_metadata (file, data_length, image, is_layer, is_cmyk, &unsupported_features, &error); diff --git a/plug-ins/file-raw/file-darktable.c b/plug-ins/file-raw/file-darktable.c index 336bbd2..d50ea10 100644 --- a/plug-ins/file-raw/file-darktable.c +++ b/plug-ins/file-raw/file-darktable.c @@ -54,33 +54,35 @@ struct _DarktableClass #define DARKTABLE_TYPE (darktable_get_type ()) -#define DARKTABLE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DARKTABLE_TYPE, Darktable)) +#define DARKTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DARKTABLE_TYPE, Darktable)) GType darktable_get_type (void) G_GNUC_CONST; -static GList * darktable_init_procedures (PikaPlugIn *plug_in); -static PikaProcedure * darktable_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * darktable_init_procedures (PikaPlugIn *plug_in); +static PikaProcedure * darktable_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * darktable_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * darktable_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * darktable_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * darktable_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - PikaRunMode run_mode, - GError **error); -static PikaImage * load_thumbnail_image (GFile *file, - gint thumb_size, - gint *width, - gint *height, - GError **error); +static PikaImage * load_image (GFile *file, + PikaRunMode run_mode, + GError **error); +static PikaImage * load_thumbnail_image (GFile *file, + gint thumb_size, + gint *width, + gint *height, + GError **error); G_DEFINE_TYPE (Darktable, darktable, PIKA_TYPE_PLUG_IN) @@ -306,11 +308,13 @@ darktable_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -darktable_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +darktable_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -333,11 +337,11 @@ darktable_load (PikaProcedure *procedure, } static PikaValueArray * -darktable_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +darktable_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; gint width; @@ -517,7 +521,7 @@ load_thumbnail_image (GFile *file, pika_progress_init_printf (_("Opening thumbnail for '%s'"), pika_file_get_utf8_name (file)); - *width = *height = thumb_size; + *width = *height = 0; if (g_spawn_sync (NULL, argv, diff --git a/plug-ins/file-raw/file-raw-placeholder.c b/plug-ins/file-raw/file-raw-placeholder.c index 1f074d9..c5dca42 100644 --- a/plug-ins/file-raw/file-raw-placeholder.c +++ b/plug-ins/file-raw/file-raw-placeholder.c @@ -48,19 +48,21 @@ struct _PlaceholderClass #define PLACEHOLDER_TYPE (placeholder_get_type ()) -#define PLACEHOLDER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PLACEHOLDER_TYPE, Placeholder)) +#define PLACEHOLDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PLACEHOLDER_TYPE, Placeholder)) GType placeholder_get_type (void) G_GNUC_CONST; -static GList * placeholder_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * placeholder_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * placeholder_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * placeholder_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * placeholder_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * placeholder_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); G_DEFINE_TYPE (Placeholder, placeholder, PIKA_TYPE_PLUG_IN) @@ -163,11 +165,13 @@ placeholder_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -placeholder_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +placeholder_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { const FileFormat *format = run_data; GError *error = NULL; diff --git a/plug-ins/file-raw/file-rawtherapee.c b/plug-ins/file-raw/file-rawtherapee.c index eec56f2..d80c0b7 100644 --- a/plug-ins/file-raw/file-rawtherapee.c +++ b/plug-ins/file-raw/file-rawtherapee.c @@ -55,24 +55,26 @@ struct _RawtherapeeClass #define RAWTHERAPEE_TYPE (rawtherapee_get_type ()) -#define RAWTHERAPEE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RAWTHERAPEE_TYPE, Rawtherapee)) +#define RAWTHERAPEE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RAWTHERAPEE_TYPE, Rawtherapee)) GType rawtherapee_get_type (void) G_GNUC_CONST; -static GList * rawtherapee_init_procedures (PikaPlugIn *plug_in); -static PikaProcedure * rawtherapee_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * rawtherapee_init_procedures (PikaPlugIn *plug_in); +static PikaProcedure * rawtherapee_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * rawtherapee_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * rawtherapee_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * rawtherapee_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * rawtherapee_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data); static PikaImage * load_image (GFile *file, PikaRunMode run_mode, @@ -257,11 +259,13 @@ rawtherapee_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -rawtherapee_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +rawtherapee_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -284,11 +288,11 @@ rawtherapee_load (PikaProcedure *procedure, } static PikaValueArray * -rawtherapee_load_thumb (PikaProcedure *procedure, - GFile *file, - gint size, - const PikaValueArray *args, - gpointer run_data) +rawtherapee_load_thumb (PikaProcedure *procedure, + GFile *file, + gint size, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; diff --git a/plug-ins/file-sgi/sgi.c b/plug-ins/file-sgi/sgi.c index bf84c02..bd0e700 100644 --- a/plug-ins/file-sgi/sgi.c +++ b/plug-ins/file-sgi/sgi.c @@ -61,39 +61,42 @@ struct _SgiClass #define SGI_TYPE (sgi_get_type ()) -#define SGI (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SGI_TYPE, Sgi)) +#define SGI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SGI_TYPE, Sgi)) GType sgi_get_type (void) G_GNUC_CONST; -static GList * sgi_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * sgi_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * sgi_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * sgi_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * sgi_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * sgi_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * sgi_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * sgi_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); -static PikaImage * load_image (GFile *file, - GError **error); -static gint save_image (GFile *file, - PikaImage *image, - PikaDrawable *drawable, - GObject *config, - GError **error); +static PikaImage * load_image (GFile *file, + GError **error); +static gint save_image (GFile *file, + PikaImage *image, + PikaDrawable *drawable, + GObject *config, + GError **error); -static gboolean save_dialog (PikaProcedure *procedure, - GObject *config, - PikaImage *image); +static gboolean save_dialog (PikaProcedure *procedure, + GObject *config, + PikaImage *image); G_DEFINE_TYPE (Sgi, sgi, PIKA_TYPE_PLUG_IN) @@ -163,7 +166,7 @@ sgi_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - sgi_save, NULL, NULL); + FALSE, sgi_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -198,11 +201,13 @@ sgi_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -sgi_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +sgi_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -233,19 +238,16 @@ sgi_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, image, run_mode, args); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -293,9 +295,6 @@ sgi_save (PikaProcedure *procedure, } } - pika_procedure_config_end_run (config, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/file-tiff/file-tiff-load.c b/plug-ins/file-tiff/file-tiff-load.c index 1712dc9..de0d9d1 100644 --- a/plug-ins/file-tiff/file-tiff-load.c +++ b/plug-ins/file-tiff/file-tiff-load.c @@ -259,13 +259,14 @@ get_extra_channels_count (gushort photomet, gushort spp, gboolean alpha) } PikaPDBStatusType -load_image (GFile *file, - PikaRunMode run_mode, - PikaImage **image, - gboolean *resolution_loaded, - gboolean *profile_loaded, - gboolean *ps_metadata_loaded, - GError **error) +load_image (GFile *file, + PikaRunMode run_mode, + PikaImage **image, + gboolean *resolution_loaded, + gboolean *profile_loaded, + gboolean *ps_metadata_loaded, + PikaProcedureConfig *config, + GError **error) { TIFF *tif; TiffSelectedPages pages; @@ -300,12 +301,8 @@ load_image (GFile *file, return PIKA_PDB_EXECUTION_ERROR; } - pages.target = PIKA_PAGE_SELECTOR_TARGET_LAYERS; - pika_get_data (LOAD_PROC "-target", &pages.target); - - pages.keep_empty_space = TRUE; - pika_get_data (LOAD_PROC "-keep-empty-space", - &pages.keep_empty_space); + g_object_get (config, "target", &pages.target, NULL); + g_object_get (config, "keep-empty-space", &pages.keep_empty_space, NULL); pages.n_pages = pages.o_pages = TIFFNumberOfDirectories (tif); if (pages.n_pages == 0) @@ -524,11 +521,8 @@ load_image (GFile *file, } } - pika_set_data (LOAD_PROC "-target", - &pages.target, sizeof (pages.target)); - pika_set_data (LOAD_PROC "-keep-empty-space", - &pages.keep_empty_space, - sizeof (pages.keep_empty_space)); + g_object_set (config, "target", pages.target, NULL); + g_object_set (config, "keep-empty-space", pages.keep_empty_space, NULL); /* We will loop through the all pages in case of multipage TIFF * and load every page as a separate layer. @@ -1750,6 +1744,7 @@ load_image (GFile *file, { FILE *fp; GFile *temp_file = NULL; + PikaProcedure *procedure; PikaValueArray *return_vals = NULL; temp_file = pika_temp_file ("tmp"); @@ -1766,15 +1761,15 @@ load_image (GFile *file, fwrite (photoshop_data, sizeof (guchar), photoshop_len, fp); fclose (fp); - return_vals = - pika_pdb_run_procedure (pika_get_pdb (), - "file-psd-load-metadata", - PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE, - G_TYPE_FILE, temp_file, - G_TYPE_INT, photoshop_len, - PIKA_TYPE_IMAGE, *image, - G_TYPE_BOOLEAN, FALSE, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), + "file-psd-load-metadata"); + return_vals = pika_procedure_run (procedure, + "run-mode", PIKA_RUN_NONINTERACTIVE, + "file", temp_file, + "size", photoshop_len, + "image", *image, + "metadata-type", FALSE, + NULL); g_file_delete (temp_file, NULL, NULL); g_object_unref (temp_file); @@ -1787,6 +1782,7 @@ load_image (GFile *file, { FILE *fp; GFile *temp_file = NULL; + PikaProcedure *procedure; PikaValueArray *return_vals = NULL; /* Photoshop metadata starts with 'Adobe Photoshop Document Data Block' @@ -1808,16 +1804,16 @@ load_image (GFile *file, fwrite (photoshop_data, sizeof (guchar), photoshop_len, fp); fclose (fp); - return_vals = - pika_pdb_run_procedure (pika_get_pdb (), - "file-psd-load-metadata", - PIKA_TYPE_RUN_MODE, run_mode, - G_TYPE_FILE, temp_file, - G_TYPE_INT, photoshop_len, - PIKA_TYPE_IMAGE, *image, - G_TYPE_BOOLEAN, TRUE, - G_TYPE_BOOLEAN, is_cmyk, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), + "file-psd-load-metadata"); + return_vals = pika_procedure_run (procedure, + "run-mode", run_mode, + "file", temp_file, + "size", photoshop_len, + "image", *image, + "metadata-type", TRUE, + "cmyk", is_cmyk, + NULL); g_file_delete (temp_file, NULL, NULL); g_object_unref (temp_file); diff --git a/plug-ins/file-tiff/file-tiff-load.h b/plug-ins/file-tiff/file-tiff-load.h index 4fca9dc..004c499 100644 --- a/plug-ins/file-tiff/file-tiff-load.h +++ b/plug-ins/file-tiff/file-tiff-load.h @@ -46,13 +46,14 @@ typedef struct } TiffSelectedPages; -PikaPDBStatusType load_image (GFile *file, - PikaRunMode run_mode, - PikaImage **image, - gboolean *resolution_loaded, - gboolean *profile_loaded, - gboolean *ps_metadata_loaded, - GError **error); +PikaPDBStatusType load_image (GFile *file, + PikaRunMode run_mode, + PikaImage **image, + gboolean *resolution_loaded, + gboolean *profile_loaded, + gboolean *ps_metadata_loaded, + PikaProcedureConfig *config, + GError **error); #endif /* __FILE_TIFF_LOAD_H__ */ diff --git a/plug-ins/file-tiff/file-tiff-save.c b/plug-ins/file-tiff/file-tiff-save.c index ead4558..5901f35 100644 --- a/plug-ins/file-tiff/file-tiff-save.c +++ b/plug-ins/file-tiff/file-tiff-save.c @@ -324,7 +324,6 @@ save_layer (TIFF *tif, gboolean config_cmyk; g_object_get (config, - "compression", &config_compression, "pika-comment", &config_comment, "save-comment", &config_save_comment, "save-transparent-pixels", &config_save_transp_pixels, @@ -333,6 +332,7 @@ save_layer (TIFF *tif, "cmyk", &config_cmyk, NULL); + config_compression = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "compression"); compression = pika_compression_to_tiff_compression (config_compression); layer_name = pika_item_get_name (PIKA_ITEM (layer)); @@ -693,7 +693,7 @@ save_layer (TIFF *tif, TIFFSetField (tif, TIFFTAG_ICCPROFILE, icc_length, icc_data); g_object_unref (profile); - g_object_unref (cmyk_profile); + g_clear_object (&cmyk_profile); } #endif @@ -1221,48 +1221,6 @@ out: return status; } -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); - } -} - gboolean save_dialog (PikaImage *image, PikaProcedure *procedure, @@ -1273,17 +1231,22 @@ save_dialog (PikaImage *image, gboolean is_multi_layer, gboolean classic_tiff_failed) { - GtkWidget *dialog; - GtkListStore *store; - GtkWidget *combo; - GtkWidget *profile_label; - gchar **parasites; - PikaCompression compression; - gboolean run; - gboolean has_geotiff = FALSE; - gint i; - PikaColorProfile *cmyk_profile = NULL; + GtkWidget *dialog; + GtkWidget *profile_label; + gchar **parasites; + PikaCompression compression; + gboolean run; + gboolean has_geotiff = FALSE; + gint i; + PikaColorProfile *cmyk_profile = NULL; + GParamSpec *comp_spec; + PikaParamSpecChoice *cspec; + comp_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "compression"); + cspec = PIKA_PARAM_SPEC_CHOICE (comp_spec); + pika_choice_set_sensitive (cspec->choice, "ccittfax3", is_monochrome); + pika_choice_set_sensitive (cspec->choice, "ccittfax4", is_monochrome); + pika_choice_set_sensitive (cspec->choice, "jpeg", ! is_indexed); parasites = pika_image_get_parasite_list (image); for (i = 0; i < g_strv_length (parasites); i++) @@ -1311,32 +1274,14 @@ save_dialog (PikaImage *image, "Retry as BigTIFF or with a different compression algorithm, " "or cancel.")); label = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "big-tif-warning", text); + "big-tif-warning", text, + FALSE, FALSE); g_free (text); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_label_set_line_wrap_mode (GTK_LABEL (label), PANGO_WRAP_WORD); gtk_label_set_max_width_chars (GTK_LABEL (label), 60); } - store = - pika_int_store_new (_("None"), PIKA_COMPRESSION_NONE, - _("LZW"), PIKA_COMPRESSION_LZW, - _("Pack Bits"), PIKA_COMPRESSION_PACKBITS, - _("Deflate"), PIKA_COMPRESSION_ADOBE_DEFLATE, - _("JPEG"), PIKA_COMPRESSION_JPEG, - _("CCITT Group 3 fax"), PIKA_COMPRESSION_CCITTFAX3, - _("CCITT Group 4 fax"), PIKA_COMPRESSION_CCITTFAX4, - NULL); - combo = pika_procedure_dialog_get_int_combo (PIKA_PROCEDURE_DIALOG (dialog), - "compression", PIKA_INT_STORE (store)); - combo = pika_label_int_widget_get_widget (PIKA_LABEL_INT_WIDGET (combo)); - pika_int_combo_box_set_sensitivity (PIKA_INT_COMBO_BOX (combo), - combo_sensitivity_func, - combo, NULL); - combo_set_item_sensitive (combo, PIKA_COMPRESSION_CCITTFAX3, is_monochrome); - combo_set_item_sensitive (combo, PIKA_COMPRESSION_CCITTFAX4, is_monochrome); - combo_set_item_sensitive (combo, PIKA_COMPRESSION_JPEG, ! is_indexed); - pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), "layers-frame", "save-layers", FALSE, "crop-layers"); @@ -1359,7 +1304,8 @@ save_dialog (PikaImage *image, /* Profile label. */ profile_label = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "profile-label", _("No soft-proofing profile")); + "profile-label", _("No soft-proofing profile"), + FALSE, FALSE); gtk_label_set_xalign (GTK_LABEL (profile_label), 0.0); gtk_label_set_ellipsize (GTK_LABEL (profile_label), PANGO_ELLIPSIZE_END); pika_label_set_attributes (GTK_LABEL (profile_label), @@ -1419,27 +1365,17 @@ save_dialog (PikaImage *image, "cmyk-frame", NULL); - g_object_get (config, - "compression", &compression, - NULL); + compression = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "compression"); if (! is_monochrome) { if (compression == PIKA_COMPRESSION_CCITTFAX3 || compression == PIKA_COMPRESSION_CCITTFAX4) - { - compression = PIKA_COMPRESSION_NONE; - } + g_object_set (config, "compression", "none", NULL); } if (is_indexed && compression == PIKA_COMPRESSION_JPEG) - { - compression = PIKA_COMPRESSION_NONE; - } - - g_object_set (config, - "compression", compression, - NULL); + g_object_set (config, "compression", "none", NULL); gtk_widget_show (dialog); diff --git a/plug-ins/file-tiff/file-tiff.c b/plug-ins/file-tiff/file-tiff.c index 1b242f0..5cab9d6 100644 --- a/plug-ins/file-tiff/file-tiff.c +++ b/plug-ins/file-tiff/file-tiff.c @@ -76,37 +76,40 @@ struct _TiffClass #define TIFF_TYPE (tiff_get_type ()) -#define TIFF (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TIFF_TYPE, Tiff)) +#define TIFF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TIFF_TYPE, Tiff)) GType tiff_get_type (void) G_GNUC_CONST; -static GList * tiff_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * tiff_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * tiff_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * tiff_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * tiff_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * tiff_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaPDBStatusType tiff_save_rec (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *orig_image, - gint n_orig_drawables, - PikaDrawable **orig_drawables, - GFile *file, - PikaProcedureConfig *config, - PikaMetadata *metadata, - gboolean retried, - GError **error); +static PikaValueArray * tiff_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * tiff_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); +static PikaPDBStatusType tiff_save_rec (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *orig_image, + gint n_orig_drawables, + PikaDrawable **orig_drawables, + GFile *file, + PikaProcedureConfig *config, + PikaMetadata *metadata, + gboolean retried, + GError **error); static gboolean image_is_monochrome (PikaImage *image); static gboolean image_is_multi_layer (PikaImage *image); @@ -176,12 +179,29 @@ tiff_create_procedure (PikaPlugIn *plug_in, "tif,tiff"); pika_file_procedure_set_magics (PIKA_FILE_PROCEDURE (procedure), "0,string,II*\\0,0,string,MM\\0*"); + + /* TODO: the 2 below AUX arguments should likely be real arguments, but I + * just wanted to get rid of pika_get_data/pika_set_data() usage at first + * and didn't dig much into proper and full usage. Since it's always + * possible to add arguments, but not to remove them, I prefer to make + * them AUX for now and leave it as further exercise to decide whether it + * should be part of the PDB API. + */ + PIKA_PROC_AUX_ARG_ENUM (procedure, "target", + "Open _pages as", NULL, + PIKA_TYPE_PAGE_SELECTOR_TARGET, + PIKA_PAGE_SELECTOR_TARGET_LAYERS, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_BOOLEAN (procedure, "keep-empty-space", + _("_Keep empty space around imported layers"), + NULL, TRUE, PIKA_PARAM_READWRITE); } else if (! strcmp (name, SAVE_PROC)) { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - tiff_save, NULL, NULL); + TRUE, tiff_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -214,13 +234,18 @@ tiff_create_procedure (PikaPlugIn *plug_in, FALSE, G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "compression", - _("Co_mpression"), - _("Compression type: { NONE (0), LZW (1), PACKBITS (2), " - "DEFLATE (3), JPEG (4), CCITT G3 Fax (5), " - "CCITT G4 Fax (6) }"), - 0, 6, 0, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "compression", + _("Co_mpression"), + _("Compression type"), + pika_choice_new_with_values ("none", PIKA_COMPRESSION_NONE, _("None"), NULL, + "lzw", PIKA_COMPRESSION_LZW, _("LZW"), NULL, + "packbits", PIKA_COMPRESSION_PACKBITS, _("Pack Bits"), NULL, + "adobe_deflate", PIKA_COMPRESSION_ADOBE_DEFLATE, _("Deflate"), NULL, + "jpeg", PIKA_COMPRESSION_JPEG, _("JPEG"), NULL, + "ccittfax3", PIKA_COMPRESSION_CCITTFAX3, _("CCITT Group 3 fax"), NULL, + "ccittfax4", PIKA_COMPRESSION_CCITTFAX4, _("CCITT Group 4 fax"), NULL, + NULL), + "none", G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "save-transparent-pixels", _("Save color _values from transparent pixels"), @@ -267,11 +292,13 @@ tiff_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -tiff_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +tiff_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaPDBStatusType status; @@ -279,7 +306,6 @@ tiff_load (PikaProcedure *procedure, gboolean resolution_loaded = FALSE; gboolean profile_loaded = FALSE; gboolean ps_metadata_loaded = FALSE; - PikaMetadata *metadata; GError *error = NULL; gegl_init (NULL, NULL); @@ -291,30 +317,16 @@ tiff_load (PikaProcedure *procedure, &resolution_loaded, &profile_loaded, &ps_metadata_loaded, - &error); + config, &error); if (!image) return pika_procedure_new_return_values (procedure, status, error); - metadata = pika_image_metadata_load_prepare (image, - "image/tiff", - file, NULL); + if (resolution_loaded) + *flags &= ~PIKA_METADATA_LOAD_RESOLUTION; - if (metadata) - { - PikaMetadataLoadFlags flags = PIKA_METADATA_LOAD_ALL; - - if (resolution_loaded) - flags &= ~PIKA_METADATA_LOAD_RESOLUTION; - - if (profile_loaded) - flags &= ~PIKA_METADATA_LOAD_COLORSPACE; - - pika_image_metadata_load_finish (image, "image/tiff", - metadata, flags); - - g_object_unref (metadata); - } + if (profile_loaded) + *flags &= ~PIKA_METADATA_LOAD_COLORSPACE; return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, @@ -332,20 +344,15 @@ tiff_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaMetadata *metadata; - GError *error = NULL; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; + GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - metadata = pika_procedure_config_begin_export (config, image, run_mode, - args, "image/tiff"); - switch (run_mode) { case PIKA_RUN_INTERACTIVE: @@ -360,9 +367,6 @@ tiff_save (PikaProcedure *procedure, n_drawables, drawables, file, config, metadata, FALSE, &error); - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - return pika_procedure_new_return_values (procedure, status, error); } @@ -410,10 +414,10 @@ tiff_save_rec (PikaProcedure *procedure, g_object_get (config, "bigtiff", &bigtiff, - "compression", &compression, "save-layers", &save_layers, "crop-layers", &crop_layers, NULL); + compression = pika_procedure_config_get_choice_id (config, "compression"); if (compression == PIKA_COMPRESSION_CCITTFAX3 || compression == PIKA_COMPRESSION_CCITTFAX4) diff --git a/plug-ins/file-webp/file-webp-dialog.c b/plug-ins/file-webp/file-webp-dialog.c index 8ceb1c7..3039bef 100644 --- a/plug-ins/file-webp/file-webp-dialog.c +++ b/plug-ins/file-webp/file-webp-dialog.c @@ -108,7 +108,8 @@ save_dialog (PikaImage *image, /* Create frame for additional features like Sharp YUV */ pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "advanced-title", _("Advanced Options")); + "advanced-title", _("Advanced Options"), + FALSE, FALSE); pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), "use-sharp-yuv", @@ -128,7 +129,8 @@ save_dialog (PikaImage *image, /* Hint for some special values of keyframe-distance. */ label_kf = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), - "keyframe-hint", NULL); + "keyframe-hint", NULL, + FALSE, FALSE); gtk_label_set_xalign (GTK_LABEL (label_kf), 1.0); gtk_label_set_ellipsize (GTK_LABEL (label_kf), PANGO_ELLIPSIZE_END); pika_label_set_attributes (GTK_LABEL (label_kf), diff --git a/plug-ins/file-webp/file-webp-load.c b/plug-ins/file-webp/file-webp-load.c index f4f5d5b..e2c3eb5 100644 --- a/plug-ins/file-webp/file-webp-load.c +++ b/plug-ins/file-webp/file-webp-load.c @@ -77,9 +77,10 @@ create_layer (PikaImage *image, } PikaImage * -load_image (GFile *file, - gboolean interactive, - GError **error) +load_image (GFile *file, + gboolean interactive, + PikaMetadataLoadFlags *metadata_flags, + GError **error) { uint8_t *indata = NULL; gsize indatalen; @@ -92,8 +93,6 @@ load_image (GFile *file, uint32_t flags; gboolean animation = FALSE; gboolean icc = FALSE; - gboolean exif = FALSE; - gboolean xmp = FALSE; /* Attempt to read the file contents from disk */ if (! g_file_get_contents (g_file_peek_path (file), @@ -130,12 +129,6 @@ load_image (GFile *file, if (flags & ICCP_FLAG) icc = TRUE; - if (flags & EXIF_FLAG) - exif = TRUE; - - if (flags & XMP_FLAG) - xmp = TRUE; - /* TODO: decode the image in "chunks" or "tiles" */ /* TODO: check if an alpha channel is present */ @@ -251,38 +244,8 @@ load_image (GFile *file, /* Free the original compressed data */ g_free (indata); - if (exif || xmp) - { - PikaMetadata *metadata; - - if (exif) - { - WebPData exif; - - WebPMuxGetChunk (mux, "EXIF", &exif); - } - - if (xmp) - { - WebPData xmp; - - WebPMuxGetChunk (mux, "XMP ", &xmp); - } - - metadata = pika_image_metadata_load_prepare (image, "image/webp", - file, NULL); - if (metadata) - { - PikaMetadataLoadFlags flags = PIKA_METADATA_LOAD_ALL; - - if (profile) - flags &= ~PIKA_METADATA_LOAD_COLORSPACE; - - pika_image_metadata_load_finish (image, "image/webp", - metadata, flags); - g_object_unref (metadata); - } - } + if (profile) + *metadata_flags &= ~PIKA_METADATA_LOAD_COLORSPACE; WebPMuxDelete (mux); diff --git a/plug-ins/file-webp/file-webp-load.h b/plug-ins/file-webp/file-webp-load.h index d71fc5f..24841a0 100644 --- a/plug-ins/file-webp/file-webp-load.h +++ b/plug-ins/file-webp/file-webp-load.h @@ -27,9 +27,10 @@ #define __WEBP_LOAD_H__ -PikaImage * load_image (GFile *file, - gboolean interactive, - GError **error); +PikaImage * load_image (GFile *file, + gboolean interactive, + PikaMetadataLoadFlags *flags, + GError **error); #endif /* __WEBP_LOAD_H__ */ diff --git a/plug-ins/file-webp/file-webp.c b/plug-ins/file-webp/file-webp.c index 6dc2e9f..a2f2b29 100644 --- a/plug-ins/file-webp/file-webp.c +++ b/plug-ins/file-webp/file-webp.c @@ -55,27 +55,30 @@ struct _WebpClass #define WEBP_TYPE (webp_get_type ()) -#define WEBP (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WEBP_TYPE, Webp)) +#define WEBP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WEBP_TYPE, Webp)) GType webp_get_type (void) G_GNUC_CONST; -static GList * webp_query_procedures (PikaPlugIn *plug_in); -static PikaProcedure * webp_create_procedure (PikaPlugIn *plug_in, - const gchar *name); +static GList * webp_query_procedures (PikaPlugIn *plug_in); +static PikaProcedure * webp_create_procedure (PikaPlugIn *plug_in, + const gchar *name); -static PikaValueArray * webp_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data); -static PikaValueArray * webp_save (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - GFile *file, - const PikaValueArray *args, - gpointer run_data); +static PikaValueArray * webp_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data); +static PikaValueArray * webp_save (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, + GFile *file, + PikaMetadata *metadata, + PikaProcedureConfig *config, + gpointer run_data); G_DEFINE_TYPE (Webp, webp, PIKA_TYPE_PLUG_IN) @@ -145,7 +148,7 @@ webp_create_procedure (PikaPlugIn *plug_in, { procedure = pika_save_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, - webp_save, NULL, NULL); + TRUE, webp_save, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -250,11 +253,13 @@ webp_create_procedure (PikaPlugIn *plug_in, } static PikaValueArray * -webp_load (PikaProcedure *procedure, - PikaRunMode run_mode, - GFile *file, - const PikaValueArray *args, - gpointer run_data) +webp_load (PikaProcedure *procedure, + PikaRunMode run_mode, + GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + PikaProcedureConfig *config, + gpointer run_data) { PikaValueArray *return_vals; PikaImage *image; @@ -262,7 +267,7 @@ webp_load (PikaProcedure *procedure, gegl_init (NULL, NULL); - image = load_image (file, FALSE, &error); + image = load_image (file, FALSE, flags, &error); if (! image) return pika_procedure_new_return_values (procedure, @@ -285,22 +290,17 @@ webp_save (PikaProcedure *procedure, gint n_drawables, PikaDrawable **drawables, GFile *file, - const PikaValueArray *args, + PikaMetadata *metadata, + PikaProcedureConfig *config, gpointer run_data) { - PikaProcedureConfig *config; - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - PikaExportReturn export = PIKA_EXPORT_CANCEL; - PikaMetadata *metadata; - gboolean animation; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaExportReturn export = PIKA_EXPORT_CANCEL; + gboolean animation; + GError *error = NULL; gegl_init (NULL, NULL); - config = pika_procedure_create_config (procedure); - metadata = pika_procedure_config_begin_export (config, image, run_mode, - args, "image/webp"); - if (run_mode == PIKA_RUN_INTERACTIVE || run_mode == PIKA_RUN_WITH_LAST_VALS) pika_ui_init (PLUG_IN_BINARY); @@ -379,9 +379,6 @@ webp_save (PikaProcedure *procedure, pika_metadata_set_bits_per_sample (metadata, 8); } - pika_procedure_config_end_export (config, image, file, status); - g_object_unref (config); - if (export == PIKA_EXPORT_EXPORT) { pika_image_delete (image); diff --git a/plug-ins/flame/flame.c b/plug-ins/flame/flame.c index d9d6950..a823e05 100644 --- a/plug-ins/flame/flame.c +++ b/plug-ins/flame/flame.c @@ -51,13 +51,15 @@ #define TABLE_DRAWABLE (-4) -struct +typedef struct { gint randomize; /* superseded */ gint variation; gint32 cmap_drawable_id; control_point cp; -} config; +} FlameSettings; + +FlameSettings config; typedef struct _Flame Flame; @@ -75,7 +77,7 @@ struct _FlameClass #define FLAME_TYPE (flame_get_type ()) -#define FLAME (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLAME_TYPE, Flame)) +#define FLAME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLAME_TYPE, Flame)) GType flame_get_type (void) G_GNUC_CONST; @@ -88,27 +90,30 @@ static PikaValueArray * flame_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *proc_config, gpointer run_data); static void flame (PikaDrawable *drawable); -static gboolean flame_dialog (void); -static void set_flame_preview (void); +static gboolean flame_dialog (Flame *flame, + PikaProcedure *procedure, + PikaProcedureConfig *proc_config); +static void set_flame_preview (PikaProcedureConfig *proc_config); static void load_callback (GtkWidget *widget, - gpointer data); + PikaProcedureConfig *proc_config); static void save_callback (GtkWidget *widget, - gpointer data); -static void set_edit_preview (void); + PikaProcedureConfig *proc_config); +static void set_edit_preview (PikaProcedureConfig *proc_config); static void combo_callback (GtkWidget *widget, gpointer data); -static void init_mutants (void); +static void init_mutants (PikaProcedureConfig *proc_config); -static void flame_scale_entry_update_int (PikaLabelSpin *entry, - gint *value); static void flame_scale_entry_update_double (PikaLabelSpin *entry, gdouble *value); +static void flame_update_settings_aux (PikaProcedureConfig *proc_config); + + G_DEFINE_TYPE (Flame, flame, PIKA_TYPE_PLUG_IN) PIKA_MAIN (FLAME_TYPE) @@ -185,13 +190,63 @@ flame_create_procedure (PikaPlugIn *plug_in, "Scott Draves", "Scott Draves", "1997"); + + PIKA_PROC_ARG_DOUBLE (procedure, "brightness", + _("_Brightness"), NULL, + 0.0, 5.0, 1.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "contrast", + _("Co_ntrast"), NULL, + 0.0, 5.0, 1.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "gamma", + _("_Gamma"), NULL, + 1.0, 5.0, 1.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "sample-density", + _("_Brightness"), NULL, + 0.1, 20.0, 5.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_INT (procedure, "spatial-oversample", + _("Spa_tial oversample"), NULL, + 1, 4, 2.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "spatial-filter-radius", + _("_Brightness"), NULL, + 0.0, 4.0, 0.75, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "zoom", + _("_Zoom"), NULL, + -4.0, 4.0, 0.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "x", + _("_X"), NULL, + -2.0, 2.0, 0.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "y", + _("_Y"), NULL, + -2.0, 2.0, 0.0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_BYTES (procedure, "settings-data", + "Settings data", + "TODO: eventually we must implement proper args for every settings", + PIKA_PARAM_READWRITE); } return procedure; } static void -maybe_init_cp (void) +maybe_init_cp (PikaProcedureConfig *proc_config) { if (0 == config.cp.spatial_oversample) { @@ -217,6 +272,8 @@ maybe_init_cp (void) /* cheating */ config.cp.width = 256; config.cp.height = 256; + + flame_update_settings_aux (proc_config); } } @@ -226,10 +283,11 @@ flame_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *proc_config, gpointer run_data) { PikaDrawable *drawable; + GBytes *settings_bytes = NULL; gegl_init (NULL, NULL); @@ -257,15 +315,23 @@ flame_run (PikaProcedure *procedure, NULL); } - pika_get_data (PLUG_IN_PROC, &config); - maybe_init_cp (); + g_object_get (proc_config, "settings-data", &settings_bytes, NULL); + if (settings_bytes != NULL) + { + if (g_bytes_get_size (settings_bytes) == sizeof (FlameSettings)) + config = *((FlameSettings *) g_bytes_get_data (settings_bytes, NULL)); + + g_bytes_unref (settings_bytes); + } + + maybe_init_cp (proc_config); config.cp.width = pika_drawable_get_width (drawable); config.cp.height = pika_drawable_get_height (drawable); if (run_mode == PIKA_RUN_INTERACTIVE) { - if (! flame_dialog ()) + if (! flame_dialog (FLAME (pika_procedure_get_plug_in (procedure)), procedure, proc_config)) { return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, @@ -287,8 +353,6 @@ flame_run (PikaProcedure *procedure, if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); - - pika_set_data (PLUG_IN_PROC, &config, sizeof (config)); } else { @@ -297,6 +361,8 @@ flame_run (PikaProcedure *procedure, NULL); } + flame_update_settings_aux (proc_config); + return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } @@ -449,9 +515,9 @@ flame (PikaDrawable *drawable) } static void -file_response_callback (GtkFileChooser *chooser, - gint response_id, - gpointer data) +file_response_callback (GtkFileChooser *chooser, + gint response_id, + PikaProcedureConfig *proc_config) { if (response_id == GTK_RESPONSE_OK) { @@ -493,12 +559,27 @@ file_response_callback (GtkFileChooser *chooser, while (i < BUFFER_SIZE && ';' != c); parse_control_point (&ss, &config.cp); fclose (f); - /* i want to update the existing dialogue, but it's - too painful */ - pika_set_data (PLUG_IN_PROC, &config, sizeof (config)); - /* gtk_widget_destroy(dialog); */ - set_flame_preview (); - set_edit_preview (); + + g_signal_handlers_block_by_func (proc_config, + G_CALLBACK (set_flame_preview), + NULL); + flame_update_settings_aux (proc_config); + g_object_set (proc_config, + "x", config.cp.center[0], + "y", config.cp.center[1], + "spatial-oversample", config.cp.spatial_oversample, + "gamma", config.cp.gamma, + "contrast", config.cp.contrast, + "brightness", config.cp.brightness, + "spatial-filter-radius", config.cp.spatial_filter_radius, + "sample-density", config.cp.sample_density, + "zoom", config.cp.zoom, + NULL); + g_signal_handlers_unblock_by_func (proc_config, + G_CALLBACK (set_flame_preview), + NULL); + set_flame_preview (proc_config); + set_edit_preview (proc_config); } else { @@ -529,8 +610,9 @@ file_response_callback (GtkFileChooser *chooser, } static void -make_file_dialog (const gchar *title, - GtkWidget *parent) +make_file_dialog (const gchar *title, + GtkWidget *parent, + PikaProcedureConfig *proc_config) { file_dialog = gtk_file_chooser_dialog_new (title, GTK_WINDOW (parent), load_save ? @@ -563,34 +645,53 @@ make_file_dialog (const gchar *title, NULL); g_signal_connect (file_dialog, "response", G_CALLBACK (file_response_callback), - NULL); + proc_config); } static void -randomize_callback (GtkWidget *widget, - gpointer data) +randomize_callback (GtkWidget *widget, + PikaProcedureConfig *proc_config) { random_control_point (&edit_cp, config.variation); - init_mutants (); - set_edit_preview (); + init_mutants (proc_config); + set_edit_preview (proc_config); } static void -edit_response (GtkWidget *widget, - gint response_id, - gpointer data) +edit_response (GtkWidget *widget, + gint response_id, + PikaProcedureConfig *proc_config) { gtk_widget_hide (widget); if (response_id == GTK_RESPONSE_OK) { config.cp = edit_cp; - set_flame_preview (); + + g_signal_handlers_block_by_func (proc_config, + G_CALLBACK (set_flame_preview), + NULL); + flame_update_settings_aux (proc_config); + g_object_set (proc_config, + "x", config.cp.center[0], + "y", config.cp.center[1], + "spatial-oversample", config.cp.spatial_oversample, + "gamma", config.cp.gamma, + "contrast", config.cp.contrast, + "brightness", config.cp.brightness, + "spatial-filter-radius", config.cp.spatial_filter_radius, + "sample-density", config.cp.sample_density, + "zoom", config.cp.zoom, + NULL); + g_signal_handlers_unblock_by_func (proc_config, + G_CALLBACK (set_flame_preview), + NULL); + set_flame_preview (proc_config); } } static void -init_mutants (void) +init_mutants (PikaProcedureConfig *proc_config) { gint i; @@ -601,10 +702,12 @@ init_mutants (void) if (VARIATION_SAME == config.variation) copy_variation (mutants + i, &edit_cp); } + + flame_update_settings_aux (proc_config); } static void -set_edit_preview (void) +set_edit_preview (PikaProcedureConfig *proc_config) { gint i, j; guchar *b; @@ -617,7 +720,7 @@ set_edit_preview (void) return; b = g_new (guchar, nbytes); - maybe_init_cp (); + maybe_init_cp (proc_config); drawable_to_cmap (&edit_cp); for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) @@ -657,25 +760,30 @@ set_edit_preview (void) b, EDIT_PREVIEW_SIZE * 3); } + g_free (b); } static void -edit_preview_size_allocate (GtkWidget *widget) +edit_preview_size_allocate (GtkWidget *widget, + PikaProcedureConfig *proc_config) { - set_edit_preview (); + set_edit_preview (proc_config); } static void preview_clicked (GtkWidget *widget, gpointer data) { - gint mut = GPOINTER_TO_INT (data); + PikaProcedureConfig *proc_config; + gint mut = GPOINTER_TO_INT (data); + + proc_config = g_object_get_data (G_OBJECT (widget), "config"); if (mut == 4) { control_point t = edit_cp; - init_mutants (); + init_mutants (proc_config); edit_cp = t; } else @@ -687,14 +795,17 @@ preview_clicked (GtkWidget *widget, ends[1].time = 1.0; interpolate (ends, 2, pick_speed, &edit_cp); } - set_edit_preview (); + set_edit_preview (proc_config); } static void edit_callback (GtkWidget *widget, GtkWidget *parent) { - edit_cp = config.cp; + PikaProcedureConfig *proc_config; + + proc_config = g_object_get_data (G_OBJECT (parent), "config"); + edit_cp = config.cp; if (edit_dialog == NULL) { @@ -725,7 +836,7 @@ edit_callback (GtkWidget *widget, g_signal_connect (edit_dialog, "response", G_CALLBACK (edit_response), - edit_dialog); + proc_config); main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); @@ -760,6 +871,7 @@ edit_callback (GtkWidget *widget, gtk_widget_show (button); + g_object_set_data (G_OBJECT (button), "config", proc_config); g_signal_connect (button, "clicked", G_CALLBACK (preview_clicked), GINT_TO_POINTER (mut)); @@ -767,7 +879,7 @@ edit_callback (GtkWidget *widget, g_signal_connect (edit_previews[0], "size-allocate", G_CALLBACK (edit_preview_size_allocate), - NULL); + proc_config); frame = pika_frame_new (_("Controls")); gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); @@ -780,12 +892,13 @@ edit_callback (GtkWidget *widget, scale = pika_scale_entry_new (_("_Speed:"), pick_speed, 0.05, 0.5, 2); pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.01, 0.1); + g_object_set_data (G_OBJECT (scale), "config", proc_config); g_signal_connect (scale, "value-changed", G_CALLBACK (flame_scale_entry_update_double), &pick_speed); - g_signal_connect (scale, "value-changed", - G_CALLBACK (set_edit_preview), - NULL); + g_signal_connect_swapped (scale, "value-changed", + G_CALLBACK (set_edit_preview), + proc_config); gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 6); gtk_widget_show (scale); @@ -803,7 +916,7 @@ edit_callback (GtkWidget *widget, g_signal_connect_swapped (button, "clicked", G_CALLBACK (randomize_callback), - NULL); + proc_config); combo = pika_int_combo_box_new (_("Same"), VARIATION_SAME, _("Random"), variation_random, @@ -841,6 +954,7 @@ edit_callback (GtkWidget *widget, pika_int_combo_box_set_active (PIKA_INT_COMBO_BOX (combo), VARIATION_SAME); + g_object_set_data (G_OBJECT (combo), "config", proc_config); g_signal_connect (combo, "changed", G_CALLBACK (combo_callback), &config.variation); @@ -855,22 +969,22 @@ edit_callback (GtkWidget *widget, gtk_widget_show (main_vbox); - init_mutants (); + init_mutants (proc_config); } - set_edit_preview (); + set_edit_preview (proc_config); gtk_window_present (GTK_WINDOW (edit_dialog)); } static void -load_callback (GtkWidget *widget, - gpointer data) +load_callback (GtkWidget *widget, + PikaProcedureConfig *proc_config) { if (! file_dialog) { load_save = 1; - make_file_dialog (_("Load Flame"), gtk_widget_get_toplevel (widget)); + make_file_dialog (_("Load Flame"), gtk_widget_get_toplevel (widget), proc_config); gtk_widget_set_sensitive (save_button, FALSE); } @@ -879,13 +993,13 @@ load_callback (GtkWidget *widget, } static void -save_callback (GtkWidget *widget, - gpointer data) +save_callback (GtkWidget *widget, + PikaProcedureConfig *proc_config) { if (! file_dialog) { load_save = 0; - make_file_dialog (_("Save Flame"), gtk_widget_get_toplevel (widget)); + make_file_dialog (_("Save Flame"), gtk_widget_get_toplevel (widget), proc_config); gtk_widget_set_sensitive (load_button, FALSE); } @@ -897,18 +1011,25 @@ static void combo_callback (GtkWidget *widget, gpointer data) { + PikaProcedureConfig *proc_config; + + proc_config = g_object_get_data (G_OBJECT (widget), "config"); + pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (widget), (gint *) data); if (VARIATION_SAME != config.variation) random_control_point (&edit_cp, config.variation); - init_mutants (); - set_edit_preview (); + init_mutants (proc_config); + set_edit_preview (proc_config); + + flame_update_settings_aux (proc_config); } static void -set_flame_preview (void) +set_flame_preview (PikaProcedureConfig *proc_config) { + GBytes *settings_bytes = NULL; guchar *b; control_point pcp; @@ -917,9 +1038,30 @@ set_flame_preview (void) if (NULL == flame_preview) return; + g_object_get (proc_config, "settings-data", &settings_bytes, NULL); + if (settings_bytes != NULL) + { + if (g_bytes_get_size (settings_bytes) == sizeof (FlameSettings)) + config = *((FlameSettings *) g_bytes_get_data (settings_bytes, NULL)); + + g_bytes_unref (settings_bytes); + } + + g_object_get (proc_config, + "x", &config.cp.center[0], + "y", &config.cp.center[1], + "spatial-oversample", &config.cp.spatial_oversample, + "gamma", &config.cp.gamma, + "contrast", &config.cp.contrast, + "brightness", &config.cp.brightness, + "spatial-filter-radius", &config.cp.spatial_filter_radius, + "sample-density", &config.cp.sample_density, + "zoom", &config.cp.zoom, + NULL); + b = g_new (guchar, preview_width * preview_height * 3); - maybe_init_cp (); + maybe_init_cp (proc_config); drawable_to_cmap (&config.cp); pf.cps = &pcp; @@ -942,9 +1084,9 @@ set_flame_preview (void) } static void -flame_preview_size_allocate (GtkWidget *preview) +flame_preview_size_allocate (PikaProcedureConfig *proc_config) { - set_flame_preview (); + set_flame_preview (proc_config); } static void @@ -991,14 +1133,14 @@ set_cmap_preview (void) } static void -cmap_callback (GtkWidget *widget, - gpointer data) +cmap_callback (GtkWidget *widget, + PikaProcedureConfig *proc_config) { pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (widget), &config.cmap_drawable_id); set_cmap_preview (); - set_flame_preview (); + set_flame_preview (proc_config); /* set_edit_preview(); */ } @@ -1012,35 +1154,21 @@ cmap_constrain (PikaImage *image, static gboolean -flame_dialog (void) +flame_dialog (Flame *flame, + PikaProcedure *procedure, + PikaProcedureConfig *proc_config) { GtkWidget *main_vbox; GtkWidget *notebook; - GtkWidget *label; GtkWidget *frame; GtkWidget *button; - GtkWidget *grid; GtkWidget *box; - GtkWidget *scale; gboolean run; pika_ui_init (PLUG_IN_BINARY); - dialog = pika_dialog_new (_("Flame"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - pika_window_set_transient (GTK_WINDOW (dialog)); + dialog = pika_procedure_dialog_new (procedure, proc_config, _("Flame")); + g_object_set_data (G_OBJECT (dialog), "config", proc_config); main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); @@ -1059,285 +1187,200 @@ flame_dialog (void) gtk_widget_show (frame); flame_preview = pika_preview_area_new (); - { - gdouble aspect = config.cp.width / (double) config.cp.height; + { + gdouble aspect = config.cp.width / (double) config.cp.height; - if (aspect > 1.0) - { - preview_width = PREVIEW_SIZE; - preview_height = PREVIEW_SIZE / aspect; - } - else - { - preview_width = PREVIEW_SIZE * aspect; - preview_height = PREVIEW_SIZE; - } - } + if (aspect > 1.0) + { + preview_width = PREVIEW_SIZE; + preview_height = PREVIEW_SIZE / aspect; + } + else + { + preview_width = PREVIEW_SIZE * aspect; + preview_height = PREVIEW_SIZE; + } + } gtk_widget_set_size_request (flame_preview, preview_width, preview_height); gtk_container_add (GTK_CONTAINER (frame), flame_preview); gtk_widget_show (flame_preview); - g_signal_connect (flame_preview, "size-allocate", - G_CALLBACK (flame_preview_size_allocate), NULL); - - { - GtkWidget *vbox; - GtkWidget *vbbox; - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_pack_start (GTK_BOX (box), vbox, FALSE, FALSE, 0); - gtk_widget_show (vbox); - - vbbox= gtk_button_box_new (GTK_ORIENTATION_VERTICAL); - gtk_box_set_homogeneous (GTK_BOX (vbbox), FALSE); - gtk_box_set_spacing (GTK_BOX (vbbox), 6); - gtk_box_pack_start (GTK_BOX (vbox), vbbox, FALSE, FALSE, 0); - gtk_widget_show (vbbox); - - button = gtk_button_new_with_mnemonic (_("_Edit")); - gtk_box_pack_start (GTK_BOX (vbbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - g_signal_connect (button, "clicked", - G_CALLBACK (edit_callback), - dialog); - - load_button = button = gtk_button_new_with_mnemonic (_("_Open")); - gtk_box_pack_start (GTK_BOX (vbbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - g_signal_connect (button, "clicked", - G_CALLBACK (load_callback), - NULL); - - save_button = button = gtk_button_new_with_mnemonic (_("_Save")); - gtk_box_pack_start (GTK_BOX (vbbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - g_signal_connect (button, "clicked", - G_CALLBACK (save_callback), - NULL); - } - - notebook = gtk_notebook_new (); - gtk_box_pack_start (GTK_BOX (main_vbox), notebook, FALSE, FALSE, 0); - gtk_widget_show (notebook); - - box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (box), 12); - label = gtk_label_new_with_mnemonic(_("_Rendering")); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), box, label); - gtk_widget_show (box); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (box), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - scale = pika_scale_entry_new (_("_Brightness:"), config.cp.brightness, 0, 5, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.1, 1.0); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (flame_scale_entry_update_double), - &config.cp.brightness); - g_signal_connect (scale, "value-changed", - G_CALLBACK (set_flame_preview), - NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 0, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Co_ntrast:"), config.cp.contrast, 0, 5, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.1, 1.0); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (flame_scale_entry_update_double), - &config.cp.contrast); - g_signal_connect (scale, "value-changed", - G_CALLBACK (set_flame_preview), - NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 1, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("_Gamma:"), config.cp.gamma, 1, 5, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.1, 1.0); - gtk_widget_set_margin_bottom (pika_labeled_get_label (PIKA_LABELED (scale)), 6); - gtk_widget_set_margin_bottom (pika_scale_entry_get_range (PIKA_SCALE_ENTRY (scale)), 6); - gtk_widget_set_margin_bottom (pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)), 6); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (flame_scale_entry_update_double), - &config.cp.gamma); - g_signal_connect (scale, "value-changed", - G_CALLBACK (set_flame_preview), - NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 2, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Sample _density:"), config.cp.sample_density, 0.1, 20, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.1, 5.0); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (flame_scale_entry_update_double), - &config.cp.sample_density); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 3, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Spa_tial oversample:"), config.cp.spatial_oversample, 1, 4, 0); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.01, 0.1); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (flame_scale_entry_update_int), - &config.cp.spatial_oversample); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 4, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Spatial _filter radius:"), config.cp.spatial_filter_radius, 0, 4, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.2, 1.0); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (flame_scale_entry_update_double), - &config.cp.spatial_filter_radius); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 5, 3, 1); - gtk_widget_show (scale); - - { - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *combo; - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_box_pack_start (GTK_BOX (box), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - label = gtk_label_new_with_mnemonic (_("Color_map:")); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - combo = pika_drawable_combo_box_new (cmap_constrain, NULL, NULL); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); - -#if 0 - pika_int_combo_box_prepend (PIKA_INT_COMBO_BOX (combo), - PIKA_INT_STORE_VALUE, BLACK_DRAWABLE, - PIKA_INT_STORE_LABEL, _("Black"), - -1); -#endif + g_signal_connect_swapped (flame_preview, "size-allocate", + G_CALLBACK (flame_preview_size_allocate), + proc_config); { - static const gchar *names[] = - { - "sunny harvest", - "rose", - "calcoast09", - "klee insula-dulcamara", - "ernst anti-pope", - "gris josette" - }; - static const gint good[] = { 10, 20, 68, 79, 70, 75 }; + GtkWidget *vbox; + GtkWidget *vbbox; - gint i; + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); + gtk_box_pack_start (GTK_BOX (box), vbox, FALSE, FALSE, 0); + gtk_widget_show (vbox); - for (i = 0; i < G_N_ELEMENTS (good); i++) - { - gint value = TABLE_DRAWABLE - good[i]; + vbbox= gtk_button_box_new (GTK_ORIENTATION_VERTICAL); + gtk_box_set_homogeneous (GTK_BOX (vbbox), FALSE); + gtk_box_set_spacing (GTK_BOX (vbbox), 6); + gtk_box_pack_start (GTK_BOX (vbox), vbbox, FALSE, FALSE, 0); + gtk_widget_show (vbbox); - pika_int_combo_box_prepend (PIKA_INT_COMBO_BOX (combo), - PIKA_INT_STORE_VALUE, value, - PIKA_INT_STORE_LABEL, names[i], - -1); - } + button = gtk_button_new_with_mnemonic (_("_Edit")); + gtk_box_pack_start (GTK_BOX (vbbox), button, FALSE, FALSE, 0); + gtk_widget_show (button); + + g_signal_connect (button, "clicked", + G_CALLBACK (edit_callback), + dialog); + + load_button = button = gtk_button_new_with_mnemonic (_("_Open")); + gtk_box_pack_start (GTK_BOX (vbbox), button, FALSE, FALSE, 0); + gtk_widget_show (button); + + g_signal_connect (button, "clicked", + G_CALLBACK (load_callback), + proc_config); + + save_button = button = gtk_button_new_with_mnemonic (_("_Save")); + gtk_box_pack_start (GTK_BOX (vbbox), button, FALSE, FALSE, 0); + gtk_widget_show (button); + + g_signal_connect (button, "clicked", + G_CALLBACK (save_callback), + proc_config); } - pika_int_combo_box_prepend (PIKA_INT_COMBO_BOX (combo), - PIKA_INT_STORE_VALUE, GRADIENT_DRAWABLE, - PIKA_INT_STORE_LABEL, _("Custom gradient"), - PIKA_INT_STORE_ICON_NAME, PIKA_ICON_GRADIENT, - -1); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dialog), "brightness", 1.0); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dialog), "contrast", 1.0); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dialog), "gamma", 1.0); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dialog), "sample-density", 1.0); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dialog), "spatial-oversample", 1.0); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dialog), "spatial-filter-radius", 1.0); + box = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "rendering-box", + "brightness", "contrast", "gamma", + "sample-density", "spatial-oversample", + "spatial-filter-radius", NULL); - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), - config.cmap_drawable_id, - G_CALLBACK (cmap_callback), - NULL, NULL); + { + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *combo; - gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0); - gtk_widget_show (combo); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + gtk_box_pack_start (GTK_BOX (box), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); - cmap_preview = pika_preview_area_new (); - gtk_widget_set_size_request (cmap_preview, 32, 32); + label = gtk_label_new_with_mnemonic (_("Color_map:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); - gtk_box_pack_end (GTK_BOX (hbox), cmap_preview, FALSE, FALSE, 0); - gtk_widget_show (cmap_preview); + combo = pika_drawable_combo_box_new (cmap_constrain, NULL, NULL); - set_cmap_preview (); - } + gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_container_set_border_width (GTK_CONTAINER (grid), 12); +#if 0 + pika_int_combo_box_prepend (PIKA_INT_COMBO_BOX (combo), + PIKA_INT_STORE_VALUE, BLACK_DRAWABLE, + PIKA_INT_STORE_LABEL, _("Black"), + -1); +#endif - label = gtk_label_new_with_mnemonic(_("C_amera")); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), grid, label); - gtk_widget_show (grid); + { + static const gchar *names[] = + { + "sunny harvest", + "rose", + "calcoast09", + "klee insula-dulcamara", + "ernst anti-pope", + "gris josette" + }; + static const gint good[] = { 10, 20, 68, 79, 70, 75 }; - scale = pika_scale_entry_new (_("_Zoom:"), config.cp.zoom, -4, 4, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.5, 1.0); + gint i; - g_signal_connect (scale, "value-changed", - G_CALLBACK (flame_scale_entry_update_double), - &config.cp.zoom); - g_signal_connect (scale, "value-changed", + for (i = 0; i < G_N_ELEMENTS (good); i++) + { + gint value = TABLE_DRAWABLE - good[i]; + + pika_int_combo_box_prepend (PIKA_INT_COMBO_BOX (combo), + PIKA_INT_STORE_VALUE, value, + PIKA_INT_STORE_LABEL, names[i], + -1); + } + } + + pika_int_combo_box_prepend (PIKA_INT_COMBO_BOX (combo), + PIKA_INT_STORE_VALUE, GRADIENT_DRAWABLE, + PIKA_INT_STORE_LABEL, _("Custom gradient"), + PIKA_INT_STORE_ICON_NAME, PIKA_ICON_GRADIENT, + -1); + + pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), + config.cmap_drawable_id, + G_CALLBACK (cmap_callback), + proc_config, NULL); + + gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0); + gtk_widget_show (combo); + + cmap_preview = pika_preview_area_new (); + gtk_widget_set_size_request (cmap_preview, 32, 32); + + gtk_box_pack_end (GTK_BOX (hbox), cmap_preview, FALSE, FALSE, 0); + gtk_widget_show (cmap_preview); + + set_cmap_preview (); + } + + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dialog), "zoom", 1.0); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dialog), "x", 1.0); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dialog), "y", 1.0); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "camera-box", "zoom", "x", "y", NULL); + + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "rendering-label", "_Rendering", + FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "camera-label", "C_amera", + FALSE, TRUE); + notebook = pika_procedure_dialog_fill_notebook (PIKA_PROCEDURE_DIALOG (dialog), + "settings-notebook", + "rendering-label", "rendering-box", + "camera-label", "camera-box", + NULL); + gtk_widget_show (notebook); + gtk_box_pack_start (GTK_BOX (main_vbox), notebook, FALSE, FALSE, 0); + + g_signal_connect (proc_config, "notify", G_CALLBACK (set_flame_preview), NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 0, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("_X:"), config.cp.center[0], -2, 2, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.5, 1.0); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (flame_scale_entry_update_double), - &config.cp.center[0]); - g_signal_connect (scale, "value-changed", - G_CALLBACK (set_flame_preview), - NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 1, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("_Y:"), config.cp.center[1], -2, 2, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.5, 1.0); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (flame_scale_entry_update_double), - &config.cp.center[1]); - g_signal_connect (scale, "value-changed", - G_CALLBACK (set_flame_preview), - NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 2, 3, 1); - gtk_widget_show (scale); - - set_flame_preview (); - - gtk_widget_show (dialog); - - run = (pika_dialog_run (PIKA_DIALOG (dialog)) == GTK_RESPONSE_OK); + set_flame_preview (proc_config); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); gtk_widget_destroy (dialog); return run; } -static void -flame_scale_entry_update_int (PikaLabelSpin *entry, - gint *value) -{ - *value = (gint) pika_label_spin_get_value (entry); -} - static void flame_scale_entry_update_double (PikaLabelSpin *entry, gdouble *value) { + PikaProcedureConfig *proc_config; + + proc_config = g_object_get_data (G_OBJECT (entry), "config"); + *value = pika_label_spin_get_value (entry); + + flame_update_settings_aux (proc_config); +} + +static void +flame_update_settings_aux (PikaProcedureConfig *proc_config) +{ + GBytes *settings_bytes; + + settings_bytes = g_bytes_new (&config, sizeof (FlameSettings)); + g_object_set (proc_config, "settings-data", settings_bytes, NULL); + g_bytes_unref (settings_bytes); } diff --git a/plug-ins/fractal-explorer/fractal-explorer-dialogs.c b/plug-ins/fractal-explorer/fractal-explorer-dialogs.c index 17eb1de..5b797b4 100644 --- a/plug-ins/fractal-explorer/fractal-explorer-dialogs.c +++ b/plug-ins/fractal-explorer/fractal-explorer-dialogs.c @@ -41,7 +41,6 @@ static gdouble *gradient_samples = NULL; static PikaGradient *gradient = NULL; static gboolean ready_now = FALSE; static gchar *tpath = NULL; -static DialogElements *elements = NULL; static GtkWidget *cmap_preview; static GtkWidget *maindlg; @@ -83,68 +82,43 @@ static explorer_vals_t standardvals = FORWARD DECLARATIONS *********************************************************************/ -static void load_file_chooser_response (GtkFileChooser *chooser, - gint response_id, - gpointer data); -static void save_file_chooser_response (GtkFileChooser *chooser, - gint response_id, - gpointer data); -static void create_load_file_chooser (GtkWidget *widget, - GtkWidget *dialog); -static void create_save_file_chooser (GtkWidget *widget, - GtkWidget *dialog); +static void update_preview (PikaProcedureConfig *config); +static void load_file_chooser_response (GtkFileChooser *chooser, + gint response_id, + gpointer data); +static void save_file_chooser_response (GtkFileChooser *chooser, + gint response_id, + gpointer data); +static void create_load_file_chooser (GtkWidget *widget, + GtkWidget *dialog); +static void create_save_file_chooser (GtkWidget *widget, + GtkWidget *dialog); -static void cmap_preview_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); +static void cmap_preview_size_allocate (GtkWidget *widget, + GtkAllocation *allocation, + PikaProcedureConfig *config); /********************************************************************** CALLBACKS *********************************************************************/ static void -dialog_response (GtkWidget *widget, - gint response_id, - gpointer data) +update_preview (PikaProcedureConfig *config) { - switch (response_id) - { - case GTK_RESPONSE_OK: - wint.run = TRUE; - gtk_widget_destroy (widget); - break; - - default: - gtk_widget_destroy (widget); - break; - } -} - -static void -dialog_reset_callback (GtkWidget *widget, - gpointer data) -{ - wvals.xmin = standardvals.xmin; - wvals.xmax = standardvals.xmax; - wvals.ymin = standardvals.ymin; - wvals.ymax = standardvals.ymax; - wvals.iter = standardvals.iter; - wvals.cx = standardvals.cx; - wvals.cy = standardvals.cy; - - dialog_change_scale (); - set_cmap_preview (); - dialog_update_preview (); + set_cmap_preview (config); + dialog_update_preview (config); } static void dialog_redraw_callback (GtkWidget *widget, gpointer data) { - gint alwaysprev = wvals.alwayspreview; + PikaProcedureConfig *config = (PikaProcedureConfig *) data; + gint alwaysprev = wvals.alwayspreview; wvals.alwayspreview = TRUE; - set_cmap_preview (); - dialog_update_preview (); + set_cmap_preview (config); + dialog_update_preview (config); wvals.alwayspreview = alwaysprev; } @@ -152,14 +126,30 @@ static void dialog_undo_zoom_callback (GtkWidget *widget, gpointer data) { + PikaProcedureConfig *config = (PikaProcedureConfig *) data; + if (zoomindex > 0) { + g_object_get (config, + "xmin", &wvals.xmin, + "xmax", &wvals.xmax, + "ymin", &wvals.ymin, + "ymax", &wvals.ymax, + NULL); + zooms[zoomindex] = wvals; zoomindex--; wvals = zooms[zoomindex]; - dialog_change_scale (); - set_cmap_preview (); - dialog_update_preview (); + + g_object_set (config, + "xmin", wvals.xmin, + "xmax", wvals.xmax, + "ymin", wvals.ymin, + "ymax", wvals.ymax, + NULL); + + set_cmap_preview (config); + dialog_update_preview (config); } } @@ -167,13 +157,21 @@ static void dialog_redo_zoom_callback (GtkWidget *widget, gpointer data) { + PikaProcedureConfig *config = (PikaProcedureConfig *) data; + if (zoomindex < zoommax) { zoomindex++; wvals = zooms[zoomindex]; - dialog_change_scale (); - set_cmap_preview (); - dialog_update_preview (); + g_object_set (config, + "xmin", wvals.xmin, + "xmax", wvals.xmax, + "ymin", wvals.ymin, + "ymax", wvals.ymax, + NULL); + + set_cmap_preview (config); + dialog_update_preview (config); } } @@ -181,54 +179,114 @@ static void dialog_step_in_callback (GtkWidget *widget, gpointer data) { - double xdifferenz; - double ydifferenz; + PikaProcedureConfig *config = (PikaProcedureConfig *) data; + gdouble xdifferenz; + gdouble ydifferenz; + gdouble xmin; + gdouble xmax; + gdouble ymin; + gdouble ymax; + + g_object_get (config, + "xmin", &xmin, + "xmax", &xmax, + "ymin", &ymin, + "ymax", &ymax, + NULL); if (zoomindex < ZOOM_UNDO_SIZE - 1) { - zooms[zoomindex]=wvals; + g_object_get (config, + "xmin", &wvals.xmin, + "xmax", &wvals.xmax, + "ymin", &wvals.ymin, + "ymax", &wvals.ymax, + NULL); + + zooms[zoomindex] = wvals; zoomindex++; } zoommax = zoomindex; - xdifferenz = wvals.xmax - wvals.xmin; - ydifferenz = wvals.ymax - wvals.ymin; - wvals.xmin += 1.0 / 6.0 * xdifferenz; - wvals.ymin += 1.0 / 6.0 * ydifferenz; - wvals.xmax -= 1.0 / 6.0 * xdifferenz; - wvals.ymax -= 1.0 / 6.0 * ydifferenz; + xdifferenz = xmax - xmin; + ydifferenz = ymax - ymin; + xmin += 1.0 / 6.0 * xdifferenz; + ymin += 1.0 / 6.0 * ydifferenz; + xmax -= 1.0 / 6.0 * xdifferenz; + ymax -= 1.0 / 6.0 * ydifferenz; + + wvals.xmin = xmin; + wvals.xmax = xmax; + wvals.ymin = ymin; + wvals.ymax = ymax; zooms[zoomindex] = wvals; - dialog_change_scale (); - set_cmap_preview (); - dialog_update_preview (); + g_object_set (config, + "xmin", xmin, + "xmax", xmax, + "ymin", ymin, + "ymax", ymax, + NULL); + + set_cmap_preview (config); + dialog_update_preview (config); } static void dialog_step_out_callback (GtkWidget *widget, gpointer data) { - gdouble xdifferenz; - gdouble ydifferenz; + PikaProcedureConfig *config = (PikaProcedureConfig *) data; + gdouble xdifferenz; + gdouble ydifferenz; + gdouble xmin; + gdouble xmax; + gdouble ymin; + gdouble ymax; + + g_object_get (config, + "xmin", &xmin, + "xmax", &xmax, + "ymin", &ymin, + "ymax", &ymax, + NULL); if (zoomindex < ZOOM_UNDO_SIZE - 1) { - zooms[zoomindex]=wvals; + g_object_get (config, + "xmin", &wvals.xmin, + "xmax", &wvals.xmax, + "ymin", &wvals.ymin, + "ymax", &wvals.ymax, + NULL); + + zooms[zoomindex] = wvals; zoomindex++; } zoommax = zoomindex; - xdifferenz = wvals.xmax - wvals.xmin; - ydifferenz = wvals.ymax - wvals.ymin; - wvals.xmin -= 1.0 / 4.0 * xdifferenz; - wvals.ymin -= 1.0 / 4.0 * ydifferenz; - wvals.xmax += 1.0 / 4.0 * xdifferenz; - wvals.ymax += 1.0 / 4.0 * ydifferenz; + xdifferenz = xmax - xmin; + ydifferenz = ymax - ymin; + xmin -= 1.0 / 4.0 * xdifferenz; + ymin -= 1.0 / 4.0 * ydifferenz; + xmax += 1.0 / 4.0 * xdifferenz; + ymax += 1.0 / 4.0 * ydifferenz; + + wvals.xmin = xmin; + wvals.xmax = xmax; + wvals.ymin = ymin; + wvals.ymax = ymax; zooms[zoomindex] = wvals; - dialog_change_scale (); - set_cmap_preview (); - dialog_update_preview (); + g_object_set (config, + "xmin", xmin, + "xmax", xmax, + "ymin", ymin, + "ymax", ymax, + NULL); + + set_cmap_preview (config); + dialog_update_preview (config); } static void @@ -237,19 +295,21 @@ explorer_toggle_update (GtkWidget *widget, { pika_toggle_button_update (widget, data); - set_cmap_preview (); - dialog_update_preview (); + set_cmap_preview (wvals.config); + dialog_update_preview (wvals.config); } static void -explorer_radio_update (GtkWidget *widget, - gpointer data) +explorer_radio_update (GtkWidget *widget, + gpointer data) { gboolean c_sensitive; + gint fractal_type; - pika_radio_button_update (widget, data); + fractal_type = + pika_procedure_config_get_choice_id (wvals.config, "fractal-type"); - switch (wvals.fractaltype) + switch (fractal_type) { case TYPE_MANDELBROT: case TYPE_SIERPINSKI: @@ -261,28 +321,25 @@ explorer_radio_update (GtkWidget *widget, break; } - gtk_widget_set_sensitive (elements->cx, c_sensitive); - gtk_widget_set_sensitive (elements->cy, c_sensitive); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (maindlg), + "cx", + c_sensitive, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (maindlg), + "cy", + c_sensitive, NULL, NULL, FALSE); - set_cmap_preview (); - dialog_update_preview (); + set_cmap_preview (wvals.config); + dialog_update_preview (wvals.config); } static void -explorer_double_adjustment_update (PikaLabelSpin *entry, - gdouble *value) +explorer_number_of_colors_callback (PikaProcedureConfig *config) { - *value = pika_label_spin_get_value (entry); + gint n_colors; - set_cmap_preview (); - dialog_update_preview (); -} - -static void -explorer_number_of_colors_callback (GtkAdjustment *adjustment, - gpointer data) -{ - pika_int_adjustment_update (adjustment, data); + g_object_get (config, + "n-colors", &n_colors, + NULL); g_free (gradient_samples); @@ -290,33 +347,42 @@ explorer_number_of_colors_callback (GtkAdjustment *adjustment, gradient = pika_context_get_gradient (); pika_gradient_get_uniform_samples (gradient, - wvals.ncolors, - wvals.gradinvert, + n_colors, + FALSE, &n_gradient_samples, &gradient_samples); - set_cmap_preview (); - dialog_update_preview (); + set_cmap_preview (config); + dialog_update_preview (config); } /* Same signature as all PikaResourceSelectButton */ static void -explorer_gradient_select_callback (gpointer data, /* widget */ - PikaGradient *gradient, - gboolean dialog_closing) +explorer_gradient_select_callback (gpointer data, /* config */ + PikaGradient *gradient, + gboolean dialog_closing) { + PikaProcedureConfig *config = (PikaProcedureConfig *) data; + gint n_colors; + gint color_mode; + + g_object_get (config, + "n-colors", &n_colors, + "color-mode", &color_mode, + NULL); + g_free (gradient_samples); pika_gradient_get_uniform_samples (gradient, - wvals.ncolors, - wvals.gradinvert, + n_colors, + FALSE, &n_gradient_samples, &gradient_samples); - if (wvals.colormode == 1) + if (color_mode == 1) { - set_cmap_preview (); - dialog_update_preview (); + set_cmap_preview (config); + dialog_update_preview (config); } } @@ -447,12 +513,25 @@ preview_enter_notify_event (GtkWidget *widget, static gboolean preview_button_release_event (GtkWidget *widget, - GdkEventButton *event) + GdkEventButton *event, + gpointer data) { + PikaProcedureConfig *config = (PikaProcedureConfig *) data; gdouble l_xmin; gdouble l_xmax; gdouble l_ymin; gdouble l_ymax; + gdouble xmin; + gdouble xmax; + gdouble ymin; + gdouble ymax; + + g_object_get (config, + "xmin", &xmin, + "xmax", &xmax, + "ymin", &ymin, + "ymax", &ymax, + NULL); if (event->button == 1) { @@ -466,27 +545,29 @@ preview_button_release_event (GtkWidget *widget, (x_press < preview_width) && (y_press < preview_height) && (x_release < preview_width) && (y_release < preview_height)) { - l_xmin = (wvals.xmin + - (wvals.xmax - wvals.xmin) * (x_press / preview_width)); - l_xmax = (wvals.xmin + - (wvals.xmax - wvals.xmin) * (x_release / preview_width)); - l_ymin = (wvals.ymin + - (wvals.ymax - wvals.ymin) * (y_press / preview_height)); - l_ymax = (wvals.ymin + - (wvals.ymax - wvals.ymin) * (y_release / preview_height)); + l_xmin = (xmin + (xmax -xmin) * (x_press / preview_width)); + l_xmax = (xmin + (xmax - xmin) * (x_release / preview_width)); + l_ymin = (ymin + (ymax - ymin) * (y_press / preview_height)); + l_ymax = (ymin + (ymax - ymin) * (y_release / preview_height)); if (zoomindex < ZOOM_UNDO_SIZE - 1) { + wvals.xmin = l_xmin; + wvals.xmax = l_xmax; + wvals.ymin = l_ymin; + wvals.ymax = l_ymax; zooms[zoomindex] = wvals; zoomindex++; } zoommax = zoomindex; - wvals.xmin = l_xmin; - wvals.xmax = l_xmax; - wvals.ymin = l_ymin; - wvals.ymax = l_ymax; - dialog_change_scale (); - dialog_update_preview (); + g_object_set (config, + "xmin", l_xmin, + "xmax", l_xmax, + "ymin", l_ymin, + "ymax", l_ymax, + NULL); + + dialog_update_preview (config); oldypos = oldxpos = -1; } } @@ -499,28 +580,23 @@ preview_button_release_event (GtkWidget *widget, *********************************************************************/ gint -explorer_dialog (void) +explorer_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config) { - GtkWidget *dialog; - GtkWidget *top_hbox; - GtkWidget *left_vbox; - GtkWidget *vbox; - GtkWidget *vbox2; - GtkWidget *bbox; - GtkWidget *frame; - GtkWidget *toggle; - GtkWidget *toggle_vbox; - GtkWidget *toggle_vbox2; - GtkWidget *toggle_vbox3; - GtkWidget *notebook; - GtkWidget *hbox; - GtkWidget *grid; - GtkWidget *button; - GtkWidget *gradient_button; - gchar *path; + GtkWidget *dialog; + GtkWidget *top_hbox; + GtkWidget *left_vbox; + GtkWidget *vbox; + GtkWidget *bbox; + GtkWidget *frame; + GtkWidget *toggle; + GtkWidget *hbox; + GtkWidget *button; + GtkWidget *gradient_button; + gchar *path; PikaGradient *gradient; - GSList *group = NULL; - gint i; + GtkListStore *store; + gint n_colors; pika_ui_init (PLUG_IN_BINARY); @@ -551,32 +627,10 @@ explorer_dialog (void) } wint.wimage = g_new (guchar, preview_width * preview_height * 3); - elements = g_new (DialogElements, 1); - dialog = maindlg = - pika_dialog_new (_("Fractal Explorer"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - pika_window_set_transient (GTK_WINDOW (dialog)); - - g_signal_connect (dialog, "response", - G_CALLBACK (dialog_response), - NULL); - - g_signal_connect (dialog, "destroy", - G_CALLBACK (gtk_main_quit), - NULL); + dialog = maindlg = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Fractal Explorer")); top_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); gtk_widget_set_vexpand (top_hbox, FALSE); @@ -586,7 +640,6 @@ explorer_dialog (void) gtk_widget_show (top_hbox); left_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_box_pack_start (GTK_BOX (top_hbox), left_vbox, FALSE, FALSE, 0); gtk_widget_show (left_vbox); /* Preview */ @@ -609,7 +662,7 @@ explorer_dialog (void) NULL); g_signal_connect (wint.preview, "button-release-event", G_CALLBACK (preview_button_release_event), - NULL); + config); g_signal_connect (wint.preview, "motion-notify-event", G_CALLBACK (preview_motion_notify_event), NULL); @@ -642,7 +695,7 @@ explorer_dialog (void) gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (dialog_redraw_callback), - dialog); + config); gtk_widget_show (button); /* Zoom Options */ @@ -665,7 +718,7 @@ explorer_dialog (void) g_signal_connect (button, "clicked", G_CALLBACK (dialog_step_in_callback), - dialog); + config); button = gtk_button_new_with_mnemonic (_("Zoom _Out")); gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0); @@ -673,7 +726,7 @@ explorer_dialog (void) g_signal_connect (button, "clicked", G_CALLBACK (dialog_step_out_callback), - dialog); + config); bbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_set_homogeneous (GTK_BOX (bbox), TRUE); @@ -688,7 +741,7 @@ explorer_dialog (void) g_signal_connect (button, "clicked", G_CALLBACK (dialog_undo_zoom_callback), - dialog); + config); button = gtk_button_new_with_mnemonic (_("_Redo")); gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0); @@ -698,509 +751,327 @@ explorer_dialog (void) g_signal_connect (button, "clicked", G_CALLBACK (dialog_redo_zoom_callback), - dialog); + config); /* Create notebook */ - notebook = gtk_notebook_new (); - gtk_widget_set_halign (notebook, GTK_ALIGN_START); - gtk_widget_set_hexpand (notebook, FALSE); - gtk_box_pack_start (GTK_BOX (top_hbox), notebook, FALSE, FALSE, 0); - gtk_widget_show (notebook); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "parameter-tab", _("_Parameters"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "color-tab", _("_Colors"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "fractal-tab", _("_Fractals"), FALSE, TRUE); /* "Parameters" page */ - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, - gtk_label_new_with_mnemonic (_("_Parameters"))); - gtk_widget_show (vbox); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "xmin", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "xmax", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "ymin", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "ymax", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "iter", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "cx", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "cy", 1.0); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "parameter-input-label", _("Fractal Parameters"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "parameter-input-box", + "xmin", "xmax", "ymin", "ymax", + "iter", "cx", "cy", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "parameter-input-frame", + "parameter-input-label", FALSE, + "parameter-input-box"); - frame = pika_frame_new (_("Fractal Parameters")); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "parameter-type-label", _("Fractal Type"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "parameter-type-box", + "fractal-type", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "parameter-type-frame", + "parameter-type-label", FALSE, + "parameter-type-box"); - vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_add (GTK_CONTAINER (frame), vbox2); - gtk_widget_show (vbox2); - - elements->xmin = - pika_scale_entry_new (_("Left:"), wvals.xmin, -3, 3, 5); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (elements->xmin), 0.001, 0.01); - g_signal_connect (elements->xmin, "value-changed", - G_CALLBACK (explorer_double_adjustment_update), - &wvals.xmin); - gtk_box_pack_start (GTK_BOX (vbox2), elements->xmin, TRUE, TRUE, 2); - gtk_widget_show (elements->xmin); - - elements->xmax = - pika_scale_entry_new (_("Right:"), wvals.xmax, -3, 3, 5); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (elements->xmax), 0.001, 0.01); - g_signal_connect (elements->xmax, "value-changed", - G_CALLBACK (explorer_double_adjustment_update), - &wvals.xmax); - gtk_box_pack_start (GTK_BOX (vbox2), elements->xmax, TRUE, TRUE, 2); - gtk_widget_show (elements->xmax); - - elements->ymin = - pika_scale_entry_new (_("Top:"), wvals.ymin, -3, 3, 5); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (elements->ymin), 0.001, 0.01); - g_signal_connect (elements->ymin, "value-changed", - G_CALLBACK (explorer_double_adjustment_update), - &wvals.ymin); - gtk_box_pack_start (GTK_BOX (vbox2), elements->ymin, TRUE, TRUE, 2); - gtk_widget_show (elements->ymin); - - elements->ymax = - pika_scale_entry_new (_("Bottom:"), wvals.ymax, -3, 3, 5); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (elements->ymax), 0.001, 0.01); - g_signal_connect (elements->ymax, "value-changed", - G_CALLBACK (explorer_double_adjustment_update), - &wvals.ymax); - gtk_box_pack_start (GTK_BOX (vbox2), elements->ymax, TRUE, TRUE, 2); - gtk_widget_show (elements->ymax); - - elements->iter = - pika_scale_entry_new (_("Iterations:"), wvals.iter, 1, 1000, 0); - pika_help_set_help_data (elements->iter, - _("The higher the number of iterations, " - "the more details will be calculated"), - NULL); - g_signal_connect (elements->iter, "value-changed", - G_CALLBACK (explorer_double_adjustment_update), - &wvals.iter); - gtk_box_pack_start (GTK_BOX (vbox2), elements->iter, TRUE, TRUE, 2); - gtk_widget_show (elements->iter); - - elements->cx = - pika_scale_entry_new (_("CX:"), wvals.cx, -2.5, 2.5, 5); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (elements->cx), 0.001, 0.01); - pika_help_set_help_data (elements->cx, - _("Changes aspect of fractal"), NULL); - g_signal_connect (elements->cx, "value-changed", - G_CALLBACK (explorer_double_adjustment_update), - &wvals.cx); - gtk_box_pack_start (GTK_BOX (vbox2), elements->cx, TRUE, TRUE, 2); - gtk_widget_show (elements->cx); - - elements->cy = - pika_scale_entry_new (_("CY:"), wvals.cy, -2.5, 2.5, 5); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (elements->cy), 0.001, 0.01); - pika_help_set_help_data (elements->cy, - _("Changes aspect of fractal"), NULL); - g_signal_connect (elements->cy, "value-changed", - G_CALLBACK (explorer_double_adjustment_update), - &wvals.cy); - gtk_box_pack_start (GTK_BOX (vbox2), elements->cy, TRUE, TRUE, 2); - gtk_widget_show (elements->cy); + vbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "parameter-box", + "parameter-input-frame", + "parameter-type-frame", + NULL); bbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_set_margin_top (bbox, 12); gtk_box_set_homogeneous (GTK_BOX (bbox), TRUE); - gtk_box_pack_start (GTK_BOX (vbox2), bbox, TRUE, TRUE, 2); - gtk_widget_show (bbox); + gtk_box_pack_start (GTK_BOX (vbox), bbox, TRUE, TRUE, 2); + gtk_box_reorder_child (GTK_BOX (vbox), bbox, 1); + gtk_widget_set_visible (bbox, TRUE); button = gtk_button_new_with_mnemonic (_("_Open")); gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0); g_signal_connect (button, "clicked", G_CALLBACK (create_load_file_chooser), dialog); - gtk_widget_show (button); + gtk_widget_set_visible (button, TRUE); pika_help_set_help_data (button, _("Load a fractal from file"), NULL); - button = gtk_button_new_with_mnemonic (_("_Reset")); - gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0); - g_signal_connect (button, "clicked", - G_CALLBACK (dialog_reset_callback), - dialog); - gtk_widget_show (button); - pika_help_set_help_data (button, _("Reset parameters to default values"), - NULL); - button = gtk_button_new_with_mnemonic (_("_Save")); gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0); g_signal_connect (button, "clicked", G_CALLBACK (create_save_file_chooser), dialog); - gtk_widget_show (button); + gtk_widget_set_visible (button, TRUE); pika_help_set_help_data (button, _("Save active fractal to file"), NULL); - /* Fractal type toggle box */ - frame = pika_frame_new (_("Fractal Type")); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); + g_signal_connect (config, "notify::xmin", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::xmax", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::ymin", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::ymax", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::iter", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::cx", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::cy", + G_CALLBACK (update_preview), + config); - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_widget_show (hbox); + g_signal_connect (config, "notify::fractal-type", + G_CALLBACK (explorer_radio_update), + config); + explorer_radio_update (NULL, NULL); - toggle_vbox = - pika_int_radio_group_new (FALSE, NULL, - G_CALLBACK (explorer_radio_update), - &wvals.fractaltype, NULL, wvals.fractaltype, + /* Colors Page */ + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "n-colors", 1.0); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "num-colors-label", _("Number of Colors"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "num-colors-box", + "n-colors", + "use-loglog-smoothing", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "num-colors-frame", + "num-colors-label", FALSE, + "num-colors-box"); - _("Mandelbrot"), TYPE_MANDELBROT, - &(elements->type[TYPE_MANDELBROT]), - _("Julia"), TYPE_JULIA, - &(elements->type[TYPE_JULIA]), - _("Barnsley 1"), TYPE_BARNSLEY_1, - &(elements->type[TYPE_BARNSLEY_1]), - _("Barnsley 2"), TYPE_BARNSLEY_2, - &(elements->type[TYPE_BARNSLEY_2]), - _("Barnsley 3"), TYPE_BARNSLEY_3, - &(elements->type[TYPE_BARNSLEY_3]), - _("Spider"), TYPE_SPIDER, - &(elements->type[TYPE_SPIDER]), - _("Man'o'war"), TYPE_MAN_O_WAR, - &(elements->type[TYPE_MAN_O_WAR]), - _("Lambda"), TYPE_LAMBDA, - &(elements->type[TYPE_LAMBDA]), - _("Sierpinski"), TYPE_SIERPINSKI, - &(elements->type[TYPE_SIERPINSKI]), + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "red-stretch", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "green-stretch", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "blue-stretch", 1.0); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "color-density-label", _("Color Density"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "color-density-box", + "red-stretch", + "green-stretch", + "blue-stretch", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "color-density-frame", + "color-density-label", FALSE, + "color-density-box"); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "color-function-label", _("Color Function"), + FALSE, FALSE); + + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "red-function-label", _("Red"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "red-function-box", + "red-mode", + "red-invert", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "red-function-frame", + "red-function-label", FALSE, + "red-function-box"); + + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "green-function-label", _("Green"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "green-function-box", + "green-mode", + "green-invert", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "green-function-frame", + "green-function-label", FALSE, + "green-function-box"); + + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "blue-function-label", _("Blue"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "blue-function-box", + "blue-mode", + "blue-invert", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "blue-function-frame", + "blue-function-label", FALSE, + "blue-function-box"); + + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "function-hbox", + "red-function-frame", + "green-function-frame", + "blue-function-frame", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "color-function-frame", + "color-function-label", FALSE, + "function-hbox"); + + store = pika_int_store_new (_("As specified above"), 0, + _("Apply active gradient to final image"), 1, NULL); + pika_procedure_dialog_get_int_radio (PIKA_PROCEDURE_DIALOG (dialog), + "color-mode", PIKA_INT_STORE (store)); - toggle_vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); - for (i = TYPE_BARNSLEY_2; i <= TYPE_SPIDER; i++) - { - g_object_ref (elements->type[i]); - - gtk_widget_hide (elements->type[i]); - gtk_container_remove (GTK_CONTAINER (toggle_vbox), elements->type[i]); - gtk_box_pack_start (GTK_BOX (toggle_vbox2), elements->type[i], - FALSE, FALSE, 0); - gtk_widget_show (elements->type[i]); - - g_object_unref (elements->type[i]); - } - - toggle_vbox3 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); - for (i = TYPE_MAN_O_WAR; i <= TYPE_SIERPINSKI; i++) - { - g_object_ref (elements->type[i]); - - gtk_widget_hide (elements->type[i]); - gtk_container_remove (GTK_CONTAINER (toggle_vbox), elements->type[i]); - gtk_box_pack_start (GTK_BOX (toggle_vbox3), elements->type[i], - FALSE, FALSE, 0); - gtk_widget_show (elements->type[i]); - - g_object_unref (elements->type[i]); - } - - gtk_box_pack_start (GTK_BOX (hbox), toggle_vbox, FALSE, FALSE, 0); - gtk_widget_show (toggle_vbox); - - gtk_box_pack_start (GTK_BOX (hbox), toggle_vbox2, FALSE, FALSE, 0); - gtk_widget_show (toggle_vbox2); - - gtk_box_pack_start (GTK_BOX (hbox), toggle_vbox3, FALSE, FALSE, 0); - gtk_widget_show (toggle_vbox3); - - /* Color page */ - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, - gtk_label_new_with_mnemonic (_("Co_lors"))); - gtk_widget_show (vbox); - - /* Number of Colors frame */ - frame = pika_frame_new (_("Number of Colors")); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - grid = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - elements->ncol = - pika_scale_entry_new (_("Number of colors:"), wvals.ncolors, 2, MAXNCOLORS, 0); - pika_help_set_help_data (elements->ncol, - _("Change the number of colors in the mapping"), - NULL); - g_signal_connect (elements->ncol, "value-changed", - G_CALLBACK (explorer_number_of_colors_callback), - &wvals.ncolors); - gtk_box_pack_start (GTK_BOX (grid), elements->ncol, TRUE, TRUE, 2); - gtk_widget_show (elements->ncol); - - elements->useloglog = toggle = - gtk_check_button_new_with_label (_("Use loglog smoothing")); - g_signal_connect (toggle, "toggled", - G_CALLBACK (explorer_toggle_update), - &wvals.useloglog); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), wvals.useloglog); - gtk_widget_show (toggle); - pika_help_set_help_data (toggle, _("Use log log smoothing to eliminate " - "\"banding\" in the result"), NULL); - gtk_box_pack_start (GTK_BOX (grid), elements->useloglog, TRUE, TRUE, 2); - - /* Color Density frame */ - frame = pika_frame_new (_("Color Density")); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - grid = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - elements->red = - pika_scale_entry_new (_("Red:"), wvals.redstretch, 0, 1, 2); - pika_help_set_help_data (elements->red, - _("Change the intensity of the red channel"), NULL); - g_signal_connect (elements->red, "value-changed", - G_CALLBACK (explorer_double_adjustment_update), - &wvals.redstretch); - gtk_box_pack_start (GTK_BOX (grid), elements->red, TRUE, TRUE, 2); - gtk_widget_show (elements->red); - - elements->green = - pika_scale_entry_new (_("Green:"), wvals.greenstretch, 0, 1, 2); - pika_help_set_help_data (elements->green, - _("Change the intensity of the green channel"), NULL); - g_signal_connect (elements->green, "value-changed", - G_CALLBACK (explorer_double_adjustment_update), - &wvals.greenstretch); - gtk_box_pack_start (GTK_BOX (grid), elements->green, TRUE, TRUE, 2); - gtk_widget_show (elements->green); - - elements->blue = - pika_scale_entry_new (_("Blue:"), wvals.bluestretch, 0, 1, 2); - pika_help_set_help_data (elements->blue, - _("Change the intensity of the blue channel"), NULL); - g_signal_connect (elements->blue, "value-changed", - G_CALLBACK (explorer_double_adjustment_update), - &wvals.bluestretch); - gtk_box_pack_start (GTK_BOX (grid), elements->blue, TRUE, TRUE, 2); - gtk_widget_show (elements->blue); - - /* Color Function frame */ - frame = pika_frame_new (_("Color Function")); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_widget_show (hbox); - - /* Redmode radio frame */ - frame = pika_int_radio_group_new (TRUE, _("Red"), - G_CALLBACK (explorer_radio_update), - &wvals.redmode, NULL, wvals.redmode, - - _("Sine"), SINUS, - &elements->redmode[SINUS], - _("Cosine"), COSINUS, - &elements->redmode[COSINUS], - C_("color-function", "None"), NONE, - &elements->redmode[NONE], - - NULL); - pika_help_set_help_data (elements->redmode[SINUS], - _("Use sine-function for this color component"), - NULL); - pika_help_set_help_data (elements->redmode[COSINUS], - _("Use cosine-function for this color " - "component"), NULL); - pika_help_set_help_data (elements->redmode[NONE], - _("Use linear mapping instead of any " - "trigonometrical function for this color " - "channel"), NULL); - gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); - - toggle_vbox = gtk_bin_get_child (GTK_BIN (frame)); - - elements->redinvert = toggle = - gtk_check_button_new_with_label (_("Inversion")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), wvals.redinvert); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - g_signal_connect (toggle, "toggled", - G_CALLBACK (explorer_toggle_update), - &wvals.redinvert); - gtk_widget_show (toggle); - pika_help_set_help_data (toggle, - _("If you enable this option higher color values " - "will be swapped with lower ones and vice " - "versa"), NULL); - - /* Greenmode radio frame */ - frame = pika_int_radio_group_new (TRUE, _("Green"), - G_CALLBACK (explorer_radio_update), - &wvals.greenmode, NULL, wvals.greenmode, - - _("Sine"), SINUS, - &elements->greenmode[SINUS], - _("Cosine"), COSINUS, - &elements->greenmode[COSINUS], - C_("color-function", "None"), NONE, - &elements->greenmode[NONE], - - NULL); - pika_help_set_help_data (elements->greenmode[SINUS], - _("Use sine-function for this color component"), - NULL); - pika_help_set_help_data (elements->greenmode[COSINUS], - _("Use cosine-function for this color " - "component"), NULL); - pika_help_set_help_data (elements->greenmode[NONE], - _("Use linear mapping instead of any " - "trigonometrical function for this color " - "channel"), NULL); - gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); - - toggle_vbox = gtk_bin_get_child (GTK_BIN (frame)); - - elements->greeninvert = toggle = - gtk_check_button_new_with_label (_("Inversion")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), wvals.greeninvert); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - g_signal_connect (toggle, "toggled", - G_CALLBACK (explorer_toggle_update), - &wvals.greeninvert); - gtk_widget_show (toggle); - pika_help_set_help_data (toggle, - _("If you enable this option higher color values " - "will be swapped with lower ones and vice " - "versa"), NULL); - - /* Bluemode radio frame */ - frame = pika_int_radio_group_new (TRUE, _("Blue"), - G_CALLBACK (explorer_radio_update), - &wvals.bluemode, NULL, wvals.bluemode, - - _("Sine"), SINUS, - &elements->bluemode[SINUS], - _("Cosine"), COSINUS, - &elements->bluemode[COSINUS], - C_("color-function", "None"), NONE, - &elements->bluemode[NONE], - - NULL); - pika_help_set_help_data (elements->bluemode[SINUS], - _("Use sine-function for this color component"), - NULL); - pika_help_set_help_data (elements->bluemode[COSINUS], - _("Use cosine-function for this color " - "component"), NULL); - pika_help_set_help_data (elements->bluemode[NONE], - _("Use linear mapping instead of any " - "trigonometrical function for this color " - "channel"), NULL); - gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); - - toggle_vbox = gtk_bin_get_child (GTK_BIN (frame)); - - elements->blueinvert = toggle = - gtk_check_button_new_with_label (_("Inversion")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON( toggle), wvals.blueinvert); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - g_signal_connect (toggle, "toggled", - G_CALLBACK (explorer_toggle_update), - &wvals.blueinvert); - gtk_widget_show (toggle); - pika_help_set_help_data (toggle, - _("If you enable this option higher color values " - "will be swapped with lower ones and vice " - "versa"), NULL); - - /* Colormode toggle box */ - frame = pika_frame_new (_("Color Mode")); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - toggle_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - - toggle = elements->colormode[0] = - gtk_radio_button_new_with_label (group, _("As specified above")); - group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - g_object_set_data (G_OBJECT (toggle), "pika-item-data", - GINT_TO_POINTER (0)); - g_signal_connect (toggle, "toggled", - G_CALLBACK (explorer_radio_update), - &wvals.colormode); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - wvals.colormode == 0); - gtk_widget_show (toggle); - pika_help_set_help_data (toggle, - _("Create a color-map with the options you " - "specified above (color density/function). The " - "result is visible in the preview image"), NULL); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_box_pack_start (GTK_BOX (toggle_vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - toggle = elements->colormode[1] = - gtk_radio_button_new_with_label (group, - _("Apply active gradient to final image")); - group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0); - g_object_set_data (G_OBJECT (toggle), "pika-item-data", - GINT_TO_POINTER (1)); - g_signal_connect (toggle, "toggled", - G_CALLBACK (explorer_radio_update), - &wvals.colormode); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - wvals.colormode == 1); - gtk_widget_show (toggle); - pika_help_set_help_data (toggle, - _("Create a color-map using a gradient from " - "the gradient editor"), NULL); + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "color-mode-hbox", + "color-mode", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + g_object_get (config, + "n-colors", &n_colors, + NULL); gradient = pika_context_get_gradient (); - pika_gradient_get_uniform_samples (gradient, - wvals.ncolors, - wvals.gradinvert, + n_colors, FALSE, &n_gradient_samples, &gradient_samples); - - gradient_button = pika_gradient_select_button_new (_("FractalExplorer Gradient"), - PIKA_RESOURCE (gradient)); + gradient_button = pika_gradient_chooser_new (_("FractalExplorer Gradient"), + NULL, PIKA_RESOURCE (gradient)); g_signal_connect (gradient_button, "resource-set", - G_CALLBACK (explorer_gradient_select_callback), NULL); + G_CALLBACK (explorer_gradient_select_callback), config); + gtk_box_pack_start (GTK_BOX (hbox), gradient_button, TRUE, TRUE, 0); + gtk_widget_set_visible (gradient_button, TRUE); - gtk_box_pack_start (GTK_BOX (hbox), gradient_button, FALSE, FALSE, 0); - gtk_widget_show (gradient_button); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - { - gint xsize, ysize; - for (ysize = 1; ysize * ysize * ysize < 8192; ysize++) /**/; - xsize = wvals.ncolors / ysize; - while (xsize * ysize < 8192) xsize++; - gtk_widget_set_size_request (hbox, xsize, ysize * 4); - } - gtk_box_pack_start (GTK_BOX (toggle_vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); + vbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "color-box", + "num-colors-frame", + "color-density-frame", + "color-function-frame", + "color-mode-hbox", + NULL); cmap_preview = pika_preview_area_new (); gtk_widget_set_halign (cmap_preview, GTK_ALIGN_CENTER); gtk_widget_set_valign (cmap_preview, GTK_ALIGN_CENTER); gtk_widget_set_size_request (cmap_preview, 32, 32); - gtk_box_pack_start (GTK_BOX (hbox), cmap_preview, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), cmap_preview, TRUE, TRUE, 0); g_signal_connect (cmap_preview, "size-allocate", - G_CALLBACK (cmap_preview_size_allocate), NULL); - gtk_widget_show (cmap_preview); + G_CALLBACK (cmap_preview_size_allocate), config); + gtk_widget_set_visible (cmap_preview, TRUE); + g_signal_connect (config, "notify::n-colors", + G_CALLBACK (explorer_number_of_colors_callback), + config); + g_signal_connect (config, "notify::use-loglog-smoothing", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::red-stretch", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::blue-stretch", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::green-stretch", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::red-mode", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::green-mode", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::blue-mode", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::red-invert", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::green-invert", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::blue-invert", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::color-mode", + G_CALLBACK (update_preview), + config); + /* Fractal Presets */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "preset-label", _("Presets"), + FALSE, FALSE); + vbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "fractal-box", + "preset-label", + NULL); frame = add_objects_list (); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, - gtk_label_new_with_mnemonic (_("_Fractals"))); - gtk_widget_show (frame); + gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 2); + gtk_widget_set_visible (frame, TRUE); - gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0); + /* Creating layout */ + pika_procedure_dialog_fill_notebook (PIKA_PROCEDURE_DIALOG (dialog), + "main-notebook", + "parameter-tab", "parameter-box", + "color-tab", "color-box", + "fractal-tab", "fractal-box", + NULL); + + top_hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "top-hbox", + "main-notebook", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (top_hbox), + GTK_ORIENTATION_HORIZONTAL); + gtk_widget_set_vexpand (top_hbox, FALSE); + gtk_container_set_border_width (GTK_CONTAINER (top_hbox), 12); + gtk_box_pack_start (GTK_BOX (top_hbox), left_vbox, FALSE, FALSE, 0); + gtk_box_reorder_child (GTK_BOX (top_hbox), left_vbox, 0); + + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), "top-hbox", NULL); gtk_widget_show (dialog); ready_now = TRUE; - set_cmap_preview (); - dialog_update_preview (); + set_cmap_preview (config); + dialog_update_preview (config); - gtk_main (); + wint.run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); + gtk_widget_destroy (dialog); g_free (wint.wimage); @@ -1213,7 +1084,7 @@ explorer_dialog (void) *********************************************************************/ void -dialog_update_preview (void) +dialog_update_preview (PikaProcedureConfig *config) { gint ycoord; guchar *p_ul; @@ -1223,10 +1094,12 @@ dialog_update_preview (void) if (ready_now && wvals.alwayspreview) { - xmin = wvals.xmin; - xmax = wvals.xmax; - ymin = wvals.ymin; - ymax = wvals.ymax; + g_object_get (config, + "xmin", &xmin, + "xmax", &xmax, + "ymin", &ymin, + "ymax", &ymax, + NULL); xbild = preview_width; ybild = preview_height; xdiff = (xmax - xmin) / xbild; @@ -1240,7 +1113,8 @@ dialog_update_preview (void) p_ul, ycoord, preview_width, - 3); + 3, + config); p_ul += preview_width * 3; } @@ -1253,16 +1127,22 @@ dialog_update_preview (void) *********************************************************************/ static void -cmap_preview_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) +cmap_preview_size_allocate (GtkWidget *widget, + GtkAllocation *allocation, + PikaProcedureConfig *config) { gint i; gint x; gint y; gint j; + gint n_colors; guchar *b; PikaPreviewArea *preview = PIKA_PREVIEW_AREA (widget); + g_object_get (config, + "n-colors", &n_colors, + NULL); + b = g_new (guchar, allocation->width * allocation->height * 3); for (y = 0; y < allocation->height; y++) @@ -1270,7 +1150,7 @@ cmap_preview_size_allocate (GtkWidget *widget, for (x = 0; x < allocation->width; x++) { i = x + (y / 4) * allocation->width; - if (i > wvals.ncolors) + if (i > n_colors) { for (j = 0; j < 3; j++) b[(y*allocation->width + x) * 3 + j] = 0; @@ -1297,19 +1177,25 @@ cmap_preview_size_allocate (GtkWidget *widget, *********************************************************************/ void -set_cmap_preview (void) +set_cmap_preview (PikaProcedureConfig *config) { - gint xsize, ysize; + gint xsize; + gint ysize; + gint n_colors; + + g_object_get (config, + "n-colors", &n_colors, + NULL); if (NULL == cmap_preview) return; - make_color_map (); + make_color_map (config); - for (ysize = 1; ysize * ysize * ysize < wvals.ncolors; ysize++) + for (ysize = 1; ysize * ysize * ysize < n_colors; ysize++) /**/; - xsize = wvals.ncolors / ysize; - while (xsize * ysize < wvals.ncolors) + xsize = n_colors / ysize; + while (xsize * ysize < n_colors) xsize++; gtk_widget_set_size_request (cmap_preview, xsize, ysize * 4); @@ -1320,7 +1206,7 @@ set_cmap_preview (void) *********************************************************************/ void -make_color_map (void) +make_color_map (PikaProcedureConfig *config) { gint i; gint r; @@ -1330,6 +1216,28 @@ make_color_map (void) gdouble greenstretch; gdouble bluestretch; gdouble pi = atan (1) * 4; + gint n_colors; + gint color_mode; + gint red_mode; + gint green_mode; + gint blue_mode; + gboolean red_invert; + gboolean green_invert; + gboolean blue_invert; + + g_object_get (config, + "n-colors", &n_colors, + "red-stretch", &redstretch, + "green-stretch", &greenstretch, + "blue-stretch", &bluestretch, + "color-mode", &color_mode, + "red-invert", &red_invert, + "green-invert", &green_invert, + "blue-invert", &blue_invert, + NULL); + red_mode = pika_procedure_config_get_choice_id (config, "red-mode"); + green_mode = pika_procedure_config_get_choice_id (config, "green-mode"); + blue_mode = pika_procedure_config_get_choice_id (config, "blue-mode"); /* get gradient samples if they don't exist -- fixes gradient color * mode for noninteractive use (bug #103470). @@ -1339,18 +1247,18 @@ make_color_map (void) PikaGradient *gradient = pika_context_get_gradient (); pika_gradient_get_uniform_samples (gradient, - wvals.ncolors, - wvals.gradinvert, + n_colors, + FALSE, &n_gradient_samples, &gradient_samples); } - redstretch = wvals.redstretch * 127.5; - greenstretch = wvals.greenstretch * 127.5; - bluestretch = wvals.bluestretch * 127.5; + redstretch *= 127.5; + greenstretch *= 127.5; + bluestretch *= 127.5; - for (i = 0; i < wvals.ncolors; i++) - if (wvals.colormode == 1) + for (i = 0; i < n_colors; i++) + if (color_mode == 1) { colormap[i].r = (guchar)(gradient_samples[i * 4] * 255.9); colormap[i].g = (guchar)(gradient_samples[i * 4 + 1] * 255.9); @@ -1358,10 +1266,10 @@ make_color_map (void) } else { - double x = (i*2.0) / wvals.ncolors; + double x = (i*2.0) / n_colors; r = gr = bl = 0; - switch (wvals.redmode) + switch (red_mode) { case SINUS: r = (int) redstretch *(1.0 + sin((x - 1) * pi)); @@ -1376,7 +1284,7 @@ make_color_map (void) break; } - switch (wvals.greenmode) + switch (green_mode) { case SINUS: gr = (int) greenstretch *(1.0 + sin((x - 1) * pi)); @@ -1391,7 +1299,7 @@ make_color_map (void) break; } - switch (wvals.bluemode) + switch (blue_mode) { case SINUS: bl = (int) bluestretch * (1.0 + sin ((x - 1) * pi)); @@ -1410,13 +1318,13 @@ make_color_map (void) gr = MIN (gr, 255); bl = MIN (bl, 255); - if (wvals.redinvert) + if (red_invert) r = 255 - r; - if (wvals.greeninvert) + if (green_invert) gr = 255 - gr; - if (wvals.blueinvert) + if (green_invert) bl = 255 - bl; colormap[i].r = r; @@ -1425,51 +1333,6 @@ make_color_map (void) } } -/********************************************************************** - FUNCTION: dialog_change_scale - *********************************************************************/ - -void -dialog_change_scale (void) -{ - ready_now = FALSE; - - pika_label_spin_set_value (PIKA_LABEL_SPIN (elements->xmin), wvals.xmin); - pika_label_spin_set_value (PIKA_LABEL_SPIN (elements->xmax), wvals.xmax); - pika_label_spin_set_value (PIKA_LABEL_SPIN (elements->ymin), wvals.ymin); - pika_label_spin_set_value (PIKA_LABEL_SPIN (elements->ymax), wvals.ymax); - pika_label_spin_set_value (PIKA_LABEL_SPIN (elements->iter), wvals.iter); - pika_label_spin_set_value (PIKA_LABEL_SPIN (elements->cx), wvals.cx); - pika_label_spin_set_value (PIKA_LABEL_SPIN (elements->cy), wvals.cy); - - pika_label_spin_set_value (PIKA_LABEL_SPIN (elements->red), wvals.redstretch); - pika_label_spin_set_value (PIKA_LABEL_SPIN (elements->green), wvals.greenstretch); - pika_label_spin_set_value (PIKA_LABEL_SPIN (elements->blue), wvals.bluestretch); - - gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (elements->type[wvals.fractaltype]), TRUE); - - gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (elements->redmode[wvals.redmode]), TRUE); - gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (elements->greenmode[wvals.greenmode]), TRUE); - gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (elements->bluemode[wvals.bluemode]), TRUE); - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (elements->redinvert), - wvals.redinvert); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (elements->greeninvert), - wvals.greeninvert); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (elements->blueinvert), - wvals.blueinvert); - - gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (elements->colormode[wvals.colormode]), TRUE); - - ready_now = TRUE; -} - - /********************************************************************** FUNCTION: save_options *********************************************************************/ @@ -1477,49 +1340,89 @@ dialog_change_scale (void) static void save_options (FILE * fp) { - gchar buf[64]; + gchar buf[64]; + gint fractal_type; + gint red_mode; + gint green_mode; + gint blue_mode; + gint xmin; + gint xmax; + gint ymin; + gint ymax; + gint iter; + gint cx; + gint cy; + gdouble red_stretch; + gdouble green_stretch; + gdouble blue_stretch; + gboolean red_invert; + gboolean green_invert; + gboolean blue_invert; + gint color_mode; + + g_object_get (wvals.config, + "xmin", &xmin, + "xmax", &xmax, + "ymin", &ymin, + "ymax", &ymax, + "iter", &iter, + "cx", &cx, + "cy", &cy, + "red-stretch", &red_stretch, + "green-stretch", &green_stretch, + "blue-stretch", &blue_stretch, + "color-mode", &color_mode, + "red_invert", &red_invert, + "green_invert", &green_invert, + "blue_invert", &blue_invert, + NULL); + fractal_type = + pika_procedure_config_get_choice_id (wvals.config, "fractal-type"); + red_mode = pika_procedure_config_get_choice_id (wvals.config, "red-mode"); + green_mode = pika_procedure_config_get_choice_id (wvals.config, "green-mode"); + blue_mode = pika_procedure_config_get_choice_id (wvals.config, "blue-mode"); /* Save options */ - fprintf (fp, "fractaltype: %i\n", wvals.fractaltype); + fprintf (fp, "fractaltype: %i\n", fractal_type); - g_ascii_dtostr (buf, sizeof (buf), wvals.xmin); + g_ascii_dtostr (buf, sizeof (buf), xmin); fprintf (fp, "xmin: %s\n", buf); - g_ascii_dtostr (buf, sizeof (buf), wvals.xmax); + g_ascii_dtostr (buf, sizeof (buf), xmax); fprintf (fp, "xmax: %s\n", buf); - g_ascii_dtostr (buf, sizeof (buf), wvals.ymin); + g_ascii_dtostr (buf, sizeof (buf), ymin); fprintf (fp, "ymin: %s\n", buf); - g_ascii_dtostr (buf, sizeof (buf), wvals.ymax); + g_ascii_dtostr (buf, sizeof (buf), ymax); fprintf (fp, "ymax: %s\n", buf); - g_ascii_dtostr (buf, sizeof (buf), wvals.iter); + g_ascii_dtostr (buf, sizeof (buf), iter); fprintf (fp, "iter: %s\n", buf); - g_ascii_dtostr (buf, sizeof (buf), wvals.cx); + g_ascii_dtostr (buf, sizeof (buf), cx); fprintf (fp, "cx: %s\n", buf); - g_ascii_dtostr (buf, sizeof (buf), wvals.cy); + g_ascii_dtostr (buf, sizeof (buf), cy); fprintf (fp, "cy: %s\n", buf); - g_ascii_dtostr (buf, sizeof (buf), wvals.redstretch * 128.0); + g_ascii_dtostr (buf, sizeof (buf), red_stretch * 128.0); fprintf (fp, "redstretch: %s\n", buf); - g_ascii_dtostr (buf, sizeof (buf), wvals.greenstretch * 128.0); + g_ascii_dtostr (buf, sizeof (buf), green_stretch * 128.0); fprintf (fp, "greenstretch: %s\n", buf); - g_ascii_dtostr (buf, sizeof (buf), wvals.bluestretch * 128.0); + g_ascii_dtostr (buf, sizeof (buf), blue_stretch * 128.0); fprintf (fp, "bluestretch: %s\n", buf); - fprintf (fp, "redmode: %i\n", wvals.redmode); - fprintf (fp, "greenmode: %i\n", wvals.greenmode); - fprintf (fp, "bluemode: %i\n", wvals.bluemode); - fprintf (fp, "redinvert: %i\n", wvals.redinvert); - fprintf (fp, "greeninvert: %i\n", wvals.greeninvert); - fprintf (fp, "blueinvert: %i\n", wvals.blueinvert); - fprintf (fp, "colormode: %i\n", wvals.colormode); + fprintf (fp, "redmode: %i\n", red_mode); + fprintf (fp, "greenmode: %i\n", green_mode); + fprintf (fp, "bluemode: %i\n", blue_mode); + fprintf (fp, "redinvert: %i\n", red_invert); + fprintf (fp, "greeninvert: %i\n", green_invert); + fprintf (fp, "blueinvert: %i\n", blue_invert); + fprintf (fp, "colormode: %i\n", color_mode); fputs ("#**********************************************************************\n", fp); fprintf(fp, "\n"); fputs ("#**********************************************************************\n", fp); @@ -1597,6 +1500,8 @@ load_file_chooser_response (GtkFileChooser *chooser, gint response_id, gpointer data) { + PikaProcedureConfig *config = (PikaProcedureConfig *) data; + if (response_id == GTK_RESPONSE_OK) { filename = gtk_file_chooser_get_filename (chooser); @@ -1607,9 +1512,8 @@ load_file_chooser_response (GtkFileChooser *chooser, } gtk_widget_show (maindlg); - dialog_change_scale (); - set_cmap_preview (); - dialog_update_preview (); + set_cmap_preview (config); + dialog_update_preview (config); } gtk_widget_destroy (GTK_WIDGET (chooser)); @@ -1619,7 +1523,12 @@ static void create_load_file_chooser (GtkWidget *widget, GtkWidget *dialog) { - static GtkWidget *window = NULL; + static GtkWidget *window = NULL; + PikaProcedureConfig *config; + + g_object_get (PIKA_PROCEDURE_DIALOG (dialog), + "config", &config, + NULL); if (!window) { @@ -1647,7 +1556,7 @@ create_load_file_chooser (GtkWidget *widget, &window); g_signal_connect (window, "response", G_CALLBACK (load_file_chooser_response), - window); + config); } gtk_window_present (GTK_WINDOW (window)); @@ -1743,8 +1652,8 @@ load_options (fractalexplorerOBJ *xxx, gchar opt_buf[MAX_LOAD_LINE]; /* default values */ - xxx->opts = standardvals; - xxx->opts.gradinvert = FALSE; + xxx->opts = standardvals; + xxx->opts.gradinvert = FALSE; get_line (load_buf, MAX_LOAD_LINE, fp, 0); @@ -1865,7 +1774,7 @@ explorer_load (void) fclose (fp); return; } - if (load_options (current_obj,fp)) + if (load_options (current_obj, fp)) { g_message (_("'%s' is corrupt. Line %d Option section incorrect"), pika_filename_to_utf8 (filename), line_no); @@ -1873,7 +1782,115 @@ explorer_load (void) return; } - wvals = current_obj->opts; + g_object_set (wvals.config, + "xmin", current_obj->opts.xmin, + "xmax", current_obj->opts.xmax, + "ymin", current_obj->opts.ymin, + "ymax", current_obj->opts.ymax, + "iter", current_obj->opts.iter, + "cx", current_obj->opts.cx, + "cy", current_obj->opts.cy, + "red-stretch", current_obj->opts.redstretch, + "green-stretch", current_obj->opts.greenstretch, + "blue-stretch", current_obj->opts.bluestretch, + "color-mode", current_obj->opts.colormode, + "red-invert", current_obj->opts.redinvert, + "green-invert", current_obj->opts.greeninvert, + "blue-invert", current_obj->opts.blueinvert, + NULL); + + switch (current_obj->opts.fractaltype) + { + case 0: + g_object_set (wvals.config, "fractal-type", "mandelbrot", NULL); + break; + + case 1: + g_object_set (wvals.config, "fractal-type", "julia", NULL); + break; + + case 2: + g_object_set (wvals.config, "fractal-type", "barnsley-1", NULL); + break; + + case 3: + g_object_set (wvals.config, "fractal-type", "barnsley-2", NULL); + break; + + case 4: + g_object_set (wvals.config, "fractal-type", "barnsley-3", NULL); + break; + + case 5: + g_object_set (wvals.config, "fractal-type", "spider", NULL); + break; + + case 6: + g_object_set (wvals.config, "fractal-type", "man-o-war", NULL); + break; + + case 7: + g_object_set (wvals.config, "fractal-type", "lambda", NULL); + break; + + case 8: + g_object_set (wvals.config, "fractal-type", "sierpinski", NULL); + break; + + default: + break; + } + switch (current_obj->opts.redmode) + { + case 0: + g_object_set (wvals.config, "red-mode", "red-sin", NULL); + break; + + case 1: + g_object_set (wvals.config, "red-mode", "red-cos", NULL); + break; + + case 2: + g_object_set (wvals.config, "red-mode", "red-none", NULL); + break; + + default: + break; + } + switch (current_obj->opts.greenmode) + { + case 0: + g_object_set (wvals.config, "green-mode", "green-sin", NULL); + break; + + case 1: + g_object_set (wvals.config, "green-mode", "green-cos", NULL); + break; + + case 2: + g_object_set (wvals.config, "green-mode", "green-none", NULL); + break; + + default: + break; + } + switch (current_obj->opts.bluemode) + { + case 0: + g_object_set (wvals.config, "blue-mode", "blue-sin", NULL); + break; + + case 1: + g_object_set (wvals.config, "blue-mode", "blue-cos", NULL); + break; + + case 2: + g_object_set (wvals.config, "blue-mode", "blue-none", NULL); + break; + + default: + break; + } fclose (fp); } diff --git a/plug-ins/fractal-explorer/fractal-explorer-dialogs.h b/plug-ins/fractal-explorer/fractal-explorer-dialogs.h index 3c759be..393928a 100644 --- a/plug-ins/fractal-explorer/fractal-explorer-dialogs.h +++ b/plug-ins/fractal-explorer/fractal-explorer-dialogs.h @@ -1,19 +1,19 @@ #ifndef __FRACTALEXPLORER_DIALOGS_H__ #define __FRACTALEXPLORER_DIALOGS_H__ -gint explorer_dialog (void); -void dialog_update_preview (void); +gint explorer_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config); +void dialog_update_preview (PikaProcedureConfig *config); -void set_cmap_preview (void); -void make_color_map (void); +void set_cmap_preview (PikaProcedureConfig *config); +void make_color_map (PikaProcedureConfig *config); -void dialog_change_scale (void); -gchar * get_line (gchar *buf, - gint s, - FILE *from, - gint init); -gint load_options (fractalexplorerOBJ *xxx, - FILE *fp); +gchar * get_line (gchar *buf, + gint s, + FILE *from, + gint init); +gint load_options (fractalexplorerOBJ *xxx, + FILE *fp); void explorer_load (void); #endif diff --git a/plug-ins/fractal-explorer/fractal-explorer.c b/plug-ins/fractal-explorer/fractal-explorer.c index b43b9de..86a3b64 100644 --- a/plug-ins/fractal-explorer/fractal-explorer.c +++ b/plug-ins/fractal-explorer/fractal-explorer.c @@ -85,7 +85,7 @@ struct _ExplorerClass #define EXPLORER_TYPE (explorer_get_type ()) -#define EXPLORER (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXPLORER_TYPE, Explorer)) +#define EXPLORER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXPLORER_TYPE, Explorer)) GType explorer_get_type (void) G_GNUC_CONST; @@ -98,10 +98,11 @@ static PikaValueArray * explorer_run (PikaProcedure *procedu PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static void explorer (PikaDrawable *drawable); +static void explorer (PikaDrawable *drawable, + PikaProcedureConfig *config); static void delete_dialog_callback (GtkWidget *widget, gboolean value, @@ -252,122 +253,149 @@ explorer_create_procedure (PikaPlugIn *plug_in, "www.multimania.com/cotting)", "December, 1998"); - PIKA_PROC_ARG_INT (procedure, "fractal-type", - "Fractal type", - "0: Mandelbrot; 1: Julia; 2: Barnsley 1; " - "3: Barnsley 2; 4: Barnsley 3; 5: Spider; " - "6: ManOWar; 7: Lambda; 8: Sierpinski", - 0, 8, 0, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "fractal-type", + _("Fr_actal Type"), + _("Type of Fractal Pattern"), + pika_choice_new_with_values ("mandelbrot", 0, _("Mandelbrot"), NULL, + "julia", 1, _("Julia"), NULL, + "barnsley-1", 2, _("Barnsley 1"), NULL, + "barnsley-2", 3, _("Barnsley 2"), NULL, + "barnsley-3", 4, _("Barnsley 3"), NULL, + "spider", 5, _("Spider"), NULL, + "man-o-war", 6, _("Man-o-War"), NULL, + "lambda", 7, _("Lambda"), NULL, + "sierpinski", 8, _("Sierpinski"), NULL, + NULL), + "mandelbrot", + G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "xmin", - "X min", - "xmin fractal image delimiter", - -G_MAXDOUBLE, G_MAXDOUBLE, 0, + _("Lef_t"), + _("X min fractal image delimiter"), + -3.000, 3.000, -2.000, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "xmax", - "X max", - "xmax fractal image delimiter", - -G_MAXDOUBLE, G_MAXDOUBLE, 0, + _("Ri_ght"), + _("X max fractal image delimiter"), + -3.000, 3.000, 2.000, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "ymin", - "Y min", - "ymin fractal image delimiter", - -G_MAXDOUBLE, G_MAXDOUBLE, 0, + _("To_p"), + _("Y min fractal image delimiter"), + -3.000, 3.000, -1.500, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "ymax", - "Y max", - "ymax fractal image delimiter", - -G_MAXDOUBLE, G_MAXDOUBLE, 0, + _("_Bottom"), + _("Y max fractal image delimiter"), + -3.000, 3.000, 1.500, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "iter", - "Iter", - "Iteration value", - -G_MAXDOUBLE, G_MAXDOUBLE, 0, + _("Iteratio_ns"), + _("Iteration value"), + 1, 1000, 50, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "cx", - "CX", - "cx value (only Julia)", - -G_MAXDOUBLE, G_MAXDOUBLE, 0, + _("C_X"), + _("cx value"), + -2.5000, 2.5000, -0.75, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "cy", - "CY", - "cy value (only Julia)", - -G_MAXDOUBLE, G_MAXDOUBLE, 0, + _("C_Y"), + _("cy value"), + -2.5000, 2.5000, -0.2, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "color-mode", - "Color mode", - "0: Apply colormap as specified by the parameters " - "below; 1: Apply active gradient to final image", + _("Color mode"), + _("0: Apply colormap as specified by the parameters " + "below; 1: Apply active gradient to final image"), 0, 1, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "red-stretch", - "Red stretch", - "Red stretching factor", - -G_MAXDOUBLE, G_MAXDOUBLE, 0, + _("Red stretch"), + _("Red stretching factor"), + 0, 1, 1, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "green-stretch", - "Green stretch", - "Green stretching factor", - -G_MAXDOUBLE, G_MAXDOUBLE, 0, + _("Green stretch"), + _("Green stretching factor"), + 0, 1, 1, G_PARAM_READWRITE); - PIKA_PROC_ARG_DOUBLE (procedure, "blues-tretch", - "Blue stretch", - "Blue stretching factor", - -G_MAXDOUBLE,G_MAXDOUBLE, 0, + PIKA_PROC_ARG_DOUBLE (procedure, "blue-stretch", + _("Blue stretch"), + _("Blue stretching factor"), + 0, 1, 1, G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "red-mode", - "Red mode", - "Red application mode (0:SIN; 1:COS; 2:NONE)", - 0, 2, 0, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "red-mode", + _("_Red"), + _("Red application mode"), + pika_choice_new_with_values ("red-sin", 0, _("Sine"), NULL, + "red-cos", 1, _("Cosine"), NULL, + "red-none", 2, _("None"), NULL, + NULL), + "red-cos", + G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "green-mode", - "Green mode", - "Green application mode (0:SIN; 1:COS; 2:NONE)", - 0, 2, 0, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "green-mode", + _("_Green"), + _("Green application mode"), + pika_choice_new_with_values ("green-sin", 0, _("Sine"), NULL, + "green-cos", 1, _("Cosine"), NULL, + "green-none", 2, _("None"), NULL, + NULL), + "green-cos", + G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "blue-mode", - "Blue mode", - "Blue application mode (0:SIN; 1:COS; 2:NONE)", - 0, 2, 0, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "blue-mode", + _("_Blue"), + _("Blue application mode"), + pika_choice_new_with_values ("blue-sin", 0, _("Sine"), NULL, + "blue-cos", 1, _("Cosine"), NULL, + "blue-none", 2, _("None"), NULL, + NULL), + "blue-sin", + G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "red-invert", - "Red invert", + _("In_version"), "Red inversion mode", FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "green-invert", - "Green invert", + "I_nversion", "Green inversion mode", FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "blue-invert", - "Blue invert", + "_Inversion", "Blue inversion mode", FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "n-colors", - "N volors", - "Number of Colors for mapping", + _("_Number of colors"), + _("Number of Colors for mapping"), 2, 8192, 512, G_PARAM_READWRITE); + PIKA_PROC_ARG_BOOLEAN (procedure, "use-loglog-smoothing", + "_Use log log smoothing", + "Use log log smoothing to eliminate " + "\"banding\" in the result", + FALSE, + G_PARAM_READWRITE); + } return procedure; @@ -379,7 +407,7 @@ explorer_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; @@ -430,73 +458,44 @@ explorer_run (PikaProcedure *procedure, preview_width = MAX (pwidth, 2); preview_height = MAX (pheight, 2); + wvals.config = config; + /* See how we will run */ switch (run_mode) { case PIKA_RUN_INTERACTIVE: - /* Possibly retrieve data */ - pika_get_data ("plug-in-fractalexplorer", &wvals); - /* Get information from the dialog */ - if (! explorer_dialog ()) + if (! explorer_dialog (procedure, config)) return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, NULL); break; case PIKA_RUN_NONINTERACTIVE: - wvals.fractaltype = PIKA_VALUES_GET_INT (args, 0); - wvals.xmin = PIKA_VALUES_GET_DOUBLE (args, 1); - wvals.xmax = PIKA_VALUES_GET_DOUBLE (args, 2); - wvals.ymin = PIKA_VALUES_GET_DOUBLE (args, 4); - wvals.ymax = PIKA_VALUES_GET_DOUBLE (args, 4); - wvals.iter = PIKA_VALUES_GET_DOUBLE (args, 5); - wvals.cx = PIKA_VALUES_GET_DOUBLE (args, 6); - wvals.cy = PIKA_VALUES_GET_DOUBLE (args, 7); - wvals.colormode = PIKA_VALUES_GET_INT (args, 8); - wvals.redstretch = PIKA_VALUES_GET_DOUBLE (args, 9); - wvals.greenstretch = PIKA_VALUES_GET_DOUBLE (args, 10); - wvals.bluestretch = PIKA_VALUES_GET_DOUBLE (args, 11); - wvals.redmode = PIKA_VALUES_GET_INT (args, 12); - wvals.greenmode = PIKA_VALUES_GET_INT (args, 13); - wvals.bluemode = PIKA_VALUES_GET_INT (args, 14); - wvals.redinvert = PIKA_VALUES_GET_INT (args, 15); - wvals.greeninvert = PIKA_VALUES_GET_INT (args, 16); - wvals.blueinvert = PIKA_VALUES_GET_INT (args, 17); - wvals.ncolors = PIKA_VALUES_GET_INT (args, 18); - - make_color_map (); - break; - case PIKA_RUN_WITH_LAST_VALS: - /* Possibly retrieve data */ - pika_get_data ("plug-in-fractalexplorer", &wvals); - make_color_map (); + make_color_map (config); break; default: break; } - xmin = wvals.xmin; - xmax = wvals.xmax; - ymin = wvals.ymin; - ymax = wvals.ymax; - cx = wvals.cx; - cy = wvals.cy; + g_object_get (config, + "xmin", &xmin, + "xmax", &xmax, + "ymin", &ymin, + "ymax", &ymax, + "cx", &cx, + "cy", &cy, + NULL); if (status == PIKA_PDB_SUCCESS) { pika_progress_init (_("Rendering fractal")); - explorer (drawable); + explorer (drawable, config); if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); - - /* Store data */ - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data ("plug-in-fractalexplorer", - &wvals, sizeof (explorer_vals_t)); } return pika_procedure_new_return_values (procedure, status, NULL); @@ -507,7 +506,8 @@ explorer_run (PikaProcedure *procedure, *********************************************************************/ static void -explorer (PikaDrawable *drawable) +explorer (PikaDrawable *drawable, + PikaProcedureConfig *config) { GeglBuffer *src_buffer; GeglBuffer *dest_buffer; @@ -567,7 +567,8 @@ explorer (PikaDrawable *drawable) dest_row, row, w, - bpp); + bpp, + config); gegl_buffer_set (dest_buffer, GEGL_RECTANGLE (x, row, w, 1), 0, format, dest_row, @@ -595,11 +596,12 @@ explorer (PikaDrawable *drawable) *********************************************************************/ void -explorer_render_row (const guchar *src_row, - guchar *dest_row, - gint row, - gint row_width, - gint bpp) +explorer_render_row (const guchar *src_row, + guchar *dest_row, + gint row, + gint row_width, + gint bpp, + PikaProcedureConfig *config) { gint col; gdouble a; @@ -622,21 +624,31 @@ explorer_render_row (const guchar *src_row, gdouble cy; gint counter; gint color; + gdouble iter; gint iteration; gint useloglog; + gint n_colors; + gint fractal_type; gdouble log2; - cx = wvals.cx; - cy = wvals.cy; - useloglog = wvals.useloglog; - iteration = wvals.iter; - log2 = log (2.0); + g_object_get (config, + "cx", &cx, + "cy", &cy, + "iter", &iter, + "use-loglog-smoothing", &useloglog, + "n-colors", &n_colors, + NULL); + fractal_type = + pika_procedure_config_get_choice_id (wvals.config, "fractal-type"); + + iteration = (gint) iter; + log2 = log (2.0); for (col = 0; col < row_width; col++) { a = xmin + (double) col * xdiff; b = ymin + (double) row * ydiff; - if (wvals.fractaltype != 0) + if (fractal_type != 0) { tmpx = x = a; tmpy = y = b; @@ -652,7 +664,7 @@ explorer_render_row (const guchar *src_row, oldx=x; oldy=y; - switch (wvals.fractaltype) + switch (fractal_type) { case TYPE_MANDELBROT: xx = x * x - y * y + a; @@ -776,7 +788,7 @@ explorer_render_row (const guchar *src_row, adjust = 0.0; } - color = (int) (((counter - adjust) * (wvals.ncolors - 1)) / iteration); + color = (int) (((counter - adjust) * (n_colors - 1)) / iteration); if (bpp >= 3) { dest_row[col * bpp + 0] = colormap[color].r; @@ -947,10 +959,119 @@ static void activate_fractal (fractalexplorerOBJ *sel_obj) { current_obj = sel_obj; - wvals = current_obj->opts; - dialog_change_scale (); - set_cmap_preview (); - dialog_update_preview (); + + g_object_set (wvals.config, + "xmin", current_obj->opts.xmin, + "xmax", current_obj->opts.xmax, + "ymin", current_obj->opts.ymin, + "ymax", current_obj->opts.ymax, + "iter", current_obj->opts.iter, + "cx", current_obj->opts.cx, + "cy", current_obj->opts.cy, + "red-stretch", current_obj->opts.redstretch, + "green-stretch", current_obj->opts.greenstretch, + "blue-stretch", current_obj->opts.bluestretch, + "color-mode", current_obj->opts.colormode, + "red-invert", current_obj->opts.redinvert, + "green-invert", current_obj->opts.greeninvert, + "blue-invert", current_obj->opts.blueinvert, + NULL); + + switch (current_obj->opts.fractaltype) + { + case 0: + g_object_set (wvals.config, "fractal-type", "mandelbrot", NULL); + break; + + case 1: + g_object_set (wvals.config, "fractal-type", "julia", NULL); + break; + + case 2: + g_object_set (wvals.config, "fractal-type", "barnsley-1", NULL); + break; + + case 3: + g_object_set (wvals.config, "fractal-type", "barnsley-2", NULL); + break; + + case 4: + g_object_set (wvals.config, "fractal-type", "barnsley-3", NULL); + break; + + case 5: + g_object_set (wvals.config, "fractal-type", "spider", NULL); + break; + + case 6: + g_object_set (wvals.config, "fractal-type", "man-o-war", NULL); + break; + + case 7: + g_object_set (wvals.config, "fractal-type", "lambda", NULL); + break; + + case 8: + g_object_set (wvals.config, "fractal-type", "sierpinski", NULL); + break; + + default: + break; + } + switch (current_obj->opts.redmode) + { + case 0: + g_object_set (wvals.config, "red-mode", "red-sin", NULL); + break; + + case 1: + g_object_set (wvals.config, "red-mode", "red-cos", NULL); + break; + + case 2: + g_object_set (wvals.config, "red-mode", "red-none", NULL); + break; + + default: + break; + } + switch (current_obj->opts.greenmode) + { + case 0: + g_object_set (wvals.config, "green-mode", "green-sin", NULL); + break; + + case 1: + g_object_set (wvals.config, "green-mode", "green-cos", NULL); + break; + + case 2: + g_object_set (wvals.config, "green-mode", "green-none", NULL); + break; + + default: + break; + } + switch (current_obj->opts.bluemode) + { + case 0: + g_object_set (wvals.config, "blue-mode", "blue-sin", NULL); + break; + + case 1: + g_object_set (wvals.config, "blue-mode", "blue-cos", NULL); + break; + + case 2: + g_object_set (wvals.config, "blue-mode", "blue-none", NULL); + break; + + default: + break; + } + + set_cmap_preview (wvals.config); + dialog_update_preview (wvals.config); } static void diff --git a/plug-ins/fractal-explorer/fractal-explorer.h b/plug-ins/fractal-explorer/fractal-explorer.h index 0fad2a8..45da4de 100644 --- a/plug-ins/fractal-explorer/fractal-explorer.h +++ b/plug-ins/fractal-explorer/fractal-explorer.h @@ -48,28 +48,29 @@ enum typedef struct { - gint fractaltype; - gdouble xmin; - gdouble xmax; - gdouble ymin; - gdouble ymax; - gdouble iter; - gdouble cx; - gdouble cy; - gint colormode; - gdouble redstretch; - gdouble greenstretch; - gdouble bluestretch; - gint redmode; - gint greenmode; - gint bluemode; - gboolean redinvert; - gboolean greeninvert; - gboolean blueinvert; - gboolean alwayspreview; - gint ncolors; - gboolean gradinvert; - gboolean useloglog; + gint fractaltype; + gdouble xmin; + gdouble xmax; + gdouble ymin; + gdouble ymax; + gdouble iter; + gdouble cx; + gdouble cy; + gint colormode; + gdouble redstretch; + gdouble greenstretch; + gdouble bluestretch; + gint redmode; + gint greenmode; + gint bluemode; + gboolean redinvert; + gboolean greeninvert; + gboolean blueinvert; + gboolean alwayspreview; + gint ncolors; + gboolean gradinvert; + gboolean useloglog; + PikaProcedureConfig *config; } explorer_vals_t; typedef struct @@ -95,39 +96,6 @@ typedef struct GtkAdjustment *data; } scaledata; -typedef struct _DialogElements DialogElements; - -struct _DialogElements -{ - GtkWidget *type[NUM_TYPES]; - GtkWidget *xmin; - GtkWidget *xmax; - GtkWidget *ymin; - GtkWidget *ymax; - GtkWidget *iter; - GtkWidget *cx; - GtkWidget *cy; - - GtkWidget *ncol; - GtkWidget *useloglog; - - GtkWidget *red; - GtkWidget *green; - GtkWidget *blue; - - GtkWidget *redmode[3]; - GtkWidget *redinvert; - - GtkWidget *greenmode[3]; - GtkWidget *greeninvert; - - GtkWidget *bluemode[3]; - GtkWidget *blueinvert; - - GtkWidget *colormode[2]; -}; - - typedef struct DFigObj { gchar *name; /* Trailing name of file */ @@ -206,9 +174,10 @@ extern explorer_vals_t wvals; Global functions *********************************************************************/ -void explorer_render_row (const guchar *src_row, - guchar *dest_row, - gint row, - gint row_width, - gint bpp); +void explorer_render_row (const guchar *src_row, + guchar *dest_row, + gint row, + gint row_width, + gint bpp, + PikaProcedureConfig *config); #endif diff --git a/plug-ins/gfig/gfig-dialog.c b/plug-ins/gfig/gfig-dialog.c index 8d2b556..58065ff 100644 --- a/plug-ins/gfig/gfig-dialog.c +++ b/plug-ins/gfig/gfig-dialog.c @@ -507,8 +507,8 @@ gfig_dialog (PikaGfig *gfig) /* brush selector in Stroke frame */ gfig_context->brush_select - = pika_brush_select_button_new ("Brush", - PIKA_RESOURCE (gfig_context->default_style.brush)); + = pika_brush_chooser_new ("Brush", "Brush", + PIKA_RESOURCE (gfig_context->default_style.brush)); g_signal_connect (gfig_context->brush_select, "resource-set", G_CALLBACK (gfig_brush_changed_callback), NULL); gtk_box_pack_start (GTK_BOX (vbox), gfig_context->brush_select, @@ -573,8 +573,8 @@ gfig_dialog (PikaGfig *gfig) /* A page for the pattern selector */ gfig_context->pattern_select - = pika_pattern_select_button_new ("Pattern", - PIKA_RESOURCE (gfig_context->default_style.pattern)); + = pika_pattern_chooser_new ("Pattern", "Pattern", + PIKA_RESOURCE (gfig_context->default_style.pattern)); g_signal_connect (gfig_context->pattern_select, "resource-set", G_CALLBACK (gfig_pattern_changed_callback), NULL); gtk_widget_show (gfig_context->pattern_select); @@ -583,8 +583,8 @@ gfig_dialog (PikaGfig *gfig) /* A page for the gradient selector */ gfig_context->gradient_select - = pika_gradient_select_button_new ("Gradient", - PIKA_RESOURCE (gfig_context->default_style.gradient)); + = pika_gradient_chooser_new ("Gradient", "Gradient", + PIKA_RESOURCE (gfig_context->default_style.gradient)); g_signal_connect (gfig_context->gradient_select, "resource-set", G_CALLBACK (gfig_gradient_changed_callback), NULL); gtk_widget_show (gfig_context->gradient_select); diff --git a/plug-ins/gfig/gfig-style.c b/plug-ins/gfig/gfig-style.c index fa039b4..b9c14cf 100644 --- a/plug-ins/gfig/gfig-style.c +++ b/plug-ins/gfig/gfig-style.c @@ -697,14 +697,14 @@ gfig_style_set_context_from_style (Style *style) pika_context_set_brush_default_size (); - pika_resource_select_button_set_resource (PIKA_RESOURCE_SELECT_BUTTON (gfig_context->brush_select), - PIKA_RESOURCE (style->brush)); + pika_resource_chooser_set_resource (PIKA_RESOURCE_CHOOSER (gfig_context->brush_select), + PIKA_RESOURCE (style->brush)); - pika_resource_select_button_set_resource (PIKA_RESOURCE_SELECT_BUTTON (gfig_context->pattern_select), - PIKA_RESOURCE (style->pattern)); + pika_resource_chooser_set_resource (PIKA_RESOURCE_CHOOSER (gfig_context->pattern_select), + PIKA_RESOURCE (style->pattern)); - pika_resource_select_button_set_resource (PIKA_RESOURCE_SELECT_BUTTON (gfig_context->gradient_select), - PIKA_RESOURCE (style->gradient)); + pika_resource_chooser_set_resource (PIKA_RESOURCE_CHOOSER (gfig_context->gradient_select), + PIKA_RESOURCE (style->gradient)); set_context_bdesc (style->brush); diff --git a/plug-ins/gfig/gfig.c b/plug-ins/gfig/gfig.c index 0e89e52..89f598c 100644 --- a/plug-ins/gfig/gfig.c +++ b/plug-ins/gfig/gfig.c @@ -70,7 +70,7 @@ static PikaValueArray * gfig_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void on_app_activate (GApplication *gapp, @@ -199,7 +199,7 @@ gfig_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; diff --git a/plug-ins/gradient-flare/gradient-flare.c b/plug-ins/gradient-flare/gradient-flare.c index be09586..bd1f920 100644 --- a/plug-ins/gradient-flare/gradient-flare.c +++ b/plug-ins/gradient-flare/gradient-flare.c @@ -350,21 +350,6 @@ struct _GradientCacheItem guchar values[4 * GRADIENT_RESOLUTION]; }; -typedef struct -{ - gint xcenter; - gint ycenter; - gdouble radius; - gdouble rotation; - gdouble hue; - gdouble vangle; - gdouble vlength; - gint use_asupsample; - gint asupsample_max_depth; - gdouble asupsample_threshold; - gchar gflare_name[GFLARE_NAME_MAX]; -} PluginValues; - typedef void (* QueryFunc) (GtkWidget *, gpointer, @@ -386,7 +371,7 @@ struct _GflareClass #define GFLARE_TYPE (gflare_get_type ()) -#define GFLARE (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GFLARE_TYPE, Gflare)) +#define GFLARE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GFLARE_TYPE, Gflare)) GType gflare_get_type (void) G_GNUC_CONST; @@ -399,7 +384,7 @@ static PikaValueArray * gflare_run (PikaProcedure *procedure PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static GFlare * gflare_new_with_default (const gchar *new_name); @@ -410,8 +395,6 @@ static void gflare_copy (GFlare *dest, static GFlare * gflare_load (const gchar *filename, const gchar *name); static void gflare_save (GFlare *gflare); -static void gflare_name_copy (gchar *dest, - const gchar *src); static gint gflares_list_insert (GFlare *gflare); static GFlare * gflares_list_lookup (const gchar *name); @@ -422,8 +405,8 @@ static void gflares_list_free_all (void); static void calc_init_params (GFlare *gflare, gint calc_type, - gdouble xcenter, - gdouble ycenter, + gint xcenter, + gint ycenter, gdouble radius, gdouble rotation, gdouble hue, @@ -446,7 +429,8 @@ static void calc_gflare_pix (guchar *dest_pix, gdouble y, guchar *src_pix); -static gboolean dlg_run (void); +static gboolean dlg_run (PikaProcedure *procedure, + PikaProcedureConfig *config); static void dlg_preview_calc_window (void); static void ed_preview_calc_window (void); static GtkWidget * ed_mode_menu_new (GFlareMode *mode_var); @@ -470,202 +454,223 @@ static void preview_rgba_to_rgb (guchar *dest, static void gradient_menu_init (void); static void gradient_menu_rescan (void); static GradientMenu * gradient_menu_new (GradientMenuCallback callback, - gpointer callback_data, - const gchar *default_gradient_name); -static void gradient_name_copy (gchar *dest, - const gchar *src); -static void gradient_name_encode (gchar *dest, - const gchar *src); -static void gradient_name_decode (gchar *dest, - const gchar *src); + gpointer callback_data, + const gchar *default_gradient_name); +static void gradient_name_copy (gchar *dest, + const gchar *src); +static void gradient_name_encode (gchar *dest, + const gchar *src); +static void gradient_name_decode (gchar *dest, + const gchar *src); static void gradient_init (void); static void gradient_free (void); -static gchar ** gradient_get_list (gint *num_gradients); -static void gradient_get_values (const gchar *gradient_name, - guchar *values, - gint nvalues); +static gchar ** gradient_get_list (gint *num_gradients); +static void gradient_get_values (const gchar *gradient_name, + guchar *values, + gint nvalues); static void gradient_cache_flush (void); /** *** +++ Static Functions Prototypes **/ -static void plugin_do (void); +static void plugin_do (PikaProcedureConfig *config); -static void plugin_do_non_asupsample (GeglBuffer *src_buffer, - GeglBuffer *dest_buffer); -static void plugin_do_asupsample (GeglBuffer *src_buffer, - GeglBuffer *dest_buffer); -static void plugin_render_func (gdouble x, - gdouble y, - PikaRGB *color, - gpointer data); -static void plugin_put_pixel_func (gint ix, - gint iy, - PikaRGB *color, - gpointer data); -static void plugin_progress_func (gint y1, - gint y2, - gint curr_y, - gpointer data); +static void plugin_do_non_asupsample (GeglBuffer *src_buffer, + GeglBuffer *dest_buffer); +static void plugin_do_asupsample (GeglBuffer *src_buffer, + GeglBuffer *dest_buffer, + gint asupsample_max_depth, + gdouble asupsample_threshold); +static void plugin_render_func (gdouble x, + gdouble y, + PikaRGB *color, + gpointer data); +static void plugin_put_pixel_func (gint ix, + gint iy, + PikaRGB *color, + gpointer data); +static void plugin_progress_func (gint y1, + gint y2, + gint curr_y, + gpointer data); -static GFlare * gflare_new (void); -static void gflare_free (GFlare *gflare); -static void gflare_read_int (gint *intvar, - GFlareFile *gf); -static void gflare_read_double (gdouble *dblvar, - GFlareFile *gf); -static void gflare_read_gradient_name (GradientName name, - GFlareFile *gf); -static void gflare_read_shape (GFlareShape *shape, - GFlareFile *gf); -static void gflare_read_mode (GFlareMode *mode, - GFlareFile *gf); -static void gflare_write_gradient_name (GradientName name, - FILE *fp); +static GFlare * gflare_new (void); +static void gflare_free (GFlare *gflare); +static void gflare_read_int (gint *intvar, + GFlareFile *gf); +static void gflare_read_double (gdouble *dblvar, + GFlareFile *gf); +static void gflare_read_gradient_name (GradientName name, + GFlareFile *gf); +static void gflare_read_shape (GFlareShape *shape, + GFlareFile *gf); +static void gflare_read_mode (GFlareMode *mode, + GFlareFile *gf); +static void gflare_write_gradient_name (GradientName name, + FILE *fp); -static gint calc_sample_one_gradient (void); -static void calc_place_sflare (void); -static void calc_get_gradient (guchar *pix, - guchar *gradient, - gdouble pos); -static gdouble fmod_positive (gdouble x, - gdouble m); -static void calc_paint_func (guchar *dest, - guchar *src1, - guchar *src2, - gint opacity, - GFlareMode mode); -static void calc_combine (guchar *dest, - guchar *src1, - guchar *src2, - gint opacity); -static void calc_addition (guchar *dest, - guchar *src1, - guchar *src2); -static void calc_screen (guchar *dest, - guchar *src1, - guchar *src2); -static void calc_overlay (guchar *dest, - guchar *src1, - guchar *src2); +static gint calc_sample_one_gradient (void); +static void calc_place_sflare (void); +static void calc_get_gradient (guchar *pix, + guchar *gradient, + gdouble pos); +static gdouble fmod_positive (gdouble x, + gdouble m); +static void calc_paint_func (guchar *dest, + guchar *src1, + guchar *src2, + gint opacity, + GFlareMode mode); +static void calc_combine (guchar *dest, + guchar *src1, + guchar *src2, + gint opacity); +static void calc_addition (guchar *dest, + guchar *src1, + guchar *src2); +static void calc_screen (guchar *dest, + guchar *src1, + guchar *src2); +static void calc_overlay (guchar *dest, + guchar *src1, + guchar *src2); -static void dlg_setup_gflare (void); -static void dlg_preview_realize (GtkWidget *widget); -static gboolean dlg_preview_handle_event (GtkWidget *widget, - GdkEvent *event); -static void dlg_preview_update (void); -static gint dlg_preview_init_func (Preview *preview, - gpointer data); -static void dlg_preview_render_func (Preview *preview, - guchar *dest, - gint y, - gpointer data); -static void dlg_preview_deinit_func (Preview *preview, - gpointer data); -static void dlg_make_page_settings (GFlareDialog *dlg, - GtkWidget *notebook); -static void dlg_position_entry_callback (GtkWidget *widget, - gpointer data); -static void dlg_update_preview_callback (GtkWidget *widget, - gpointer data); -static void dlg_make_page_selector (GFlareDialog *dlg, - GtkWidget *notebook); +static void dlg_setup_gflare (const gchar *gflare_name); +static void dlg_preview_realize (GtkWidget *widget); +static gboolean dlg_preview_handle_event (GtkWidget *widget, + GdkEvent *event, + PikaProcedureConfig *config); +static void dlg_preview_update (void); +static gint dlg_preview_init_func (Preview *preview, + gpointer data); +static void dlg_preview_render_func (Preview *preview, + guchar *dest, + gint y, + gpointer data); +static void dlg_preview_deinit_func (Preview *preview, + gpointer data); +static void dlg_make_page_settings (GFlareDialog *dlg, + GtkWidget *notebook, + PikaProcedureConfig *config); +static void dlg_position_entry_callback (GtkWidget *widget, + PikaProcedureConfig *config); +static void dlg_update_preview_callback (GtkWidget *widget, + gpointer data); +static void dlg_make_page_selector (GFlareDialog *dlg, + GtkWidget *notebook, + PikaProcedureConfig *config); static void dlg_selector_setup_listbox (void); static void dlg_selector_list_item_callback (GtkTreeSelection *selection); -static void dlg_selector_new_callback (GtkWidget *widget, - gpointer data); -static void dlg_selector_new_ok_callback (GtkWidget *widget, - const gchar *new_name, - gpointer data); +static void dlg_selector_new_callback (GtkWidget *widget, + gpointer data); +static void dlg_selector_new_ok_callback (GtkWidget *widget, + const gchar *new_name, + gpointer data); -static void dlg_selector_edit_callback (GtkWidget *widget, - gpointer data); -static void dlg_selector_edit_done_callback (gint updated, - gpointer data); +static void dlg_selector_edit_callback (GtkWidget *widget, + gpointer data); +static void dlg_selector_edit_done_callback (gint updated, + gpointer data); -static void dlg_selector_copy_callback (GtkWidget *widget, - gpointer data); -static void dlg_selector_copy_ok_callback (GtkWidget *widget, - const gchar *copy_name, - gpointer data); +static void dlg_selector_copy_callback (GtkWidget *widget, + gpointer data); +static void dlg_selector_copy_ok_callback (GtkWidget *widget, + const gchar *copy_name, + gpointer data); -static void dlg_selector_delete_callback (GtkWidget *widget, - gpointer data); -static void dlg_selector_do_delete_callback (GtkWidget *widget, - gboolean delete, - gpointer data); +static void dlg_selector_delete_callback (GtkWidget *widget, + gpointer data); +static void dlg_selector_do_delete_callback (GtkWidget *widget, + gboolean delete, + gpointer data); static void ed_run (GtkWindow *parent, GFlare *target_gflare, GFlareEditorCallback callback, gpointer calldata); -static void ed_destroy_callback (GtkWidget *widget, - GFlareEditor *ed); -static void ed_response (GtkWidget *widget, - gint response_id, - GFlareEditor *ed); -static void ed_make_page_general (GFlareEditor *ed, - GtkWidget *notebook); -static void ed_make_page_glow (GFlareEditor *ed, - GtkWidget *notebook); -static void ed_make_page_rays (GFlareEditor *ed, - GtkWidget *notebook); -static void ed_make_page_sflare (GFlareEditor *ed, - GtkWidget *notebook); -static void ed_put_gradient_menu (GtkWidget *grid, - gint x, - gint y, - const gchar *caption, - GradientMenu *gm); -static void ed_mode_menu_callback (GtkWidget *widget, - gpointer data); +static void ed_destroy_callback (GtkWidget *widget, + GFlareEditor *ed); +static void ed_response (GtkWidget *widget, + gint response_id, + GFlareEditor *ed); +static void ed_make_page_general (GFlareEditor *ed, + GtkWidget *notebook); +static void ed_make_page_glow (GFlareEditor *ed, + GtkWidget *notebook); +static void ed_make_page_rays (GFlareEditor *ed, + GtkWidget *notebook); +static void ed_make_page_sflare (GFlareEditor *ed, + GtkWidget *notebook); +static void ed_put_gradient_menu (GtkWidget *grid, + gint x, + gint y, + const gchar *caption, + GradientMenu *gm); +static void ed_mode_menu_callback (GtkWidget *widget, + gpointer data); static void ed_gradient_menu_callback (const gchar *gradient_name, gpointer data); -static void ed_shape_radio_callback (GtkWidget *widget, gpointer data); -static void ed_ientry_callback (GtkWidget *widget, gpointer data); -static void ed_page_map_callback (GtkWidget *widget, gpointer data); +static void ed_shape_radio_callback (GtkWidget *widget, + gpointer data); +static void ed_ientry_callback (GtkWidget *widget, + gpointer data); +static void ed_page_map_callback (GtkWidget *widget, + gpointer data); static void ed_preview_update (void); -static gint ed_preview_init_func (Preview *preview, gpointer data); -static void ed_preview_deinit_func (Preview *preview, gpointer data); -static void ed_preview_render_func (Preview *preview, - guchar *buffer, gint y, gpointer data); -static void ed_preview_render_general (guchar *buffer, gint y); -static void ed_preview_render_glow (guchar *buffer, gint y); -static void ed_preview_render_rays (guchar *buffer, gint y); -static void ed_preview_render_sflare (guchar *buffer, gint y); +static gint ed_preview_init_func (Preview *preview, + gpointer data); +static void ed_preview_deinit_func (Preview *preview, + gpointer data); +static void ed_preview_render_func (Preview *preview, + guchar *buffer, + gint y, + gpointer data); +static void ed_preview_render_general (guchar *buffer, + gint y); +static void ed_preview_render_glow (guchar *buffer, + gint y); +static void ed_preview_render_rays (guchar *buffer, + gint y); +static void ed_preview_render_sflare (guchar *buffer, + gint y); static gint preview_render_start_2 (Preview *preview); static gint preview_handle_idle (Preview *preview); -static void gm_gradient_get_list (void); -static void gm_gradient_combo_fill (GradientMenu *gm, - const gchar *default_gradient); -static void gm_gradient_combo_callback (GtkWidget *widget, - gpointer data); -static void gm_preview_draw (GtkWidget *preview, - const gchar *gradient_name); -static void gm_combo_destroy_callback (GtkWidget *widget, - gpointer data); +static void gm_gradient_get_list (void); +static void gm_gradient_combo_fill (GradientMenu *gm, + const gchar *default_gradient); +static void gm_gradient_combo_callback (GtkWidget *widget, + gpointer data); +static void gm_preview_draw (GtkWidget *preview, + const gchar *gradient_name); +static void gm_combo_destroy_callback (GtkWidget *widget, + gpointer data); -static void gradient_get_values_internal (const gchar *gradient_name, - guchar *values, gint nvalues); -static void gradient_get_blend (const guchar *fg, - const guchar *bg, - guchar *values, gint nvalues); -static void gradient_get_random (guchar *values, gint nvalues); -static void gradient_get_default (const gchar *name, - guchar *values, gint nvalues); -static void gradient_get_values_external (const gchar *gradient_name, - guchar *values, gint nvalues); -static void gradient_get_values_real_external (const gchar *gradient_name, - guchar *values, - gint nvalues, - gboolean reverse); -static GradientCacheItem *gradient_cache_lookup (const gchar *name, - gboolean *found); +static void gradient_get_values_internal (const gchar *gradient_name, + guchar *values, + gint nvalues); +static void gradient_get_blend (const guchar *fg, + const guchar *bg, + guchar *values, + gint nvalues); +static void gradient_get_random (guchar *values, + gint nvalues); +static void gradient_get_default (const gchar *name, + guchar *values, + gint nvalues); +static void gradient_get_values_external (const gchar *gradient_name, + guchar *values, + gint nvalues); +static void gradient_get_values_real_external (const gchar *gradient_name, + guchar *values, + gint nvalues, + gboolean reverse); +static GradientCacheItem *gradient_cache_lookup (const gchar *name, + gboolean *found); static void gradient_cache_zorch (void); static void gradient_scale_entry_update_double (PikaLabelSpin *entry, gdouble *value); @@ -679,21 +684,6 @@ PIKA_MAIN (GFLARE_TYPE) DEFINE_STD_SET_I18N -PluginValues pvals = -{ - 128, /* xcenter */ - 128, /* ycenter */ - 100.0, /* radius */ - 0.0, /* rotation */ - 0.0, /* hue */ - 60.0, /* vangle */ - 400.0, /* vlength */ - FALSE, /* use_asupsample */ - 3, /* asupsample_max_depth */ - 0.2, /* asupsample_threshold */ - "Default" /* gflare_name */ -}; - GFlare default_gflare = { NULL, /* name */ @@ -864,50 +854,50 @@ gflare_create_procedure (PikaPlugIn *plug_in, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "radius", - "Radius", + _("Radi_us"), "Radius of GFlare (pixel)", 1, PIKA_MAX_IMAGE_SIZE, 100, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "rotation", - "Rotation", + _("Ro_tation"), "Rotation of GFlare (degree)", 0, 360, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "hue", - "Hue", - "Hue rotation of GFlare (degree)", + _("_Hue rotation"), + "_Hue rotation of GFlare (degree)", 0, 360, 0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "vector-angle", - "Vector angle", + _("Vector _angle"), "Vector angle for second flares (degree)", 0, 360, 60, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "vector-length", - "Vector length", + _("Vector len_gth"), "Vector length for second flares " "(percentage of Radius)", 0, 10000, 400, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "use-asupsample", - "Use asupsample", + _("Ada_ptive supersampling"), "Use adaptive supersampling while rendering", FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "asupsample-max-depth", - "Asupsample max depth", + _("_Max depth"), "Max depth for adaptive supersampling", 0, 10, 3, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "asupsample-threshold", - "Asupsample threshold", + _("Threshol_d"), "Threshold for adaptive supersampling", 0.0, 1.0, 0.2, G_PARAM_READWRITE); @@ -922,7 +912,7 @@ gflare_run (PikaProcedure *procedure, PikaImage *_image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { gchar *path; @@ -1012,52 +1002,20 @@ gflare_run (PikaProcedure *procedure, gflares_list_load_all (); - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - pika_get_data (PLUG_IN_PROC, &pvals); - - if (! dlg_run ()) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } - break; - - case PIKA_RUN_NONINTERACTIVE: - gflare_name_copy (pvals.gflare_name, - PIKA_VALUES_GET_STRING (args, 0)); - - pvals.xcenter = PIKA_VALUES_GET_INT (args, 1); - pvals.ycenter = PIKA_VALUES_GET_INT (args, 2); - pvals.radius = PIKA_VALUES_GET_DOUBLE (args, 3); - pvals.rotation = PIKA_VALUES_GET_DOUBLE (args, 4); - pvals.hue = PIKA_VALUES_GET_DOUBLE (args, 5); - pvals.vangle = PIKA_VALUES_GET_DOUBLE (args, 6); - pvals.vlength = PIKA_VALUES_GET_DOUBLE (args, 7); - pvals.use_asupsample = PIKA_VALUES_GET_BOOLEAN (args, 8); - pvals.asupsample_max_depth = PIKA_VALUES_GET_INT (args, 9); - pvals.asupsample_threshold = PIKA_VALUES_GET_DOUBLE (args, 10); - break; - - case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (PLUG_IN_PROC, &pvals); - break; - } + if (run_mode == PIKA_RUN_INTERACTIVE && ! dlg_run (procedure, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); if (pika_drawable_is_rgb (drawable) || pika_drawable_is_gray (drawable)) { pika_progress_init (_("Gradient Flare")); - plugin_do (); + plugin_do (config); if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); - - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &pvals, sizeof (PluginValues)); } else { @@ -1079,33 +1037,60 @@ gflare_run (PikaProcedure *procedure, } static void -plugin_do (void) +plugin_do (PikaProcedureConfig *config) { GeglBuffer *src_buffer; GeglBuffer *dest_buffer; GFlare *gflare; + gchar *gflare_name; + gint xcenter; + gint ycenter; + gdouble radius; + gdouble rotation; + gdouble hue; + gdouble vangle; + gdouble vlength; + gboolean use_asupsample; + gint asupsample_max_depth; + gdouble asupsample_threshold; - gflare = gflares_list_lookup (pvals.gflare_name); + g_object_get (config, + "gflare-name", &gflare_name, + "center-x", &xcenter, + "center-y", &ycenter, + "radius", &radius, + "rotation", &rotation, + "hue", &hue, + "vector-angle", &vangle, + "vector-length", &vlength, + "use-asupsample", &use_asupsample, + "asupsample-max-depth", &asupsample_max_depth, + "asupsample-threshold", &asupsample_threshold, + NULL); + + gflare = gflares_list_lookup (gflare_name); if (gflare == NULL) { /* FIXME */ - g_warning ("Not found %s\n", pvals.gflare_name); + g_warning ("Not found %s\n", gflare_name); + g_free (gflare_name); return; } + g_free (gflare_name); /* Initialize calc params and gradients */ calc_init_params (gflare, CALC_GLOW | CALC_RAYS | CALC_SFLARE, - pvals.xcenter, pvals.ycenter, - pvals.radius, pvals.rotation, pvals.hue, - pvals.vangle, pvals.vlength); + xcenter, ycenter, + radius, rotation, hue, + vangle, vlength); while (calc_init_progress ()) ; src_buffer = pika_drawable_get_buffer (drawable); dest_buffer = pika_drawable_get_shadow_buffer (drawable); /* Render it ! */ - if (pvals.use_asupsample) - plugin_do_asupsample (src_buffer, dest_buffer); + if (use_asupsample) + plugin_do_asupsample (src_buffer, dest_buffer, asupsample_max_depth, asupsample_threshold); else plugin_do_non_asupsample (src_buffer, dest_buffer); @@ -1203,13 +1188,15 @@ plugin_do_non_asupsample (GeglBuffer *src_buffer, } static void -plugin_do_asupsample (GeglBuffer *src_buffer, - GeglBuffer *dest_buffer) +plugin_do_asupsample (GeglBuffer *src_buffer, + GeglBuffer *dest_buffer, + gint asupsample_max_depth, + gdouble asupsample_threshold) { pika_adaptive_supersample_area (dinfo.x, dinfo.y, dinfo.x + dinfo.w - 1, dinfo.y + dinfo.h - 1, - pvals.asupsample_max_depth, - pvals.asupsample_threshold, + asupsample_max_depth, + asupsample_threshold, plugin_render_func, src_buffer, plugin_put_pixel_func, @@ -1670,13 +1657,6 @@ gflare_write_gradient_name (GradientName name, fprintf (fp, "%s\n", enc); } -static void -gflare_name_copy (gchar *dest, - const gchar *src) -{ - g_strlcpy (dest, src, GFLARE_NAME_MAX); -} - /*************************************************************************/ /** **/ /** +++ GFlares List **/ @@ -1837,8 +1817,8 @@ gflares_list_free_all (void) static void calc_init_params (GFlare *gflare, gint calc_type, - gdouble xcenter, - gdouble ycenter, + gint xcenter, + gint ycenter, gdouble radius, gdouble rotation, gdouble hue, @@ -2482,7 +2462,8 @@ calc_overlay (guchar *dest, guchar *src1, guchar *src2) */ static gboolean -dlg_run (void) +dlg_run (PikaProcedure *procedure, + PikaProcedureConfig *config) { GeglBuffer *src_buffer; GtkWidget *shell; @@ -2492,6 +2473,7 @@ dlg_run (void) GtkWidget *button; GtkWidget *notebook; gboolean run = FALSE; + gchar *gflare_name; pika_ui_init (PLUG_IN_BINARY); @@ -2504,7 +2486,9 @@ dlg_run (void) dlg->update_preview = TRUE; gradient_menu_init (); /* FIXME: this should go elsewhere */ - dlg_setup_gflare (); + g_object_get (config, "gflare-name", &gflare_name, NULL); + dlg_setup_gflare (gflare_name); + g_free (gflare_name); g_assert (gflares_list != NULL); g_assert (dlg->gflare != NULL); @@ -2514,19 +2498,9 @@ dlg_run (void) * Dialog Shell */ - shell = dlg->shell = pika_dialog_new (_("Gradient Flare"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (shell), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); + shell = dlg->shell = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Gradient Flare")); /* * main hbox @@ -2555,7 +2529,7 @@ dlg_run (void) src_buffer = pika_drawable_get_buffer (drawable); dlg->preview = preview_new (DLG_PREVIEW_WIDTH, DLG_PREVIEW_HEIGHT, - dlg_preview_init_func, NULL, + dlg_preview_init_func, config, dlg_preview_render_func, src_buffer, dlg_preview_deinit_func, NULL); gtk_widget_set_events (GTK_WIDGET (dlg->preview->widget), DLG_PREVIEW_MASK); @@ -2566,7 +2540,7 @@ dlg_run (void) NULL); g_signal_connect (dlg->preview->widget, "event", G_CALLBACK (dlg_preview_handle_event), - NULL); + config); dlg_preview_calc_window (); @@ -2588,8 +2562,8 @@ dlg_run (void) gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 0); gtk_widget_show (notebook); - dlg_make_page_settings (dlg, notebook); - dlg_make_page_selector (dlg, notebook); + dlg_make_page_settings (dlg, notebook, config); + dlg_make_page_selector (dlg, notebook, config); gtk_widget_show (shell); @@ -2601,7 +2575,9 @@ dlg_run (void) if (pika_dialog_run (PIKA_DIALOG (shell)) == GTK_RESPONSE_OK) { - gflare_name_copy (pvals.gflare_name, dlg->gflare->name); + g_object_set (config, + "gflare-name", dlg->gflare->name, + NULL); run = TRUE; } @@ -2614,9 +2590,9 @@ dlg_run (void) } static void -dlg_setup_gflare (void) +dlg_setup_gflare (const gchar *gflare_name) { - dlg->gflare = gflares_list_lookup (pvals.gflare_name); + dlg->gflare = gflares_list_lookup (gflare_name); if (!dlg->gflare) { @@ -2713,11 +2689,20 @@ dlg_preview_realize (GtkWidget *widget) } static gboolean -dlg_preview_handle_event (GtkWidget *widget, - GdkEvent *event) +dlg_preview_handle_event (GtkWidget *widget, + GdkEvent *event, + PikaProcedureConfig *config) { GdkEventButton *bevent; - gint bx, by, x, y; + gint bx, by, x, y; + gint xcenter; + gint ycenter; + gboolean handled = FALSE; + + g_object_get (config, + "center-x", &xcenter, + "center-y", &ycenter, + NULL); switch (event->type) { @@ -2732,27 +2717,34 @@ dlg_preview_handle_event (GtkWidget *widget, y = dlg->pwin.y0 + (double) (dlg->pwin.y1 - dlg->pwin.y0) * by / DLG_PREVIEW_HEIGHT; - if ((x != pvals.xcenter || y != pvals.ycenter)) + if ((x != xcenter || y != ycenter)) { - if (x != pvals.xcenter) + if (x != xcenter) { - pvals.xcenter = x; + xcenter = x; pika_size_entry_set_refval (PIKA_SIZE_ENTRY (dlg->sizeentry), 0, x); } - if (y != pvals.ycenter) + if (y != ycenter) { - pvals.ycenter = y; + ycenter = y; pika_size_entry_set_refval (PIKA_SIZE_ENTRY (dlg->sizeentry), 1, y); } dlg_preview_update (); } - return TRUE; + handled = TRUE; + break; default: break; } - return FALSE; + + g_object_set (config, + "center-x", xcenter, + "center-y", ycenter, + NULL); + + return handled; } static void @@ -2767,17 +2759,38 @@ dlg_preview_update (void) /* preview callbacks */ static gint -dlg_preview_init_func (Preview *preview, gpointer data) +dlg_preview_init_func (Preview *preview, + gpointer data) { + PikaProcedureConfig *config = PIKA_PROCEDURE_CONFIG (data); + /* call init_params first, and iterate init_progress while it returns true */ if (dlg->init_params_done == FALSE) { + gint xcenter; + gint ycenter; + gdouble radius; + gdouble rotation; + gdouble hue; + gdouble vangle; + gdouble vlength; + + g_object_get (config, + "center-x", &xcenter, + "center-y", &ycenter, + "radius", &radius, + "rotation", &rotation, + "hue", &hue, + "vector-angle", &vangle, + "vector-length", &vlength, + NULL); + calc_init_params (dlg->gflare, CALC_GLOW | CALC_RAYS | CALC_SFLARE, - pvals.xcenter, pvals.ycenter, - pvals.radius, pvals.rotation, pvals.hue, - pvals.vangle, pvals.vlength); + xcenter, ycenter, + radius, rotation, hue, + vangle, vlength); dlg->init_params_done = TRUE; return TRUE; } @@ -2862,27 +2875,23 @@ dlg_preview_deinit_func (Preview *preview, gpointer data) /*****************************************/ static void -dlg_make_page_settings (GFlareDialog *dlg, - GtkWidget *notebook) +dlg_make_page_settings (GFlareDialog *dlg, + GtkWidget *notebook, + PikaProcedureConfig *config) { GtkWidget *main_vbox; GtkWidget *frame; GtkWidget *center; GtkWidget *chain; - GtkWidget *grid; - GtkWidget *button; - GtkWidget *asup_grid; GtkWidget *scale; gdouble xres, yres; - gint row; - - main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); - - frame = pika_frame_new (_("Center")); - gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); + gint xcenter; + gint ycenter; + g_object_get (config, + "center-x", &xcenter, + "center-y", &ycenter, + NULL); pika_image_get_resolution (image, &xres, &yres); center = dlg->sizeentry = @@ -2891,146 +2900,94 @@ dlg_make_page_settings (GFlareDialog *dlg, FALSE, FALSE, - _("_X:"), pvals.xcenter, xres, + _("_X:"), xcenter, xres, -PIKA_MAX_IMAGE_SIZE, PIKA_MAX_IMAGE_SIZE, 0, pika_drawable_get_width (drawable), - _("_Y:"), pvals.ycenter, yres, + _("_Y:"), ycenter, yres, -PIKA_MAX_IMAGE_SIZE, PIKA_MAX_IMAGE_SIZE, 0, pika_drawable_get_height (drawable)); chain = GTK_WIDGET (PIKA_COORDINATES_CHAINBUTTON (center)); - gtk_container_add (GTK_CONTAINER (frame), center); g_signal_connect (center, "value-changed", G_CALLBACK (dlg_position_entry_callback), - NULL); + config); g_signal_connect (center, "refval-changed", G_CALLBACK (dlg_position_entry_callback), - NULL); + config); gtk_widget_hide (chain); gtk_widget_show (center); - frame = pika_frame_new (_("Parameters")); - gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dlg->shell), + "center-title", _("Center"), + FALSE, FALSE); + frame = pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dlg->shell), + "center-frame", "center-title", + FALSE, NULL); + gtk_container_add (GTK_CONTAINER (frame), center); - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); + scale = pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dlg->shell), "radius", 1.0); + pika_spin_scale_set_scale_limits (PIKA_SPIN_SCALE (scale), 1.0, + pika_drawable_get_width (drawable) / 2); - row = 0; + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dlg->shell), "rotation", 1.0); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dlg->shell), "hue", 1.0); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dlg->shell), "vector-angle", 1.0); - scale = pika_scale_entry_new (_("_Radius:"), pvals.radius, 0.0, PIKA_MAX_IMAGE_SIZE, 1); - pika_scale_entry_set_bounds (PIKA_SCALE_ENTRY (scale), 0.0, pika_drawable_get_width (drawable) / 2, TRUE); - g_signal_connect (scale, "value-changed", - G_CALLBACK (gradient_scale_entry_update_double), - &pvals.radius); - g_signal_connect (scale, "value-changed", + scale = pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dlg->shell), "vector-length", 1.0); + pika_spin_scale_set_scale_limits (PIKA_SPIN_SCALE (scale), 1.0, 1000); + + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dlg->shell), + "parameters-box", + "radius", "rotation", "hue", + "vector-angle", "vector-length", + NULL); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dlg->shell), + "parameters-title", _("Parameters"), + FALSE, FALSE); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dlg->shell), + "parameters-frame", "parameters-title", + FALSE, "parameters-box"); + + g_signal_connect (config, "notify", G_CALLBACK (dlg_preview_update), NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Ro_tation:"), pvals.rotation, -180.0, 180.0, 1); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 1.0, 15.0); - g_signal_connect (scale, "value-changed", - G_CALLBACK (gradient_scale_entry_update_double), - &pvals.rotation); - g_signal_connect (scale, "value-changed", - G_CALLBACK (dlg_preview_update), - NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("_Hue rotation:"), pvals.hue, -180.0, 180.0, 1); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 1.0, 15.0); - g_signal_connect (scale, "value-changed", - G_CALLBACK (gradient_scale_entry_update_double), - &pvals.hue); - g_signal_connect (scale, "value-changed", - G_CALLBACK (dlg_preview_update), - NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Vector _angle:"), pvals.vangle, 0.0, 359.0, 1); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 1.0, 15.0); - g_signal_connect (scale, "value-changed", - G_CALLBACK (gradient_scale_entry_update_double), - &pvals.vangle); - g_signal_connect (scale, "value-changed", - G_CALLBACK (dlg_preview_update), - NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Vector _length:"), pvals.vlength, 1, PIKA_MAX_IMAGE_SIZE, 1); - pika_scale_entry_set_bounds (PIKA_SCALE_ENTRY (scale), 1, 1000, TRUE); - g_signal_connect (scale, "value-changed", - G_CALLBACK (gradient_scale_entry_update_double), - &pvals.vlength); - g_signal_connect (scale, "value-changed", - G_CALLBACK (dlg_preview_update), - NULL); - gtk_grid_attach (GTK_GRID (grid), scale, 0, row++, 3, 1); - gtk_widget_show (scale); /** *** Asupsample settings *** This code is stolen from pika-0.99.x/app/blend.c **/ - /* asupsample frame */ - frame = dlg->asupsample_frame = pika_frame_new (NULL); - gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dlg->shell), + "asupsample-max-depth", 1.0); - button = gtk_check_button_new_with_mnemonic (_("A_daptive supersampling")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), - pvals.use_asupsample); - gtk_frame_set_label_widget (GTK_FRAME (frame), button); - gtk_widget_show (button); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dlg->shell), + "asupsample-threshold", 1.0); - asup_grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (asup_grid), 6); - gtk_grid_set_row_spacing (GTK_GRID (asup_grid), 6); - gtk_container_add (GTK_CONTAINER (frame), asup_grid); - gtk_widget_show (asup_grid); - - g_signal_connect (button, "toggled", - G_CALLBACK (pika_toggle_button_update), - &pvals.use_asupsample); - - g_object_bind_property (button, "active", - asup_grid, "sensitive", - G_BINDING_SYNC_CREATE); - - scale = pika_scale_entry_new (_("_Max depth:"), pvals.asupsample_max_depth, 1.0, 10.0, 0); - g_signal_connect (scale, "value-changed", - G_CALLBACK (gradient_scale_entry_update_int), - &pvals.asupsample_max_depth); - gtk_grid_attach (GTK_GRID (asup_grid), scale, 0, 0, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("_Threshold"), pvals.asupsample_threshold, 0.0, 4.0, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.01, 0.1); - g_signal_connect (scale, "value-changed", - G_CALLBACK (gradient_scale_entry_update_double), - &pvals.asupsample_threshold); - gtk_grid_attach (GTK_GRID (asup_grid), scale, 0, 1, 3, 1); - gtk_widget_show (scale); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dlg->shell), + "asupsample-box", + "asupsample-max-depth", "asupsample-threshold", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dlg->shell), + "asupsample-frame", "use-asupsample", + FALSE, "asupsample-box"); + main_vbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dlg->shell), + "settings-page", + "center-frame", "parameters-frame", "asupsample-frame", + NULL); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), main_vbox, gtk_label_new_with_mnemonic (_("_Settings"))); gtk_widget_show (main_vbox); } static void -dlg_position_entry_callback (GtkWidget *widget, gpointer data) +dlg_position_entry_callback (GtkWidget *widget, + PikaProcedureConfig *config) { + gint xcenter; + gint ycenter; gint x, y; x = RINT (pika_size_entry_get_refval (PIKA_SIZE_ENTRY (widget), 0)); @@ -3038,11 +2995,17 @@ dlg_position_entry_callback (GtkWidget *widget, gpointer data) DEBUG_PRINT (("dlg_position_entry_callback\n")); - if (pvals.xcenter != x || - pvals.ycenter != y) + g_object_get (config, + "center-x", &xcenter, + "center-y", &ycenter, + NULL); + + if (xcenter != x || ycenter != y) { - pvals.xcenter = x; - pvals.ycenter = y; + g_object_set (config, + "center-x", x, + "center-y", y, + NULL); dlg_preview_update (); } @@ -3062,8 +3025,9 @@ dlg_update_preview_callback (GtkWidget *widget, /*****************************************/ static void -dlg_make_page_selector (GFlareDialog *dlg, - GtkWidget *notebook) +dlg_make_page_selector (GFlareDialog *dlg, + GtkWidget *notebook, + PikaProcedureConfig *config) { GtkWidget *vbox; GtkWidget *hbox; @@ -3146,7 +3110,7 @@ dlg_make_page_selector (GFlareDialog *dlg, g_signal_connect (button, "clicked", buttons[i].callback, - button); + config); } gtk_widget_show (vbox); @@ -3269,7 +3233,7 @@ dlg_selector_edit_callback (GtkWidget *widget, preview_render_end (dlg->preview); gtk_widget_set_sensitive (dlg->shell, FALSE); ed_run (GTK_WINDOW (dlg->shell), - dlg->gflare, dlg_selector_edit_done_callback, NULL); + dlg->gflare, dlg_selector_edit_done_callback, data); } static void @@ -3462,6 +3426,8 @@ ed_run (GtkWindow *parent, GtkWidget *frame; GtkWidget *notebook; + g_return_if_fail (PIKA_IS_PROCEDURE_CONFIG (calldata)); + if (!ed) ed = g_new0 (GFlareEditor, 1); ed->init = TRUE; @@ -3519,14 +3485,14 @@ ed_run (GtkWindow *parent, gtk_widget_show (frame); ed->preview = preview_new (ED_PREVIEW_WIDTH, ED_PREVIEW_HEIGHT, - ed_preview_init_func, NULL, + ed_preview_init_func, calldata, ed_preview_render_func, NULL, ed_preview_deinit_func, NULL); gtk_widget_set_events (GTK_WIDGET (ed->preview->widget), DLG_PREVIEW_MASK); gtk_container_add (GTK_CONTAINER (frame), ed->preview->widget); g_signal_connect (ed->preview->widget, "event", G_CALLBACK (dlg_preview_handle_event), - NULL); + calldata); ed_preview_calc_window (); /* @@ -4200,10 +4166,18 @@ ed_preview_update (void) static gint ed_preview_init_func (Preview *preview, gpointer data) { - int type = 0; + PikaProcedureConfig *config = PIKA_PROCEDURE_CONFIG (data); + int type = 0; if (ed->init_params_done == FALSE) { + gdouble vangle; + gdouble vlength; + + g_object_get (config, + "vector-angle", &vangle, + "vector-length", &vlength, + NULL); switch (ed->cur_page) { case PAGE_GENERAL: @@ -4225,7 +4199,7 @@ ed_preview_init_func (Preview *preview, gpointer data) calc_init_params (ed->gflare, type, ED_PREVIEW_WIDTH/2, ED_PREVIEW_HEIGHT/2, ED_PREVIEW_WIDTH/2, 0.0, 0.0, - pvals.vangle, pvals.vlength); + vangle, vlength); ed->init_params_done = TRUE; return TRUE; diff --git a/plug-ins/help-browser/dialog.c b/plug-ins/help-browser/dialog.c index c9892ff..c1fff33 100644 --- a/plug-ins/help-browser/dialog.c +++ b/plug-ins/help-browser/dialog.c @@ -80,6 +80,8 @@ struct _PikaHelpBrowserDialog GMenuModel *popup_menu_model; GMenuModel *copy_popup_menu_model; + + PikaProcedureConfig *config; }; G_DEFINE_TYPE (PikaHelpBrowserDialog, pika_help_browser_dialog, GTK_TYPE_APPLICATION_WINDOW) @@ -406,22 +408,29 @@ pika_help_browser_dialog_finalize (GObject *object) /* Public functions. */ PikaHelpBrowserDialog * -pika_help_browser_dialog_new (const gchar *plug_in_binary, - GApplication *app) +pika_help_browser_dialog_new (const gchar *plug_in_binary, + GApplication *app, + PikaProcedureConfig *config) { PikaHelpBrowserDialog *window; - DialogData data = { 720, 560, 240, TRUE, 1.0 }; + GBytes *bytes = NULL; + DialogData data = { 720, 560, 240, TRUE, 1.0 }; + + g_object_get (config, "dialog-data", &bytes, NULL); + if (bytes != NULL && g_bytes_get_size (bytes) == sizeof (DialogData)) + data = *((DialogData *) g_bytes_get_data (bytes, NULL)); + g_bytes_unref (bytes); pika_ui_init (plug_in_binary); - pika_get_data (PIKA_HELP_BROWSER_DIALOG_DATA, &data); - window = g_object_new (PIKA_TYPE_HELP_BROWSER_DIALOG, "application", app, "role", plug_in_binary, "default-width", data.width, "default-height", data.height, NULL); + window->config = config; + gtk_paned_set_position (GTK_PANED (window->paned), data.paned_position); if (data.show_index) gtk_widget_show (window->sidebar); @@ -1005,7 +1014,8 @@ dialog_unmap (GtkWidget *window, gpointer user_data) { PikaHelpBrowserDialog *self = PIKA_HELP_BROWSER_DIALOG (user_data); - DialogData data; + GBytes *bytes; + DialogData data = { 720, 560, 240, TRUE, 1.0 }; gtk_window_get_size (GTK_WINDOW (window), &data.width, &data.height); @@ -1015,7 +1025,9 @@ dialog_unmap (GtkWidget *window, data.zoom = (self->webview ? webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW (self->webview)) : 1.0); - pika_set_data (PIKA_HELP_BROWSER_DIALOG_DATA, &data, sizeof (data)); + bytes = g_bytes_new (&data, sizeof (DialogData)); + g_object_set (self->config, "dialog-data", bytes, NULL); + g_bytes_unref (bytes); } static void diff --git a/plug-ins/help-browser/dialog.h b/plug-ins/help-browser/dialog.h index 942aa5e..a61a806 100644 --- a/plug-ins/help-browser/dialog.h +++ b/plug-ins/help-browser/dialog.h @@ -32,11 +32,11 @@ #define PIKA_TYPE_HELP_BROWSER_DIALOG (pika_help_browser_dialog_get_type ()) G_DECLARE_FINAL_TYPE (PikaHelpBrowserDialog, pika_help_browser_dialog, - PIKA, HELP_BROWSER_DIALOG, - GtkApplicationWindow) + PIKA, HELP_BROWSER_DIALOG, GtkApplicationWindow) -PikaHelpBrowserDialog * pika_help_browser_dialog_new (const char *plug_in_binary, - GApplication *app); +PikaHelpBrowserDialog * pika_help_browser_dialog_new (const char *plug_in_binary, + GApplication *app, + PikaProcedureConfig *config); void pika_help_browser_dialog_load (PikaHelpBrowserDialog *self, const char *uri); diff --git a/plug-ins/help-browser/help-browser.c b/plug-ins/help-browser/help-browser.c index 4873c74..4c19ebc 100644 --- a/plug-ins/help-browser/help-browser.c +++ b/plug-ins/help-browser/help-browser.c @@ -52,12 +52,12 @@ G_DECLARE_FINAL_TYPE (PikaHelpBrowser, pika_help_browser, PikaPlugIn) static PikaValueArray * help_browser_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void temp_proc_install (PikaPlugIn *plug_in); static PikaValueArray * temp_proc_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaHelpProgress * help_browser_progress_new (void); @@ -66,6 +66,7 @@ struct _PikaHelpBrowser { PikaPlugIn parent_instance; + PikaProcedureConfig *config; GtkApplication *app; PikaHelpBrowserDialog *window; }; @@ -123,6 +124,11 @@ help_browser_create_procedure (PikaPlugIn *plug_in, "Domain URIs", "Domain URIs", G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_BYTES (procedure, "dialog-data", + "Dialog data", + "Remembering dialog's basic features; this is never meant to be a public argument", + PIKA_PARAM_READWRITE); } return procedure; @@ -135,7 +141,7 @@ on_app_activate (GApplication *gapp, PikaHelpBrowser *browser = PIKA_HELP_BROWSER (user_data); GtkApplication *app = GTK_APPLICATION (gapp); - browser->window = pika_help_browser_dialog_new (PLUG_IN_BINARY, gapp); + browser->window = pika_help_browser_dialog_new (PLUG_IN_BINARY, gapp, browser->config); gtk_application_set_accels_for_action (app, "win.back", (const char*[]) { "Left", NULL }); gtk_application_set_accels_for_action (app, "win.forward", (const char*[]) { "Right", NULL }); @@ -153,18 +159,30 @@ on_app_activate (GApplication *gapp, static PikaValueArray * help_browser_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer user_data) { - PikaHelpBrowser *browser = PIKA_HELP_BROWSER (user_data); + PikaHelpBrowser *browser = PIKA_HELP_BROWSER (user_data); + gchar **domain_names = NULL; + gchar **domain_uris = NULL; - if (! pika_help_init (PIKA_VALUES_GET_STRV (args, 1), - PIKA_VALUES_GET_STRV (args, 2))) + browser->config = config; + g_object_get (config, + "domain-names", &domain_names, + "domain-uris", &domain_uris, + NULL); + if (! pika_help_init ((const gchar **) domain_names, + (const gchar **) domain_uris)) { + g_strfreev (domain_names); + g_strfreev (domain_uris); + return pika_procedure_new_return_values (procedure, PIKA_PDB_CALLING_ERROR, NULL); } + g_strfreev (domain_names); + g_strfreev (domain_uris); temp_proc_install (pika_procedure_get_plug_in (procedure)); @@ -290,25 +308,28 @@ show_help_on_idle (gpointer user_data) static PikaValueArray * temp_proc_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer user_data) { PikaHelpBrowser *browser = PIKA_HELP_BROWSER (user_data); IdleClosure *closure; - const char *str; + gchar *str; closure = g_new0 (IdleClosure, 1); closure->browser = browser; - str = PIKA_VALUES_GET_STRING (args, 0); + g_object_get (config, "help-domain", &str, NULL); closure->help_domain = g_strdup ((str && *str)? str : PIKA_HELP_DEFAULT_DOMAIN); + g_free (str); - str = PIKA_VALUES_GET_STRING (args, 1); + g_object_get (config, "help-locales", &str, NULL); if (str && *str) closure->help_locales = g_strdup (str); + g_free (str); - str = PIKA_VALUES_GET_STRING (args, 2); + g_object_get (config, "help-id", &str, NULL); closure->help_id = g_strdup ((str && *str)? str : PIKA_HELP_DEFAULT_ID); + g_free (str); /* Do this on idle, to make sure everything is initialized already */ g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, diff --git a/plug-ins/help/help.c b/plug-ins/help/help.c index f8e6a7d..6db205e 100644 --- a/plug-ins/help/help.c +++ b/plug-ins/help/help.c @@ -68,7 +68,7 @@ typedef struct /* forward declarations */ #define HELP_TYPE (help_get_type ()) -#define HELP (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HELP_TYPE, Help)) +#define HELP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HELP_TYPE, Help)) GType help_get_type (void) G_GNUC_CONST; @@ -77,10 +77,10 @@ static PikaProcedure * help_create_procedure (PikaPlugIn *plug_in, const gchar *name); static PikaValueArray * help_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaValueArray * help_temp_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void help_temp_proc_install (PikaPlugIn *plug_in); @@ -157,16 +157,23 @@ help_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * help_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaPDBStatusType status = PIKA_PDB_SUCCESS; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + gchar **domain_names = NULL; + gchar **domain_uris = NULL; - if (! pika_help_init (PIKA_VALUES_GET_STRV (args, 0), - PIKA_VALUES_GET_STRV (args, 1))) - { - status = PIKA_PDB_CALLING_ERROR; - } + g_object_get (config, + "domain-names", &domain_names, + "domain-uris", &domain_uris, + NULL); + if (! pika_help_init ((const gchar **) domain_names, + (const gchar **) domain_uris)) + status = PIKA_PDB_CALLING_ERROR; + + g_strfreev (domain_names); + g_strfreev (domain_uris); if (status == PIKA_PDB_SUCCESS) { @@ -237,26 +244,27 @@ help_temp_proc_install (PikaPlugIn *plug_in) static PikaValueArray * help_temp_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status = PIKA_PDB_SUCCESS; - const gchar *help_proc = NULL; - const gchar *help_domain = PIKA_HELP_DEFAULT_DOMAIN; - const gchar *help_locales = NULL; - const gchar *help_id = PIKA_HELP_DEFAULT_ID; + gchar *help_proc = NULL; + gchar *help_domain = NULL; + gchar *help_locales = NULL; + gchar *help_id = NULL; - if (PIKA_VALUES_GET_STRING (args, 0)) - help_proc = PIKA_VALUES_GET_STRING (args, 0); + g_object_get (config, + "help-proc", &help_proc, + "help-domain", &help_domain, + "help-locales", &help_locales, + "help-id", &help_id, + NULL); - if (PIKA_VALUES_GET_STRING (args, 1)) - help_domain = PIKA_VALUES_GET_STRING (args, 1); + if (help_domain == NULL) + help_domain = g_strdup (PIKA_HELP_DEFAULT_DOMAIN); - if (PIKA_VALUES_GET_STRING (args, 2)) - help_locales = PIKA_VALUES_GET_STRING (args, 2); - - if (PIKA_VALUES_GET_STRING (args, 3)) - help_id = PIKA_VALUES_GET_STRING (args, 3); + if (help_id == NULL) + help_id = g_strdup (PIKA_HELP_DEFAULT_ID); if (! help_proc) status = PIKA_PDB_CALLING_ERROR; @@ -264,6 +272,11 @@ help_temp_run (PikaProcedure *procedure, if (status == PIKA_PDB_SUCCESS) help_load (help_proc, help_domain, help_locales, help_id); + g_free (help_proc); + g_free (help_domain); + g_free (help_locales); + g_free (help_id); + return pika_procedure_new_return_values (procedure, status, NULL); } @@ -313,6 +326,7 @@ help_load_idle (gpointer data) if (uri) { + PikaProcedure *procedure; PikaValueArray *return_vals; #ifdef PIKA_HELP_DEBUG @@ -320,10 +334,9 @@ help_load_idle (gpointer data) idle_help->procedure, uri); #endif - return_vals = pika_pdb_run_procedure (pika_get_pdb (), - idle_help->procedure, - G_TYPE_STRING, uri, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), + idle_help->procedure); + return_vals = pika_procedure_run (procedure, "domain-names", uri, NULL); pika_value_array_unref (return_vals); g_free (uri); diff --git a/plug-ins/ifs-compose/ifs-compose.c b/plug-ins/ifs-compose/ifs-compose.c index 3458531..132c22e 100644 --- a/plug-ins/ifs-compose/ifs-compose.c +++ b/plug-ins/ifs-compose/ifs-compose.c @@ -212,7 +212,7 @@ static PikaValueArray * ifs_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); /* user interface functions */ @@ -454,6 +454,11 @@ ifs_create_procedure (PikaPlugIn *plug_in, "Owen Taylor", "Owen Taylor", "1997"); + + PIKA_PROC_AUX_ARG_STRING (procedure, "fractal-str", + "The fractal description serialized as string", + NULL, NULL, + PIKA_PARAM_READWRITE); } return procedure; @@ -465,7 +470,7 @@ ifs_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; @@ -522,16 +527,12 @@ ifs_run (PikaProcedure *procedure, if (! found_parasite) { - gint length = pika_get_data_size (PLUG_IN_PROC); + gchar *data = NULL; - if (length > 0) - { - gchar *data = g_new (gchar, length); - - pika_get_data (PLUG_IN_PROC, data); - ifsvals_parse_string (data, &ifsvals, &elements); - g_free (data); - } + g_object_get (config, "fractal-str", &data, NULL); + if (data != NULL && strlen (data) > 0) + ifsvals_parse_string (data, &ifsvals, &elements); + g_free (data); } /* after ifsvals_parse_string, need to set up naming */ @@ -557,22 +558,28 @@ ifs_run (PikaProcedure *procedure, break; case PIKA_RUN_WITH_LAST_VALS: - { - gint length = pika_get_data_size (PLUG_IN_PROC); + { + gchar *data = NULL; - if (length > 0) - { - gchar *data = g_new (gchar, length); + g_object_get (config, "fractal-str", &data, NULL); + if (data != NULL && strlen (data) > 0) + { + ifsvals_parse_string (data, &ifsvals, &elements); + } + else + { + /* FIXME: there is a known crash in this code path, because some + * base structures (which are visibly created as part of the + * dialog or with ifsvals_parse_string() on a valid serialized + * fractal) don't exist. This should be fixed so that we can run + * with last vals even when no last vals exist (which should use + * defaults). + */ + ifs_compose_set_defaults (); + } - pika_get_data (PLUG_IN_PROC, data); - ifsvals_parse_string (data, &ifsvals, &elements); - g_free (data); - } - else - { - ifs_compose_set_defaults (); - } - } + g_free (data); + } break; default: @@ -593,8 +600,7 @@ ifs_run (PikaProcedure *procedure, * as a parasite on this layer */ str = ifsvals_stringify (&ifsvals, elements); - - pika_set_data (PLUG_IN_PROC, str, strlen (str) + 1); + g_object_set (config, "fractal-str", str, NULL); parasite = pika_parasite_new (PLUG_IN_PARASITE, PIKA_PARASITE_PERSISTENT | diff --git a/plug-ins/imagemap/imap_main.c b/plug-ins/imagemap/imap_main.c index bad01c0..56beb0f 100644 --- a/plug-ins/imagemap/imap_main.c +++ b/plug-ins/imagemap/imap_main.c @@ -75,7 +75,7 @@ static PikaValueArray * imap_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gint dialog (PikaImap *imap); @@ -239,7 +239,7 @@ imap_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaImap *imap; diff --git a/plug-ins/lighting/lighting-apply.c b/plug-ins/lighting/lighting-apply.c index 2fef5f0..5f066d3 100644 --- a/plug-ins/lighting/lighting-apply.c +++ b/plug-ins/lighting/lighting-apply.c @@ -151,3 +151,118 @@ compute_image (void) pika_displays_flush (); } } + +void +copy_from_config (PikaProcedureConfig *config) +{ + PikaDrawable *temp_bump_map_drawable = NULL; + PikaDrawable *temp_env_map_drawable = NULL; + PikaRGB *color_1; + PikaRGB *color_2; + PikaRGB *color_3; + PikaRGB *color_4; + PikaRGB *color_5; + PikaRGB *color_6; + + g_object_get (config, + "distance", &mapvals.viewpoint.z, + "do-bumpmap", &mapvals.bump_mapped, + "do-envmap", &mapvals.env_mapped, + "antialiasing", &mapvals.antialiasing, + "new-image", &mapvals.create_new_image, + "transparent-background", &mapvals.transparent_background, + + "light-color-1", &color_1, + "light-intensity-1", &mapvals.lightsource[0].intensity, + "light-position-x-1", &mapvals.lightsource[0].position.x, + "light-position-y-1", &mapvals.lightsource[0].position.y, + "light-position-z-1", &mapvals.lightsource[0].position.z, + "light-direction-x-1", &mapvals.lightsource[0].direction.x, + "light-direction-y-1", &mapvals.lightsource[0].direction.y, + "light-direction-z-1", &mapvals.lightsource[0].direction.z, + + "isolate", &mapvals.light_isolated, + "ambient-intensity", &mapvals.material.ambient_int, + "diffuse-intensity", &mapvals.material.diffuse_int, + "diffuse-reflectivity", &mapvals.material.diffuse_ref, + "specular-reflectivity", &mapvals.material.specular_ref, + "highlight", &mapvals.material.highlight, + "metallic", &mapvals.material.metallic, + + "light-color-2", &color_2, + "light-intensity-2", &mapvals.lightsource[1].intensity, + "light-position-x-2", &mapvals.lightsource[1].position.x, + "light-position-y-2", &mapvals.lightsource[1].position.y, + "light-position-z-2", &mapvals.lightsource[1].position.z, + "light-direction-x-2", &mapvals.lightsource[1].direction.x, + "light-direction-y-2", &mapvals.lightsource[1].direction.y, + "light-direction-z-2", &mapvals.lightsource[1].direction.z, + "light-color-3", &color_3, + "light-intensity-3", &mapvals.lightsource[2].intensity, + "light-position-x-3", &mapvals.lightsource[2].position.x, + "light-position-y-3", &mapvals.lightsource[2].position.y, + "light-position-z-3", &mapvals.lightsource[2].position.z, + "light-direction-x-3", &mapvals.lightsource[2].direction.x, + "light-direction-y-3", &mapvals.lightsource[2].direction.y, + "light-direction-z-3", &mapvals.lightsource[2].direction.z, + "light-color-4", &color_4, + "light-intensity-4", &mapvals.lightsource[3].intensity, + "light-position-x-4", &mapvals.lightsource[3].position.x, + "light-position-y-4", &mapvals.lightsource[3].position.y, + "light-position-z-4", &mapvals.lightsource[3].position.z, + "light-direction-x-4", &mapvals.lightsource[3].direction.x, + "light-direction-y-4", &mapvals.lightsource[3].direction.y, + "light-direction-z-4", &mapvals.lightsource[3].direction.z, + "light-color-5", &color_5, + "light-intensity-5", &mapvals.lightsource[4].intensity, + "light-position-x-5", &mapvals.lightsource[4].position.x, + "light-position-y-5", &mapvals.lightsource[4].position.y, + "light-position-z-5", &mapvals.lightsource[4].position.z, + "light-direction-x-5", &mapvals.lightsource[4].direction.x, + "light-direction-y-5", &mapvals.lightsource[4].direction.y, + "light-direction-z-5", &mapvals.lightsource[4].direction.z, + "light-color-6", &color_6, + "light-intensity-6", &mapvals.lightsource[5].intensity, + "light-position-x-6", &mapvals.lightsource[5].position.x, + "light-position-y-6", &mapvals.lightsource[5].position.y, + "light-position-z-6", &mapvals.lightsource[5].position.z, + "light-direction-x-6", &mapvals.lightsource[5].direction.x, + "light-direction-y-6", &mapvals.lightsource[5].direction.y, + "light-direction-z-6", &mapvals.lightsource[5].direction.z, + "bump-drawable", &temp_bump_map_drawable, + "env-drawable", &temp_env_map_drawable, + NULL); + + if (color_1) + pika_rgba_set (&mapvals.lightsource[0].color, color_1->r, color_1->g, color_1->b, 1.0); + if (color_2) + pika_rgba_set (&mapvals.lightsource[1].color, color_2->r, color_2->g, color_2->b, 1.0); + if (color_3) + pika_rgba_set (&mapvals.lightsource[2].color, color_3->r, color_3->g, color_3->b, 1.0); + if (color_4) + pika_rgba_set (&mapvals.lightsource[3].color, color_4->r, color_4->g, color_4->b, 1.0); + if (color_5) + pika_rgba_set (&mapvals.lightsource[4].color, color_5->r, color_5->g, color_5->b, 1.0); + if (color_6) + pika_rgba_set (&mapvals.lightsource[5].color, color_6->r, color_6->g, color_6->b, 1.0); + + mapvals.bumpmaptype = pika_procedure_config_get_choice_id (config, "bumpmap-type"); + mapvals.light_selected = pika_procedure_config_get_choice_id (config, "which-light"); + + mapvals.lightsource[0].type = pika_procedure_config_get_choice_id (config, "light-type-1"); + mapvals.lightsource[1].type = pika_procedure_config_get_choice_id (config, "light-type-2"); + mapvals.lightsource[2].type = pika_procedure_config_get_choice_id (config, "light-type-3"); + mapvals.lightsource[3].type = pika_procedure_config_get_choice_id (config, "light-type-4"); + mapvals.lightsource[4].type = pika_procedure_config_get_choice_id (config, "light-type-5"); + mapvals.lightsource[5].type = pika_procedure_config_get_choice_id (config, "light-type-6"); + + if (temp_bump_map_drawable) + mapvals.bumpmap_id = pika_item_get_id (PIKA_ITEM (temp_bump_map_drawable)); + else + mapvals.bumpmap_id = -1; + + if (temp_env_map_drawable) + mapvals.envmap_id = pika_item_get_id (PIKA_ITEM (temp_env_map_drawable)); + else + mapvals.envmap_id = -1; +} diff --git a/plug-ins/lighting/lighting-apply.h b/plug-ins/lighting/lighting-apply.h index 304ef4a..661a5fb 100644 --- a/plug-ins/lighting/lighting-apply.h +++ b/plug-ins/lighting/lighting-apply.h @@ -1,7 +1,8 @@ #ifndef __LIGHTING_APPLY_H__ #define __LIGHTING_APPLY_H__ -void init_compute (void); -void compute_image (void); +void init_compute (void); +void compute_image (void); +void copy_from_config (PikaProcedureConfig *config); #endif /* __LIGHTING_APPLY_H__ */ diff --git a/plug-ins/lighting/lighting-main.c b/plug-ins/lighting/lighting-main.c index 217bb28..dedb4c4 100644 --- a/plug-ins/lighting/lighting-main.c +++ b/plug-ins/lighting/lighting-main.c @@ -53,7 +53,7 @@ struct _LightingClass #define LIGHTING_TYPE (lighting_get_type ()) -#define LIGHTING (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIGHTING_TYPE, Lighting)) +#define LIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIGHTING_TYPE, Lighting)) GType lighting_get_type (void) G_GNUC_CONST; @@ -66,7 +66,7 @@ static PikaValueArray * lighting_run (PikaProcedure *procedu PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void set_default_settings (void); @@ -133,94 +133,137 @@ lighting_create_procedure (PikaPlugIn *plug_in, "Version 0.2.0, March 15 1998"); PIKA_PROC_ARG_DRAWABLE (procedure, "bump-drawable", - "Bump drawable", - "Bumpmap drawable (set to NULL if disabled)", + _("B_ump map image"), + _("Bumpmap drawable (set to NULL if disabled)"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DRAWABLE (procedure, "env-drawable", - "Env drawable", - "Environmentmap drawable (set to NULL if disabled", + _("Enviro_nment map image"), + _("Environmentmap drawable " + "(set to NULL if disabled)"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "do-bumpmap", - "Do bumpmap", - "Enable bumpmapping", + _("Enable bump mappi_ng"), + _("Enable bumpmapping"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "do-envmap", - "Do envmap", - "Enable envmapping", + _("Enable en_vironment mapping"), + _("Enable envmapping"), TRUE, G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "bumpmap-type", - "Bumpmap type", - "Type of mapping (0=linear, 1=log, 2=sinusoidal, " - "3=spherical)", - 0, 2, 0, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "bumpmap-type", + _("Cur_ve"), + _("Type of mapping"), + pika_choice_new_with_values ("bumpmap-linear", LINEAR_MAP, _("Linear"), NULL, + "bumpmap-log", LOGARITHMIC_MAP, _("Logarithmic"), NULL, + "bumpmap-sinusoidal", SINUSOIDAL_MAP, _("Sinusoidal"), NULL, + "bumpmap-spherical", SPHERICAL_MAP, _("Spherical"), NULL, + NULL), + "bumpmap-linear", + G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "light-type", - "Light type", - "Type of lightsource (0=point, 1=directional, " - "3=spot, 4=none)", - 0 ,4, 0, - G_PARAM_READWRITE); + PIKA_PROC_ARG_DOUBLE (procedure, "bumpmap-max-height", + _("Ma_ximum height"), + _("The maximum height of the bumpmap"), + 0.0, G_MAXFLOAT, 0.1, + G_PARAM_READWRITE); - PIKA_PROC_ARG_RGB (procedure, "light-color", - "Light color", - "Light source color", + PIKA_PROC_AUX_ARG_CHOICE (procedure, "which-light", + _("Active"), + _("Which light is active in the GUI"), + pika_choice_new_with_values ("light-1", 0, _("Light 1"), NULL, + "light-2", 1, _("Light 2"), NULL, + "light-3", 2, _("Light 3"), NULL, + "light-4", 3, _("Light 4"), NULL, + "light-5", 4, _("Light 5"), NULL, + "light-6", 5, _("Light 6"), NULL, + NULL), + "light-1", + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_BOOLEAN (procedure, "isolate", + _("Isolate"), + _("Only show the active lighting in " + "the preview"), + FALSE, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_CHOICE (procedure, "light-type-1", + _("Type"), + _("Type of light source"), + pika_choice_new_with_values ("light-none", NO_LIGHT, _("None"), NULL, + "light-directional", DIRECTIONAL_LIGHT, _("Directional"), NULL, + "light-point", POINT_LIGHT, _("Point"), NULL, + "light-spot", SPOT_LIGHT, _("Spot"), NULL, + NULL), + "light-point", + G_PARAM_READWRITE); + + PIKA_PROC_ARG_RGB (procedure, "light-color-1", + _("Color"), + _("Light source color"), TRUE, &white, G_PARAM_READWRITE); - PIKA_PROC_ARG_DOUBLE (procedure, "light-position-x", - "Light position X", - "Light source position (x,y,z)", + PIKA_PROC_ARG_DOUBLE (procedure, "light-intensity-1", + _("Intensity"), + _("Light source intensity"), + 0, 100.0, 1.0, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "light-position-x-1", + _("Light position X"), + _("Light source position (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, -1, G_PARAM_READWRITE); - PIKA_PROC_ARG_DOUBLE (procedure, "light-position-y", - "Light position Y", - "Light source position (x,y,z)", + PIKA_PROC_ARG_DOUBLE (procedure, "light-position-y-1", + _("Light position Y"), + _("Light source position (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, -1, G_PARAM_READWRITE); - PIKA_PROC_ARG_DOUBLE (procedure, "light-position-z", - "Light position Z", - "Light source position (x,y,z)", + PIKA_PROC_ARG_DOUBLE (procedure, "light-position-z-1", + _("Light position Z"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "light-direction-x-1", + _("Light direction X"), + _("Light source direction (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, -1, G_PARAM_READWRITE); - PIKA_PROC_ARG_DOUBLE (procedure, "light-direction-x", - "Light direction X", - "Light source direction (x,y,z)", + PIKA_PROC_ARG_DOUBLE (procedure, "light-direction-y-1", + _("Light direction Y"), + _("Light source direction (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, -1, G_PARAM_READWRITE); - PIKA_PROC_ARG_DOUBLE (procedure, "light-direction-y", - "Light direction Y", - "Light source direction (x,y,z)", - -G_MAXDOUBLE, G_MAXDOUBLE, -1, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_DOUBLE (procedure, "light-direction-z", - "Light direction Z", - "Light source direction (x,y,z)", + PIKA_PROC_ARG_DOUBLE (procedure, "light-direction-z-1", + _("Light direction Z"), + _("Light source direction (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, 1, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "ambient-intensity", - "Ambient intensity", - "Material ambient intensity", + _("Ambient intensity"), + _("Material ambient intensity " + "(Glowing)"), 0, 1, 0.2, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "diffuse-intensity", - "Diffuse intensity", - "Material diffuse intensity", + _("Diffuse intensity"), + _("Material diffuse intensity " + "(Bright)"), 0, 1, 0.5, G_PARAM_READWRITE); @@ -238,27 +281,336 @@ lighting_create_procedure (PikaPlugIn *plug_in, PIKA_PROC_ARG_DOUBLE (procedure, "highlight", "Highlight", - "Material highlight (note, it's exponential)", + "Material highlight (note, it's exponential) " + "(Polished)", 0, G_MAXDOUBLE, 27.0, G_PARAM_READWRITE); + PIKA_PROC_ARG_BOOLEAN (procedure, "metallic", + _("Metallic"), + _("Enable envmapping"), + FALSE, + G_PARAM_READWRITE); + PIKA_PROC_ARG_BOOLEAN (procedure, "antialiasing", - "Antialiasing", - "Apply antialiasing", + _("_Antialiasing"), + _("Apply antialiasing"), FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "new-image", - "New image", - "Create a new image", + _("Create new ima_ge"), + _("Create a new image"), FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "transparent-background", - "Transparent background", - "Make background transparent", + _("Trans_parent background"), + _("Make background transparent"), FALSE, G_PARAM_READWRITE); + + PIKA_PROC_ARG_DOUBLE (procedure, "distance", + _("_Distance"), + _("Distance of observer from surface"), + 0, 2.0, 0.25, + G_PARAM_READWRITE); + + /* GUI-only arguments for additional light sources */ + PIKA_PROC_AUX_ARG_CHOICE (procedure, "light-type-2", + _("Type"), + _("Type of light source"), + pika_choice_new_with_values ("light-none", NO_LIGHT, _("None"), NULL, + "light-directional", DIRECTIONAL_LIGHT, _("Directional"), NULL, + "light-point", POINT_LIGHT, _("Point"), NULL, + "light-spot", SPOT_LIGHT, _("Spot"), NULL, + NULL), + "light-point", + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_RGB (procedure, "light-color-2", + _("Color"), + _("Light source color"), + TRUE, &white, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-intensity-2", + _("Intensity"), + _("Light source intensity"), + 0, 100.0, 1.0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-x-2", + _("Light position X"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, -2, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-y-2", + _("Light position Y"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, -1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-z-2", + _("Light position Z"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-x-2", + _("Light direction X"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-y-2", + _("Light direction Y"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, -1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-z-2", + _("Light direction Z"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_CHOICE (procedure, "light-type-3", + _("Type"), + _("Type of light source"), + pika_choice_new_with_values ("light-none", NO_LIGHT, _("None"), NULL, + "light-directional", DIRECTIONAL_LIGHT, _("Directional"), NULL, + "light-point", POINT_LIGHT, _("Point"), NULL, + "light-spot", SPOT_LIGHT, _("Spot"), NULL, + NULL), + "light-point", + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_RGB (procedure, "light-color-3", + _("Color"), + _("Light source color"), + TRUE, &white, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-intensity-3", + _("Intensity"), + _("Light source intensity"), + 0, 100.0, 1.0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-x-3", + _("Light position X"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-y-3", + _("Light position Y"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 2, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-z-3", + _("Light position Z"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-x-3", + _("Light direction X"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-y-3", + _("Light direction Y"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-z-3", + _("Light direction Z"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_CHOICE (procedure, "light-type-4", + _("Type"), + _("Type of light source"), + pika_choice_new_with_values ("light-none", NO_LIGHT, _("None"), NULL, + "light-directional", DIRECTIONAL_LIGHT, _("Directional"), NULL, + "light-point", POINT_LIGHT, _("Point"), NULL, + "light-spot", SPOT_LIGHT, _("Spot"), NULL, + NULL), + "light-point", + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_RGB (procedure, "light-color-4", + _("Color"), + _("Light source color"), + TRUE, &white, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-intensity-4", + _("Intensity"), + _("Light source intensity"), + 0, 100.0, 1.0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-x-4", + _("Light position X"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-y-4", + _("Light position Y"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-z-4", + _("Light position Z"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-x-4", + _("Light direction X"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-y-4", + _("Light direction Y"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-z-4", + _("Light direction Z"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_CHOICE (procedure, "light-type-5", + _("Type"), + _("Type of light source"), + pika_choice_new_with_values ("light-none", NO_LIGHT, _("None"), NULL, + "light-directional", DIRECTIONAL_LIGHT, _("Directional"), NULL, + "light-point", POINT_LIGHT, _("Point"), NULL, + "light-spot", SPOT_LIGHT, _("Spot"), NULL, + NULL), + "light-point", + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_RGB (procedure, "light-color-5", + _("Color"), + _("Light source color"), + TRUE, &white, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-intensity-5", + _("Intensity"), + _("Light source intensity"), + 0, 100.0, 1.0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-x-5", + _("Light position X"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-y-5", + _("Light position Y"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-z-5", + _("Light position Z"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-x-5", + _("Light direction X"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-y-5", + _("Light direction Y"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-z-5", + _("Light direction Z"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_CHOICE (procedure, "light-type-6", + _("Type"), + _("Type of light source"), + pika_choice_new_with_values ("light-none", NO_LIGHT, _("None"), NULL, + "light-directional", DIRECTIONAL_LIGHT, _("Directional"), NULL, + "light-point", POINT_LIGHT, _("Point"), NULL, + "light-spot", SPOT_LIGHT, _("Spot"), NULL, + NULL), + "light-point", + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_RGB (procedure, "light-color-6", + _("Color"), + _("Light source color"), + TRUE, &white, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-intensity-6", + _("Intensity"), + _("Light source intensity"), + 0, 100.0, 1.0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-x-6", + _("Light position X"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-y-6", + _("Light position Y"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-position-z-6", + _("Light position Z"), + _("Light source position (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-x-6", + _("Light direction X"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-y-6", + _("Light direction Y"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_DOUBLE (procedure, "light-direction-z-6", + _("Light direction Z"), + _("Light source direction (x,y,z)"), + -G_MAXDOUBLE, G_MAXDOUBLE, 1, + G_PARAM_READWRITE); } return procedure; @@ -389,7 +741,7 @@ lighting_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; @@ -415,18 +767,19 @@ lighting_run (PikaProcedure *procedure, set_default_settings (); - pika_get_data (PLUG_IN_PROC, &mapvals); - mapvals.drawable_id = pika_item_get_id (PIKA_ITEM (drawable)); check_drawables (); if (pika_drawable_is_rgb (drawable)) { + mapvals.config = config; + copy_from_config (config); + switch (run_mode) { case PIKA_RUN_INTERACTIVE: - if (! main_dialog (drawable)) + if (! main_dialog (procedure, config, drawable)) { return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, @@ -435,7 +788,6 @@ lighting_run (PikaProcedure *procedure, compute_image (); - pika_set_data (PLUG_IN_PROC, &mapvals, sizeof (LightingValues)); pika_displays_flush (); break; @@ -446,30 +798,6 @@ lighting_run (PikaProcedure *procedure, break; case PIKA_RUN_NONINTERACTIVE: - mapvals.bumpmap_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 0); - mapvals.envmap_id = PIKA_VALUES_GET_DRAWABLE_ID (args, 1); - mapvals.bump_mapped = PIKA_VALUES_GET_BOOLEAN (args, 2); - mapvals.env_mapped = PIKA_VALUES_GET_BOOLEAN (args, 3); - mapvals.bumpmaptype = PIKA_VALUES_GET_INT (args, 4); - mapvals.lightsource[0].type = PIKA_VALUES_GET_INT (args, 5); - - PIKA_VALUES_GET_RGB (args, 6, &mapvals.lightsource[0].color); - - mapvals.lightsource[0].position.x = PIKA_VALUES_GET_DOUBLE (args, 7); - mapvals.lightsource[0].position.y = PIKA_VALUES_GET_DOUBLE (args, 8); - mapvals.lightsource[0].position.z = PIKA_VALUES_GET_DOUBLE (args, 9); - mapvals.lightsource[0].direction.x = PIKA_VALUES_GET_DOUBLE (args, 10); - mapvals.lightsource[0].direction.y = PIKA_VALUES_GET_DOUBLE (args, 11); - mapvals.lightsource[0].direction.z = PIKA_VALUES_GET_DOUBLE (args, 12); - mapvals.material.ambient_int = PIKA_VALUES_GET_DOUBLE (args, 13); - mapvals.material.diffuse_int = PIKA_VALUES_GET_DOUBLE (args, 14); - mapvals.material.diffuse_ref = PIKA_VALUES_GET_DOUBLE (args, 15); - mapvals.material.specular_ref = PIKA_VALUES_GET_DOUBLE (args, 16); - mapvals.material.highlight = PIKA_VALUES_GET_DOUBLE (args, 17); - mapvals.antialiasing = PIKA_VALUES_GET_BOOLEAN (args, 18); - mapvals.create_new_image = PIKA_VALUES_GET_BOOLEAN (args, 19); - mapvals.transparent_background = PIKA_VALUES_GET_BOOLEAN (args, 20); - check_drawables (); if (image_setup (drawable, FALSE)) compute_image (); diff --git a/plug-ins/lighting/lighting-main.h b/plug-ins/lighting/lighting-main.h index cd34fd3..9b95d9c 100644 --- a/plug-ins/lighting/lighting-main.h +++ b/plug-ins/lighting/lighting-main.h @@ -63,6 +63,8 @@ typedef struct gint32 bumpmap_id; gint32 envmap_id; + PikaProcedureConfig *config; + /* Render variables */ /* ================ */ diff --git a/plug-ins/lighting/lighting-preview.c b/plug-ins/lighting/lighting-preview.c index 00d5cbf..3976283 100644 --- a/plug-ins/lighting/lighting-preview.c +++ b/plug-ins/lighting/lighting-preview.c @@ -377,15 +377,18 @@ preview_compute (void) compute_preview_rectangle (&startx, &starty, &pw, &ph); - cursor = gdk_cursor_new_for_display (display, GDK_WATCH); - gdk_window_set_cursor (gtk_widget_get_window (previewarea), cursor); - g_object_unref (cursor); + if (GDK_IS_WINDOW (gtk_widget_get_window (previewarea))) + { + cursor = gdk_cursor_new_for_display (display, GDK_WATCH); + gdk_window_set_cursor (gtk_widget_get_window (previewarea), cursor); + g_object_unref (cursor); - compute_preview (startx, starty, pw, ph); - cursor = gdk_cursor_new_for_display (display, GDK_HAND2); - gdk_window_set_cursor (gtk_widget_get_window (previewarea), cursor); - g_object_unref (cursor); - gdk_display_flush (display); + compute_preview (startx, starty, pw, ph); + cursor = gdk_cursor_new_for_display (display, GDK_HAND2); + gdk_window_set_cursor (gtk_widget_get_window (previewarea), cursor); + g_object_unref (cursor); + gdk_display_flush (display); + } } @@ -458,22 +461,31 @@ interactive_preview_callback (GtkWidget *widget) static gboolean interactive_preview_timer_callback (gpointer data) { - gint k = mapvals.light_selected; + gint k = mapvals.light_selected; + gchar *pos_x = g_strdup_printf (("light-position-x-%d"), k + 1); + gchar *pos_y = g_strdup_printf (("light-position-y-%d"), k + 1); + gchar *pos_z = g_strdup_printf (("light-position-z-%d"), k + 1); + gchar *dir_x = g_strdup_printf (("light-direction-x-%d"), k + 1); + gchar *dir_y = g_strdup_printf (("light-direction-y-%d"), k + 1); + gchar *dir_z = g_strdup_printf (("light-direction-z-%d"), k + 1); mapvals.update_enabled = FALSE; /* disable apply_settings() */ - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_pos_x), - mapvals.lightsource[k].position.x); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_pos_y), - mapvals.lightsource[k].position.y); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_pos_z), - mapvals.lightsource[k].position.z); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_dir_x), - mapvals.lightsource[k].direction.x); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_dir_y), - mapvals.lightsource[k].direction.y); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_dir_z), - mapvals.lightsource[k].direction.z); + g_object_set (mapvals.config, + pos_x, mapvals.lightsource[k].position.x, + pos_y, mapvals.lightsource[k].position.y, + pos_z, mapvals.lightsource[k].position.z, + dir_x, mapvals.lightsource[k].direction.x, + dir_y, mapvals.lightsource[k].direction.y, + dir_z, mapvals.lightsource[k].direction.z, + NULL); + + g_free (pos_x); + g_free (pos_y); + g_free (pos_z); + g_free (dir_x); + g_free (dir_y); + g_free (dir_z); mapvals.update_enabled = TRUE; diff --git a/plug-ins/lighting/lighting-ui.c b/plug-ins/lighting/lighting-ui.c index bcc078e..48f3786 100644 --- a/plug-ins/lighting/lighting-ui.c +++ b/plug-ins/lighting/lighting-ui.c @@ -39,7 +39,6 @@ extern LightingValues mapvals; static GtkWidget *appwin = NULL; -static GtkNotebook *options_note_book = NULL; GtkWidget *previewarea = NULL; @@ -50,166 +49,94 @@ GtkWidget *spin_dir_x = NULL; GtkWidget *spin_dir_y = NULL; GtkWidget *spin_dir_z = NULL; -static GtkWidget *colorbutton; -static GtkWidget *light_type_combo; -static GtkWidget *lightselect_combo; -static GtkWidget *spin_intensity; -static GtkWidget *isolate_button; static gchar *lighting_effects_path = NULL; -static void create_main_notebook (GtkWidget *container); - -static void toggle_update (GtkWidget *widget, - gpointer data); - -static void distance_update (PikaLabelSpin *scale, - gpointer data); - -static gboolean bumpmap_constrain (PikaImage *image, - PikaItem *item, - gpointer data); -static gboolean envmap_constrain (PikaImage *image, - PikaItem *item, - gpointer data); -static void envmap_combo_callback (GtkWidget *widget, - gpointer data); -static void save_lighting_preset (GtkWidget *widget, - gpointer data); -static void save_preset_response (GtkFileChooser *chooser, - gint response_id, - gpointer data); -static void load_lighting_preset (GtkWidget *widget, - gpointer data); -static void load_preset_response (GtkFileChooser *chooser, - gint response_id, - gpointer data); -static void lightselect_callback (PikaIntComboBox *combo, - gpointer data); -static void apply_settings (GtkWidget *widget, - gpointer data); -static void isolate_selected_light (GtkWidget *widget, - gpointer data); - -static GtkWidget * spin_button_new (GtkAdjustment **adjustment, /* return value */ - gdouble value, - gdouble lower, - gdouble upper, - gdouble step_increment, - gdouble page_increment, - gdouble page_size, - gdouble climb_rate, - guint digits); - -/**********************/ -/* Std. toggle update */ -/**********************/ - -static void -toggle_update (GtkWidget *widget, - gpointer data) -{ - pika_toggle_button_update (widget, data); - - preview_compute (); - gtk_widget_queue_draw (previewarea); -} - - -static void -distance_update (PikaLabelSpin *scale, - gpointer data) -{ - mapvals.viewpoint.z = pika_label_spin_get_value (scale); - - preview_compute (); - gtk_widget_queue_draw (previewarea); -} +static void update_preview (PikaProcedureConfig *config); +static void save_lighting_preset (GtkWidget *widget, + gpointer data); +static void save_preset_response (GtkFileChooser *chooser, + gint response_id, + gpointer data); +static void load_lighting_preset (GtkWidget *widget, + gpointer data); +static void load_preset_response (GtkFileChooser *chooser, + gint response_id, + gpointer data); +static void light_source_changed (GtkWidget *widget, + gpointer data); +static void apply_settings (PikaProcedureConfig *config); +static void isolate_selected_light (PikaProcedureConfig *config); /*****************************************/ /* Main window light type menu callback. */ /*****************************************/ static void -apply_settings (GtkWidget *widget, - gpointer data) +apply_settings (PikaProcedureConfig *config) { - gint valid; - gint type; - gint k = mapvals.light_selected; + gint k = mapvals.light_selected; + gchar *pos_x = g_strdup_printf (("light-position-x-%d"), k + 1); + gchar *pos_y = g_strdup_printf (("light-position-y-%d"), k + 1); + gchar *pos_z = g_strdup_printf (("light-position-z-%d"), k + 1); + gchar *dir_x = g_strdup_printf (("light-direction-x-%d"), k + 1); + gchar *dir_y = g_strdup_printf (("light-direction-y-%d"), k + 1); + gchar *dir_z = g_strdup_printf (("light-direction-z-%d"), k + 1); - if (mapvals.update_enabled) + switch (mapvals.lightsource[k].type) { - valid = pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (light_type_combo), - &type); - if (valid) - mapvals.lightsource[k].type = type; - - pika_color_button_get_color (PIKA_COLOR_BUTTON (colorbutton), - &mapvals.lightsource[k].color); - - mapvals.lightsource[k].position.x - = gtk_spin_button_get_value (GTK_SPIN_BUTTON(spin_pos_x)); - mapvals.lightsource[k].position.y - = gtk_spin_button_get_value (GTK_SPIN_BUTTON(spin_pos_y)); - mapvals.lightsource[k].position.z - = gtk_spin_button_get_value (GTK_SPIN_BUTTON(spin_pos_z)); - - mapvals.lightsource[k].direction.x - = gtk_spin_button_get_value (GTK_SPIN_BUTTON(spin_dir_x)); - mapvals.lightsource[k].direction.y - = gtk_spin_button_get_value (GTK_SPIN_BUTTON(spin_dir_y)); - mapvals.lightsource[k].direction.z - = gtk_spin_button_get_value (GTK_SPIN_BUTTON(spin_dir_z)); - - mapvals.lightsource[k].intensity - = gtk_spin_button_get_value (GTK_SPIN_BUTTON(spin_intensity)); - - interactive_preview_callback(NULL); + case NO_LIGHT: + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), pos_x, + FALSE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), pos_y, + FALSE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), pos_z, + FALSE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), dir_x, + FALSE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), dir_y, + FALSE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), dir_z, + FALSE, NULL, NULL, FALSE); + break; + case POINT_LIGHT: + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), pos_x, + TRUE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), pos_y, + TRUE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), pos_z, + TRUE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), dir_x, + FALSE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), dir_y, + FALSE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), dir_z, + FALSE, NULL, NULL, FALSE); + break; + case DIRECTIONAL_LIGHT: + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), pos_x, + FALSE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), pos_y, + FALSE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), pos_z, + FALSE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), dir_x, + TRUE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), dir_y, + TRUE, NULL, NULL, FALSE); + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (appwin), dir_z, + TRUE, NULL, NULL, FALSE); + break; + default: + break; } - if (widget == light_type_combo) - { - switch (mapvals.lightsource[k].type) - { - case NO_LIGHT: - gtk_widget_set_sensitive (spin_pos_x, FALSE); - gtk_widget_set_sensitive (spin_pos_y, FALSE); - gtk_widget_set_sensitive (spin_pos_z, FALSE); - gtk_widget_set_sensitive (spin_dir_x, FALSE); - gtk_widget_set_sensitive (spin_dir_y, FALSE); - gtk_widget_set_sensitive (spin_dir_z, FALSE); - break; - case POINT_LIGHT: - gtk_widget_set_sensitive (spin_pos_x, TRUE); - gtk_widget_set_sensitive (spin_pos_y, TRUE); - gtk_widget_set_sensitive (spin_pos_z, TRUE); - gtk_widget_set_sensitive (spin_dir_x, FALSE); - gtk_widget_set_sensitive (spin_dir_y, FALSE); - gtk_widget_set_sensitive (spin_dir_z, FALSE); - break; - case DIRECTIONAL_LIGHT: - gtk_widget_set_sensitive (spin_pos_x, FALSE); - gtk_widget_set_sensitive (spin_pos_y, FALSE); - gtk_widget_set_sensitive (spin_pos_z, FALSE); - gtk_widget_set_sensitive (spin_dir_x, TRUE); - gtk_widget_set_sensitive (spin_dir_y, TRUE); - gtk_widget_set_sensitive (spin_dir_z, TRUE); - break; - default: - break; - } - } -} - -static void -mapmenu2_callback (GtkWidget *widget, - gpointer data) -{ - pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (widget), (gint *) data); - - preview_compute (); - gtk_widget_queue_draw (previewarea); + g_free (pos_x); + g_free (pos_y); + g_free (pos_z); + g_free (dir_x); + g_free (dir_y); + g_free (dir_z); } /******************************************/ @@ -223,781 +150,16 @@ preview_callback (GtkWidget *widget) gtk_widget_queue_draw (previewarea); } - - - -/*********************************************/ -/* Main window "-" (zoom in) button callback */ -/*********************************************/ -/* static void -zoomout_callback (GtkWidget *widget) +update_preview (PikaProcedureConfig *config) { - mapvals.preview_zoom_factor *= 0.5; - draw_preview_image (TRUE); -} -*/ -/*********************************************/ -/* Main window "+" (zoom out) button callback */ -/*********************************************/ -/* -static void -zoomin_callback (GtkWidget *widget) -{ - mapvals.preview_zoom_factor *= 2.0; - draw_preview_image (TRUE); -} -*/ -/**********************************************/ -/* Main window "Apply" button callback. */ -/* Render to PIKA image, close down and exit. */ -/**********************************************/ + copy_from_config (config); + isolate_selected_light (config); -static gint -bumpmap_constrain (PikaImage *image, - PikaItem *item, - gpointer data) -{ - PikaDrawable *dr = pika_drawable_get_by_id (mapvals.drawable_id); + apply_settings (config); - return ((pika_drawable_get_width (PIKA_DRAWABLE (item)) == - pika_drawable_get_width (dr)) && - (pika_drawable_get_height (PIKA_DRAWABLE (item)) == - pika_drawable_get_height (dr))); -} - -static gint -envmap_constrain (PikaImage *image, - PikaItem *item, - gpointer data) -{ - return (! pika_drawable_is_gray (PIKA_DRAWABLE (item)) && - ! pika_drawable_has_alpha (PIKA_DRAWABLE (item))); -} - -static void -envmap_combo_callback (GtkWidget *widget, - gpointer data) -{ - PikaDrawable *env; - - pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (widget), - &mapvals.envmap_id); - - env = pika_drawable_get_by_id (mapvals.envmap_id); - - env_width = pika_drawable_get_width (env); - env_height = pika_drawable_get_height (env); -} - -/***********************/ -/* Dialog constructors */ -/***********************/ - -static GtkWidget * -create_options_page (void) -{ - GtkWidget *page; - GtkWidget *frame; - GtkWidget *vbox; - GtkWidget *toggle; - GtkWidget *scale; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - /* General options */ - - frame = pika_frame_new (_("General Options")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); - - toggle = gtk_check_button_new_with_mnemonic (_("T_ransparent background")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - mapvals.transparent_background); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - g_signal_connect (toggle, "toggled", - G_CALLBACK (toggle_update), - &mapvals.transparent_background); - gtk_widget_show (toggle); - - pika_help_set_help_data (toggle, - _("Make destination image transparent where bump " - "height is zero"),NULL); - - toggle = gtk_check_button_new_with_mnemonic (_("Cre_ate new image")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - mapvals.create_new_image); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &mapvals.create_new_image); - gtk_widget_show (toggle); - - pika_help_set_help_data (toggle, - _("Create a new image when applying filter"), NULL); - - toggle = gtk_check_button_new_with_mnemonic (_("High _quality preview")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - mapvals.previewquality); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - g_signal_connect (toggle, "toggled", - G_CALLBACK (toggle_update), - &mapvals.previewquality); - gtk_widget_show (toggle); - - pika_help_set_help_data (toggle, - _("Enable/disable high quality preview"), NULL); - - scale = pika_scale_entry_new (_("Distance:"), mapvals.viewpoint.z, 0.0, 2.0, 3); - pika_help_set_help_data (scale, - "Distance of observer from surface", - "plug-in-lighting"); - g_signal_connect (scale, "value-changed", - G_CALLBACK (distance_update), - NULL); - gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 12); - gtk_widget_show (scale); - - gtk_widget_show (page); - - return page; -} - -/******************************/ -/* Create light settings page */ -/******************************/ - -static GtkWidget * -create_light_page (void) -{ - GtkWidget *page; - GtkWidget *frame; - GtkWidget *grid; - GtkWidget *button; - GtkAdjustment *adj; - GtkWidget *label; - gint k = mapvals.light_selected; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - frame = pika_frame_new (_("Light Settings")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - lightselect_combo = pika_int_combo_box_new (_("Light 1"), 0, - _("Light 2"), 1, - _("Light 3"), 2, - _("Light 4"), 3, - _("Light 5"), 4, - _("Light 6"), 5, - NULL); - gtk_widget_set_margin_end (lightselect_combo, 12); - pika_int_combo_box_set_active (PIKA_INT_COMBO_BOX (lightselect_combo), k); - gtk_grid_attach (GTK_GRID (grid), lightselect_combo, 0, 0, 2, 1); - g_signal_connect (lightselect_combo, "changed", - G_CALLBACK (lightselect_callback), NULL); - gtk_widget_show (lightselect_combo); - - /* row labels */ - label = gtk_label_new (_("Type:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); - gtk_widget_show (label); - - label = gtk_label_new (_("Color:")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1); - gtk_widget_show (label); - - light_type_combo = - pika_int_combo_box_new (C_("light-source", "None"), NO_LIGHT, - _("Directional"), DIRECTIONAL_LIGHT, - _("Point"), POINT_LIGHT, - /* _("Spot"), SPOT_LIGHT, */ - NULL); - gtk_widget_set_margin_end (light_type_combo, 12); - pika_int_combo_box_set_active (PIKA_INT_COMBO_BOX (light_type_combo), - mapvals.lightsource[k].type); - gtk_grid_attach (GTK_GRID (grid), light_type_combo, 1, 1, 1, 1); - gtk_widget_show (light_type_combo); - - g_signal_connect (light_type_combo, "changed", - G_CALLBACK (apply_settings), - NULL); - - pika_help_set_help_data (light_type_combo, - _("Type of light source to apply"), NULL); - - colorbutton = pika_color_button_new (_("Select lightsource color"), - 64, 16, - &mapvals.lightsource[k].color, - PIKA_COLOR_AREA_FLAT); - gtk_widget_set_halign (colorbutton, GTK_ALIGN_START); - gtk_widget_set_margin_end (colorbutton, 12); - pika_color_button_set_update (PIKA_COLOR_BUTTON (colorbutton), TRUE); - gtk_widget_show (colorbutton); - gtk_grid_attach (GTK_GRID (grid), colorbutton, 1, 2, 1, 1); - - g_signal_connect (colorbutton, "color-changed", - G_CALLBACK (apply_settings), - NULL); - - pika_help_set_help_data (colorbutton, - _("Set light source color"), NULL); - - - spin_intensity = spin_button_new (&adj, - mapvals.lightsource[k].intensity, - 0.0, 100.0, - 0.01, 0.1, 0.0, 0.0, 2); - gtk_widget_set_halign (spin_intensity, GTK_ALIGN_START); - gtk_widget_set_margin_end (spin_intensity, 12); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 3, - _("_Intensity:"), 0.0, 0.5, - spin_intensity, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (apply_settings), - NULL); - - pika_help_set_help_data (spin_intensity, - _("Light intensity"), NULL); - - - label = gtk_label_new (_("Position")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 3, 0, 1, 1); - gtk_widget_show (label); - - spin_pos_x = spin_button_new (&adj, - mapvals.lightsource[k].position.x, - -100.0, 100.0, - 0.1, 1.0, 0.0, 0.0, 2); - gtk_widget_set_halign (spin_pos_x, GTK_ALIGN_START); - gtk_widget_set_margin_end (spin_pos_x, 12); - pika_grid_attach_aligned (GTK_GRID (grid), 2, 1, - _("_X:"), 0.0, 0.5, - spin_pos_x, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (apply_settings), - NULL); - - pika_help_set_help_data (spin_pos_x, - _("Light source X position in XYZ space"), NULL); - - spin_pos_y = spin_button_new (&adj, - mapvals.lightsource[k].position.y, - -100.0, 100.0, - 0.1, 1.0, 0.0, 0.0, 2); - gtk_widget_set_halign (spin_pos_y, GTK_ALIGN_START); - gtk_widget_set_margin_end (spin_pos_y, 12); - pika_grid_attach_aligned (GTK_GRID (grid), 2, 2, - _("_Y:"), 0.0, 0.5, - spin_pos_y, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (apply_settings), - NULL); - - pika_help_set_help_data (spin_pos_y, - _("Light source Y position in XYZ space"), NULL); - - spin_pos_z = spin_button_new (&adj, - mapvals.lightsource[k].position.z, - -100.0, 100.0, - 0.1, 1.0, 0.0, 0.0, 2); - gtk_widget_set_halign (spin_pos_z, GTK_ALIGN_START); - gtk_widget_set_margin_end (spin_pos_z, 12); - pika_grid_attach_aligned (GTK_GRID (grid), 2, 3, - _("_Z:"), 0.0, 0.5, - spin_pos_z, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (apply_settings), - NULL); - - pika_help_set_help_data (spin_pos_z, - _("Light source Z position in XYZ space"), NULL); - - - label = gtk_label_new (_("Direction")); - gtk_label_set_xalign (GTK_LABEL (label), 0.0); - gtk_grid_attach (GTK_GRID (grid), label, 5, 0, 1, 1); - gtk_widget_show (label); - - spin_dir_x = spin_button_new (&adj, - mapvals.lightsource[k].direction.x, - -100.0, 100.0, 0.1, 1.0, 0.0, 0.0, 2); - gtk_widget_set_halign (spin_dir_x, GTK_ALIGN_START); - pika_grid_attach_aligned (GTK_GRID (grid), 4, 1, - _("X:"), 0.0, 0.5, - spin_dir_x, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (apply_settings), - NULL); - - pika_help_set_help_data (spin_dir_x, - _("Light source X direction in XYZ space"), NULL); - - spin_dir_y = spin_button_new (&adj, - mapvals.lightsource[k].direction.y, - -100.0, 100.0, 0.1, 1.0, 0.0, 0.0, 2); - gtk_widget_set_halign (spin_dir_y, GTK_ALIGN_START); - pika_grid_attach_aligned (GTK_GRID (grid), 4, 2, - _("Y:"), 0.0, 0.5, - spin_dir_y, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (apply_settings), - NULL); - - pika_help_set_help_data (spin_dir_y, - _("Light source Y direction in XYZ space"), NULL); - - spin_dir_z = spin_button_new (&adj, - mapvals.lightsource[k].direction.z, - -100.0, 100.0, 0.1, 1.0, 0.0, 0.0, 2); - gtk_widget_set_halign (spin_dir_z, GTK_ALIGN_START); - pika_grid_attach_aligned (GTK_GRID (grid), 4, 3, - _("Z:"), 0.0, 0.5, - spin_dir_z, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (apply_settings), - NULL); - - pika_help_set_help_data (spin_dir_z, - _("Light source Z direction in XYZ space"), - NULL); - - isolate_button = gtk_check_button_new_with_mnemonic (_("I_solate")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (isolate_button), - mapvals.light_isolated); - g_signal_connect (isolate_button, "toggled", - G_CALLBACK (isolate_selected_light), - NULL); - gtk_grid_attach (GTK_GRID (grid), isolate_button, 0, 5, 1, 1); - gtk_widget_show (isolate_button); - - label = gtk_label_new (_("Lighting preset:")); - gtk_label_set_xalign (GTK_LABEL (label), 1.0); - gtk_grid_attach (GTK_GRID (grid), label, 0, 6, 2, 1); - gtk_widget_show (label); - - button = gtk_button_new_with_mnemonic (_("_Save")); - gtk_grid_attach (GTK_GRID (grid), button, 2, 6, 2, 1); - g_signal_connect (button, "clicked", - G_CALLBACK (save_lighting_preset), - NULL); - gtk_widget_show (button); - - button = gtk_button_new_with_mnemonic (_("_Open")); - gtk_grid_attach (GTK_GRID (grid), button, 4, 6, 2, 1); - g_signal_connect (button, "clicked", - G_CALLBACK (load_lighting_preset), - NULL); - gtk_widget_show (button); - - gtk_widget_show (page); - - return page; -} - -/*********************************/ -/* Create material settings page */ -/*********************************/ - -static GtkWidget * -create_material_page (void) -{ - GtkSizeGroup *group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - GtkWidget *page; - GtkWidget *frame; - GtkWidget *grid; - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *spinbutton; - GtkWidget *image; - GtkWidget *button; - GtkAdjustment *adj; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - frame = pika_frame_new (_("Material Properties")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_widget_set_halign (hbox, GTK_ALIGN_START); - gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_widget_show (hbox); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (hbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - /* Ambient intensity */ - - image = gtk_image_new_from_icon_name (LIGHTING_INTENSITY_AMBIENT_LOW, - GTK_ICON_SIZE_BUTTON); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("_Glowing:"), 0.0, 0.5, - image, 1); - gtk_size_group_add_widget (group, label); - - spinbutton = spin_button_new (&adj, mapvals.material.ambient_int, - 0, G_MAXFLOAT, 0.01, 0.1, 0.0, 0.0, 2); - gtk_grid_attach (GTK_GRID (grid), spinbutton, 2, 0, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (pika_double_adjustment_update), - &mapvals.material.ambient_int); - g_signal_connect (adj, "value-changed", - G_CALLBACK (interactive_preview_callback), - NULL); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); - pika_help_set_help_data (spinbutton, - _("Amount of original color to show where no " - "direct light falls"), NULL); - - image = gtk_image_new_from_icon_name (LIGHTING_INTENSITY_AMBIENT_HIGH, - GTK_ICON_SIZE_BUTTON); - gtk_grid_attach (GTK_GRID (grid), image, 3, 0, 1, 1); - gtk_widget_show (image); - - /* Diffuse intensity */ - - image = gtk_image_new_from_icon_name (LIGHTING_INTENSITY_DIFFUSE_LOW, - GTK_ICON_SIZE_BUTTON); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("_Bright:"), 0.0, 0.5, - image, 1); - gtk_size_group_add_widget (group, label); - - spinbutton = spin_button_new (&adj, mapvals.material.diffuse_int, - 0, G_MAXFLOAT, 0.01, 0.1, 0.0, 0.0, 2); - gtk_grid_attach (GTK_GRID (grid), spinbutton, 2, 1, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (pika_double_adjustment_update), - &mapvals.material.diffuse_int); - g_signal_connect (adj, "value-changed", - G_CALLBACK (interactive_preview_callback), - NULL); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); - pika_help_set_help_data (spinbutton, - _("Intensity of original color when lit by a light " - "source"), NULL); - - image = gtk_image_new_from_icon_name (LIGHTING_INTENSITY_DIFFUSE_HIGH, - GTK_ICON_SIZE_BUTTON); - gtk_grid_attach (GTK_GRID (grid), image, 3, 1, 1, 1); - gtk_widget_show (image); - - /* Specular reflection */ - - image = gtk_image_new_from_icon_name (LIGHTING_REFLECTIVITY_SPECULAR_LOW, - GTK_ICON_SIZE_BUTTON); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 2, - _("_Shiny:"), 0.0, 0.5, - image, 1); - gtk_size_group_add_widget (group, label); - - spinbutton = spin_button_new (&adj, mapvals.material.specular_ref, - 0, G_MAXFLOAT, 0.01, 0.1, 0.0, 0.0, 2); - gtk_grid_attach (GTK_GRID (grid), spinbutton, 2, 2, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (pika_double_adjustment_update), - &mapvals.material.specular_ref); - g_signal_connect (adj, "value-changed", - G_CALLBACK (interactive_preview_callback), - NULL); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); - pika_help_set_help_data (spinbutton, - _("Controls how intense the highlights will be"), - NULL); - - image = gtk_image_new_from_icon_name (LIGHTING_REFLECTIVITY_SPECULAR_HIGH, - GTK_ICON_SIZE_BUTTON); - gtk_grid_attach (GTK_GRID (grid), image, 3, 2, 1, 1); - gtk_widget_show (image); - - /* Highlight */ - image = gtk_image_new_from_icon_name (LIGHTING_REFLECTIVITY_HIGHLIGHT_LOW, - GTK_ICON_SIZE_BUTTON); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 3, - _("_Polished:"), 0.0, 0.5, - image, 1); - gtk_size_group_add_widget (group, label); - - spinbutton = spin_button_new (&adj, mapvals.material.highlight, - 0, G_MAXFLOAT, 0.01, 0.1, 0.0, 0.0, 2); - gtk_grid_attach (GTK_GRID (grid), spinbutton, 2, 3, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (pika_double_adjustment_update), - &mapvals.material.highlight); - g_signal_connect (adj, "value-changed", - G_CALLBACK (interactive_preview_callback), - NULL); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); - pika_help_set_help_data (spinbutton, - _("Higher values makes the highlights more focused"), - NULL); - - image = gtk_image_new_from_icon_name (LIGHTING_REFLECTIVITY_HIGHLIGHT_HIGH, - GTK_ICON_SIZE_BUTTON); - gtk_grid_attach (GTK_GRID (grid), image, 3, 3, 1, 1); - gtk_widget_show (image); - - /* Metallic */ - button = gtk_check_button_new_with_mnemonic (_("_Metallic")); - gtk_grid_attach (GTK_GRID (grid), button, 0, 4, 3, 1); - gtk_widget_show (button); - - g_signal_connect (button, "toggled", - G_CALLBACK (pika_toggle_button_update), - &mapvals.material.metallic); - g_signal_connect (button, "toggled", - G_CALLBACK (interactive_preview_callback), - NULL); - - gtk_widget_show (page); - - return page; -} - -/* Create Bump mapping page */ - -static GtkWidget * -create_bump_page (void) -{ - GtkWidget *page; - GtkWidget *toggle; - GtkWidget *frame; - GtkWidget *grid; - GtkWidget *combo; - GtkWidget *spinbutton; - GtkAdjustment *adj; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - frame = pika_frame_new (NULL); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - toggle = gtk_check_button_new_with_mnemonic (_("E_nable bump mapping")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - mapvals.bump_mapped); - gtk_frame_set_label_widget (GTK_FRAME (frame), toggle); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &mapvals.bump_mapped); - g_signal_connect (toggle, "toggled", - G_CALLBACK (interactive_preview_callback), - NULL); - - pika_help_set_help_data (toggle, - _("Enable/disable bump-mapping (image depth)"), - NULL); - - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - g_object_bind_property (toggle, "active", - grid, "sensitive", - G_BINDING_SYNC_CREATE); - - combo = pika_drawable_combo_box_new (bumpmap_constrain, NULL, NULL); - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), mapvals.bumpmap_id, - G_CALLBACK (pika_int_combo_box_get_active), - &mapvals.bumpmap_id, NULL); - - g_signal_connect (combo, "changed", - G_CALLBACK (mapmenu2_callback), - &mapvals.bumpmap_id); - - pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("Bumpm_ap image:"), 0.0, 0.5, - combo, 1); - - combo = pika_int_combo_box_new (_("Linear"), LINEAR_MAP, - _("Logarithmic"), LOGARITHMIC_MAP, - _("Sinusoidal"), SINUSOIDAL_MAP, - _("Spherical"), SPHERICAL_MAP, - NULL); - pika_int_combo_box_set_active (PIKA_INT_COMBO_BOX (combo), - mapvals.bumpmaptype); - - g_signal_connect (combo, "changed", - G_CALLBACK (mapmenu2_callback), - &mapvals.bumpmaptype); - - pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("Cu_rve:"), 0.0, 0.5, combo, 1); - - spinbutton = spin_button_new (&adj, mapvals.bumpmax, - 0, G_MAXFLOAT, 0.01, 0.1, 0.0, 0.0, 2); - gtk_widget_set_halign (spinbutton, GTK_ALIGN_START); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 2, - _("Ma_ximum height:"), 0.0, 0.5, - spinbutton, 1); - g_signal_connect (adj, "value-changed", - G_CALLBACK (pika_double_adjustment_update), - &mapvals.bumpmax); - g_signal_connect (adj, "value-changed", - G_CALLBACK (interactive_preview_callback), - NULL); - - pika_help_set_help_data (spinbutton, - _("Maximum height for bumps"), - NULL); - - gtk_widget_show (page); - - return page; -} - -static GtkWidget * -create_environment_page (void) -{ - GtkWidget *page; - GtkWidget *toggle; - GtkWidget *grid; - GtkWidget *frame; - GtkWidget *combo; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - frame = pika_frame_new (NULL); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - toggle = gtk_check_button_new_with_mnemonic (_("E_nable environment mapping")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - mapvals.env_mapped); - gtk_frame_set_label_widget (GTK_FRAME (frame), toggle); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &mapvals.env_mapped); - g_signal_connect (toggle, "toggled", - G_CALLBACK (interactive_preview_callback), - NULL); - - pika_help_set_help_data (toggle, - _("Enable/disable environment-mapping (reflection)"), - NULL); - - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - g_object_bind_property (toggle, "active", - grid, "sensitive", - G_BINDING_SYNC_CREATE); - - combo = pika_drawable_combo_box_new (envmap_constrain, NULL, NULL); - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), mapvals.envmap_id, - G_CALLBACK (envmap_combo_callback), - NULL, NULL); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("En_vironment image:"), 0.0, 0.5, - combo, 1); - - pika_help_set_help_data (combo, _("Environment image to use"), NULL); - - gtk_widget_show (page); - - return page; -} - -/*****************************/ -/* Create notebook and pages */ -/*****************************/ - -static void -create_main_notebook (GtkWidget *container) -{ - GtkWidget *page; - - options_note_book = GTK_NOTEBOOK (gtk_notebook_new ()); - gtk_container_add (GTK_CONTAINER (container), - GTK_WIDGET (options_note_book)); - - page = create_options_page (); - gtk_notebook_append_page (options_note_book, page, - gtk_label_new_with_mnemonic (_("Op_tions"))); - - page = create_light_page (); - gtk_notebook_append_page (options_note_book, page, - gtk_label_new_with_mnemonic (_("_Light"))); - - page = create_material_page (); - gtk_notebook_append_page (options_note_book, page, - gtk_label_new_with_mnemonic (_("_Material"))); - - page = create_bump_page (); - gtk_notebook_append_page (options_note_book, page, - gtk_label_new_with_mnemonic (_("_Bump Map"))); - - page = create_environment_page (); - gtk_notebook_append_page (options_note_book, page, - gtk_label_new_with_mnemonic (_("_Environment Map"))); - - /* - if (mapvals.bump_mapped == TRUE) - { - bump_page = create_bump_page (); - bump_page_pos = g_list_length (options_note_book->children); - gtk_notebook_append_page (options_note_book, bump_page, - gtk_label_new (_("Bumpmap"))); - } - - if (mapvals.env_mapped == TRUE) - { - env_page = create_environment_page (); - env_page_pos = g_list_length (options_note_book->children); - gtk_notebook_append_page (options_note_book, env_page, - gtk_label_new (_("Environment"))); - } - */ - gtk_widget_show (GTK_WIDGET (options_note_book)); + preview_compute (); + gtk_widget_queue_draw (previewarea); } /********************************/ @@ -1005,7 +167,9 @@ create_main_notebook (GtkWidget *container) /********************************/ gboolean -main_dialog (PikaDrawable *drawable) +main_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable) { GtkWidget *main_hbox; GtkWidget *vbox; @@ -1013,6 +177,8 @@ main_dialog (PikaDrawable *drawable) GtkWidget *frame; GtkWidget *button; GtkWidget *toggle; + GtkWidget *combo; + GtkWidget *image; gchar *path; gboolean run = FALSE; @@ -1031,34 +197,15 @@ main_dialog (PikaDrawable *drawable) lighting_icons_init (); - appwin = pika_dialog_new (_("Lighting Effects"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (appwin), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - pika_window_set_transient (GTK_WINDOW (appwin)); - - main_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (appwin))), - main_hbox, FALSE, FALSE, 0); - gtk_widget_show (main_hbox); + appwin = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Lighting Effects")); /* Create the Preview */ /* ================== */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); - gtk_widget_show (vbox); + gtk_widget_set_visible (vbox, TRUE); /* Add preview widget and various buttons to the first part */ /* ======================================================== */ @@ -1116,7 +263,432 @@ main_dialog (PikaDrawable *drawable) _("Enable/disable real time preview of changes"), NULL); - create_main_notebook (main_hbox); + /* PikaProcedureDialog begins here */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "options-tab", _("Op_tions"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "light-tab", _("_Light"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "material-tab", _("_Material"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "bump-map-tab", _("_Bump Map"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "environment-map-tab", _("_Environment Map"), + FALSE, TRUE); + + /* Options tab */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "general-options", _("General Options"), + FALSE, FALSE); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "distance", 1.0); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "general-box", + "transparent-background", + "new-image", + "antialiasing", + "distance", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "options-frame", + "general-options", FALSE, + "general-box"); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "options-box", + "options-frame", NULL); + + g_signal_connect (config, "notify::transparent-background", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::new-image", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::antialiasing", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::distance", + G_CALLBACK (update_preview), + config); + + /* Light tab */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "light-label", _("Light Settings"), + FALSE, FALSE); + + for (gint i = 1; i <= 6; i++) + { + gchar *temp_box; + gchar *temp_label; + gchar *temp_field_1; + gchar *temp_field_2; + gchar *temp_field_3; + gchar *temp_notify; + + temp_label = g_strdup_printf ("light-color-label-%d", i); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + temp_label, _("Color"), + FALSE, FALSE); + g_free (temp_label); + temp_label = g_strdup_printf ("light-position-label-%d", i); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + temp_label, _("Position"), + FALSE, FALSE); + g_free (temp_label); + temp_label = g_strdup_printf ("light-direction-label-%d", i); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + temp_label, _("Direction"), + FALSE, FALSE); + g_free (temp_label); + + temp_box = g_strdup_printf ("light-color-vbox-%d", i); + temp_label = g_strdup_printf ("light-color-label-%d", i); + temp_field_1 = g_strdup_printf ("light-type-%d", i); + temp_field_2 = g_strdup_printf ("light-color-%d", i); + temp_field_3 = g_strdup_printf ("light-intensity-%d", i); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), temp_box, + temp_label, + temp_field_1, + temp_field_2, + temp_field_3, + NULL); + + temp_notify = g_strdup_printf ("notify::%s", temp_field_1); + g_signal_connect (config, temp_notify, + G_CALLBACK (update_preview), + config); + g_free (temp_notify); + temp_notify = g_strdup_printf ("notify::%s", temp_field_2); + g_signal_connect (config, temp_notify, + G_CALLBACK (update_preview), + config); + g_free (temp_notify); + temp_notify = g_strdup_printf ("notify::%s", temp_field_3); + g_signal_connect (config, temp_notify, + G_CALLBACK (update_preview), + config); + g_free (temp_notify); + + g_free (temp_box); + g_free (temp_label); + g_free (temp_field_1); + g_free (temp_field_2); + g_free (temp_field_3); + + temp_box = g_strdup_printf ("light-position-vbox-%d", i); + temp_label = g_strdup_printf ("light-position-label-%d", i); + temp_field_1 = g_strdup_printf ("light-position-x-%d", i); + temp_field_2 = g_strdup_printf ("light-position-y-%d", i); + temp_field_3 = g_strdup_printf ("light-position-z-%d", i); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), temp_box, + temp_label, + temp_field_1, + temp_field_2, + temp_field_3, + NULL); + + temp_notify = g_strdup_printf ("notify::%s", temp_field_1); + g_signal_connect (config, temp_notify, + G_CALLBACK (update_preview), + config); + g_free (temp_notify); + temp_notify = g_strdup_printf ("notify::%s", temp_field_2); + g_signal_connect (config, temp_notify, + G_CALLBACK (update_preview), + config); + g_free (temp_notify); + temp_notify = g_strdup_printf ("notify::%s", temp_field_3); + g_signal_connect (config, temp_notify, + G_CALLBACK (update_preview), + config); + g_free (temp_notify); + + g_free (temp_box); + g_free (temp_label); + g_free (temp_field_1); + g_free (temp_field_2); + g_free (temp_field_3); + + temp_box = g_strdup_printf ("light-direction-vbox-%d", i); + temp_label = g_strdup_printf ("light-direction-label-%d", i); + temp_field_1 = g_strdup_printf ("light-direction-x-%d", i); + temp_field_2 = g_strdup_printf ("light-direction-y-%d", i); + temp_field_3 = g_strdup_printf ("light-direction-z-%d", i); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), temp_box, + temp_label, + temp_field_1, + temp_field_2, + temp_field_3, + NULL); + + temp_notify = g_strdup_printf ("notify::%s", temp_field_1); + g_signal_connect (config, temp_notify, + G_CALLBACK (update_preview), + config); + g_free (temp_notify); + temp_notify = g_strdup_printf ("notify::%s", temp_field_2); + g_signal_connect (config, temp_notify, + G_CALLBACK (update_preview), + config); + g_free (temp_notify); + temp_notify = g_strdup_printf ("notify::%s", temp_field_3); + g_signal_connect (config, temp_notify, + G_CALLBACK (update_preview), + config); + g_free (temp_notify); + + g_free (temp_box); + g_free (temp_label); + g_free (temp_field_1); + g_free (temp_field_2); + g_free (temp_field_3); + + temp_box = g_strdup_printf ("light-hbox-%d", i); + temp_field_1 = g_strdup_printf ("light-color-vbox-%d", i); + temp_field_2 = g_strdup_printf ("light-position-vbox-%d", i); + temp_field_3 = g_strdup_printf ("light-direction-vbox-%d", i); + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), temp_box, + temp_field_1, + temp_field_2, + temp_field_3, + NULL); + g_free (temp_box); + g_free (temp_field_1); + g_free (temp_field_2); + g_free (temp_field_3); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + } + + combo = pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (appwin), + "which-light", G_TYPE_NONE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "light-settings-box", + "which-light", + "light-hbox-1", + "light-hbox-2", + "light-hbox-3", + "light-hbox-4", + "light-hbox-5", + "light-hbox-6", + "isolate", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "light-frame", + "light-label", FALSE, + "light-settings-box"); + + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "preset-label", _("Lighting presets: "), + FALSE, FALSE); + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "preset-hbox", + "preset-label", NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + gtk_widget_set_halign (hbox, GTK_ALIGN_END); + + button = gtk_button_new_with_mnemonic (_("_Save")); + g_signal_connect (button, "clicked", + G_CALLBACK (save_lighting_preset), + NULL); + gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); + gtk_widget_set_visible (button, TRUE); + button = gtk_button_new_with_mnemonic (_("_Open")); + g_signal_connect (button, "clicked", + G_CALLBACK (load_lighting_preset), + NULL); + gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); + gtk_widget_set_visible (button, TRUE); + + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "light-box", + "light-frame", "preset-hbox", NULL); + + g_signal_connect (config, "notify::which-light", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::isolate", + G_CALLBACK (update_preview), + config); + + /* Material Tab */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "material-label", _("Material Properties"), + FALSE, FALSE); + + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "glowing-hbox", + "ambient-intensity", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + image = gtk_image_new_from_icon_name (LIGHTING_INTENSITY_AMBIENT_LOW, + GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_box_reorder_child (GTK_BOX (hbox), image, 0); + gtk_widget_set_visible (image, TRUE); + image = gtk_image_new_from_icon_name (LIGHTING_INTENSITY_AMBIENT_HIGH, + GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_set_visible (image, TRUE); + + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "bright-hbox", + "diffuse-intensity", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + image = gtk_image_new_from_icon_name (LIGHTING_INTENSITY_DIFFUSE_LOW, + GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_set_visible (image, TRUE); + gtk_box_reorder_child (GTK_BOX (hbox), image, 0); + image = gtk_image_new_from_icon_name (LIGHTING_INTENSITY_DIFFUSE_HIGH, + GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_set_visible (image, TRUE); + + + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "diffuse-reflect-hbox", + "diffuse-reflectivity", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + image = gtk_image_new_from_icon_name (LIGHTING_REFLECTIVITY_DIFFUSE_LOW, + GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_set_visible (image, TRUE); + gtk_box_reorder_child (GTK_BOX (hbox), image, 0); + image = gtk_image_new_from_icon_name (LIGHTING_REFLECTIVITY_DIFFUSE_HIGH, + GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_set_visible (image, TRUE); + + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "shiny-hbox", + "specular-reflectivity", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + image = gtk_image_new_from_icon_name (LIGHTING_REFLECTIVITY_SPECULAR_LOW, + GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_set_visible (image, TRUE); + gtk_box_reorder_child (GTK_BOX (hbox), image, 0); + image = gtk_image_new_from_icon_name (LIGHTING_REFLECTIVITY_SPECULAR_HIGH, + GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_set_visible (image, TRUE); + + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "polished-hbox", + "highlight", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + image = gtk_image_new_from_icon_name (LIGHTING_REFLECTIVITY_HIGHLIGHT_LOW, + GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_set_visible (image, TRUE); + gtk_box_reorder_child (GTK_BOX (hbox), image, 0); + image = gtk_image_new_from_icon_name (LIGHTING_REFLECTIVITY_HIGHLIGHT_HIGH, + GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_set_visible (image, TRUE); + + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "material-values-box", + "glowing-hbox", + "bright-hbox", + "diffuse-reflect-hbox", + "shiny-hbox", + "polished-hbox", + "metallic", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "material-frame", + "material-label", FALSE, + "material-values-box"); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "material-box", + "material-frame", NULL); + + g_signal_connect (config, "notify::ambient-intensity", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::diffuse-intensity", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::diffuse-reflectivity", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::specular-reflectivity", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::highlight", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::metallic", + G_CALLBACK (update_preview), + config); + + /* Bump Map Tab */ + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "bump-map-options-box", + "bump-drawable", + "bumpmap-type", + "bumpmap-max-height", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "bump-map-frame", + "do-bumpmap", FALSE, + "bump-map-options-box"); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "bump-map-box", + "bump-map-frame", + NULL); + + g_signal_connect (config, "notify::do-bumpmap", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::bump-drawable", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::bumpmap-type", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::bumpmap-max-height", + G_CALLBACK (update_preview), + config); + + /* Environment Map Tab */ + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "environment-map-frame", + "do-envmap", FALSE, + "env-drawable"); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "environment-map-box", + "environment-map-frame", + NULL); + + g_signal_connect (config, "notify::do-envmap", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::env-drawable", + G_CALLBACK (update_preview), + config); + + /* Create Notebook */ + pika_procedure_dialog_fill_notebook (PIKA_PROCEDURE_DIALOG (appwin), + "main-notebook", + "options-tab", "options-box", + "light-tab", "light-box", + "material-tab", "material-box", + "bump-map-tab", "bump-map-box", + "environment-map-tab", "environment-map-box", + NULL); + + light_source_changed (combo, config); + + /* Create overall layout */ + main_hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "main-hbox", + "main-notebook", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (main_hbox), + GTK_ORIENTATION_HORIZONTAL); + gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); + gtk_box_reorder_child (GTK_BOX (main_hbox), vbox, 0); + + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (appwin), "main-hbox", NULL); gtk_widget_show (appwin); @@ -1132,8 +704,11 @@ main_dialog (PikaDrawable *drawable) if (image_setup (drawable, TRUE)) preview_compute (); - if (pika_dialog_run (PIKA_DIALOG (appwin)) == GTK_RESPONSE_OK) - run = TRUE; + g_signal_connect (combo, "value-changed", + G_CALLBACK (light_source_changed), + config); + + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (appwin)); if (preview_rgb_data != NULL) g_free (preview_rgb_data); @@ -1447,111 +1022,76 @@ load_preset_response (GtkFileChooser *chooser, } g_free (filename); - - lightselect_callback (PIKA_INT_COMBO_BOX (lightselect_combo), NULL); } gtk_widget_destroy (GTK_WIDGET (chooser)); interactive_preview_callback (GTK_WIDGET (chooser)); } - static void -lightselect_callback (PikaIntComboBox *combo, - gpointer data) +light_source_changed (GtkWidget *widget, + gpointer data) { - gint valid; - gint j, k; + gint light_source; + gboolean isolate = FALSE; + PikaProcedureConfig *config = (PikaProcedureConfig *) data; - valid = pika_int_combo_box_get_active (combo, &k); + light_source = pika_procedure_config_get_choice_id (config, "which_light") + 1; + g_object_get (config, + "isolate", &isolate, + NULL); - if (valid) + for (gint i = 1; i <= 6; i++) { - mapvals.update_enabled = FALSE; /* prevent apply_settings() */ + GtkWidget *hbox; + gchar *temp_box; - mapvals.light_selected = k; - pika_int_combo_box_set_active (PIKA_INT_COMBO_BOX (light_type_combo), - mapvals.lightsource[k].type); - pika_color_button_set_color (PIKA_COLOR_BUTTON (colorbutton), - &mapvals.lightsource[k].color); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_pos_x), - mapvals.lightsource[k].position.x); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_pos_y), - mapvals.lightsource[k].position.y); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_pos_z), - mapvals.lightsource[k].position.z); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_dir_x), - mapvals.lightsource[k].direction.x); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_dir_y), - mapvals.lightsource[k].direction.y); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_dir_z), - mapvals.lightsource[k].direction.z); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(spin_intensity), - mapvals.lightsource[k].intensity); + temp_box = g_strdup_printf ("light-hbox-%d", i); + hbox = pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (appwin), + temp_box, G_TYPE_NONE); + g_free (temp_box); - mapvals.update_enabled = TRUE; + if (i == light_source) + gtk_widget_set_visible (hbox, TRUE); + else + gtk_widget_set_visible (hbox, FALSE); - /* if we are isolating a light, need to switch */ - if (mapvals.light_isolated) + if (isolate) { - for (j = 0; j < NUM_LIGHTS; j++) - if (j == mapvals.light_selected) - mapvals.lightsource[j].active = TRUE; - else - mapvals.lightsource[j].active = FALSE; + if (i == light_source) + mapvals.lightsource[i - 1].active = TRUE; + else + mapvals.lightsource[i - 1].active = FALSE; } - - interactive_preview_callback (NULL); } + + mapvals.light_selected = pika_procedure_config_get_choice_id (config, "which-light"); + apply_settings (config); + if (previewarea != NULL && GTK_IS_WIDGET (previewarea)) + update_preview (config); } static void -isolate_selected_light (GtkWidget *widget, - gpointer data) +isolate_selected_light (PikaProcedureConfig *config) { - gint k; + gint k; + gboolean isolate; - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + g_object_get (config, + "isolate", &isolate, + NULL); + + if (isolate) { - mapvals.light_isolated = TRUE; - for (k = 0; k < NUM_LIGHTS; k++) - if (k == mapvals.light_selected) + if (k == (mapvals.light_selected)) mapvals.lightsource[k].active = TRUE; else mapvals.lightsource[k].active = FALSE; } else { - mapvals.light_isolated = FALSE; - for (k = 0; k < NUM_LIGHTS; k++) mapvals.lightsource[k].active = TRUE; } - - interactive_preview_callback (NULL); -} - -static GtkWidget * -spin_button_new (GtkAdjustment **adjustment, /* return value */ - gdouble value, - gdouble lower, - gdouble upper, - gdouble step_increment, - gdouble page_increment, - gdouble page_size, - gdouble climb_rate, - guint digits) -{ - GtkWidget *spinbutton; - - *adjustment = gtk_adjustment_new (value, lower, upper, - step_increment, page_increment, 0); - - spinbutton = pika_spin_button_new (*adjustment, - climb_rate, digits); - - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - - return spinbutton; } diff --git a/plug-ins/lighting/lighting-ui.h b/plug-ins/lighting/lighting-ui.h index e255b25..ea58f49 100644 --- a/plug-ins/lighting/lighting-ui.h +++ b/plug-ins/lighting/lighting-ui.h @@ -16,6 +16,8 @@ extern GtkWidget *spin_dir_z; /* Externally visible functions */ /* ============================ */ -gboolean main_dialog (PikaDrawable *drawable); +gboolean main_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable); #endif /* __LIGHTING_UI_H__ */ diff --git a/plug-ins/map-object/map-object-apply.c b/plug-ins/map-object/map-object-apply.c index 6737737..4fb9dc5 100644 --- a/plug-ins/map-object/map-object-apply.c +++ b/plug-ins/map-object/map-object-apply.c @@ -326,3 +326,90 @@ compute_image (void) pika_image_undo_group_end (new_image); } + +void +copy_from_config (PikaProcedureConfig *config) +{ + PikaDrawable *box_front = NULL; + PikaDrawable *box_back = NULL; + PikaDrawable *box_top = NULL; + PikaDrawable *box_bottom = NULL; + PikaDrawable *box_left = NULL; + PikaDrawable *box_right = NULL; + PikaDrawable *cyl_top = NULL; + PikaDrawable *cyl_bottom = NULL; + + mapvals.maptype = pika_procedure_config_get_choice_id (config, "map-type"); + + mapvals.lightsource.type = + pika_procedure_config_get_choice_id (config, "light-type"); + + g_object_get (config, + "viewpoint-x", &mapvals.viewpoint.x, + "viewpoint-y", &mapvals.viewpoint.y, + "viewpoint-z", &mapvals.viewpoint.z, + "position-x", &mapvals.position.x, + "position-y", &mapvals.position.y, + "position-z", &mapvals.position.z, + "first-axis-x", &mapvals.firstaxis.x, + "first-axis-y", &mapvals.firstaxis.y, + "first-axis-z", &mapvals.firstaxis.z, + "second-axis-x", &mapvals.secondaxis.x, + "second-axis-y", &mapvals.secondaxis.y, + "second-axis-z", &mapvals.secondaxis.z, + "rotation-angle-x", &mapvals.alpha, + "rotation-angle-y", &mapvals.beta, + "rotation-angle-z", &mapvals.gamma, + "light-color", &mapvals.lightsource.color, + "light-position-x", &mapvals.lightsource.position.x, + "light-position-y", &mapvals.lightsource.position.y, + "light-position-z", &mapvals.lightsource.position.z, + "light-direction-x", &mapvals.lightsource.direction.x, + "light-direction-y", &mapvals.lightsource.direction.y, + "light-direction-z", &mapvals.lightsource.direction.z, + "ambient-intensity", &mapvals.material.ambient_int, + "diffuse-intensity", &mapvals.material.diffuse_int, + "diffuse-reflectivity", &mapvals.material.diffuse_ref, + "specular-reflectivity", &mapvals.material.specular_ref, + "highlight", &mapvals.material.highlight, + "antialiasing", &mapvals.antialiasing, + "depth", &mapvals.maxdepth, + "threshold", &mapvals.pixelthreshold, + "tiled", &mapvals.tiled, + "new-image", &mapvals.create_new_image, + "new-layer", &mapvals.create_new_layer, + "transparent-background", &mapvals.transparent_background, + "sphere-radius", &mapvals.radius, + "box-front-drawable", &box_front, + "box-back-drawable", &box_back, + "box-top-drawable", &box_top, + "box-bottom-drawable", &box_bottom, + "box-left-drawable", &box_left, + "box-right-drawable", &box_right, + "x-scale", &mapvals.scale.x, + "y-scale", &mapvals.scale.y, + "z-scale", &mapvals.scale.z, + "cyl-top-drawable", &cyl_top, + "cyl-bottom-drawable", &cyl_bottom, + "cylinder-radius", &mapvals.cylinder_radius, + "cylinder-length", &mapvals.cylinder_length, + NULL); + + if (box_front) + mapvals.boxmap_id[0] = pika_item_get_id (PIKA_ITEM (box_front)); + if (box_back) + mapvals.boxmap_id[1] = pika_item_get_id (PIKA_ITEM (box_back)); + if (box_top) + mapvals.boxmap_id[2] = pika_item_get_id (PIKA_ITEM (box_top)); + if (box_bottom) + mapvals.boxmap_id[3] = pika_item_get_id (PIKA_ITEM (box_bottom)); + if (box_left) + mapvals.boxmap_id[4] = pika_item_get_id (PIKA_ITEM (box_left)); + if (box_right) + mapvals.boxmap_id[5] = pika_item_get_id (PIKA_ITEM (box_right)); + + if (cyl_top) + mapvals.cylindermap_id[0] = pika_item_get_id (PIKA_ITEM (cyl_top)); + if (cyl_bottom) + mapvals.cylindermap_id[0] = pika_item_get_id (PIKA_ITEM (cyl_bottom)); +} diff --git a/plug-ins/map-object/map-object-apply.h b/plug-ins/map-object/map-object-apply.h index 7b06eda..e87a6f6 100644 --- a/plug-ins/map-object/map-object-apply.h +++ b/plug-ins/map-object/map-object-apply.h @@ -4,7 +4,8 @@ extern gdouble imat[4][4]; extern gfloat rotmat[16]; -void init_compute (void); -void compute_image (void); +void init_compute (void); +void compute_image (void); +void copy_from_config (PikaProcedureConfig *config); #endif /* __MAPOBJECT_APPLY_H__ */ diff --git a/plug-ins/map-object/map-object-image.c b/plug-ins/map-object/map-object-image.c index f17021a..3bf662d 100644 --- a/plug-ins/map-object/map-object-image.c +++ b/plug-ins/map-object/map-object-image.c @@ -311,12 +311,19 @@ get_cylinder_image_color (gint image, /****************************************/ gint -image_setup (PikaDrawable *drawable, - gint interactive) +image_setup (PikaDrawable *drawable, + gint interactive, + PikaProcedureConfig *config) { + gboolean transparent_background; + input_drawable = drawable; output_drawable = drawable; + g_object_get (config, + "transparent_background", &transparent_background, + NULL); + if (! pika_drawable_mask_intersect (drawable, &border_x, &border_y, &border_w, &border_h)) return FALSE; @@ -328,7 +335,7 @@ image_setup (PikaDrawable *drawable, maxcounter = (glong) width * (glong) height; - if (mapvals.transparent_background == TRUE) + if (transparent_background == TRUE) { pika_rgba_set (&background, 0.0, 0.0, 0.0, 0.0); } diff --git a/plug-ins/map-object/map-object-image.h b/plug-ins/map-object/map-object-image.h index 20ac13c..4da56bc 100644 --- a/plug-ins/map-object/map-object-image.h +++ b/plug-ins/map-object/map-object-image.h @@ -31,7 +31,9 @@ extern gint border_x1, border_y1, border_x2, border_y2; /* ============================ */ extern gint image_setup (PikaDrawable *drawable, - gint interactive); + gint interactive, + PikaProcedureConfig + *config); extern glong in_xy_to_index (gint x, gint y); extern glong out_xy_to_index (gint x, diff --git a/plug-ins/map-object/map-object-main.c b/plug-ins/map-object/map-object-main.c index 2170791..5c44a2c 100644 --- a/plug-ins/map-object/map-object-main.c +++ b/plug-ins/map-object/map-object-main.c @@ -53,7 +53,7 @@ struct _MapClass #define MAP_TYPE (map_get_type ()) -#define MAP (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAP_TYPE, Map)) +#define MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAP_TYPE, Map)) GType map_get_type (void) G_GNUC_CONST; @@ -66,7 +66,7 @@ static PikaValueArray * map_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void set_default_settings (void); @@ -111,8 +111,8 @@ map_create_procedure (PikaPlugIn *plug_in, PikaRGB white = { 1.0, 1.0, 1.0, 1.0 }; procedure = pika_image_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - map_run, NULL, NULL); + PIKA_PDB_PROC_TYPE_PLUGIN, + map_run, NULL, NULL); pika_procedure_set_image_types (procedure, "RGB*"); pika_procedure_set_sensitivity_mask (procedure, @@ -131,261 +131,298 @@ map_create_procedure (PikaPlugIn *plug_in, "Tom Bech & Federico Mena Quintero", "Version 1.2.0, July 16 1998"); - PIKA_PROC_ARG_INT (procedure, "map-type", - "Map type", - "Type of mapping (0=plane, 1=sphere, 2=box, " - "3=cylinder)", - 0, 2, MAP_PLANE, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "map-type", + _("Map _to"), + _("Type of mapping"), + pika_choice_new_with_values ("map-plane", MAP_PLANE, _("Plane"), NULL, + "map-sphere", MAP_SPHERE, _("Sphere"), NULL, + "map-box", MAP_BOX, _("Box"), NULL, + "map-cylinder", MAP_CYLINDER, _("Cylinder"), NULL, + NULL), + "map-plane", + G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "viewpoint-x", - "Viewpoint X", - "Position of viewpoint (x,y,z)", + _("X"), + _("Position of viewpoint (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, 0.5, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "viewpoint-y", - "Viewpoint Y", - "Position of viewpoint (x,y,z)", + _("Y"), + _("Position of viewpoint (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, 0.5, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "viewpoint-z", - "Viewpoint Z", - "Position of viewpoint (x,y,z)", + _("Z"), + _("Position of viewpoint (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, 2.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "position-x", - "Position X", - "Object position (x,y,z)", - -G_MAXDOUBLE, G_MAXDOUBLE, 0.5, + _("Position X"), + _("Object position (x,y,z)"), + -1.0, 2.0, 0.5, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "position-y", - "Position Y", - "Object position (x,y,z)", - -G_MAXDOUBLE, G_MAXDOUBLE, 0.5, + _("Position Y"), + _("Object position (x,y,z)"), + -1.0, 2.0, 0.5, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "position-z", - "Position Z", - "Object position (x,y,z)", - -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + _("Position Z"), + _("Object position (x,y,z)"), + -1.0, 2.0, 0.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "first-axis-x", - "First axis X", - "First axis of object (x,y,z)", - -G_MAXDOUBLE, G_MAXDOUBLE, 1.0, + _("X"), + _("First axis of object (x,y,z)"), + -1.0, 2.0, 1.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "first-axis-y", - "First axis y", - "First axis of object (x,y,z)", - -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + _("y"), + _("First axis of object (x,y,z)"), + -1.0, 2.0, 0.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "first-axis-z", - "First axis Z", - "First axis of object (x,y,z)", - -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + _("Z"), + _("First axis of object (x,y,z)"), + -1.0, 2.0, 0.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "second-axis-x", - "Second axis X", - "Second axis of object (x,y,z)", - -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + _("X"), + _("Second axis of object (x,y,z)"), + -1.0, 2.0, 0.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "second-axis-y", - "Second axis Y", - "Second axis of object (x,y,z)", - -G_MAXDOUBLE, G_MAXDOUBLE, 1.0, + _("Y"), + _("Second axis of object (x,y,z)"), + -1.0, 2.0, 1.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "second-axis-z", - "Second axis Z", - "Second axis of object (x,y,z)", - -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + _("Z"), + _("Second axis of object (x,y,z)"), + -1.0, 2.0, 0.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "rotation-angle-x", - "Rotation angle X", - "Rotation about X axis in degrees", - -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + _("Angle X"), + _("Rotation about X axis in degrees"), + -180, 180, 0.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "rotation-angle-y", - "Rotation angle Y", - "Rotation about Y axis in degrees", - -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + _("Angle Y"), + _("Rotation about Y axis in degrees"), + -180, 180, 0.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "rotation-angle-z", - "Rotation angle Z", - "Rotation about Z axis in degrees", - -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, + _("Angle Z"), + _("Rotation about Z axis in degrees"), + -180, 180, 0.0, G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "light-type", - "Light type", - "Type of lightsource (0=point, 1=directional, 2=none)", - 0, 2, POINT_LIGHT, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "light-type", + _("Light source type"), + _("Type of lightsource"), + pika_choice_new_with_values ("point-light", POINT_LIGHT, _("Point Light"), NULL, + "directional-light", DIRECTIONAL_LIGHT, _("Directional Light"), NULL, + "no-light", NO_LIGHT, _("No Light"), NULL, + NULL), + "point-light", + G_PARAM_READWRITE); PIKA_PROC_ARG_RGB (procedure, "light-color", - "Light color", - "Light source color", + _("Light source _color"), + _("Light source color"), TRUE, &white, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "light-position-x", - "Light position X", - "Light source position (x,y,z)", + _("Light position X"), + _("Light source position (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, -0.5, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "light-position-y", - "Light position Y", - "Light source position (x,y,z)", + _("Light position Y"), + _("Light source position (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, -0.5, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "light-position-z", - "Light position Z", - "Light source position (x,y,z)", + _("Light position Z"), + _("Light source position (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, 2.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "light-direction-x", - "Light direction X", - "Light source direction (x,y,z)", + _("Light direction X"), + _("Light source direction (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, -1.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "light-direction-y", - "Light direction Y", - "Light source direction (x,y,z)", + _("Light direction Y"), + _("Light source direction (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, -1.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "light-direction-z", - "Light direction Z", - "Light source direction (x,y,z)", + _("Light direction Z"), + _("Light source direction (x,y,z)"), -G_MAXDOUBLE, G_MAXDOUBLE, 1.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "ambient-intensity", - "Ambient intensity", - "Material ambient intensity", + _("Ambie_nt"), + _("Material ambient intensity"), 0, 1, 0.3, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "diffuse-intensity", - "Diffuse intensity", - "Material diffuse intensity", + _("D_iffuse"), + _("Material diffuse intensity"), 0, 1, 1.0, G_PARAM_READWRITE); + /* Reflectivity */ PIKA_PROC_ARG_DOUBLE (procedure, "diffuse-reflectivity", - "Diffuse reflectivity", - "Material diffuse reflectivity", + _("Di_ffuse"), + _("Material diffuse reflectivity"), 0, 1, 0.5, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "specular-reflectivity", - "Specular reflectivity", - "Material specular reflectivity", + _("Spec_ular"), + _("Material specular reflectivity"), 0, 1, 0.5, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "highlight", - "Highlight", - "Material highlight (note, it's exponential)", + _("Highligh_t"), + _("Material highlight " + "(note, it's exponential)"), 0, G_MAXDOUBLE, 27.0, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "antialiasing", - "Antialiasing", - "Apply antialiasing", + _("Antialia_sing"), + _("Apply antialiasing"), TRUE, G_PARAM_READWRITE); + PIKA_PROC_ARG_DOUBLE (procedure, "depth", + _("_Depth"), + _("Antialiasing quality. Higher is better, " + "but slower"), + 1.0, 5.0, 3.0, + G_PARAM_READWRITE); + PIKA_PROC_ARG_DOUBLE (procedure, "threshold", + _("Thr_eshold"), + _("Stop when pixel differences are smaller than " + "this value"), + 0.001, 1000.0, 0.250, + G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "tiled", - "Tiled", - "Tile source image", + _("_Tile source image"), + _("Tile source image"), FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "new-image", - "New image", - "Create a new image", + _("Create _new image"), + _("Create a new image"), + FALSE, + G_PARAM_READWRITE); + + PIKA_PROC_ARG_BOOLEAN (procedure, "new-layer", + _("Create ne_w layer"), + _("Create a new layer when applying filter"), FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "transparent-background", - "Transparent background", - "Make background transparent", + _("Transparent bac_kground"), + _("Make background transparent"), FALSE, G_PARAM_READWRITE); - PIKA_PROC_ARG_DOUBLE (procedure, "radius", - "Radius", - "Sphere/cylinder radius (only used when " - "maptype=1 or 3)", - 0, G_MAXDOUBLE, 0.25, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_DOUBLE (procedure, "x-scale", - "X scale", - "Box X size", - 0, G_MAXDOUBLE, 0.5, - G_PARAM_READWRITE); - PIKA_PROC_ARG_DOUBLE (procedure, "y-scale", - "Y scale", - "Box Y size", - 0, G_MAXDOUBLE, 0.5, - G_PARAM_READWRITE); - PIKA_PROC_ARG_DOUBLE (procedure, "z-scale", - "Z scale", - "Box Z size", - 0, G_MAXDOUBLE, 0.5, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_DOUBLE (procedure, "cylinder-length", - "Cylinder length", - "Cylinder length", + /* Sphere Options */ + PIKA_PROC_ARG_DOUBLE (procedure, "sphere-radius", + _("Radi_us"), + _("Sphere radius"), 0, G_MAXDOUBLE, 0.25, G_PARAM_READWRITE); + /* Box Options */ PIKA_PROC_ARG_DRAWABLE (procedure, "box-front-drawable", - "Box front drawable", - "Box front face (set these to NULL if not used)", + _("Fro_nt"), + _("Box front face " + "(set this to NULL if not used)"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DRAWABLE (procedure, "box-back-drawable", - "Box back drawable", - "Box back face", + _("B_ack"), + _("Box back face"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DRAWABLE (procedure, "box-top-drawable", - "Box top drawable", - "Box top face", + _("To_p"), + _("Box top face"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DRAWABLE (procedure, "box-bottom-drawable", - "Box bottom drawable", - "Box bottom face", + _("Bo_ttom"), + _("Box bottom face"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DRAWABLE (procedure, "box-left-drawable", - "Box left drawable", - "Box left face", + _("Le_ft"), + _("Box left face"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DRAWABLE (procedure, "box-right-drawable", - "Box right drawable", - "Box right face", + _("Ri_ght"), + _("Box right face"), TRUE, G_PARAM_READWRITE); + PIKA_PROC_ARG_DOUBLE (procedure, "x-scale", + _("Scale X"), + _("Box X size"), + 0, G_MAXDOUBLE, 0.5, + G_PARAM_READWRITE); + PIKA_PROC_ARG_DOUBLE (procedure, "y-scale", + _("Scale Y"), + _("Box Y size"), + 0, G_MAXDOUBLE, 0.5, + G_PARAM_READWRITE); + PIKA_PROC_ARG_DOUBLE (procedure, "z-scale", + _("Scale Z"), + _("Box Z size"), + 0, G_MAXDOUBLE, 0.5, + G_PARAM_READWRITE); + + /* Cylinder options */ PIKA_PROC_ARG_DRAWABLE (procedure, "cyl-top-drawable", - "Cyl top drawable", - "Cylinder top face (set these to NULL if not used)", + _("_Top"), + _("Cylinder top face " + "(set this to NULL if not used)"), TRUE, G_PARAM_READWRITE); PIKA_PROC_ARG_DRAWABLE (procedure, "cyl-bottom-drawable", - "Cyl bottom drawable", - "Cylinder bottom face", + _("_Bottom"), + _("Cylinder bottom face " + "(set this to NULL if not used)"), TRUE, G_PARAM_READWRITE); + PIKA_PROC_ARG_DOUBLE (procedure, "cylinder-radius", + _("Radi_us"), + _("Cylinder radius"), + 0, G_MAXDOUBLE, 0.25, + G_PARAM_READWRITE); + PIKA_PROC_ARG_DOUBLE (procedure, "cylinder-length", + _("Cylin_der length"), + _("Cylinder length"), + 0, G_MAXDOUBLE, 0.25, + G_PARAM_READWRITE); } return procedure; @@ -478,11 +515,10 @@ map_run (PikaProcedure *procedure, PikaImage *_image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; - gint i; gegl_init (NULL, NULL); @@ -510,97 +546,44 @@ map_run (PikaProcedure *procedure, switch (run_mode) { case PIKA_RUN_INTERACTIVE: - pika_get_data (PLUG_IN_PROC, &mapvals); check_drawables (drawable); - if (! main_dialog (drawable)) + if (! main_dialog (procedure, config, drawable)) { return pika_procedure_new_return_values (procedure, PIKA_PDB_CANCEL, NULL); } + copy_from_config (config); compute_image (); - - pika_set_data (PLUG_IN_PROC, &mapvals, sizeof (MapObjectValues)); break; case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (PLUG_IN_PROC, &mapvals); check_drawables (drawable); - if (! image_setup (drawable, FALSE)) + if (! image_setup (drawable, FALSE, config)) { return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } + copy_from_config (config); compute_image (); break; case PIKA_RUN_NONINTERACTIVE: - mapvals.maptype = PIKA_VALUES_GET_INT (args, 0); - mapvals.viewpoint.x = PIKA_VALUES_GET_DOUBLE (args, 1); - mapvals.viewpoint.y = PIKA_VALUES_GET_DOUBLE (args, 2); - mapvals.viewpoint.z = PIKA_VALUES_GET_DOUBLE (args, 3); - mapvals.position.x = PIKA_VALUES_GET_DOUBLE (args, 4); - mapvals.position.y = PIKA_VALUES_GET_DOUBLE (args, 5); - mapvals.position.z = PIKA_VALUES_GET_DOUBLE (args, 6); - mapvals.firstaxis.x = PIKA_VALUES_GET_DOUBLE (args, 7); - mapvals.firstaxis.y = PIKA_VALUES_GET_DOUBLE (args, 8); - mapvals.firstaxis.z = PIKA_VALUES_GET_DOUBLE (args, 9); - mapvals.secondaxis.x = PIKA_VALUES_GET_DOUBLE (args, 10); - mapvals.secondaxis.y = PIKA_VALUES_GET_DOUBLE (args, 11); - mapvals.secondaxis.z = PIKA_VALUES_GET_DOUBLE (args, 12); - mapvals.alpha = PIKA_VALUES_GET_DOUBLE (args, 13); - mapvals.beta = PIKA_VALUES_GET_DOUBLE (args, 14); - mapvals.gamma = PIKA_VALUES_GET_DOUBLE (args, 15); - mapvals.lightsource.type = PIKA_VALUES_GET_INT (args, 16); - - PIKA_VALUES_GET_RGB (args, 17, &mapvals.lightsource.color); - - mapvals.lightsource.position.x = PIKA_VALUES_GET_DOUBLE (args, 18); - mapvals.lightsource.position.y = PIKA_VALUES_GET_DOUBLE (args, 19); - mapvals.lightsource.position.z = PIKA_VALUES_GET_DOUBLE (args, 20); - mapvals.lightsource.direction.x = PIKA_VALUES_GET_DOUBLE (args, 21); - mapvals.lightsource.direction.y = PIKA_VALUES_GET_DOUBLE (args, 22); - mapvals.lightsource.direction.z = PIKA_VALUES_GET_DOUBLE (args, 23); - mapvals.material.ambient_int = PIKA_VALUES_GET_DOUBLE (args, 24); - mapvals.material.diffuse_int = PIKA_VALUES_GET_DOUBLE (args, 25); - mapvals.material.diffuse_ref = PIKA_VALUES_GET_DOUBLE (args, 26); - mapvals.material.specular_ref = PIKA_VALUES_GET_DOUBLE (args, 27); - mapvals.material.highlight = PIKA_VALUES_GET_DOUBLE (args, 28); - mapvals.antialiasing = PIKA_VALUES_GET_BOOLEAN (args, 29); - mapvals.tiled = PIKA_VALUES_GET_BOOLEAN (args, 30); - mapvals.create_new_image = PIKA_VALUES_GET_BOOLEAN (args, 31); - mapvals.transparent_background = PIKA_VALUES_GET_BOOLEAN (args, 32); - mapvals.radius = - mapvals.cylinder_radius = PIKA_VALUES_GET_DOUBLE (args, 33); - mapvals.scale.x = PIKA_VALUES_GET_DOUBLE (args, 34); - mapvals.scale.y = PIKA_VALUES_GET_DOUBLE (args, 35); - mapvals.scale.z = PIKA_VALUES_GET_DOUBLE (args, 36); - mapvals.cylinder_length = PIKA_VALUES_GET_DOUBLE (args, 37); - - for (i = 0; i < 6; i++) - { - mapvals.boxmap_id[i] = PIKA_VALUES_GET_DRAWABLE_ID (args, 38 + i); - } - - for (i = 0; i < 2; i++) - { - mapvals.cylindermap_id[i] = PIKA_VALUES_GET_DRAWABLE_ID (args, 44 + i); - } - check_drawables (drawable); - if (! image_setup (drawable, FALSE)) + if (! image_setup (drawable, FALSE, config)) { return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } + copy_from_config (config); compute_image (); break; } diff --git a/plug-ins/map-object/map-object-ui.c b/plug-ins/map-object/map-object-ui.c index d85757e..9b635eb 100644 --- a/plug-ins/map-object/map-object-ui.c +++ b/plug-ins/map-object/map-object-ui.c @@ -18,7 +18,7 @@ #include "libpika/stdplugins-intl.h" -GtkWidget *previewarea = NULL; +GtkWidget *previewarea = NULL; static GtkWidget *appwin = NULL; static GtkNotebook *options_note_book = NULL; @@ -28,45 +28,31 @@ static GtkWidget *dirlightwid; static GtkAdjustment *xadj, *yadj, *zadj; -static GtkWidget *box_page = NULL; -static GtkWidget *cylinder_page = NULL; +static GtkWidget *sphere_page = NULL; +static GtkWidget *box_page = NULL; +static GtkWidget *cylinder_page = NULL; static guint left_button_pressed = FALSE; static guint light_hit = FALSE; -static void create_main_notebook (GtkWidget *container); - -static gint preview_events (GtkWidget *area, - GdkEvent *event); +static gint preview_events (GtkWidget *area, + GdkEvent *event); static void update_light_pos_entries (void); -static void double_adjustment_update (GtkAdjustment *adjustment, - gpointer data); +static void update_preview (PikaProcedureConfig *config); +static void double_adjustment_update (GtkAdjustment *adjustment, + gpointer data); -static void toggle_update (GtkWidget *widget, - gpointer data); +static void toggle_update (GtkWidget *widget, + gpointer data); -static void lightmenu_callback (GtkWidget *widget, - gpointer data); +static void lightmenu_callback (GtkWidget *widget, + gpointer data); -static void preview_callback (GtkWidget *widget, - gpointer data); - -static gint box_constrain (PikaImage *image, - PikaItem *item, - gpointer data); -static gint cylinder_constrain (PikaImage *image, - PikaItem *item, - gpointer data); - -static GtkWidget * create_options_page (void); -static GtkWidget * create_light_page (void); -static GtkWidget * create_material_page (void); -static GtkWidget * create_orientation_page (void); -static GtkWidget * create_box_page (void); -static GtkWidget * create_cylinder_page (void); +static void preview_callback (GtkWidget *widget, + gpointer data); /******************************************************/ @@ -74,10 +60,9 @@ static GtkWidget * create_cylinder_page (void); /******************************************************/ static void -scale_entry_update_double (PikaLabelSpin *entry, - gdouble *value) +update_preview (PikaProcedureConfig *config) { - *value = pika_label_spin_get_value (entry); + copy_from_config (config); if (mapvals.livepreview) compute_preview_image (); @@ -150,31 +135,30 @@ static void lightmenu_callback (GtkWidget *widget, gpointer data) { - int active; + int light_type; + PikaProcedureConfig *config = (PikaProcedureConfig *) data; - pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (widget), - &active); + light_type = pika_procedure_config_get_choice_id (config, "light-type"); - mapvals.lightsource.type = active; - - if (mapvals.lightsource.type == POINT_LIGHT) + if (light_type == POINT_LIGHT) { - gtk_widget_hide (dirlightwid); - gtk_widget_show (pointlightwid); + gtk_widget_set_visible (dirlightwid, FALSE); + gtk_widget_set_visible (pointlightwid, TRUE); } - else if (mapvals.lightsource.type == DIRECTIONAL_LIGHT) + else if (light_type == DIRECTIONAL_LIGHT) { - gtk_widget_hide (pointlightwid); - gtk_widget_show (dirlightwid); + gtk_widget_set_visible (dirlightwid, TRUE); + gtk_widget_set_visible (pointlightwid, FALSE); } else { - gtk_widget_hide (pointlightwid); - gtk_widget_hide (dirlightwid); + gtk_widget_set_visible (dirlightwid, FALSE); + gtk_widget_set_visible (pointlightwid, FALSE); } if (mapvals.livepreview) { + copy_from_config (config); compute_preview_image (); gtk_widget_queue_draw (previewarea); } @@ -188,67 +172,28 @@ static void mapmenu_callback (GtkWidget *widget, gpointer data) { - int active; + int map_type; + PikaProcedureConfig *config = (PikaProcedureConfig *) data; - pika_int_combo_box_get_active (PIKA_INT_COMBO_BOX (widget), - &active); - - mapvals.maptype = active; + map_type = pika_procedure_config_get_choice_id (config, "map-type"); if (mapvals.livepreview) { + copy_from_config (config); compute_preview_image (); gtk_widget_queue_draw (previewarea); } - if (mapvals.maptype == MAP_BOX) - { - if (cylinder_page && gtk_widget_get_parent (GTK_WIDGET (cylinder_page)) == - GTK_WIDGET (options_note_book)) - { - gtk_container_remove (GTK_CONTAINER (options_note_book), cylinder_page); - } + gtk_widget_set_visible (sphere_page, FALSE); + gtk_widget_set_visible (box_page, FALSE); + gtk_widget_set_visible (cylinder_page, FALSE); - if (!box_page) - { - box_page = create_box_page (); - g_object_ref (box_page); - } - gtk_notebook_append_page (options_note_book, - box_page, - gtk_label_new_with_mnemonic (_("_Box"))); - } - else if (mapvals.maptype == MAP_CYLINDER) - { - if (box_page && gtk_widget_get_parent (GTK_WIDGET (box_page)) == - GTK_WIDGET (options_note_book)) - { - gtk_container_remove (GTK_CONTAINER (options_note_book), box_page); - } - - if (!cylinder_page) - { - cylinder_page = create_cylinder_page (); - g_object_ref (cylinder_page); - } - gtk_notebook_append_page (options_note_book, - cylinder_page, - gtk_label_new_with_mnemonic (_("C_ylinder"))); - } - else - { - if (box_page && gtk_widget_get_parent (GTK_WIDGET (box_page)) == - GTK_WIDGET (options_note_book)) - { - gtk_container_remove (GTK_CONTAINER (options_note_book), box_page); - } - - if (cylinder_page && gtk_widget_get_parent (GTK_WIDGET (cylinder_page)) == - GTK_WIDGET (options_note_book)) - { - gtk_container_remove (GTK_CONTAINER (options_note_book), cylinder_page); - } - } + if (map_type == MAP_SPHERE) + gtk_widget_set_visible (sphere_page, TRUE); + else if (map_type == MAP_BOX) + gtk_widget_set_visible (box_page, TRUE); + else if (map_type == MAP_CYLINDER) + gtk_widget_set_visible (cylinder_page, TRUE); } /******************************************/ @@ -259,6 +204,9 @@ static void preview_callback (GtkWidget *widget, gpointer data) { + PikaProcedureConfig *config = (PikaProcedureConfig *) data; + + copy_from_config (config); compute_preview_image (); gtk_widget_queue_draw (previewarea); @@ -274,29 +222,6 @@ zoomed_callback (PikaZoomModel *model) gtk_widget_queue_draw (previewarea); } -/**********************************************/ -/* Main window "Apply" button callback. */ -/* Render to PIKA image, close down and exit. */ -/**********************************************/ - -static gint -box_constrain (PikaImage *image, - PikaItem *item, - gpointer data) -{ - return (pika_drawable_is_rgb (PIKA_DRAWABLE (item)) && - ! pika_drawable_is_indexed (PIKA_DRAWABLE (item))); -} - -static gint -cylinder_constrain (PikaImage *image, - PikaItem *item, - gpointer data) -{ - return (pika_drawable_is_rgb (PIKA_DRAWABLE (item)) && - ! pika_drawable_is_indexed (PIKA_DRAWABLE (item))); -} - /******************************/ /* Preview area event handler */ /******************************/ @@ -394,910 +319,14 @@ preview_events (GtkWidget *area, return FALSE; } - -static GtkWidget * -spin_button_new (GtkAdjustment **adjustment, /* return value */ - gdouble value, - gdouble lower, - gdouble upper, - gdouble step_increment, - gdouble page_increment, - gdouble page_size, - gdouble climb_rate, - guint digits) -{ - GtkWidget *spinbutton; - - *adjustment = gtk_adjustment_new (value, lower, upper, - step_increment, page_increment, 0); - - spinbutton = pika_spin_button_new (*adjustment, - climb_rate, digits); - - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - - return spinbutton; -} - -/*******************************/ -/* Create general options page */ -/*******************************/ - -static GtkWidget * -create_options_page (void) -{ - GtkWidget *page; - GtkWidget *frame; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *combo; - GtkWidget *toggle; - GtkWidget *grid; - GtkWidget *spinbutton; - GtkWidget *scale; - GtkAdjustment *adj; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - /* General options */ - - frame = pika_frame_new (_("General Options")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - label = gtk_label_new (_("Map to:")); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - combo = pika_int_combo_box_new (_("Plane"), MAP_PLANE, - _("Sphere"), MAP_SPHERE, - _("Box"), MAP_BOX, - _("Cylinder"), MAP_CYLINDER, - NULL); - pika_int_combo_box_set_active (PIKA_INT_COMBO_BOX (combo), mapvals.maptype); - gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0); - gtk_widget_show (combo); - - g_signal_connect (combo, "changed", - G_CALLBACK (mapmenu_callback), - &mapvals.maptype); - - pika_help_set_help_data (combo, _("Type of object to map to"), NULL); - - toggle = gtk_check_button_new_with_label (_("Transparent background")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - mapvals.transparent_background); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (toggle_update), - &mapvals.transparent_background); - - pika_help_set_help_data (toggle, - _("Make image transparent outside object"), NULL); - - toggle = gtk_check_button_new_with_label (_("Tile source image")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - mapvals.tiled); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (toggle_update), - &mapvals.tiled); - - pika_help_set_help_data (toggle, - _("Tile source image: useful for infinite planes"), - NULL); - - toggle = gtk_check_button_new_with_label (_("Create new image")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - mapvals.create_new_image); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &mapvals.create_new_image); - - pika_help_set_help_data (toggle, - _("Create a new image when applying filter"), NULL); - - toggle = gtk_check_button_new_with_label (_("Create new layer")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - mapvals.create_new_layer); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &mapvals.create_new_layer); - - pika_help_set_help_data (toggle, - _("Create a new layer when applying filter"), NULL); - - /* Antialiasing options */ - - frame = pika_frame_new (NULL); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - toggle = gtk_check_button_new_with_mnemonic (_("Enable _antialiasing")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - mapvals.antialiasing); - gtk_frame_set_label_widget (GTK_FRAME (frame), toggle); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &mapvals.antialiasing); - - pika_help_set_help_data (toggle, - _("Enable/disable jagged edges removal " - "(antialiasing)"), NULL); - - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - g_object_bind_property (toggle, "active", - grid, "sensitive", - G_BINDING_SYNC_CREATE); - - scale = pika_scale_entry_new (_("_Depth:"), mapvals.maxdepth, 1.0, 5.0, 1); - pika_help_set_help_data (scale, _("Antialiasing quality. Higher is better, " - "but slower"), NULL); - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.maxdepth); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 0, 3, 1); - gtk_widget_show (scale); - - spinbutton = spin_button_new (&adj, mapvals.pixelthreshold, - 0.001, 1000, 0.1, 1, 0, 0, 3); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("_Threshold:"), 0.0, 0.5, - spinbutton, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.pixelthreshold); - - pika_help_set_help_data (spinbutton, - _("Stop when pixel differences are smaller than " - "this value"), NULL); - - gtk_widget_show (page); - - return page; -} - -/******************************/ -/* Create light settings page */ -/******************************/ - -static GtkWidget * -create_light_page (void) -{ - GtkWidget *page; - GtkWidget *frame; - GtkWidget *grid; - GtkWidget *combo; - GtkWidget *colorbutton; - GtkWidget *spinbutton; - GtkAdjustment *adj; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - frame = pika_frame_new (_("Light Settings")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - combo = pika_int_combo_box_new (_("Point light"), POINT_LIGHT, - _("Directional light"), DIRECTIONAL_LIGHT, - _("No light"), NO_LIGHT, - NULL); - pika_int_combo_box_set_active (PIKA_INT_COMBO_BOX (combo), - mapvals.lightsource.type); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("Lightsource type:"), 0.0, 0.5, - combo, 1); - - g_signal_connect (combo, "changed", - G_CALLBACK (lightmenu_callback), - &mapvals.lightsource.type); - - pika_help_set_help_data (combo, _("Type of light source to apply"), NULL); - - colorbutton = pika_color_button_new (_("Select lightsource color"), - 64, 16, - &mapvals.lightsource.color, - PIKA_COLOR_AREA_FLAT); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("Lightsource color:"), 0.0, 0.5, - colorbutton, 1); - - g_signal_connect (colorbutton, "color-changed", - G_CALLBACK (pika_color_button_get_color), - &mapvals.lightsource.color); - - pika_help_set_help_data (colorbutton, - _("Set light source color"), NULL); - - pointlightwid = pika_frame_new (_("Position")); - gtk_box_pack_start (GTK_BOX (page), pointlightwid, FALSE, FALSE, 0); - - if (mapvals.lightsource.type == POINT_LIGHT) - gtk_widget_show (pointlightwid); - - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (pointlightwid), grid); - gtk_widget_show (grid); - - spinbutton = spin_button_new (&xadj, mapvals.lightsource.position.x, - -G_MAXFLOAT, G_MAXFLOAT, - 0.1, 1.0, 0.0, 0.0, 2); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("X:"), 0.0, 0.5, - spinbutton, 1); - - g_signal_connect (xadj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.lightsource.position.x); - - pika_help_set_help_data (spinbutton, - _("Light source X position in XYZ space"), NULL); - - spinbutton = spin_button_new (&yadj, mapvals.lightsource.position.y, - -G_MAXFLOAT, G_MAXFLOAT, - 0.1, 1.0, 0.0, 0.0, 2); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("Y:"), 0.0, 0.5, - spinbutton, 1); - - g_signal_connect (yadj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.lightsource.position.y); - - pika_help_set_help_data (spinbutton, - _("Light source Y position in XYZ space"), NULL); - - spinbutton = spin_button_new (&zadj, mapvals.lightsource.position.z, - -G_MAXFLOAT, G_MAXFLOAT, - 0.1, 1.0, 0.0, 0.0, 2); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 2, - _("Z:"), 0.0, 0.5, - spinbutton, 1); - - g_signal_connect (zadj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.lightsource.position.z); - - pika_help_set_help_data (spinbutton, - _("Light source Z position in XYZ space"), NULL); - - - dirlightwid = pika_frame_new (_("Direction Vector")); - gtk_box_pack_start (GTK_BOX (page), dirlightwid, FALSE, FALSE, 0); - - if (mapvals.lightsource.type == DIRECTIONAL_LIGHT) - gtk_widget_show (dirlightwid); - - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (dirlightwid), grid); - gtk_widget_show (grid); - - spinbutton = spin_button_new (&adj, mapvals.lightsource.direction.x, - -1.0, 1.0, 0.01, 0.1, 0.0, 0.0, 2); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("X:"), 0.0, 0.5, - spinbutton, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.lightsource.direction.x); - - pika_help_set_help_data (spinbutton, - _("Light source X direction in XYZ space"), NULL); - - spinbutton = spin_button_new (&adj, mapvals.lightsource.direction.y, - -1.0, 1.0, 0.01, 0.1, 0.0, 0.0, 2); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("Y:"), 0.0, 0.5, - spinbutton, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.lightsource.direction.y); - - pika_help_set_help_data (spinbutton, - _("Light source Y direction in XYZ space"), NULL); - - spinbutton = spin_button_new (&adj, mapvals.lightsource.direction.z, - -1.0, 1.0, 0.01, 0.1, 0.0, 0.0, 2); - pika_grid_attach_aligned (GTK_GRID (grid), 0, 2, - _("Z:"), 0.0, 0.5, - spinbutton, 1); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.lightsource.direction.z); - - pika_help_set_help_data (spinbutton, - _("Light source Z direction in XYZ space"), NULL); - - gtk_widget_show (page); - - return page; -} - -/*********************************/ -/* Create material settings page */ -/*********************************/ - -static GtkWidget * -create_material_page (void) -{ - GtkSizeGroup *group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - GtkWidget *page; - GtkWidget *frame; - GtkWidget *grid; - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *spinbutton; - GtkWidget *image; - GtkAdjustment *adj; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - frame = pika_frame_new (_("Intensity Levels")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_widget_set_halign (hbox, GTK_ALIGN_START); - gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_widget_show (hbox); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (hbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - /* Ambient intensity */ - - image = gtk_image_new_from_icon_name (MAPOBJECT_INTENSITY_AMBIENT_LOW, - GTK_ICON_SIZE_BUTTON); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("Ambient:"), 0.0, 0.5, - image, 1); - gtk_size_group_add_widget (group, label); - - spinbutton = spin_button_new (&adj, mapvals.material.ambient_int, - 0, G_MAXFLOAT, 0.1, 1.0, 0.0, 0.0, 2); - gtk_grid_attach (GTK_GRID (grid), spinbutton, 2, 0, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.material.ambient_int); - - pika_help_set_help_data (spinbutton, - _("Amount of original color to show where no " - "direct light falls"), NULL); - - image = gtk_image_new_from_icon_name (MAPOBJECT_INTENSITY_AMBIENT_HIGH, - GTK_ICON_SIZE_BUTTON); - gtk_grid_attach (GTK_GRID (grid), image, 3, 0, 1, 1); - gtk_widget_show (image); - - /* Diffuse intensity */ - - image = gtk_image_new_from_icon_name (MAPOBJECT_INTENSITY_DIFFUSE_LOW, - GTK_ICON_SIZE_BUTTON); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("Diffuse:"), 0.0, 0.5, - image, 1); - gtk_size_group_add_widget (group, label); - - spinbutton = spin_button_new (&adj, mapvals.material.diffuse_int, - 0, G_MAXFLOAT, 0.1, 1.0, 0.0, 0.0, 2); - gtk_grid_attach (GTK_GRID (grid), spinbutton, 2, 1, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.material.diffuse_int); - - pika_help_set_help_data (spinbutton, - _("Intensity of original color when lit by a light " - "source"), NULL); - - image = gtk_image_new_from_icon_name (MAPOBJECT_INTENSITY_DIFFUSE_HIGH, - GTK_ICON_SIZE_BUTTON); - gtk_grid_attach (GTK_GRID (grid), image, 3, 1, 1, 1); - gtk_widget_show (image); - - frame = pika_frame_new (_("Reflectivity")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_widget_set_halign (hbox, GTK_ALIGN_START); - gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_widget_show (hbox); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_box_pack_start (GTK_BOX (hbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - /* Diffuse reflection */ - - image = gtk_image_new_from_icon_name (MAPOBJECT_REFLECTIVITY_DIFFUSE_LOW, - GTK_ICON_SIZE_BUTTON); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 0, - _("Diffuse:"), 0.0, 0.5, - image, 1); - gtk_size_group_add_widget (group, label); - - spinbutton = spin_button_new (&adj, mapvals.material.diffuse_ref, - 0, G_MAXFLOAT, 0.1, 1.0, 0.0, 0.0, 2); - gtk_grid_attach (GTK_GRID (grid), spinbutton, 2, 0, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.material.diffuse_ref); - - pika_help_set_help_data (spinbutton, - _("Higher values makes the object reflect more " - "light (appear lighter)"), NULL); - - image = gtk_image_new_from_icon_name (MAPOBJECT_REFLECTIVITY_DIFFUSE_HIGH, - GTK_ICON_SIZE_BUTTON); - gtk_grid_attach (GTK_GRID (grid), image, 3, 0, 1, 1); - gtk_widget_show (image); - - /* Specular reflection */ - - image = gtk_image_new_from_icon_name (MAPOBJECT_REFLECTIVITY_SPECULAR_LOW, - GTK_ICON_SIZE_BUTTON); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 1, - _("Specular:"), 0.0, 0.5, - image, 1); - gtk_size_group_add_widget (group, label); - - spinbutton = spin_button_new (&adj, mapvals.material.specular_ref, - 0, G_MAXFLOAT, 0.1, 1.0, 0.0, 0.0, 2); - gtk_grid_attach (GTK_GRID (grid), spinbutton, 2, 1, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.material.specular_ref); - - pika_help_set_help_data (spinbutton, - _("Controls how intense the highlights will be"), - NULL); - - image = gtk_image_new_from_icon_name (MAPOBJECT_REFLECTIVITY_SPECULAR_HIGH, - GTK_ICON_SIZE_BUTTON); - gtk_grid_attach (GTK_GRID (grid), image, 3, 1, 1, 1); - gtk_widget_show (image); - - /* Highlight */ - - image = gtk_image_new_from_icon_name (MAPOBJECT_REFLECTIVITY_HIGHLIGHT_LOW, - GTK_ICON_SIZE_BUTTON); - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, 2, - _("Highlight:"), 0.0, 0.5, - image, 1); - gtk_size_group_add_widget (group, label); - - spinbutton = spin_button_new (&adj, mapvals.material.highlight, - 0, G_MAXFLOAT, 0.1, 1.0, 0.0, 0.0, 2); - gtk_grid_attach (GTK_GRID (grid), spinbutton, 2, 2, 1, 1); - gtk_widget_show (spinbutton); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (double_adjustment_update), - &mapvals.material.highlight); - - pika_help_set_help_data (spinbutton, - _("Higher values makes the highlights more focused"), - NULL); - - image = gtk_image_new_from_icon_name (MAPOBJECT_REFLECTIVITY_HIGHLIGHT_HIGH, - GTK_ICON_SIZE_BUTTON); - gtk_grid_attach (GTK_GRID (grid), image, 3, 2, 1, 1); - gtk_widget_show (image); - - gtk_widget_show (page); - - g_object_unref (group); - - return page; -} - -/****************************************/ -/* Create orientation and position page */ -/****************************************/ - -static GtkWidget * -create_orientation_page (void) -{ - GtkSizeGroup *group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - GtkWidget *page; - GtkWidget *frame; - GtkWidget *grid; - GtkWidget *scale; - GtkWidget *spinbutton; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - frame = pika_frame_new (_("Position")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - scale = pika_scale_entry_new (_("X:"), mapvals.position.x, -1.0, 2.0, 5); - pika_help_set_help_data (scale, _("Object X position in XYZ space"), NULL); - spinbutton = pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)); - gtk_size_group_add_widget (group, spinbutton); - gtk_spin_button_configure (GTK_SPIN_BUTTON (spinbutton), NULL, 0.01, 5); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.position.x); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 0, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Y:"), mapvals.position.y, -1.0, 2.0, 5); - pika_help_set_help_data (scale, _("Object Y position in XYZ space"), NULL); - spinbutton = pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)); - gtk_size_group_add_widget (group, spinbutton); - gtk_spin_button_configure (GTK_SPIN_BUTTON (spinbutton), NULL, 0.01, 5); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.position.y); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 1, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Z:"), mapvals.position.z, -1.0, 2.0, 5); - pika_help_set_help_data (scale, _("Object Z position in XYZ space"), NULL); - spinbutton = pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)); - gtk_size_group_add_widget (group, spinbutton); - gtk_spin_button_configure (GTK_SPIN_BUTTON (spinbutton), NULL, 0.01, 5); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.position.z); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 2, 3, 1); - gtk_widget_show (scale); - - frame = pika_frame_new (_("Rotation")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - scale = pika_scale_entry_new (_("X:"), mapvals.alpha, -180.0, 180.0, 1); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 1.0, 15.0); - pika_help_set_help_data (scale, _("Rotation angle about X axis"), NULL); - gtk_size_group_add_widget (group, pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale))); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.alpha); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 0, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Y:"), mapvals.beta, -180.0, 180.0, 1); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 1.0, 15.0); - pika_help_set_help_data (scale, _("Rotation angle about Y axis"), NULL); - gtk_size_group_add_widget (group, pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale))); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.beta); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 1, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Z:"), mapvals.gamma, -180.0, 180.0, 1); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 1.0, 15.0); - pika_help_set_help_data (scale, _("Rotation angle about Z axis"), NULL); - gtk_size_group_add_widget (group, pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale))); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.gamma); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 2, 3, 1); - gtk_widget_show (scale); - - gtk_widget_show (page); - - g_object_unref (group); - - return page; -} - -static GtkWidget * -create_box_page (void) -{ - GtkWidget *page; - GtkWidget *frame; - GtkWidget *vbox; - GtkWidget *grid; - GtkWidget *scale; - GtkWidget *spinbutton; - gint i; - - static gchar *labels[] = - { - N_("Front:"), N_("Back:"), - N_("Top:"), N_("Bottom:"), - N_("Left:"), N_("Right:") - }; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - frame = pika_frame_new (_("Map Images to Box Faces")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID(grid), 6); - gtk_grid_set_column_spacing (GTK_GRID(grid), 6); - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 5); - gtk_widget_show (grid); - - for (i = 0; i < 6; i++) - { - GtkWidget *combo; - - combo = pika_drawable_combo_box_new (box_constrain, NULL, NULL); - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), - mapvals.boxmap_id[i], - G_CALLBACK (pika_int_combo_box_get_active), - &mapvals.boxmap_id[i], NULL); - - pika_grid_attach_aligned (GTK_GRID (grid), 0, i, - gettext (labels[i]), 0.0, 0.5, - combo, 1); - } - - /* Scale scales */ - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID(grid), 6); - gtk_grid_set_column_spacing (GTK_GRID(grid), 6); - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); - gtk_widget_show (grid); - - scale = pika_scale_entry_new (_("Scale X:"), mapvals.scale.x, 0.0, 5.0, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.01, 0.1); - pika_help_set_help_data (scale, _("X scale (size)"), NULL); - spinbutton = pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)); - gtk_spin_button_configure (GTK_SPIN_BUTTON (spinbutton), NULL, 0.1, 2); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.scale.x); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 0, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Y:"), mapvals.scale.y, 0.0, 5.0, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.01, 0.1); - pika_help_set_help_data (scale, _("Y scale (size)"), NULL); - spinbutton = pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)); - gtk_spin_button_configure (GTK_SPIN_BUTTON (spinbutton), NULL, 0.1, 2); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.scale.y); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 1, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("Z:"), mapvals.scale.z, 0.0, 5.0, 2); - pika_label_spin_set_increments (PIKA_LABEL_SPIN (scale), 0.01, 0.1); - pika_help_set_help_data (scale, _("Z scale (size)"), NULL); - spinbutton = pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)); - gtk_spin_button_configure (GTK_SPIN_BUTTON (spinbutton), NULL, 0.1, 2); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.scale.z); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 2, 3, 1); - gtk_widget_show (scale); - - gtk_widget_show (page); - - return page; -} - -static GtkWidget * -create_cylinder_page (void) -{ - GtkSizeGroup *group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - GtkWidget *page; - GtkWidget *frame; - GtkWidget *grid; - GtkWidget *scale; - GtkWidget *spinbutton; - gint i; - - static const gchar *labels[] = { N_("_Top:"), N_("_Bottom:") }; - - page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (page), 12); - - frame = pika_frame_new (_("Images for the Cap Faces")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - /* Option menus */ - - for (i = 0; i < 2; i++) - { - GtkWidget *combo; - GtkWidget *label; - - combo = pika_drawable_combo_box_new (cylinder_constrain, NULL, NULL); - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), - mapvals.cylindermap_id[i], - G_CALLBACK (pika_int_combo_box_get_active), - &mapvals.cylindermap_id[i], NULL); - - label = pika_grid_attach_aligned (GTK_GRID (grid), 0, i, - gettext (labels[i]), 0.0, 0.5, - combo, 1); - gtk_size_group_add_widget (group, label); - } - - frame = pika_frame_new (_("Size")); - gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); - - scale = pika_scale_entry_new (_("R_adius:"), mapvals.cylinder_radius, 0.0, 2.0, 2); - pika_help_set_help_data (scale, _("Cylinder radius"), NULL); - gtk_size_group_add_widget (group, pika_labeled_get_label (PIKA_LABELED (scale))); - spinbutton = pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)); - gtk_spin_button_configure (GTK_SPIN_BUTTON (spinbutton), NULL, 0.1, 2); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.cylinder_radius); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 0, 3, 1); - gtk_widget_show (scale); - - scale = pika_scale_entry_new (_("L_ength:"), mapvals.cylinder_length, 0.0, 2.0, 2); - pika_help_set_help_data (scale, _("Cylinder length"), NULL); - gtk_size_group_add_widget (group, pika_labeled_get_label (PIKA_LABELED (scale))); - spinbutton = pika_label_spin_get_spin_button (PIKA_LABEL_SPIN (scale)); - gtk_spin_button_configure (GTK_SPIN_BUTTON (spinbutton), NULL, 0.1, 2); - - g_signal_connect (scale, "value-changed", - G_CALLBACK (scale_entry_update_double), - &mapvals.cylinder_length); - gtk_grid_attach (GTK_GRID (grid), scale, 0, 1, 3, 1); - gtk_widget_show (scale); - - gtk_widget_show (page); - - g_object_unref (group); - - return page; -} - -/****************************/ -/* Create notbook and pages */ -/****************************/ - -static void -create_main_notebook (GtkWidget *container) -{ - GtkWidget *page; - - options_note_book = GTK_NOTEBOOK (gtk_notebook_new ()); - gtk_container_add (GTK_CONTAINER (container), - GTK_WIDGET (options_note_book)); - - page = create_options_page (); - gtk_notebook_append_page (options_note_book, page, - gtk_label_new_with_mnemonic (_("O_ptions"))); - - page = create_light_page (); - gtk_notebook_append_page (options_note_book, page, - gtk_label_new_with_mnemonic (_("_Light"))); - - page = create_material_page (); - gtk_notebook_append_page (options_note_book, page, - gtk_label_new_with_mnemonic (_("_Material"))); - - page = create_orientation_page (); - gtk_notebook_append_page (options_note_book, page, - gtk_label_new_with_mnemonic (_("O_rientation"))); - - if (mapvals.maptype == MAP_BOX) - { - box_page = create_box_page (); - g_object_ref (box_page); - gtk_notebook_append_page (options_note_book, box_page, - gtk_label_new_with_mnemonic (_("_Box"))); - } - else if (mapvals.maptype == MAP_CYLINDER) - { - cylinder_page = create_cylinder_page (); - g_object_ref (cylinder_page); - gtk_notebook_append_page (options_note_book, cylinder_page, - gtk_label_new_with_mnemonic (_("C_ylinder"))); - } - - gtk_widget_show (GTK_WIDGET (options_note_book)); -} - /********************************/ /* Create and show main dialog. */ /********************************/ gboolean -main_dialog (PikaDrawable *drawable) +main_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable) { GtkWidget *main_hbox; GtkWidget *vbox; @@ -1306,36 +335,19 @@ main_dialog (PikaDrawable *drawable) GtkWidget *button; GtkWidget *toggle; PikaZoomModel *model; + GtkWidget *map_combo; + GtkWidget *combo; gboolean run = FALSE; pika_ui_init (PLUG_IN_BINARY); - appwin = pika_dialog_new (_("Map to Object"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (appwin), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - pika_window_set_transient (GTK_WINDOW (appwin)); - - main_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (appwin))), - main_hbox, FALSE, FALSE, 0); - gtk_widget_show (main_hbox); + appwin = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Map to Object")); /* Create the Preview */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); /* Add preview widget and various buttons to the first part */ @@ -1377,7 +389,7 @@ main_dialog (PikaDrawable *drawable) g_signal_connect (button, "clicked", G_CALLBACK (preview_callback), - NULL); + config); pika_help_set_help_data (button, _("Recompute preview image"), NULL); @@ -1415,7 +427,507 @@ main_dialog (PikaDrawable *drawable) G_CALLBACK (toggle_update), &mapvals.livepreview); - create_main_notebook (main_hbox); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "options-tab", _("O_ptions"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "light-tab", _("Li_ght"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "viewpoint-tab", _("_Viewpoint"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "material-tab", _("_Material"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "orientation-tab", _("Orient_ation"), + FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "sphere-tab", _("Sp_here"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "box-tab", _("_Box"), FALSE, TRUE); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "cylinder-tab", _("C_ylinder"), FALSE, TRUE); + + /* Options Tab */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "general-options", _("General Options"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "general-box", + "map-type", + "transparent-background", + "tiled", + "new-image", + "new-layer", + NULL); + map_combo = pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (appwin), + "map-type", G_TYPE_NONE); + g_signal_connect (map_combo, "value-changed", + G_CALLBACK (mapmenu_callback), + config); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "options-frame", + "general-options", FALSE, + "general-box"); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "depth", 1.0); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "options-box", + "options-frame", + "antialiasing", + "depth", + "threshold", + NULL); + + g_signal_connect (config, "notify::transparent-background", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::tiled", + G_CALLBACK (update_preview), + config); + + /* Light Tab */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "light-settings-label", _("Light Settings"), + FALSE, FALSE); + + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "light-settings-box", + "light-type", + "light-color", + NULL); + combo = pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (appwin), + "light-type", G_TYPE_NONE); + g_signal_connect (combo, "value-changed", + G_CALLBACK (lightmenu_callback), + config); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "light-frame", + "light-settings-label", FALSE, + "light-settings-box"); + + /* Depending on light settings, only one of these are visible */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "vector-label", _("Direction Vector"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "vector-box", + "light-direction-x", + "light-direction-y", + "light-direction-z", + NULL); + dirlightwid = pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "vector-frame", + "vector-label", FALSE, + "vector-box"); + + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "position-label", _("Position"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "position-box", + "light-position-x", + "light-position-y", + "light-position-z", + NULL); + pointlightwid = pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "position-frame", + "position-label", FALSE, + "position-box"); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), "light-box", + "light-frame", + "vector-frame", + "position-frame", + NULL); + + g_signal_connect (config, "notify::light-color", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::light-direction-x", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::light-direction-y", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::light-direction-z", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::light-position-x", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::light-position-y", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::light-position-z", + G_CALLBACK (update_preview), + config); + lightmenu_callback (combo, config); + + /* Viewpoint Tab */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "viewpoint-position-label", _("Viewpoint Position"), + FALSE, FALSE); + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "viewpoint-position-box", + "viewpoint-x", + "viewpoint-y", + "viewpoint-z", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + pointlightwid = pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "viewpoint-position-frame", + "viewpoint-position-label", FALSE, + "viewpoint-position-box"); + + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "first-axis-x", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "first-axis-y", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "first-axis-z", 1.0); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "first-axis-label", _("First Axis"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "first-axis-box", + "first-axis-x", + "first-axis-y", + "first-axis-z", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "first-axis-frame", + "first-axis-label", FALSE, + "first-axis-box"); + + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "second-axis-x", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "second-axis-y", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "second-axis-z", 1.0); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "second-axis-label", _("Second Axis"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "second-axis-box", + "second-axis-x", + "second-axis-y", + "second-axis-z", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "second-axis-frame", + "second-axis-label", FALSE, + "second-axis-box"); + + hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "axis-box", + "first-axis-frame", + "second-axis-frame", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), + GTK_ORIENTATION_HORIZONTAL); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "viewpoint-box", + "viewpoint-position-frame", + "axis-box", + NULL); + + g_signal_connect (config, "notify::viewpoint-x", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::viewpoint-y", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::viewpoint-z", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::first-axis-x", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::first-axis-y", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::first-axis-z", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::second-axis-x", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::second-axis-y", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::second-axis-z", + G_CALLBACK (update_preview), + config); + + /* Material Tab */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "intensity-label", _("Intensity Levels"), + FALSE, FALSE); + /* TODO: Restore icons */ + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "intensity-box", + "ambient-intensity", + "diffuse-intensity", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "intensity-frame", + "intensity-label", FALSE, + "intensity-box"); + + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "reflexivity-label", _("Intensity Levels"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "reflexivity-box", + "diffuse-reflectivity", + "specular-reflectivity", + "highlight", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "reflexivity-frame", + "reflexivity-label", FALSE, + "reflexivity-box"); + + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "material-box", + "intensity-frame", + "reflexivity-frame", + NULL); + + g_signal_connect (config, "notify::ambient-intensity", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::diffuse-intensity", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::diffuse-reflectivity", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::specular-reflectivity", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::highlight", + G_CALLBACK (update_preview), + config); + + /* Orientation Tab */ + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "position-x", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "position-y", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "position-z", 1.0); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "orientation-position-label", _("Position"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "orientation-position-box", + "position-x", + "position-y", + "position-z", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "orientation-position-frame", + "orientation-position-label", FALSE, + "orientation-position-box"); + + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "rotation-angle-x", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "rotation-angle-y", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "rotation-angle-z", 1.0); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "rotation-angle-label", _("Rotation"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "rotation-angle-box", + "rotation-angle-x", + "rotation-angle-y", + "rotation-angle-z", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "rotation-angle-frame", + "rotation-angle-label", FALSE, + "rotation-angle-box"); + + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "orientation-box", + "orientation-position-frame", + "rotation-angle-frame", + NULL); + + g_signal_connect (config, "notify::position-x", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::position-y", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::position-z", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::rotation-angle-x", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::rotation-angle-y", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::rotation-angle-z", + G_CALLBACK (update_preview), + config); + + /* Sphere Tab */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "sphere-label", _("Size"), + FALSE, FALSE); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "sphere-frame", + "sphere-label", FALSE, + "sphere-radius"); + + g_signal_connect (config, "notify::sphere-radius", + G_CALLBACK (update_preview), + config); + + /* Box Tab */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "box-drawable-label", _("Map Images to Box Faces"), + FALSE, FALSE); + pika_procedure_dialog_fill_flowbox (PIKA_PROCEDURE_DIALOG (appwin), + "box-drawable-box", + "box-front-drawable", + "box-back-drawable", + "box-top-drawable", + "box-bottom-drawable", + "box-left-drawable", + "box-right-drawable", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "box-drawable-frame", + "box-drawable-label", FALSE, + "box-drawable-box"); + + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "x-scale", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "y-scale", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "z-scale", 1.0); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "box-scale-box", + "x-scale", + "y-scale", + "z-scale", + NULL); + + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "box-box", + "box-drawable-frame", + "box-scale-box", + NULL); + + g_signal_connect (config, "notify::box-front-drawable", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::box-back-drawable", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::box-top-drawable", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::box-bottom-drawable", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::box-left-drawable", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::box-right-drawable", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::x-scale", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::y-scale", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::z-scale", + G_CALLBACK (update_preview), + config); + + /* Cylinder Tab */ + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "cyl-drawable-label", _("Images for the Cap Faces"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "cyl-drawable-box", + "cyl-top-drawable", + "cyl-bottom-drawable", + NULL); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (appwin), + "cyl-drawable-frame", + "cyl-drawable-label", FALSE, + "cyl-drawable-box"); + + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "cylinder-radius", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (appwin), + "cylinder-length", 1.0); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (appwin), + "cyl-size-label", _("Size"), + FALSE, FALSE); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "cyl-size-box", + "cylinder-radius", + "cylinder-length", + NULL); + + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "cylinder-box", + "cyl-drawable-frame", + "cyl-size-box", + NULL); + + g_signal_connect (config, "notify::cyl-top-drawable", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::cyl-bottom-drawable", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::cylinder-radius", + G_CALLBACK (update_preview), + config); + g_signal_connect (config, "notify::cylinder-length", + G_CALLBACK (update_preview), + config); + + options_note_book = + GTK_NOTEBOOK (pika_procedure_dialog_fill_notebook (PIKA_PROCEDURE_DIALOG (appwin), + "main-notebook", + "options-tab", "options-box", + "light-tab", "light-box", + "viewpoint-tab", "viewpoint-box", + "orientation-tab", "orientation-box", + "material-tab", "material-box", + "sphere-tab", "sphere-frame", + "box-tab", "box-box", + "cylinder-tab", "cylinder-box", + NULL)); + + /* Save reference to tabs for hiding/showing */ + sphere_page = gtk_notebook_get_nth_page (options_note_book, 5); + box_page = gtk_notebook_get_nth_page (options_note_book, 6); + cylinder_page = gtk_notebook_get_nth_page (options_note_book, 7); + + mapmenu_callback (map_combo, config); + + /* Create overall layout */ + main_hbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (appwin), + "main-hbox", + "main-notebook", + NULL); + gtk_orientable_set_orientation (GTK_ORIENTABLE (main_hbox), + GTK_ORIENTATION_HORIZONTAL); + gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); + gtk_box_reorder_child (GTK_BOX (main_hbox), vbox, 0); + + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (appwin), "main-hbox", NULL); gtk_widget_show (appwin); @@ -1428,22 +940,18 @@ main_dialog (PikaDrawable *drawable) g_object_unref (cursor); } - image_setup (drawable, TRUE); + copy_from_config (config); + image_setup (drawable, TRUE, config); compute_preview_image (); - if (pika_dialog_run (PIKA_DIALOG (appwin)) == GTK_RESPONSE_OK) - run = TRUE; + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (appwin)); gtk_widget_destroy (appwin); if (preview_rgb_data) g_free (preview_rgb_data); if (preview_surface) cairo_surface_destroy (preview_surface); - if (box_page) - g_object_unref (box_page); - if (cylinder_page) - g_object_unref (cylinder_page); return run; } diff --git a/plug-ins/map-object/map-object-ui.h b/plug-ins/map-object/map-object-ui.h index bb1ac01..29eab37 100644 --- a/plug-ins/map-object/map-object-ui.h +++ b/plug-ins/map-object/map-object-ui.h @@ -9,6 +9,8 @@ extern GtkWidget *previewarea; /* Externally visible functions */ /* ============================ */ -gboolean main_dialog (PikaDrawable *drawable); +gboolean main_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + PikaDrawable *drawable); #endif /* __MAPOBJECT_UI_H__ */ diff --git a/plug-ins/metadata/metadata-editor.c b/plug-ins/metadata/metadata-editor.c index beddd30..416d510 100644 --- a/plug-ins/metadata/metadata-editor.c +++ b/plug-ins/metadata/metadata-editor.c @@ -67,7 +67,7 @@ struct _MetadataClass #define METADATA_TYPE (metadata_get_type ()) -#define METADATA (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), METADATA_TYPE, Metadata)) +#define METADATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), METADATA_TYPE, Metadata)) GType metadata_get_type (void) G_GNUC_CONST; @@ -76,7 +76,7 @@ static PikaProcedure * metadata_create_procedure (PikaPlugIn *plug_in const gchar *name); static PikaValueArray * metadata_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); @@ -788,7 +788,7 @@ metadata_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * metadata_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaImage *image; @@ -797,7 +797,7 @@ metadata_run (PikaProcedure *procedure, pika_ui_init (PLUG_IN_BINARY); - image = PIKA_VALUES_GET_IMAGE (args, 1); + g_object_get (config, "image", &image, NULL); metadata = pika_image_get_metadata (image); diff --git a/plug-ins/metadata/metadata-viewer.c b/plug-ins/metadata/metadata-viewer.c index 3385fc9..448c601 100644 --- a/plug-ins/metadata/metadata-viewer.c +++ b/plug-ins/metadata/metadata-viewer.c @@ -88,7 +88,7 @@ struct _MetadataClass #define METADATA_TYPE (metadata_get_type ()) -#define METADATA (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), METADATA_TYPE, Metadata)) +#define METADATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), METADATA_TYPE, Metadata)) GType metadata_get_type (void) G_GNUC_CONST; @@ -97,7 +97,7 @@ static PikaProcedure * metadata_create_procedure (PikaPlugIn *plug_in const gchar *name); static PikaValueArray * metadata_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static gboolean metadata_viewer_dialog (PikaImage *image, @@ -214,7 +214,7 @@ metadata_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * metadata_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaImage *image; @@ -223,7 +223,7 @@ metadata_run (PikaProcedure *procedure, pika_ui_init (PLUG_IN_BINARY); - image = PIKA_VALUES_GET_IMAGE (args, 1); + g_object_get (config, "image", &image, NULL); metadata = pika_image_get_metadata (image); diff --git a/plug-ins/pagecurl/pagecurl.c b/plug-ins/pagecurl/pagecurl.c index 290d56a..88cee7d 100644 --- a/plug-ins/pagecurl/pagecurl.c +++ b/plug-ins/pagecurl/pagecurl.c @@ -92,17 +92,6 @@ typedef enum (e) == CURL_EDGE_UPPER_RIGHT) -/***** Types *****/ - -typedef struct -{ - CurlColors colors; - gdouble opacity; - gboolean shade; - CurlEdge edge; - CurlOrientation orientation; -} CurlParams; - typedef struct _Pagecurl Pagecurl; typedef struct _PagecurlClass PagecurlClass; @@ -118,7 +107,7 @@ struct _PagecurlClass #define PAGECURL_TYPE (pagecurl_get_type ()) -#define PAGECURL (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PAGECURL_TYPE, Pagecurl)) +#define PAGECURL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PAGECURL_TYPE, Pagecurl)) GType pagecurl_get_type (void) G_GNUC_CONST; @@ -131,20 +120,22 @@ static PikaValueArray * pagecurl_run (PikaProcedure *procedu PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static void dialog_scale_update (PikaLabelSpin *spin, - gdouble *value); +static gboolean dialog (PikaProcedure *procedure, + PikaProcedureConfig *config); -static gboolean dialog (void); - -static void init_calculation (PikaDrawable *drawable); -static PikaLayer * do_curl_effect (PikaDrawable *drawable); -static void clear_curled_region (PikaDrawable *drawable); -static PikaLayer * page_curl (PikaDrawable *drawable); -static PikaRGB * get_gradient_samples (PikaDrawable *drawable, - gboolean reverse); +static void init_calculation (PikaDrawable *drawable, + PikaProcedureConfig *config); +static PikaLayer * do_curl_effect (PikaDrawable *drawable, + PikaProcedureConfig *config); +static void clear_curled_region (PikaDrawable *drawable, + PikaProcedureConfig *config); +static PikaLayer * page_curl (PikaDrawable *drawable, + PikaProcedureConfig *config); +static PikaRGB * get_gradient_samples (PikaDrawable *drawable, + gboolean reverse); G_DEFINE_TYPE (Pagecurl, pagecurl, PIKA_TYPE_PLUG_IN) @@ -153,16 +144,10 @@ PIKA_MAIN (PAGECURL_TYPE) DEFINE_STD_SET_I18N -/***** Variables *****/ - -static CurlParams curl; - /* Image parameters */ static PikaImage *image = NULL; -static GtkWidget *curl_image = NULL; - static gint sel_x, sel_y; static gint true_sel_width, true_sel_height; static gint sel_width, sel_height; @@ -240,34 +225,46 @@ pagecurl_create_procedure (PikaPlugIn *plug_in, "Federico Mena Quintero and Simon Budig", PLUG_IN_VERSION); - PIKA_PROC_ARG_INT (procedure, "colors", - "Colors", - "FG- and BG-Color (0), Current gradient (1), " - "Current gradient reversed (2)", - CURL_COLORS_FG_BG, CURL_COLORS_LAST, CURL_COLORS_FG_BG, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "colors", + _("Colors"), NULL, + pika_choice_new_with_values ("fg-bg", CURL_COLORS_FG_BG, _("Foreground / background colors"), NULL, + "current-gradient", CURL_COLORS_GRADIENT, _("Current gradient"), NULL, + "current-gradient-reversed", CURL_COLORS_GRADIENT_REVERSE, _("Current gradient (reversed)"), NULL, + NULL), + "fg-bg", + G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "edge", - "Edge", - "Edge to curl (1-4, clockwise, starting in the " - "lower right edge)", - CURL_EDGE_LOWER_RIGHT, CURL_EDGE_UPPER_RIGHT, - CURL_EDGE_LOWER_RIGHT, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "edge", + _("Locatio_n"), + _("Corner which is curled"), + pika_choice_new_with_values ("upper-left", CURL_EDGE_UPPER_LEFT, _("Upper left"), NULL, + "upper-right", CURL_EDGE_UPPER_RIGHT, _("Upper right"), NULL, + "lower-left", CURL_EDGE_LOWER_LEFT, _("Lower left"), NULL, + "lower-right", CURL_EDGE_LOWER_RIGHT, _("Lower right"), NULL, + NULL), + "lower-right", + G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "orientation", - "Orientation", - "Vertical (0), Horizontal (1)", - CURL_ORIENTATION_VERTICAL, CURL_ORIENTATION_HORIZONTAL, - CURL_ORIENTATION_VERTICAL, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "orientation", + _("Or_ientation"), NULL, + pika_choice_new_with_values ("vertical", CURL_ORIENTATION_VERTICAL, _("Vertical"), NULL, + "horizontal", CURL_ORIENTATION_HORIZONTAL, _("Horizontal"), NULL, + NULL), + "vertical", + G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "shade", - "Shade", - "Shade the region under the curl", + _("Sh_ade"), + _("Shade the region under the curl"), TRUE, G_PARAM_READWRITE); + PIKA_PROC_ARG_DOUBLE (procedure, "opacity", + _("Opaci_ty"), + _("Opacity"), + 0.0, 1.0, 0.0, + PIKA_PARAM_READWRITE); + PIKA_PROC_VAL_LAYER (procedure, "curl-layer", "Curl layer", "The new layer with the curl.", @@ -284,7 +281,7 @@ pagecurl_run (PikaProcedure *procedure, PikaImage *_image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaDrawable *drawable; @@ -311,11 +308,6 @@ pagecurl_run (PikaProcedure *procedure, drawable = drawables[0]; } - curl.colors = PIKA_VALUES_GET_INT (args, 0); - curl.edge = PIKA_VALUES_GET_INT (args, 1); - curl.orientation = PIKA_VALUES_GET_INT (args, 2); - curl.shade = PIKA_VALUES_GET_BOOLEAN (args, 3); - if (! pika_drawable_mask_intersect (drawable, &sel_x, &sel_y, &true_sel_width, &true_sel_height)) { @@ -332,42 +324,19 @@ pagecurl_run (PikaProcedure *procedure, NULL); } - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - /* Possibly retrieve data */ - pika_get_data (PLUG_IN_PROC, &curl); - - /* First acquire information with a dialog */ - if (! dialog ()) - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - break; - - case PIKA_RUN_NONINTERACTIVE: - break; - - case PIKA_RUN_WITH_LAST_VALS: - /* Possibly retrieve data */ - pika_get_data (PLUG_IN_PROC, &curl); - break; - - default: - break; - } + if (run_mode == PIKA_RUN_INTERACTIVE && ! dialog (procedure, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); return_vals = pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); - PIKA_VALUES_SET_LAYER (return_vals, 1, page_curl (drawable)); + PIKA_VALUES_SET_LAYER (return_vals, 1, page_curl (drawable, config)); if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &curl, sizeof (CurlParams)); - return return_vals; } @@ -437,20 +406,18 @@ inside_circle (gdouble x, /********************************************************************/ static void -dialog_scale_update (PikaLabelSpin *scale, - gdouble *value) +curl_pixbuf_update (PikaProcedureConfig *config, + const GParamSpec *pspec, + GtkWidget *curl_image) { - *value = ((gdouble) pika_label_spin_get_value (scale)) / 100.0; -} + GdkPixbuf *pixbuf; + gint index; + gchar *resource; + CurlEdge edge; + CurlOrientation orientation; -static void -curl_pixbuf_update (void) -{ - GdkPixbuf *pixbuf; - gint index; - gchar *resource; - - switch (curl.edge) + edge = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "edge"); + switch (edge) { case CURL_EDGE_LOWER_RIGHT: index = 0; break; case CURL_EDGE_LOWER_LEFT: index = 1; break; @@ -460,7 +427,8 @@ curl_pixbuf_update (void) return; } - index += curl.orientation * 4; + orientation = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "orientation"); + index += orientation * 4; resource = g_strdup_printf ("/technology.heckin/pagecurl-icons/curl%c.png", '0' + index); @@ -472,193 +440,37 @@ curl_pixbuf_update (void) } static gboolean -dialog (void) +dialog (PikaProcedure *procedure, + PikaProcedureConfig *config) { /* Missing options: Color-dialogs? / own curl layer ? / transparency to original drawable / Warp-curl (unsupported yet) */ - GtkWidget *dialog; - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *grid; - GtkWidget *frame; - GtkWidget *button; - GtkWidget *combo; - GtkWidget *scale; + GtkWidget *curl_image; gboolean run; pika_ui_init (PLUG_IN_BINARY); - dialog = pika_dialog_new (_("Pagecurl Effect"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, + dialog = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Pagecurl Effect")); - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - pika_window_set_transient (GTK_WINDOW (dialog)); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - vbox, TRUE, TRUE, 0); - gtk_widget_show (vbox); - - frame = pika_frame_new (_("Curl Location")); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - grid = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (frame), grid); - gtk_widget_show (grid); + pika_procedure_dialog_get_spin_scale (PIKA_PROCEDURE_DIALOG (dialog), "opacity", 100.0); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), + "edge", "orientation", "shade", "colors", "opacity", NULL); curl_image = gtk_image_new (); - gtk_grid_attach (GTK_GRID (grid), curl_image, 0, 1, 2, 1); + gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), + curl_image, FALSE, FALSE, 0); gtk_widget_show (curl_image); - curl_pixbuf_update (); + g_signal_connect (config, "notify", + G_CALLBACK (curl_pixbuf_update), + curl_image); + curl_pixbuf_update (config, NULL, curl_image); - { - static const gchar *name[] = - { - N_("Lower right"), - N_("Lower left"), - N_("Upper left"), - N_("Upper right") - }; - gint i; - - button = NULL; - for (i = CURL_EDGE_FIRST; i <= CURL_EDGE_LAST; i++) - { - button = - gtk_radio_button_new_with_label (button == NULL ? - NULL : - gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)), - gettext (name[i - CURL_EDGE_FIRST])); - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), - curl.edge == i); - - g_object_set_data (G_OBJECT (button), - "pika-item-data", GINT_TO_POINTER (i)); - - gtk_grid_attach (GTK_GRID (grid), button, - CURL_EDGE_LEFT (i) ? 0 : 1, - CURL_EDGE_UPPER (i) ? 0 : 2, - 1, 1); - // GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0); - gtk_widget_show (button); - - g_signal_connect (button, "toggled", - G_CALLBACK (pika_radio_button_update), - &curl.edge); - - g_signal_connect (button, "toggled", - G_CALLBACK (curl_pixbuf_update), - NULL); - } - } - - frame = pika_frame_new (_("Curl Orientation")); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE); - gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_widget_show (hbox); - - { - static const gchar *name[] = - { - N_("_Vertical"), - N_("_Horizontal") - }; - gint i; - - button = NULL; - for (i = 0; i <= CURL_ORIENTATION_LAST; i++) - { - button = gtk_radio_button_new_with_mnemonic (button == NULL ? - NULL : - gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)), - gettext (name[i])); - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), - curl.orientation == i); - - g_object_set_data (G_OBJECT (button), - "pika-item-data", GINT_TO_POINTER (i)); - - gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0); - gtk_widget_show (button); - - g_signal_connect (button, "toggled", - G_CALLBACK (pika_radio_button_update), - &curl.orientation); - - g_signal_connect (button, "toggled", - G_CALLBACK (curl_pixbuf_update), - NULL); - } - } - - button = gtk_check_button_new_with_mnemonic (_("_Shade under curl")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), curl.shade); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - g_signal_connect (button, "toggled", - G_CALLBACK (pika_toggle_button_update), - &curl.shade); - - combo = g_object_new (PIKA_TYPE_INT_COMBO_BOX, NULL); - - pika_int_combo_box_prepend (PIKA_INT_COMBO_BOX (combo), - PIKA_INT_STORE_VALUE, CURL_COLORS_GRADIENT_REVERSE, - PIKA_INT_STORE_LABEL, _("Current gradient (reversed)"), - PIKA_INT_STORE_ICON_NAME, PIKA_ICON_GRADIENT, - -1); - pika_int_combo_box_prepend (PIKA_INT_COMBO_BOX (combo), - PIKA_INT_STORE_VALUE, CURL_COLORS_GRADIENT, - PIKA_INT_STORE_LABEL, _("Current gradient"), - PIKA_INT_STORE_ICON_NAME, PIKA_ICON_GRADIENT, - -1); - pika_int_combo_box_prepend (PIKA_INT_COMBO_BOX (combo), - PIKA_INT_STORE_VALUE, CURL_COLORS_FG_BG, - PIKA_INT_STORE_LABEL, _("Foreground / background colors"), - PIKA_INT_STORE_ICON_NAME, PIKA_ICON_COLORS_DEFAULT, - -1); - - gtk_box_pack_start (GTK_BOX (vbox), combo, FALSE, FALSE, 0); - gtk_widget_show (combo); - - pika_int_combo_box_connect (PIKA_INT_COMBO_BOX (combo), - curl.colors, - G_CALLBACK (pika_int_combo_box_get_active), - &curl.colors, NULL); - - scale = pika_scale_entry_new (_("_Opacity:"), curl.opacity * 100.0, 0.0, 100.0, 0.0); - g_signal_connect (scale, "value-changed", - G_CALLBACK (dialog_scale_update), - &curl.opacity); - gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 6); - gtk_widget_show (scale); - - gtk_widget_show (dialog); - - run = (pika_dialog_run (PIKA_DIALOG (dialog)) == GTK_RESPONSE_OK); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); gtk_widget_destroy (dialog); @@ -666,13 +478,17 @@ dialog (void) } static void -init_calculation (PikaDrawable *drawable) +init_calculation (PikaDrawable *drawable, + PikaProcedureConfig *config) { - gdouble k; - gdouble alpha, beta; - gdouble angle; - PikaVector2 v1, v2; - GList *layers; + gdouble k; + gdouble alpha, beta; + gdouble angle; + PikaVector2 v1, v2; + GList *layers; + CurlOrientation orientation; + + orientation = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "orientation"); pika_layer_add_alpha (PIKA_LAYER (drawable)); @@ -683,7 +499,7 @@ init_calculation (PikaDrawable *drawable) drawable_position = g_list_index (layers, drawable); g_list_free (layers); - switch (curl.orientation) + switch (orientation) { case CURL_ORIENTATION_VERTICAL: sel_width = true_sel_width; @@ -736,23 +552,38 @@ init_calculation (PikaDrawable *drawable) } static PikaLayer * -do_curl_effect (PikaDrawable *drawable) +do_curl_effect (PikaDrawable *drawable, + PikaProcedureConfig *config) { - gint x = 0; - gint y = 0; - gboolean color_image; - gint x1, y1; - guint progress, max_progress; - gdouble intensity, alpha; - PikaVector2 v, dl, dr; - gdouble dl_mag, dr_mag, angle, factor; - GeglBuffer *curl_buffer; - PikaLayer *curl_layer; - PikaRGB *grad_samples = NULL; - gint width, height, n_ch; - GeglRectangle *roi; + gint x = 0; + gint y = 0; + gboolean color_image; + gint x1, y1; + guint progress, max_progress; + gdouble intensity, alpha; + PikaVector2 v, dl, dr; + gdouble dl_mag, dr_mag, angle, factor; + GeglBuffer *curl_buffer; + PikaLayer *curl_layer; + PikaRGB *grad_samples = NULL; + gint width, height, n_ch; + GeglRectangle *roi; GeglBufferIterator *iter; const Babl *format; + CurlOrientation orientation; + CurlColors colors; + CurlEdge edge; + gboolean shade; + gdouble opacity; + + orientation = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "orientation"); + colors = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "colors"); + edge = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "edge"); + + g_object_get (config, + "shade", &shade, + "opacity", &opacity, + NULL); color_image = pika_drawable_is_rgb (drawable); @@ -795,7 +626,7 @@ do_curl_effect (PikaDrawable *drawable) alpha = acos (pika_vector2_inner_product (&dl, &dr) / (dl_mag * dr_mag)); /* Gradient Samples */ - switch (curl.colors) + switch (colors) { case CURL_COLORS_FG_BG: break; @@ -825,16 +656,16 @@ do_curl_effect (PikaDrawable *drawable) for (x1 = roi->x; x1 < roi->x + roi->width; x1++) { /* Map coordinates to get the curl correct... */ - switch (curl.orientation) + switch (orientation) { case CURL_ORIENTATION_VERTICAL: - x = CURL_EDGE_RIGHT (curl.edge) ? x1 : sel_width - 1 - x1; - y = CURL_EDGE_UPPER (curl.edge) ? y1 : sel_height - 1 - y1; + x = CURL_EDGE_RIGHT (edge) ? x1 : sel_width - 1 - x1; + y = CURL_EDGE_UPPER (edge) ? y1 : sel_height - 1 - y1; break; case CURL_ORIENTATION_HORIZONTAL: - x = CURL_EDGE_LOWER (curl.edge) ? y1 : sel_width - 1 - y1; - y = CURL_EDGE_LEFT (curl.edge) ? x1 : sel_height - 1 - x1; + x = CURL_EDGE_LOWER (edge) ? y1 : sel_width - 1 - y1; + y = CURL_EDGE_LEFT (edge) ? x1 : sel_height - 1 - x1; break; } @@ -861,14 +692,14 @@ do_curl_effect (PikaDrawable *drawable) { /* Below the curl. */ factor = angle / alpha; - pika_rgba_set (&color, 0, 0, 0, curl.shade ? factor : 0); + pika_rgba_set (&color, 0, 0, 0, shade ? factor : 0); } else { PikaRGB *gradrgb; /* On the curl */ - switch (curl.colors) + switch (colors) { case CURL_COLORS_FG_BG: intensity = pow (sin (G_PI * angle / alpha), 1.5); @@ -876,7 +707,7 @@ do_curl_effect (PikaDrawable *drawable) intensity * bg_color.r + (1.0 - intensity) * fg_color.r, intensity * bg_color.g + (1.0 - intensity) * fg_color.g, intensity * bg_color.b + (1.0 - intensity) * fg_color.b, - (1.0 - intensity * (1.0 - curl.opacity))); + (1.0 - intensity * (1.0 - opacity))); break; case CURL_COLORS_GRADIENT: @@ -889,7 +720,7 @@ do_curl_effect (PikaDrawable *drawable) /* Check boundaries */ intensity = CLAMP (intensity, 0.0, 1.0); color = *gradrgb; - color.a = gradrgb->a * (1.0 - intensity * (1.0 - curl.opacity)); + color.a = gradrgb->a * (1.0 - intensity * (1.0 - opacity)); break; } } @@ -920,20 +751,26 @@ do_curl_effect (PikaDrawable *drawable) /************************************************/ static void -clear_curled_region (PikaDrawable *drawable) +clear_curled_region (PikaDrawable *drawable, + PikaProcedureConfig *config) { - gint x = 0; - gint y = 0; - guint x1, y1; - gfloat *dest, *src; - guint progress, max_progress; - GeglBuffer *buf; - GeglBuffer *shadow_buf; - GeglRectangle *roi; + gint x = 0; + gint y = 0; + guint x1, y1; + gfloat *dest, *src; + guint progress, max_progress; + GeglBuffer *buf; + GeglBuffer *shadow_buf; + GeglRectangle *roi; GeglBufferIterator *iter; - const Babl *format; - gint width, height, bpp, n_ch; - gint buf_index; + const Babl *format; + gint width, height, bpp, n_ch; + gint buf_index; + CurlOrientation orientation; + CurlEdge edge; + + orientation = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "orientation"); + edge = pika_procedure_config_get_choice_id (PIKA_PROCEDURE_CONFIG (config), "edge"); max_progress = 2 * sel_width * sel_height; progress = max_progress / 2; @@ -968,19 +805,19 @@ clear_curled_region (PikaDrawable *drawable) for (x1 = roi->x; x1 < roi->x + roi->width; x1++) { /* Map coordinates to get the curl correct... */ - switch (curl.orientation) + switch (orientation) { case CURL_ORIENTATION_VERTICAL: - x = (CURL_EDGE_RIGHT (curl.edge) ? + x = (CURL_EDGE_RIGHT (edge) ? x1 - sel_x : sel_width - 1 - (x1 - sel_x)); - y = (CURL_EDGE_UPPER (curl.edge) ? + y = (CURL_EDGE_UPPER (edge) ? y1 - sel_y : sel_height - 1 - (y1 - sel_y)); break; case CURL_ORIENTATION_HORIZONTAL: - x = (CURL_EDGE_LOWER (curl.edge) ? + x = (CURL_EDGE_LOWER (edge) ? y1 - sel_y : sel_width - 1 - (y1 - sel_y)); - y = (CURL_EDGE_LEFT (curl.edge) ? + y = (CURL_EDGE_LEFT (edge) ? x1 - sel_x : sel_height - 1 - (x1 - sel_x)); break; } @@ -1015,7 +852,8 @@ clear_curled_region (PikaDrawable *drawable) } static PikaLayer * -page_curl (PikaDrawable *drawable) +page_curl (PikaDrawable *drawable, + PikaProcedureConfig *config) { PikaLayer *curl_layer; @@ -1023,11 +861,11 @@ page_curl (PikaDrawable *drawable) pika_progress_init (_("Page Curl")); - init_calculation (drawable); + init_calculation (drawable, config); - curl_layer = do_curl_effect (drawable); + curl_layer = do_curl_effect (drawable, config); - clear_curled_region (drawable); + clear_curled_region (drawable, config); pika_image_undo_group_end (image); diff --git a/plug-ins/pikaressionist/brush.c b/plug-ins/pikaressionist/brush.c index acf6bdc..b0eceb7 100644 --- a/plug-ins/pikaressionist/brush.c +++ b/plug-ins/pikaressionist/brush.c @@ -190,9 +190,9 @@ brushdmenuselect (GtkWidget *widget, for (row = 0, y = y1; y < y2; row++, y++) { - guchar *tmprow = p->col + row * rowstride; guchar *tmprow_ptr; - gint x2 = x1 + w; + guchar *tmprow = p->col + row * rowstride; + gint x2 = x1 + w; gegl_buffer_get (src_buffer, GEGL_RECTANGLE (x1, y, w, 1), 1.0, format, src_row, diff --git a/plug-ins/pikaressionist/pika.c b/plug-ins/pikaressionist/pika.c index f3dfb4a..e94346c 100644 --- a/plug-ins/pikaressionist/pika.c +++ b/plug-ins/pikaressionist/pika.c @@ -55,7 +55,7 @@ struct _PikaressionistClass #define PIKARESSIONIST_TYPE (pikaressionist_get_type ()) -#define PIKARESSIONIST (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIKARESSIONIST_TYPE, Pikaressionist)) +#define PIKARESSIONIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIKARESSIONIST_TYPE, Pikaressionist)) GType pikaressionist_get_type (void) G_GNUC_CONST; @@ -68,7 +68,7 @@ static PikaValueArray * pikaressionist_run (PikaProcedure *p PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void pikaressionist_main (void); @@ -128,8 +128,8 @@ pikaressionist_create_procedure (PikaPlugIn *plug_in, pika_procedure_set_documentation (procedure, _("Performs various artistic " "operations"), - "Performs various artistic operations " - "on an image", + _("Performs various artistic operations " + "on an image"), name); pika_procedure_set_attribution (procedure, "Vidar Madsen ", @@ -137,10 +137,15 @@ pikaressionist_create_procedure (PikaPlugIn *plug_in, PLUG_IN_VERSION); PIKA_PROC_ARG_STRING (procedure, "preset", - "Preset", - "Preset Name", + _("Preset"), + _("Preset Name"), NULL, G_PARAM_READWRITE); + + PIKA_PROC_AUX_ARG_BYTES (procedure, "settings-data", + "Settings data", + "TODO: eventually we must implement proper args for every settings", + PIKA_PARAM_READWRITE); } return procedure; @@ -167,10 +172,11 @@ pikaressionist_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - const gchar *preset_name; + GBytes *settings_bytes = NULL; + gchar *preset_name = NULL; gegl_init (NULL, NULL); @@ -209,24 +215,33 @@ pikaressionist_run (PikaProcedure *procedure, restore_default_values (); + /* Temporary code replacing legacy pika_[gs]et_data() using an AUX argument. + * This doesn't actually fix the "Reset to initial values|factory defaults" + * features, but at least makes per-run value storage work. + * TODO: eventually we want proper separate arguments as a complete fix. + */ + g_object_get (config, "settings-data", &settings_bytes, NULL); + if (settings_bytes != NULL && g_bytes_get_size (settings_bytes) == sizeof (pikaressionist_vals_t)) + pcvals = *((pikaressionist_vals_t *) g_bytes_get_data (settings_bytes, NULL)); + g_bytes_unref (settings_bytes); + switch (run_mode) { case PIKA_RUN_INTERACTIVE: - pika_get_data (PLUG_IN_PROC, &pcvals); - - if (! create_pikaressionist ()) - { - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - } + if (! create_pikaressionist (procedure, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); break; case PIKA_RUN_NONINTERACTIVE: - preset_name = PIKA_VALUES_GET_STRING (args, 0); + g_object_get (config, + "preset", &preset_name, + NULL); if (select_preset (preset_name)) { + g_free (preset_name); return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); @@ -234,7 +249,6 @@ pikaressionist_run (PikaProcedure *procedure, break; case PIKA_RUN_WITH_LAST_VALS: - pika_get_data (PLUG_IN_PROC, &pcvals); break; } @@ -256,9 +270,6 @@ pikaressionist_run (PikaProcedure *procedure, if (run_mode != PIKA_RUN_NONINTERACTIVE) pika_displays_flush (); - - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &pcvals, sizeof (pikaressionist_vals_t)); } else { @@ -267,7 +278,12 @@ pikaressionist_run (PikaProcedure *procedure, NULL); } + settings_bytes = g_bytes_new (&pcvals, sizeof (pikaressionist_vals_t)); + g_object_set (config, "settings-data", settings_bytes, NULL); + g_bytes_unref (settings_bytes); + /* Resources Cleanup */ + g_free (preset_name); g_rand_free (random_generator); free_parsepath_cache (); brush_reload (NULL, NULL); @@ -277,7 +293,7 @@ pikaressionist_run (PikaProcedure *procedure, orientation_map_free_resources (); size_map_free_resources (); -return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); + return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } static const Babl * diff --git a/plug-ins/pikaressionist/pikaressionist.c b/plug-ins/pikaressionist/pikaressionist.c index 8d8986c..db511e2 100644 --- a/plug-ins/pikaressionist/pikaressionist.c +++ b/plug-ins/pikaressionist/pikaressionist.c @@ -111,57 +111,28 @@ create_one_column_list (GtkWidget *parent, return view; } -static void -dialog_response (GtkWidget *widget, - gint response_id, - gpointer data) -{ - switch (response_id) - { - case GTK_RESPONSE_OK: - store_values (); - pcvals.run = TRUE; - gtk_widget_destroy (widget); - break; - - default: - gtk_widget_destroy (widget); - break; - } -} - -static GtkWidget * -create_dialog (void) +static gboolean +create_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config) { GtkWidget *notebook; GtkWidget *hbox; GtkWidget *preview_box; + gboolean run; pika_ui_init (PLUG_IN_BINARY); - dialog = pika_dialog_new (_("PIKAressionist"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, - - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); + dialog = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("PIKAressionist")); pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); + GTK_RESPONSE_OK, + GTK_RESPONSE_CANCEL, + -1); pika_window_set_transient (GTK_WINDOW (dialog)); - g_signal_connect (dialog, "response", - G_CALLBACK (dialog_response), - NULL); - g_signal_connect (dialog, "destroy", - G_CALLBACK (gtk_main_quit), - NULL); - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), @@ -193,19 +164,22 @@ create_dialog (void) * */ restore_values (); - gtk_widget_show (dialog); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); + if (run) + store_values (); - return dialog; + gtk_widget_destroy (dialog); + + return run; } gint -create_pikaressionist (void) +create_pikaressionist (PikaProcedure *procedure, + PikaProcedureConfig *config) { pcvals.run = FALSE; - create_dialog (); - - gtk_main (); + pcvals.run = create_dialog (procedure, config); return pcvals.run; } diff --git a/plug-ins/pikaressionist/pikaressionist.h b/plug-ins/pikaressionist/pikaressionist.h index c585be3..8ddfc6e 100644 --- a/plug-ins/pikaressionist/pikaressionist.h +++ b/plug-ins/pikaressionist/pikaressionist.h @@ -163,8 +163,9 @@ double getsiz_proto (double x, double y, int n, smvector_t *vec, double smstrexp, int voronoi); -void set_colorbrushes (const gchar *fn); -int create_pikaressionist (void); +void set_colorbrushes (const gchar *fn); +int create_pikaressionist (PikaProcedure *procedure, + PikaProcedureConfig *config); double dist (double x, double y, double dx, double dy); diff --git a/plug-ins/pikaressionist/presets.h b/plug-ins/pikaressionist/presets.h index fe9266f..2d5ea12 100644 --- a/plug-ins/pikaressionist/presets.h +++ b/plug-ins/pikaressionist/presets.h @@ -29,10 +29,9 @@ enum SELECT_PRESET_RETURN_VALUES SELECT_PRESET_LOAD_FAILED = -2, }; -void create_presetpage (GtkNotebook *); -int select_preset (const gchar *preset); -void preset_free (void); -void preset_save_button_set_sensitive (gboolean s); +void create_presetpage (GtkNotebook *notebook); +int select_preset (const gchar *preset); +void preset_free (void); +void preset_save_button_set_sensitive (gboolean s); #endif - diff --git a/plug-ins/print/print.c b/plug-ins/print/print.c index fe046e9..6b6dd07 100644 --- a/plug-ins/print/print.c +++ b/plug-ins/print/print.c @@ -63,7 +63,7 @@ struct _PrintClass #define PRINT_TYPE (print_get_type ()) -#define PRINT (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PRINT_TYPE, Print)) +#define PRINT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PRINT_TYPE, Print)) GType print_get_type (void) G_GNUC_CONST; @@ -76,7 +76,7 @@ static PikaValueArray * print_run (PikaProcedure *procedur PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaPDBStatusType print_image (PikaImage *image, @@ -219,7 +219,7 @@ print_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaPDBStatusType status; @@ -382,9 +382,10 @@ print_image (PikaImage *image, static PikaPDBStatusType page_setup (PikaImage *image) { - GtkPrintOperation *operation; - PikaValueArray *return_vals; - gchar *name; + GtkPrintOperation *operation; + PikaProcedure *procedure; + PikaValueArray *return_vals; + gchar *name; pika_ui_init (PLUG_IN_BINARY); @@ -405,10 +406,8 @@ page_setup (PikaImage *image) pika_plug_in_set_pdb_error_handler (pika_get_plug_in (), PIKA_PDB_ERROR_HANDLER_PLUGIN); - return_vals = pika_pdb_run_procedure (pika_get_pdb (), - name, - PIKA_TYPE_IMAGE, image, - G_TYPE_NONE); + procedure = pika_pdb_lookup_procedure (pika_get_pdb (), name); + return_vals = pika_procedure_run (procedure, "image", image, NULL); pika_value_array_unref (return_vals); g_free (name); @@ -508,14 +507,18 @@ create_custom_widget (GtkPrintOperation *operation, #ifndef EMBED_PAGE_SETUP static PikaValueArray * print_temp_proc_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { - PikaImage *image = PIKA_VALUES_GET_IMAGE (args, 0); + PikaImage *image; + + g_object_get (config, "image", &image, NULL); if (print_operation) print_page_setup_load (print_operation, image); + g_object_unref (image); + return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } diff --git a/plug-ins/python/colorxhtml.py b/plug-ins/python/colorxhtml.py index f41445f..edd15a2 100644 --- a/plug-ins/python/colorxhtml.py +++ b/plug-ins/python/colorxhtml.py @@ -68,11 +68,11 @@ fmt_from_bpp = { 12: 'III' } -def save_colorxhtml(procedure, run_mode, image, n_layers, layers, file, args, data): - source_file = args.index(0) - characters = args.index(1) - size = args.index(2) - separate = args.index(3) +def save_colorxhtml(procedure, run_mode, image, n_layers, layers, file, metadata, config, data): + source_file = config.get_property("source-file") + characters = config.get_property("characters") + size = config.get_property("font-size"); + separate = config.get_property("separate") if file is None: error = 'No file given' @@ -240,6 +240,8 @@ def save_colorxhtml(procedure, run_mode, image, n_layers, layers, file, args, da chars[0:0] = data for x in range(0, width): + # pika_drawable_get_pixel() was removed mistakenly in commit + # 89c359ce47. This must get fixed. pixel_bytes = layer.get_pixel(x, y) pixel_tuple = struct.unpack(fmt, pixel_bytes) if bpp > 3: @@ -313,8 +315,8 @@ class ColorXhtml(Pika.PlugIn): procedure = None if name == 'file-colorxhtml-save': procedure = Pika.SaveProcedure.new(self, name, - Pika.PDBProcType.PLUGIN, - save_colorxhtml, None) + Pika.PDBProcType.PLUGIN, + False, save_colorxhtml, None) procedure.set_image_types("RGB") procedure.set_documentation ( _("Save as colored HTML text"), diff --git a/plug-ins/python/file-openraster.py b/plug-ins/python/file-openraster.py index 1316903..57c40cc 100644 --- a/plug-ins/python/file-openraster.py +++ b/plug-ins/python/file-openraster.py @@ -165,10 +165,11 @@ def thumbnail_ora(procedure, file, thumb_size, args, data): fid.write(orafile.read('Thumbnails/thumbnail.png')) thumb_file = Gio.file_new_for_path(tmp) - result = Pika.get_pdb().run_procedure('file-png-load', [ - GObject.Value(Pika.RunMode, Pika.RunMode.NONINTERACTIVE), - GObject.Value(Gio.File, thumb_file), - ]) + pdb_proc = Pika.get_pdb().lookup_procedure('file-png-load') + pdb_config = pdb_proc.create_config() + pdb_config.set_property('run-mode', Pika.RunMode.NONINTERACTIVE) + pdb_config.set_property('file', thumb_file) + result = pdb_proc.run(pdb_config) os.remove(tmp) os.rmdir(tempdir) @@ -190,7 +191,7 @@ def thumbnail_ora(procedure, file, thumb_size, args, data): # We would expect the n_drawables parameter to not be there with introspection but # currently that isn't working, see issue #5312. Until that is resolved we keep # this parameter here or else saving would fail. -def save_ora(procedure, run_mode, image, n_drawables, drawables, file, args, data): +def save_ora(procedure, run_mode, image, n_drawables, drawables, file, metadata, config, data): def write_file_str(zfile, fname, data): # work around a permission bug in the zipfile library: # http://bugs.python.org/issue3394 @@ -218,22 +219,22 @@ def save_ora(procedure, run_mode, image, n_drawables, drawables, file, args, dat tmp = os.path.join(tempdir, 'tmp.png') interlace, compression = 0, 2 - Pika.get_pdb().run_procedure('file-png-save', [ - GObject.Value(Pika.RunMode, Pika.RunMode.NONINTERACTIVE), - GObject.Value(Pika.Image, image), - GObject.Value(GObject.TYPE_INT, 1), - GObject.Value(Pika.ObjectArray, Pika.ObjectArray.new(Pika.Drawable, [drawable], False)), - GObject.Value(Gio.File, Gio.File.new_for_path(tmp)), - GObject.Value(GObject.TYPE_BOOLEAN, interlace), - GObject.Value(GObject.TYPE_INT, compression), - # write all PNG chunks except oFFs(ets) - GObject.Value(GObject.TYPE_BOOLEAN, True), # Save background color (bKGD chunk) - GObject.Value(GObject.TYPE_BOOLEAN, False), # Save layer offset (oFFs chunk) - GObject.Value(GObject.TYPE_BOOLEAN, True), # Save resolution (pHYs chunk) - GObject.Value(GObject.TYPE_BOOLEAN, True), # Save creation time (tIME chunk) - # Other settings - GObject.Value(GObject.TYPE_BOOLEAN, True), # Save color values from transparent pixels - ]) + pdb_proc = Pika.get_pdb().lookup_procedure('file-png-save') + pdb_config = pdb_proc.create_config() + pdb_config.set_property('run-mode', Pika.RunMode.NONINTERACTIVE) + pdb_config.set_property('image', image) + pdb_config.set_property('num-drawables', 1) + pdb_config.set_property('drawables', Pika.ObjectArray.new(Pika.Drawable, [drawable], False)) + pdb_config.set_property('file', Gio.File.new_for_path(tmp)) + pdb_config.set_property('interlaced', interlace) + pdb_config.set_property('compression', compression) + # write all PNG chunks except oFFs(ets) + pdb_config.set_property('bkgd', True) + pdb_config.set_property('offs', False) + pdb_config.set_property('phys', True) + pdb_config.set_property('time', True) + pdb_config.set_property('save-transparent', True) + pdb_proc.run(pdb_config) if (os.path.exists(tmp)): orafile.write(tmp, path) os.remove(tmp) @@ -350,7 +351,7 @@ def save_ora(procedure, run_mode, image, n_drawables, drawables, file, args, dat GObject.Value(Pika.PDBStatusType, Pika.PDBStatusType.SUCCESS) ]) -def load_ora(procedure, run_mode, file, args, data): +def load_ora(procedure, run_mode, file, metadata, flags, config, data): tempdir = tempfile.mkdtemp('pika-plugin-file-openraster') orafile = zipfile.ZipFile(file.peek_path()) stack, w, h = get_image_attributes(orafile) @@ -358,7 +359,6 @@ def load_ora(procedure, run_mode, file, args, data): Pika.progress_init("Loading openraster image") img = Pika.Image.new(w, h, Pika.ImageBaseType.RGB) - img.set_file (file) def get_layers(root): """iterates over layers and nested stacks""" @@ -410,13 +410,14 @@ def load_ora(procedure, run_mode, file, args, data): fid.write(data) # import layer, set attributes and add to image - result = pika_layer = Pika.get_pdb().run_procedure('pika-file-load-layer', [ - GObject.Value(Pika.RunMode, Pika.RunMode.NONINTERACTIVE), - GObject.Value(Pika.Image, img), - GObject.Value(Gio.File, Gio.File.new_for_path(tmp)), - ]) + pdb_proc = Pika.get_pdb().lookup_procedure('pika-file-load-layer') + pdb_config = pdb_proc.create_config() + pdb_config.set_property('run-mode', Pika.RunMode.NONINTERACTIVE) + pdb_config.set_property('image', img) + pdb_config.set_property('file', Gio.File.new_for_path(tmp)) + result = pdb_proc.run(pdb_config) if (result.index(0) == Pika.PDBStatusType.SUCCESS): - pika_layer = pika_layer.index(1) + pika_layer = result.index(1) os.remove(tmp) else: print("Error loading layer from openraster image.") @@ -448,7 +449,7 @@ def load_ora(procedure, run_mode, file, args, data): return Pika.ValueArray.new_from_values([ GObject.Value(Pika.PDBStatusType, Pika.PDBStatusType.SUCCESS), GObject.Value(Pika.Image, img), - ]) + ]), flags class FileOpenRaster (Pika.PlugIn): @@ -465,7 +466,7 @@ class FileOpenRaster (Pika.PlugIn): if name == 'file-openraster-save': procedure = Pika.SaveProcedure.new(self, name, Pika.PDBProcType.PLUGIN, - save_ora, None) + False, save_ora, None) procedure.set_image_types("*"); procedure.set_documentation ('save an OpenRaster (.ora) file', 'save an OpenRaster (.ora) file', diff --git a/plug-ins/python/foggify.py b/plug-ins/python/foggify.py index 8cdaa12..e62ed95 100644 --- a/plug-ins/python/foggify.py +++ b/plug-ins/python/foggify.py @@ -29,10 +29,7 @@ def N_(message): return message def _(message): return GLib.dgettext(None, message) -def foggify(procedure, run_mode, image, n_drawables, drawables, args, data): - config = procedure.create_config() - config.begin_run(image, run_mode, args) - +def foggify(procedure, run_mode, image, n_drawables, drawables, config, data): if run_mode == Pika.RunMode.INTERACTIVE: PikaUi.init('python-fu-foggify') dialog = PikaUi.ProcedureDialog(procedure=procedure, config=config) @@ -73,13 +70,14 @@ def foggify(procedure, run_mode, image, n_drawables, drawables, args, data): fog.add_mask(mask) # add some clouds to the layer - Pika.get_pdb().run_procedure('plug-in-plasma', [ - GObject.Value(Pika.RunMode, Pika.RunMode.NONINTERACTIVE), - GObject.Value(Pika.Image, image), - GObject.Value(Pika.Drawable, mask), - GObject.Value(GObject.TYPE_INT, int(time.time())), - GObject.Value(GObject.TYPE_DOUBLE, turbulence), - ]) + pdb_proc = Pika.get_pdb().lookup_procedure('plug-in-plasma') + pdb_config = pdb_proc.create_config() + pdb_config.set_property('run-mode', Pika.RunMode.NONINTERACTIVE) + pdb_config.set_property('image', image) + pdb_config.set_property('drawable', mask) + pdb_config.set_property('seed', int(time.time())) + pdb_config.set_property('turbulence', turbulence) + pdb_proc.run(pdb_config) # apply the clouds to the layer fog.remove_mask(Pika.MaskApplyMode.APPLY) @@ -90,8 +88,6 @@ def foggify(procedure, run_mode, image, n_drawables, drawables, args, data): image.undo_group_end() Pika.context_pop() - config.end_run(Pika.PDBStatusType.SUCCESS) - return procedure.new_return_values(Pika.PDBStatusType.SUCCESS, GLib.Error()) _color = Pika.RGB() diff --git a/plug-ins/python/gradients-save-as-css.py b/plug-ins/python/gradients-save-as-css.py index 72a83a5..1fd023d 100644 --- a/plug-ins/python/gradients-save-as-css.py +++ b/plug-ins/python/gradients-save-as-css.py @@ -61,21 +61,13 @@ def format_text(text): return ",".join(new_text) -def gradient_css_save(procedure, args, data): - if args.length() != 3: - error = 'Wrong parameters given' - return procedure.new_return_values(Pika.PDBStatusType.CALLING_ERROR, - GLib.Error(error)) - runmode = args.index(0) - gradient = args.index(1) - file = args.index(2) - - config = procedure.create_config() - config.begin_run(None, Pika.RunMode.INTERACTIVE, args) +def gradient_css_save(procedure, config, data): + runmode = config.get_property("run-mode") if runmode == Pika.RunMode.INTERACTIVE: PikaUi.init('python-fu-gradient-save-as-css') dialog = PikaUi.ProcedureDialog(procedure=procedure, config=config) + file = None # Add gradient button dialog.fill (["gradient"]) @@ -137,20 +129,19 @@ def gradient_css_save(procedure, args, data): if not dialog.run(): dialog.destroy() - config.end_run(Pika.PDBStatusType.CANCEL) return procedure.new_return_values(Pika.PDBStatusType.CANCEL, GLib.Error()) else: - gradient = config.get_property("gradient") file = Gio.file_new_for_path(file_entry.get_text()) - #Save configs for non-connected UI element config.set_property ("file", file) dialog.destroy() + gradient = config.get_property("gradient") + file = config.get_property("file") + if file is None: error = 'No file given' - config.end_run(Pika.PDBStatusType.CALLING_ERROR) return procedure.new_return_values(Pika.PDBStatusType.CALLING_ERROR, GLib.Error(error)) @@ -187,10 +178,8 @@ def gradient_css_save(procedure, args, data): flags=Gio.FileCreateFlags.REPLACE_DESTINATION, cancellable=None) if success: - config.end_run(Pika.PDBStatusType.SUCCESS) return procedure.new_return_values(Pika.PDBStatusType.SUCCESS, GLib.Error()) else: - config.end_run(Pika.PDBStatusType.EXECUTION_ERROR) return procedure.new_return_values(Pika.PDBStatusType.EXECUTION_ERROR, GLib.Error('File saving failed: {}'.format(file.get_path()))) @@ -225,7 +214,7 @@ class GradientsSaveAsCSS (Pika.PlugIn): procedure.set_documentation (_("Creates a new palette from a given gradient"), _("Creates a new palette from a given gradient"), name) - procedure.set_menu_label(_("Save as CSS...")) + procedure.set_menu_label(_("Save Gradient as CSS...")) procedure.set_attribution("Joao S. O. Bueno", "(c) GPL V3.0 or later", "2011") diff --git a/plug-ins/python/histogram-export.py b/plug-ins/python/histogram-export.py index 3686265..c585161 100644 --- a/plug-ins/python/histogram-export.py +++ b/plug-ins/python/histogram-export.py @@ -96,9 +96,8 @@ output_format_enum = StringEnum( def histogram_export(procedure, img, layers, gio_file, - bucket_size, sample_average, output_format, - progress_bar): - layers = img.get_selected_layers() + bucket_size, sample_average, output_format): + layers = img.list_selected_layers() layer = layers[0] if sample_average: new_img = img.duplicate() @@ -117,6 +116,9 @@ def histogram_export(procedure, img, layers, gio_file, try: with open(gio_file.get_path(), "wt") as hfile: writer = csv.writer(hfile) + histo_proc = Pika.get_pdb().lookup_procedure('pika-drawable-histogram') + histo_config = histo_proc.create_config() + histo_config.set_property('drawable', layer) # Write headers: writer.writerow(["Range start"] + channels_txt) @@ -130,15 +132,12 @@ def histogram_export(procedure, img, layers, gio_file, if start_range >= 1.0: break + histo_config.set_property('start-range', float(start_range)) + histo_config.set_property('end-range', float(min(start_range + bucket_size, 1.0))) row = [start_range] for channel in channels_pika: - result = Pika.get_pdb().run_procedure('pika-drawable-histogram', - [ GObject.Value(Pika.Drawable, layer), - GObject.Value(Pika.HistogramChannel, channel), - GObject.Value(GObject.TYPE_DOUBLE, - float(start_range)), - GObject.Value(GObject.TYPE_DOUBLE, - float(min(start_range + bucket_size, 1.0))) ]) + histo_config.set_property('channel', channel) + result = histo_proc.run(histo_config) if output_format == output_format_enum.pixel_count: count = int(result.index(5)) @@ -151,16 +150,12 @@ def histogram_export(procedure, img, layers, gio_file, writer.writerow(row) # Update progress bar - if progress_bar: - fraction = i / max_index - # Only update the progress bar if it changed at least 1% . - new_percent = math.floor(fraction * 100) - if new_percent != progress_bar_int_percent: - progress_bar_int_percent = new_percent - progress_bar.set_fraction(fraction) - # Make sure the progress bar gets drawn on screen. - while Gtk.events_pending(): - Gtk.main_iteration() + fraction = i / max_index + # Only update the progress bar if it changed at least 1% . + new_percent = math.floor(fraction * 100) + if new_percent != progress_bar_int_percent: + progress_bar_int_percent = new_percent + Pika.progress_update(fraction) except IsADirectoryError: return procedure.new_return_values(Pika.PDBStatusType.EXECUTION_ERROR, GLib.Error(_("File is either a directory or file name is empty."))) @@ -177,112 +172,21 @@ def histogram_export(procedure, img, layers, gio_file, return procedure.new_return_values(Pika.PDBStatusType.SUCCESS, GLib.Error()) -def run(procedure, run_mode, image, n_layers, layers, args, data): - gio_file = args.index(0) - bucket_size = args.index(1) - sample_average = args.index(2) - output_format = args.index(3) - - progress_bar = None - config = None - +def run(procedure, run_mode, image, n_layers, layers, config, data): if run_mode == Pika.RunMode.INTERACTIVE: - - config = procedure.create_config() - - # Set properties from arguments. These properties will be changed by the UI. - #config.set_property("file", gio_file) - #config.set_property("bucket_size", bucket_size) - #config.set_property("sample_average", sample_average) - #config.set_property("output_format", output_format) - config.begin_run(image, run_mode, args) - PikaUi.init("histogram-export.py") - use_header_bar = Gtk.Settings.get_default().get_property("gtk-dialogs-use-header") - dialog = PikaUi.Dialog(use_header_bar=use_header_bar, - title=_("Histogram Export...")) - dialog.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) - dialog.add_button(_("_OK"), Gtk.ResponseType.OK) - vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, - homogeneous=False, spacing=10) - dialog.get_content_area().add(vbox) - vbox.show() + dialog = PikaUi.ProcedureDialog.new(procedure, config, _("Histogram Export...")) + dialog.fill(None) - # Create grid to set all the properties inside. - grid = Gtk.Grid() - grid.set_column_homogeneous(False) - grid.set_border_width(10) - grid.set_column_spacing(10) - grid.set_row_spacing(10) - vbox.add(grid) - grid.show() - - # UI for the file parameter - - def choose_file(widget): - if file_chooser_dialog.run() == Gtk.ResponseType.OK: - if file_chooser_dialog.get_file() is not None: - config.set_property("file", file_chooser_dialog.get_file()) - file_entry.set_text(file_chooser_dialog.get_file().get_path()) - file_chooser_dialog.hide() - - file_chooser_button = Gtk.Button.new_with_mnemonic(label=_("_File...")) - grid.attach(file_chooser_button, 0, 0, 1, 1) - file_chooser_button.show() - file_chooser_button.connect("clicked", choose_file) - - file_entry = Gtk.Entry.new() - grid.attach(file_entry, 1, 0, 1, 1) - file_entry.set_width_chars(40) - file_entry.set_placeholder_text(_("Choose export file...")) - if gio_file is not None: - file_entry.set_text(gio_file.get_path()) - file_entry.show() - - file_chooser_dialog = Gtk.FileChooserDialog(use_header_bar=use_header_bar, - title=_("Histogram Export file..."), - action=Gtk.FileChooserAction.SAVE) - file_chooser_dialog.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) - file_chooser_dialog.add_button(_("_OK"), Gtk.ResponseType.OK) - - # Bucket size parameter - label = Gtk.Label.new_with_mnemonic(_("_Bucket Size")) - grid.attach(label, 0, 1, 1, 1) - label.show() - spin = PikaUi.prop_spin_button_new(config, "bucket_size", step_increment=0.001, page_increment=0.1, digits=3) - grid.attach(spin, 1, 1, 1, 1) - spin.show() - - # Sample average parameter - spin = PikaUi.prop_check_button_new(config, "sample_average", _("Sample _Average")) - spin.set_tooltip_text(_("If checked, the histogram is generated from merging all visible layers." - " Otherwise, the histogram is only for the current layer.")) - grid.attach(spin, 1, 2, 1, 1) - spin.show() - - # Output format parameter - label = Gtk.Label.new_with_mnemonic(_("_Output Format")) - grid.attach(label, 0, 3, 1, 1) - label.show() - combo = PikaUi.prop_string_combo_box_new(config, "output_format", output_format_enum.get_tree_model(), 0, 1) - grid.attach(combo, 1, 3, 1, 1) - combo.show() - - progress_bar = Gtk.ProgressBar() - vbox.add(progress_bar) - progress_bar.show() - - dialog.show() - if dialog.run() != Gtk.ResponseType.OK: + if not dialog.run(): return procedure.new_return_values(Pika.PDBStatusType.CANCEL, GLib.Error()) - # Extract values from UI - gio_file = Gio.file_new_for_path(file_entry.get_text()) # config.get_property("file") - bucket_size = config.get_property("bucket_size") - sample_average = config.get_property("sample_average") - output_format = config.get_property("output_format") + gio_file = config.get_property('file') + bucket_size = config.get_property("bucket-size") + sample_average = config.get_property("sample-average") + output_format = config.get_property("output-format") if gio_file is None: error = 'No file given' @@ -290,11 +194,7 @@ def run(procedure, run_mode, image, n_layers, layers, args, data): GLib.Error(error)) result = histogram_export(procedure, image, layers, gio_file, - bucket_size, sample_average, output_format, progress_bar) - - # If the execution was successful, save parameters so they will be restored next time we show dialog. - if result.index(0) == Pika.PDBStatusType.SUCCESS and config is not None: - config.end_run(Pika.PDBStatusType.SUCCESS) + bucket_size, sample_average, output_format) return result @@ -303,31 +203,24 @@ class HistogramExport(Pika.PlugIn): ## Parameters ## __gproperties__ = { - # "filename": (str, - # # TODO: I wanted this property to be a path (and not just str) , so I could use - # # prop_file_chooser_button_new to open a file dialog. However, it fails without an error message. - # # Pika.ConfigPath, - # _("Histogram _File"), - # _("Histogram _File"), - # "histogram_export.csv", - # # Pika.ConfigPathType.FILE, - # GObject.ParamFlags.READWRITE), + # TODO: GFile props still don't have labels + only load existing files + # (here we likely want to create a new file). "file": (Gio.File, _("Histogram _File"), "Histogram export file", GObject.ParamFlags.READWRITE), - "bucket_size": (float, + "bucket-size": (float, _("_Bucket Size"), "Bucket Size", 0.001, 1.0, 0.01, GObject.ParamFlags.READWRITE), - "sample_average": (bool, + "sample-average": (bool, _("Sample _Average"), "Sample Average", False, GObject.ParamFlags.READWRITE), - "output_format": (str, - _("Output format"), + "output-format": (str, + _("Output _format"), "Output format: 'pixel count', 'normalized', 'percent'", "pixel count", GObject.ParamFlags.READWRITE), @@ -359,9 +252,9 @@ class HistogramExport(Pika.PlugIn): procedure.add_menu_path("/Colors/Info/") procedure.add_argument_from_property(self, "file") - procedure.add_argument_from_property(self, "bucket_size") - procedure.add_argument_from_property(self, "sample_average") - procedure.add_argument_from_property(self, "output_format") + procedure.add_argument_from_property(self, "bucket-size") + procedure.add_argument_from_property(self, "sample-average") + procedure.add_argument_from_property(self, "output-format") return procedure diff --git a/plug-ins/python/palette-offset.py b/plug-ins/python/palette-offset.py index d41a71c..6c30d4d 100644 --- a/plug-ins/python/palette-offset.py +++ b/plug-ins/python/palette-offset.py @@ -108,30 +108,20 @@ class PaletteOffset (Pika.PlugIn): return procedure - def run(self, procedure, args, data): - palette = None - amount = 1 + def run(self, procedure, config, data): + runmode = config.get_property("run-mode") + palette = config.get_property("palette") + amount = config.get_property("amount") - # Get the parameters - if args.length() < 1: - error = 'No parameters given' - return procedure.new_return_values(Pika.PDBStatusType.CALLING_ERROR, - GLib.Error(error)) - runmode = args.index(0) - - if args.length() > 1: - palette = args.index(1) if palette is None: palette = Pika.context_get_palette() + config.set_property("palette", palette) if not palette.is_valid(): error = f'Invalid palette ID: {palette.get_id()}' return procedure.new_return_values(Pika.PDBStatusType.CALLING_ERROR, GLib.Error(error)) - if args.length() > 2: - amount = args.index(2) - if runmode == Pika.RunMode.INTERACTIVE: gi.require_version('Gtk', '3.0') from gi.repository import Gtk @@ -140,7 +130,7 @@ class PaletteOffset (Pika.PlugIn): use_header_bar = Gtk.Settings.get_default().get_property("gtk-dialogs-use-header") dialog = PikaUi.Dialog(use_header_bar=use_header_bar, - title=_("Offset Palette...")) + title=_("Offset Palette...")) dialog.add_button(_("_Cancel"), Gtk.ResponseType.CANCEL) dialog.add_button(_("_OK"), Gtk.ResponseType.OK) @@ -162,10 +152,10 @@ class PaletteOffset (Pika.PlugIn): dialog.show() if dialog.run() != Gtk.ResponseType.OK: - print ("Canceled") return procedure.new_return_values(Pika.PDBStatusType.CANCEL, GLib.Error("Canceled")) amount = self.get_property("amount") + config.set_property("amount", amount) #If palette is read only, work on a copy: editable = palette.is_editable() diff --git a/plug-ins/python/palette-sort.py b/plug-ins/python/palette-sort.py index a8ae71b..8d4e700 100644 --- a/plug-ins/python/palette-sort.py +++ b/plug-ins/python/palette-sort.py @@ -444,21 +444,9 @@ class PaletteSort (Pika.PlugIn): return procedure - def run(self, procedure, args, data): - config = procedure.create_config() - config.begin_run(None, Pika.RunMode.INTERACTIVE, args) - - run_mode = args.index(0) - palette = args.index(1) - selection = args.index(2) - slice_expr = args.index(3) - channel1 = args.index(4) - ascending1 = args.index(5) - channel2 = args.index(6) - ascending2 = args.index(7) - quantize = args.index(8) - pchannel = args.index(9) - pquantize = args.index(10) + def run(self, procedure, config, data): + run_mode = config.get_property("run-mode") + palette = config.get_property("palette") if palette is None or not palette.is_valid(): if palette is not None: @@ -466,6 +454,7 @@ class PaletteSort (Pika.PlugIn): sys.stderr.write('This should not happen. Please report to PIKA project.\n') sys.stderr.write('Falling back to context palette instead.\n') palette = Pika.context_get_palette() + config.set_property("palette", palette) if not palette.is_valid(): palette_name = palette.get_id() @@ -489,22 +478,20 @@ class PaletteSort (Pika.PlugIn): if not dialog.run(): dialog.destroy() - config.end_run(Pika.PDBStatusType.CANCEL) return procedure.new_return_values(Pika.PDBStatusType.CANCEL, GLib.Error()) - else: - palette = config.get_property("palette") - selection = config.get_property("selections") - slice_expr = config.get_property ("slice_expr") - channel1 = config.get_property("channel1") - ascending1 = config.get_property ("ascending1") - channel2 = config.get_property("channel2") - ascending2 = config.get_property ("ascending2") - quantize = config.get_property ("quantize") - pchannel = config.get_property("pchannel") - pquantize = config.get_property ("pquantize") - dialog.destroy() + dialog.destroy() + palette = config.get_property("palette") + selection = config.get_property("selections") + slice_expr = config.get_property ("slice_expr") + channel1 = config.get_property("channel1") + ascending1 = config.get_property ("ascending1") + channel2 = config.get_property("channel2") + ascending2 = config.get_property ("ascending2") + quantize = config.get_property ("quantize") + pchannel = config.get_property("pchannel") + pquantize = config.get_property ("pquantize") try: new_palette = palette_sort(palette, selection, slice_expr, channel1, ascending1, channel2, ascending2, quantize, pchannel, pquantize) @@ -512,13 +499,10 @@ class PaletteSort (Pika.PlugIn): return procedure.new_return_values(Pika.PDBStatusType.EXECUTION_ERROR, GLib.Error(str(err))) - config.end_run(Pika.PDBStatusType.SUCCESS) - return_val = procedure.new_return_values(Pika.PDBStatusType.SUCCESS, GLib.Error()) value = GObject.Value(Pika.Palette, new_palette) return_val.remove(1) return_val.insert(1, value) return return_val - Pika.main(PaletteSort.__gtype__, sys.argv) diff --git a/plug-ins/python/palette-to-gradient.py b/plug-ins/python/palette-to-gradient.py index 3d64cb4..defaf3c 100644 --- a/plug-ins/python/palette-to-gradient.py +++ b/plug-ins/python/palette-to-gradient.py @@ -33,7 +33,7 @@ def make_gradient(palette, num_segments, num_colors): # name the gradient same as the source palette # For now, the name of a resource is the same as the ID - palette_name = palette.get_id() + palette_name = palette.get_name() gradient = Pika.Gradient.new(palette_name) # assert gradient is valid but is has only one segment assert gradient.get_number_of_segments() == 1 @@ -56,13 +56,9 @@ def make_gradient(palette, num_segments, num_colors): Pika.context_set_gradient(gradient) return gradient -def run(procedure, args, data): - config = procedure.create_config() - config.begin_run(None, Pika.RunMode.INTERACTIVE, args) - +def run(procedure, config, data): # Get the parameters - run_mode = args.index(0) - palette = args.index(1) + run_mode = config.get_property("run-mode") if run_mode == Pika.RunMode.INTERACTIVE: PikaUi.init(procedure.get_name()) @@ -73,19 +69,18 @@ def run(procedure, args, data): if not dialog.run(): dialog.destroy() - config.end_run(Pika.PDBStatusType.CANCEL) return procedure.new_return_values(Pika.PDBStatusType.CANCEL, GLib.Error()) - else: - palette = config.get_property("palette") - dialog.destroy() + dialog.destroy() + palette = config.get_property("palette") if palette is None or not palette.is_valid(): if palette is not None: sys.stderr.write(f'Invalid palette id: {palette.get_id()}\n') sys.stderr.write('This should not happen. Please report to PIKA project.\n') sys.stderr.write('Falling back to context palette instead.\n') palette = Pika.context_get_palette() + config.set_property("palette", palette) num_colors = palette.get_color_count() @@ -95,7 +90,6 @@ def run(procedure, args, data): num_segments = num_colors gradient = make_gradient(palette, num_segments, num_colors) - config.end_run(Pika.PDBStatusType.SUCCESS) # XXX: for the error parameter, we want to return None. # Unfortunately even though the argument is (nullable), pygobject # looks like it may have a bug. So workaround is to just set a @@ -132,7 +126,7 @@ class PaletteToGradient (Pika.PlugIn): ## Parameter: palette ## @GObject.Property(type=Pika.Palette, default=None, - nick= _("Palette")) + nick= _("_Palette")) def palette(self): '''Palette or None for the currently selected palette''' return self.palette diff --git a/plug-ins/python/python-console/python-console.py b/plug-ins/python/python-console/python-console.py index 3cc0cc9..16a1a66 100644 --- a/plug-ins/python/python-console/python-console.py +++ b/plug-ins/python/python-console/python-console.py @@ -41,7 +41,7 @@ PROC_NAME = 'python-fu-console' RESPONSE_BROWSE, RESPONSE_CLEAR, RESPONSE_SAVE = range(3) -def run(procedure, args, data): +def run(procedure, config, data): PikaUi.init ("python-console.py") namespace = {'__builtins__': __builtins__, @@ -51,6 +51,7 @@ def run(procedure, args, data): 'Gdk': gi.repository.Gdk, 'Gegl': gi.repository.Gegl, 'Pika': gi.repository.Pika, + 'PikaUi': gi.repository.PikaUi, 'Gio': gi.repository.Gio, 'Gtk': gi.repository.Gtk, 'GdkPixbuf': gi.repository.GdkPixbuf, @@ -160,71 +161,30 @@ def run(procedure, args, data): if proc is None: return None - cmd = '' - return_values = proc.get_return_values() - # assert is list of GParamSpec + param_specs = proc.get_arguments() - ''' - Cat str of variable names to which unpack return values - Variable names same as return value name, mangled - Str like: 'retval_1, ret_val_2 = ' - ''' + cmd = f"procedure = Pika.get_pdb().lookup_procedure('{proc_name}'); " + cmd += f"config = procedure.create_config(); " + + for arg in param_specs: + if arg.name == 'run-mode': + # Special handling for run mode. + cmd += "config.set_property('" + arg.name + "', Pika.RunMode.INTERACTIVE); " + else: + cmd += "config.set_property('" + arg.name + "', " + arg.name.replace('-', '_') + "); " + + cmd += f"result = procedure.run(config); " + + cmd += f"success = result.index(0)" if len(return_values) > 0: - cmd += ', '.join(x.name.replace('-', '_') for x in return_values) - cmd += ' = ' - # else is a void PDB procedure - - ''' - Cat prefix of str for a call to procedure name - Prefix like: Pika.get_pdb().run_procedure('', - Note: - - proc name is quoted, run_procedure wants a string. - - proc name has hyphens. Not a Python name. Matches name in PDB. - - trailing comma, another arg to follow: - run_procedure takes two args: string name, and GValueArray of args - ''' - cmd += f"Pika.get_pdb().run_procedure('{proc_name}', " - - ''' - Assemble argument string. - Using names of formal args, which might not match names already - defined in the browsing environment (the REPL). - - Args are passed to a PDB procedure in a GValueArray. - Assemble a string like '[arg_1, arg_2]'. - When eval'd, the Python binding will convert to a GValueArray. - ''' - param_specs = proc.get_arguments() - cmd += '[ ' - - ''' - Special handling for run mode. - PIKA v2: PikaFu had different handling for run mode. - Insure run mode interactive, i.e. called procedure may open a GUI. - - This assumes that procedures use the same formal name for runmode arg. - There might be rare other cases, especially for third party plugins? - E.G. See formal signature of file-gex-load - - There is no other way to distinguish the run mode formal argument, - as its formal type is PikaParamEnum, a generic enum. - ''' - if len(param_specs) > 0 and param_specs[0].name == 'run-mode': - cmd += 'Pika.RunMode.INTERACTIVE, ' - param_specs = param_specs[1:] - # else doesn't take a run mode arg - - # Cat string of arg names to a call - # Like: 'arg_1, arg_2' where formal names arg-1 and arg-2 - cmd += ', '.join(x.name.replace('-', '_') for x in param_specs) - - # terminate the arg array, and close parens the call - cmd += '])' + i = 1 + for retval in return_values: + cmd += '; {} = result.index({})'.format(retval.name.replace('-', '_'), i) + i += 1 return cmd - def browse_response(self, dlg, response_id): if response_id != Gtk.ResponseType.APPLY: Gtk.Widget.hide(dlg) diff --git a/plug-ins/python/python-eval.py b/plug-ins/python/python-eval.py index 7b061b8..c1894fa 100644 --- a/plug-ins/python/python-eval.py +++ b/plug-ins/python/python-eval.py @@ -26,13 +26,12 @@ from gi.repository import Gio import sys -def code_eval(procedure, run_mode, code, args, data): +def code_eval(procedure, run_mode, code, config, data): if code == '-': code = sys.stdin.read() exec(code, globals()) return procedure.new_return_values(Pika.PDBStatusType.SUCCESS, GLib.Error()) - class PythonEval (Pika.PlugIn): ## PikaPlugIn virtual methods ## def do_set_i18n(self, procname): diff --git a/plug-ins/python/spyro-plus.py b/plug-ins/python/spyro-plus.py index 2a626f7..96c7407 100644 --- a/plug-ins/python/spyro-plus.py +++ b/plug-ins/python/spyro-plus.py @@ -375,15 +375,10 @@ class SelectionToPath: else: selection_was_empty = False - result = Pika.get_pdb().run_procedure('plug-in-sel2path', [ - GObject.Value(Pika.RunMode, Pika.RunMode.NONINTERACTIVE), - GObject.Value(Pika.Image, self.image), - GObject.Value(GObject.TYPE_INT, 0), - # XXX: I could use self.image.list_selected_layers() but for - # this call, it doesn't matter anyway. - GObject.Value(Pika.ObjectArray, - Pika.ObjectArray.new(Pika.Drawable, [], False)), - ]) + proc = Pika.get_pdb().lookup_procedure('plug-in-sel2path') + config = proc.create_config() + config.set_property('image', self.image) + result = proc.run(config) self.path = self.image.list_vectors()[0] self.stroke_ids = self.path.get_strokes() @@ -2212,7 +2207,7 @@ class SpyropikaPlusPlugin(Pika.PlugIn): ## Parameters ## __gproperties__ = { - "curve_type" : (int, + "curve-type" : (int, _("The curve type { Spyrograph (0), Epitrochoid (1), Sine (2), Lissajous(3) }"), _("The curve type { Spyrograph (0), Epitrochoid (1), Sine (2), Lissajous(3) }"), 0, 3, 0, @@ -2232,17 +2227,17 @@ class SpyropikaPlusPlugin(Pika.PlugIn): _("Morph shape of fixed gear, between 0 and 1. Only used by some shapes."), 0.0, 1.0, 0.0, GObject.ParamFlags.READWRITE), - "fixed_teeth": (int, + "fixed-teeth": (int, _("Number of teeth for fixed gear"), _("Number of teeth for fixed gear"), 0, GLib.MAXINT, 96, GObject.ParamFlags.READWRITE), - "moving_teeth": (int, + "moving-teeth": (int, _("Number of teeth for moving gear"), _("Number of teeth for moving gear"), 0, GLib.MAXINT, 36, GObject.ParamFlags.READWRITE), - "hole_percent": (float, + "hole-percent": (float, _("Location of hole in moving gear in percent, where 100 means that " "the hole is at the edge of the gear, and 0 means the hole is at the center"), _("Location of hole in moving gear in percent, where 100 means that " @@ -2254,17 +2249,17 @@ class SpyropikaPlusPlugin(Pika.PlugIn): _("Margin from selection, in pixels"), 0, GLib.MAXINT, 0, GObject.ParamFlags.READWRITE), - "equal_w_h": (bool, + "equal-w-h": (bool, _("Make height and width equal"), _("Make height and width equal"), False, GObject.ParamFlags.READWRITE), - "pattern_rotation": (float, + "pattern-rotation": (float, _("Pattern rotation, in degrees"), _("Pattern rotation, in degrees"), -360.0, 360.0, 0.0, GObject.ParamFlags.READWRITE), - "shape_rotation": (float, + "shape-rotation": (float, _("Shape rotation of fixed gear, in degrees"), _("Shape rotation of fixed gear, in degrees"), -360.0, 360.0, 0.0, @@ -2274,7 +2269,7 @@ class SpyropikaPlusPlugin(Pika.PlugIn): _("Tool to use for drawing the pattern."), 0, GLib.MAXINT, 1, GObject.ParamFlags.READWRITE), - "long_gradient" : (bool, + "long-gradient" : (bool, _("Whether to apply a long gradient to match the length of the pattern. " "Only applicable to some of the tools."), _("Whether to apply a long gradient to match the length of the pattern. " @@ -2307,37 +2302,37 @@ class SpyropikaPlusPlugin(Pika.PlugIn): "2018") procedure.add_menu_path ("/Filters/Render/") - procedure.add_argument_from_property(self, "curve_type") + procedure.add_argument_from_property(self, "curve-type") procedure.add_argument_from_property(self, "shape") procedure.add_argument_from_property(self, "sides") procedure.add_argument_from_property(self, "morph") - procedure.add_argument_from_property(self, "fixed_teeth") - procedure.add_argument_from_property(self, "moving_teeth") + procedure.add_argument_from_property(self, "fixed-teeth") + procedure.add_argument_from_property(self, "moving-teeth") procedure.add_argument_from_property(self, "hole_percent") procedure.add_argument_from_property(self, "margin") - procedure.add_argument_from_property(self, "equal_w_h") - procedure.add_argument_from_property(self, "pattern_rotation") - procedure.add_argument_from_property(self, "shape_rotation") + procedure.add_argument_from_property(self, "equal-w-h") + procedure.add_argument_from_property(self, "pattern-rotation") + procedure.add_argument_from_property(self, "shape-rotation") procedure.add_argument_from_property(self, "tool") - procedure.add_argument_from_property(self, "long_gradient") + procedure.add_argument_from_property(self, "long-gradient") return procedure # Implementation of plugin. - def plug_in_spyropika(self, procedure, run_mode, image, n_layers, layers, args, data): - curve_type=args.index(0) - shape=args.index(1) - sides=args.index(2) - morph=args.index(3) - fixed_teeth=args.index(4) - moving_teeth=args.index(5) - hole_percent=args.index(6) - margin=args.index(7) - equal_w_h=args.index(8) - pattern_rotation=args.index(9) - shape_rotation=args.index(10) - tool=args.index(11) - long_gradient=args.index(12) + def plug_in_spyropika(self, procedure, run_mode, image, n_layers, layers, config, data): + curve_type=config.get_property('curve-type') + shape=config.get_property('shape') + sides=config.get_property('sides') + morph=config.get_property('morph') + fixed_teeth=config.get_property('fixed-teeth') + moving_teeth=config.get_property('moving-teeth') + hole_percent=config.get_property('hole-percent') + margin=config.get_property('margin') + equal_w_h=config.get_property('equal-w-h') + pattern_rotation=config.get_property('pattern-rotation') + shape_rotation=config.get_property('shape-rotation') + tool=config.get_property('tool') + long_gradient=config.get_property('long-gradient') if run_mode == Pika.RunMode.NONINTERACTIVE: pp = PatternParameters() diff --git a/plug-ins/python/test-dialog.py b/plug-ins/python/test-dialog.py index 998dc71..0dfce44 100644 --- a/plug-ins/python/test-dialog.py +++ b/plug-ins/python/test-dialog.py @@ -18,6 +18,8 @@ gi.require_version('Pika', '3.0') from gi.repository import Pika gi.require_version('PikaUi', '3.0') from gi.repository import PikaUi +gi.require_version('Gegl', '0.4') +from gi.repository import Gegl from gi.repository import GObject from gi.repository import GLib from gi.repository import Gio @@ -90,15 +92,13 @@ def process_args(brush, font, gradient, palette, pattern): return -def test_dialog(procedure, run_mode, image, n_drawables, drawables, args, data): +def test_dialog(procedure, run_mode, image, n_drawables, drawables, config, data): ''' Just a standard shell for a plugin. ''' - config = procedure.create_config() - config.begin_run(image, run_mode, args) - if run_mode == Pika.RunMode.INTERACTIVE: PikaUi.init('python-fu-test-dialog') + Gegl.init(None) dialog = PikaUi.ProcedureDialog(procedure=procedure, config=config) dialog.fill(None) if not dialog.run(): @@ -122,8 +122,6 @@ def test_dialog(procedure, run_mode, image, n_drawables, drawables, args, data): Pika.context_pop() - config.end_run(Pika.PDBStatusType.SUCCESS) - return procedure.new_return_values(Pika.PDBStatusType.SUCCESS, GLib.Error()) diff --git a/plug-ins/screenshot/screenshot-freedesktop.c b/plug-ins/screenshot/screenshot-freedesktop.c index bcdf466..cfd1c2a 100644 --- a/plug-ins/screenshot/screenshot-freedesktop.c +++ b/plug-ins/screenshot/screenshot-freedesktop.c @@ -35,6 +35,9 @@ #ifdef GDK_WINDOWING_X11 #include #endif +#ifdef GDK_WINDOWING_WAYLAND +#include +#endif #include "screenshot.h" #include "screenshot-freedesktop.h" @@ -127,22 +130,33 @@ screenshot_freedesktop_dbus_signal (GDBusProxy *proxy, } PikaPDBStatusType -screenshot_freedesktop_shoot (ScreenshotValues *shootvals, - GdkMonitor *monitor, - PikaImage **image, - GError **error) +screenshot_freedesktop_shoot (GdkMonitor *monitor, + PikaImage **image, + GError **error) { GVariant *retval; GVariantBuilder *options; gchar *opath = NULL; gchar *parent_window = NULL; +#if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WAYLAND) + GBytes *handle; + + handle = pika_progress_get_window_handle (); +#endif #ifdef GDK_WINDOWING_X11 if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { GdkWindow *window; + guint32 *handle_data; + guint32 window_id; + gsize handle_size; - window = pika_ui_get_progress_window (); + handle_data = (guint32 *) g_bytes_get_data (handle, &handle_size); + g_return_val_if_fail (handle_size == sizeof (guint32), PIKA_PDB_EXECUTION_ERROR); + window_id = *handle_data; + + window = gdk_x11_window_foreign_new_for_display (gdk_display_get_default (), window_id); if (window) { gint id; @@ -152,15 +166,26 @@ screenshot_freedesktop_shoot (ScreenshotValues *shootvals, } } #endif - - if (shootvals->shoot_type != SHOOT_ROOT) +#ifdef GDK_WINDOWING_WAYLAND + if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) { - /* This should not happen. */ - return PIKA_PDB_EXECUTION_ERROR; - } + char *handle_data; + gchar *handle_str; + gsize handle_size; - if (shootvals->screenshot_delay > 0) - screenshot_delay (shootvals->screenshot_delay); + handle_data = (char *) g_bytes_get_data (handle, &handle_size); + /* Even though this should be the case by design, this ensures the + * string is NULL-terminated to avoid out-of allocated memory access. + */ + handle_str = g_strndup (handle_data, handle_size); + parent_window = g_strdup_printf ("wayland:%s", handle_str); + g_free (handle_str); + } +#endif + +#if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WAYLAND) + g_bytes_unref (handle); +#endif options = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); /* "interactive" option will display the options first (otherwise, it diff --git a/plug-ins/screenshot/screenshot-freedesktop.h b/plug-ins/screenshot/screenshot-freedesktop.h index 68d0426..724724d 100644 --- a/plug-ins/screenshot/screenshot-freedesktop.h +++ b/plug-ins/screenshot/screenshot-freedesktop.h @@ -27,8 +27,7 @@ gboolean screenshot_freedesktop_available (void); ScreenshotCapabilities screenshot_freedesktop_get_capabilities (void); -PikaPDBStatusType screenshot_freedesktop_shoot (ScreenshotValues *shootvals, - GdkMonitor *monitor, +PikaPDBStatusType screenshot_freedesktop_shoot (GdkMonitor *monitor, PikaImage **image, GError **error); diff --git a/plug-ins/screenshot/screenshot-osx.c b/plug-ins/screenshot/screenshot-osx.c index c53e6ef..05b0258 100644 --- a/plug-ins/screenshot/screenshot-osx.c +++ b/plug-ins/screenshot/screenshot-osx.c @@ -78,10 +78,13 @@ screenshot_osx_get_capabilities (void) } PikaPDBStatusType -screenshot_osx_shoot (ScreenshotValues *shootvals, - GdkScreen *screen, - PikaImage **image, - GError **error) +screenshot_osx_shoot (ShootType shoot_type, + guint select_delay, + guint screenshot_delay, + gboolean decorate, + gboolean show_cursor, + PikaImage **image, + GError **error) { const gchar *mode = " "; const gchar *cursor = " "; @@ -90,30 +93,30 @@ screenshot_osx_shoot (ScreenshotValues *shootvals, gchar *quoted; gchar *command = NULL; - switch (shootvals->shoot_type) + switch (shoot_type) { case SHOOT_REGION: - if (shootvals->select_delay > 0) - screenshot_delay (shootvals->select_delay); + if (select_delay > 0) + screenshot_wait_delay (select_delay); mode = "-is"; break; case SHOOT_WINDOW: - if (shootvals->select_delay > 0) - screenshot_delay (shootvals->select_delay); + if (select_delay > 0) + screenshot_wait_delay (select_delay); - if (shootvals->decorate) + if (decorate) mode = "-iwo"; else mode = "-iw"; - if (shootvals->show_cursor) + if (show_cursor) cursor = "-C"; break; case SHOOT_ROOT: mode = " "; - if (shootvals->show_cursor) + if (show_cursor) cursor = "-C"; break; @@ -122,7 +125,7 @@ screenshot_osx_shoot (ScreenshotValues *shootvals, break; } - delay = g_strdup_printf ("-T %i", shootvals->screenshot_delay); + delay = g_strdup_printf ("-T %i", screenshot_delay); tmpfile = pika_temp_file ("png"); quoted = g_shell_quote (g_file_peek_path (tmpfile)); diff --git a/plug-ins/screenshot/screenshot-osx.h b/plug-ins/screenshot/screenshot-osx.h index b8cbc59..2bd9b7e 100644 --- a/plug-ins/screenshot/screenshot-osx.h +++ b/plug-ins/screenshot/screenshot-osx.h @@ -29,10 +29,13 @@ gboolean screenshot_osx_available (void); ScreenshotCapabilities screenshot_osx_get_capabilities (void); -PikaPDBStatusType screenshot_osx_shoot (ScreenshotValues *shootvals, - GdkScreen *screen, - PikaImage **image, - GError **error); +PikaPDBStatusType screenshot_osx_shoot (ShootType shoot_type, + guint select_delay, + guint screenshot_delay, + gboolean decorate, + gboolean show_cursor, + PikaImage **image, + GError **error); #endif /* PLATFORM_OSX */ diff --git a/plug-ins/screenshot/screenshot-win32.c b/plug-ins/screenshot/screenshot-win32.c index 0812ca3..c2b01a5 100644 --- a/plug-ins/screenshot/screenshot-win32.c +++ b/plug-ins/screenshot/screenshot-win32.c @@ -168,33 +168,35 @@ screenshot_win32_get_capabilities (void) } PikaPDBStatusType -screenshot_win32_shoot (ScreenshotValues *shootvals, - GdkMonitor *monitor, - PikaImage **_image, - GError **error) +screenshot_win32_shoot (ShootType shoot_type, + guint screenshot_delay, + gboolean show_cursor, + GdkMonitor *monitor, + PikaImage **_image, + GError **error) { PikaPDBStatusType status = PIKA_PDB_EXECUTION_ERROR; - /* leave "shootvals->monitor" alone until somebody patches the code + /* leave "monitor" alone until somebody patches the code * to be able to get a monitor's color profile */ image = _image; - winsnapvals.delay = shootvals->screenshot_delay; - capturePointer = shootvals->show_cursor; + winsnapvals.delay = screenshot_delay; + capturePointer = show_cursor; - if (shootvals->shoot_type == SHOOT_ROOT) + if (shoot_type == SHOOT_ROOT) { doCapture (0); status = PIKA_PDB_SUCCESS; } - else if (shootvals->shoot_type == SHOOT_WINDOW) + else if (shoot_type == SHOOT_WINDOW) { status = 0 == doWindowCapture () ? PIKA_PDB_CANCEL : PIKA_PDB_SUCCESS; } - else if (shootvals->shoot_type == SHOOT_REGION) + else if (shoot_type == SHOOT_REGION) { /* FIXME */ } diff --git a/plug-ins/screenshot/screenshot-win32.h b/plug-ins/screenshot/screenshot-win32.h index b28cb14..91f7ef5 100644 --- a/plug-ins/screenshot/screenshot-win32.h +++ b/plug-ins/screenshot/screenshot-win32.h @@ -37,10 +37,12 @@ gboolean screenshot_win32_available (void); ScreenshotCapabilities screenshot_win32_get_capabilities (void); -PikaPDBStatusType screenshot_win32_shoot (ScreenshotValues *shootvals, - GdkMonitor *monitor, - PikaImage **image, - GError **error); +PikaPDBStatusType screenshot_win32_shoot (ShootType shoot_type, + guint screenshot_delay, + gboolean show_cursor, + GdkMonitor *monitor, + PikaImage **image, + GError **error); #endif /* G_OS_WIN32 */ diff --git a/plug-ins/screenshot/screenshot-x11.c b/plug-ins/screenshot/screenshot-x11.c index 0f8c8cd..3e91501 100644 --- a/plug-ins/screenshot/screenshot-x11.c +++ b/plug-ins/screenshot/screenshot-x11.c @@ -52,7 +52,7 @@ #include "libpika/stdplugins-intl.h" -static guint32 select_window (ScreenshotValues *shootvals, +static guint32 select_window (PikaProcedureConfig *config, GdkMonitor *monitor); static PikaImage * create_image (cairo_surface_t *surface, cairo_region_t *shape, @@ -62,8 +62,8 @@ static PikaImage * create_image (cairo_surface_t *surface, /* Allow the user to select a window or a region with the mouse */ static guint32 -select_window (ScreenshotValues *shootvals, - GdkMonitor *monitor) +select_window (PikaProcedureConfig *config, + GdkMonitor *monitor) { Display *x_dpy = GDK_DISPLAY_XDISPLAY (gdk_monitor_get_display (monitor)); gint x_scr = 0; @@ -80,7 +80,21 @@ select_window (ScreenshotValues *shootvals, gint mask = ButtonPressMask | ButtonReleaseMask; gboolean cancel = FALSE; - if (shootvals->shoot_type == SHOOT_REGION) + ShootType shoot_type; + guint screenshot_delay; + gboolean decorate; + gint x1 = 0; + gint y1 = 0; + gint x2 = 0; + gint y2 = 0; + + g_object_get (config, + "shoot-type", &shoot_type, + "screenshot-delay", &screenshot_delay, + "include-decoration", &decorate, + NULL); + + if (shoot_type == SHOOT_REGION) mask |= PointerMotionMask; status = XGrabPointer (x_dpy, x_root, False, @@ -99,7 +113,7 @@ select_window (ScreenshotValues *shootvals, g_message (_("Error selecting the window")); } - if (shootvals->shoot_type == SHOOT_REGION) + if (shoot_type == SHOOT_REGION) { XGCValues gc_values; @@ -180,12 +194,12 @@ select_window (ScreenshotValues *shootvals, if (x_win == None) x_win = x_root; #ifdef HAVE_X11_XMU_WINUTIL_H - else if (! shootvals->decorate) + else if (! decorate) x_win = XmuClientWindow (x_dpy, x_win); #endif - shootvals->x2 = shootvals->x1 = x_event.xbutton.x_root; - shootvals->y2 = shootvals->y1 = x_event.xbutton.y_root; + x2 = x1 = x_event.xbutton.x_root; + y2 = y1 = x_event.xbutton.y_root; } buttons++; @@ -195,39 +209,39 @@ select_window (ScreenshotValues *shootvals, if (buttons > 0) buttons--; - if (! buttons && shootvals->shoot_type == SHOOT_REGION) + if (! buttons && shoot_type == SHOOT_REGION) { - x = MIN (shootvals->x1, shootvals->x2); - y = MIN (shootvals->y1, shootvals->y2); - w = ABS (shootvals->x2 - shootvals->x1); - h = ABS (shootvals->y2 - shootvals->y1); + x = MIN (x1, x2); + y = MIN (y1, y2); + w = ABS (x2 - x1); + h = ABS (y2 - y1); if (w > 0 && h > 0) XDrawRectangle (x_dpy, x_root, x_gc, x, y, w, h); - shootvals->x2 = x_event.xbutton.x_root; - shootvals->y2 = x_event.xbutton.y_root; + x2 = x_event.xbutton.x_root; + y2 = x_event.xbutton.y_root; } break; case MotionNotify: if (buttons > 0) { - x = MIN (shootvals->x1, shootvals->x2); - y = MIN (shootvals->y1, shootvals->y2); - w = ABS (shootvals->x2 - shootvals->x1); - h = ABS (shootvals->y2 - shootvals->y1); + x = MIN (x1, x2); + y = MIN (y1, y2); + w = ABS (x2 - x1); + h = ABS (y2 - y1); if (w > 0 && h > 0) XDrawRectangle (x_dpy, x_root, x_gc, x, y, w, h); - shootvals->x2 = x_event.xmotion.x_root; - shootvals->y2 = x_event.xmotion.y_root; + x2 = x_event.xmotion.x_root; + y2 = x_event.xmotion.y_root; - x = MIN (shootvals->x1, shootvals->x2); - y = MIN (shootvals->y1, shootvals->y2); - w = ABS (shootvals->x2 - shootvals->x1); - h = ABS (shootvals->y2 - shootvals->y1); + x = MIN (x1, x2); + y = MIN (y1, y2); + w = ABS (x2 - x1); + h = ABS (y2 - y1); if (w > 0 && h > 0) XDrawRectangle (x_dpy, x_root, x_gc, x, y, w, h); @@ -287,6 +301,8 @@ select_window (ScreenshotValues *shootvals, if (x_gc != NULL) XFreeGC (x_dpy, x_gc); + g_object_set (config, "x1", x1, "x2", x2, "y1", y1, "y2", y2, NULL); + return x_win; } @@ -560,10 +576,10 @@ screenshot_x11_get_capabilities (void) } PikaPDBStatusType -screenshot_x11_shoot (ScreenshotValues *shootvals, - GdkMonitor *monitor, - PikaImage **image, - GError **error) +screenshot_x11_shoot (PikaProcedureConfig *config, + GdkMonitor *monitor, + PikaImage **image, + GError **error) { GdkDisplay *display; GdkScreen *screen; @@ -577,33 +593,55 @@ screenshot_x11_shoot (ScreenshotValues *shootvals, gchar *name = NULL; gint x, y; + ShootType shoot_type; + guint screenshot_delay; + guint select_delay; + gboolean show_cursor; + guint window_id = 0; + + g_object_get (config, + "shoot-type", &shoot_type, + "screenshot-delay", &screenshot_delay, + "selection-delay", &select_delay, + "include-pointer", &show_cursor, + NULL); + /* use default screen if we are running non-interactively */ if (monitor == NULL) monitor = gdk_display_get_monitor (gdk_display_get_default (), 0); - if (shootvals->shoot_type != SHOOT_ROOT && ! shootvals->window_id) + if (shoot_type != SHOOT_ROOT) { - if (shootvals->select_delay > 0) - screenshot_delay (shootvals->select_delay); + if (select_delay > 0) + screenshot_wait_delay (select_delay); - shootvals->window_id = select_window (shootvals, monitor); + window_id = select_window (config, monitor); - if (! shootvals->window_id) + if (! window_id) return PIKA_PDB_CANCEL; } - if (shootvals->screenshot_delay > 0) - screenshot_delay (shootvals->screenshot_delay); + if (screenshot_delay > 0) + screenshot_wait_delay (screenshot_delay); display = gdk_monitor_get_display (monitor); screen = gdk_display_get_default_screen (display); - if (shootvals->shoot_type == SHOOT_REGION) + if (shoot_type == SHOOT_REGION) { - rect.x = MIN (shootvals->x1, shootvals->x2); - rect.y = MIN (shootvals->y1, shootvals->y2); - rect.width = ABS (shootvals->x2 - shootvals->x1); - rect.height = ABS (shootvals->y2 - shootvals->y1); + gint x1; + gint y1; + gint x2; + gint y2; + + g_object_get (config, + "x1", &x1, "y1", &y1, + "x2", &x2, "y2", &y2, + NULL); + rect.x = MIN (x1, x2); + rect.y = MIN (y1, y2); + rect.width = ABS (x2 - x1); + rect.height = ABS (y2 - y1); monitor = gdk_display_get_monitor_at_point (display, rect.x + rect.width / 2, @@ -611,7 +649,7 @@ screenshot_x11_shoot (ScreenshotValues *shootvals, } else { - if (shootvals->shoot_type == SHOOT_ROOT) + if (shoot_type == SHOOT_ROOT) { window = gdk_screen_get_root_window (screen); @@ -619,9 +657,7 @@ screenshot_x11_shoot (ScreenshotValues *shootvals, } else { - window = gdk_x11_window_foreign_new_for_display (display, - shootvals->window_id); - + window = gdk_x11_window_foreign_new_for_display (display, window_id); monitor = gdk_display_get_monitor_at_window (display, window); } @@ -662,11 +698,11 @@ screenshot_x11_shoot (ScreenshotValues *shootvals, gdk_display_beep (display); - if (shootvals->shoot_type == SHOOT_WINDOW) + if (shoot_type == SHOOT_WINDOW) { - name = window_get_title (display, shootvals->window_id); + name = window_get_title (display, window_id); - shape = window_get_shape (monitor, shootvals->window_id); + shape = window_get_shape (monitor, window_id); if (shape) cairo_region_translate (shape, x - rect.x, y - rect.y); @@ -684,8 +720,7 @@ screenshot_x11_shoot (ScreenshotValues *shootvals, /* FIXME: Some time might have passed until we get here. * The cursor image should be grabbed together with the screenshot. */ - if ((shootvals->shoot_type == SHOOT_ROOT || - shootvals->shoot_type == SHOOT_WINDOW) && shootvals->show_cursor) + if ((shoot_type == SHOOT_ROOT || shoot_type == SHOOT_WINDOW) && show_cursor) add_cursor_image (*image, display); profile = pika_monitor_get_color_profile (monitor); diff --git a/plug-ins/screenshot/screenshot-x11.h b/plug-ins/screenshot/screenshot-x11.h index ef7b541..337e1ea 100644 --- a/plug-ins/screenshot/screenshot-x11.h +++ b/plug-ins/screenshot/screenshot-x11.h @@ -29,10 +29,10 @@ gboolean screenshot_x11_available (void); ScreenshotCapabilities screenshot_x11_get_capabilities (void); -PikaPDBStatusType screenshot_x11_shoot (ScreenshotValues *shootvals, - GdkMonitor *monitor, - PikaImage **image, - GError **error); +PikaPDBStatusType screenshot_x11_shoot (PikaProcedureConfig *config, + GdkMonitor *monitor, + PikaImage **image, + GError **error); #endif /* GDK_WINDOWING_X11 */ diff --git a/plug-ins/screenshot/screenshot.c b/plug-ins/screenshot/screenshot.c index 1eac848..4aacb60 100644 --- a/plug-ins/screenshot/screenshot.c +++ b/plug-ins/screenshot/screenshot.c @@ -59,7 +59,7 @@ struct _ScreenshotClass }; #define SCREENSHOT_TYPE (screenshot_get_type ()) -#define SCREENSHOT (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SCREENSHOT_TYPE, Screenshot)) +#define SCREENSHOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SCREENSHOT_TYPE, Screenshot)) GType screenshot_get_type (void) G_GNUC_CONST; @@ -68,16 +68,19 @@ static PikaProcedure * screenshot_create_procedure (PikaPlugIn *plug_ const gchar *name); static PikaValueArray * screenshot_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static PikaPDBStatusType shoot (GdkMonitor *monitor, - PikaImage **image, - GError **error); +static PikaPDBStatusType shoot (GdkMonitor *monitor, + PikaImage **image, + PikaProcedureConfig *config, + GError **error); -static gboolean shoot_dialog (GdkMonitor **monitor); -static gboolean shoot_quit_timeout (gpointer data); -static gboolean shoot_delay_timeout (gpointer data); +static gboolean shoot_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + GdkMonitor **monitor); +static gboolean shoot_quit_timeout (gpointer data); +static gboolean shoot_delay_timeout (gpointer data); G_DEFINE_TYPE (Screenshot, screenshot, PIKA_TYPE_PLUG_IN) @@ -86,26 +89,8 @@ PIKA_MAIN (SCREENSHOT_TYPE) DEFINE_STD_SET_I18N -static ScreenshotBackend backend = SCREENSHOT_BACKEND_NONE; -static ScreenshotCapabilities capabilities = 0; -static GtkWidget *select_delay_grid = NULL; -static GtkWidget *shot_delay_grid = NULL; - -static ScreenshotValues shootvals = -{ - SHOOT_WINDOW, /* root window */ - TRUE, /* include WM decorations */ - 0, /* window ID */ - 0, /* select delay */ - 0, /* screenshot delay */ - 0, /* coords of region dragged out by pointer */ - 0, - 0, - 0, - FALSE, /* show cursor */ - SCREENSHOT_PROFILE_POLICY_MONITOR -}; - +static ScreenshotBackend backend = SCREENSHOT_BACKEND_NONE; +static ScreenshotCapabilities capabilities = 0; static void screenshot_class_init (ScreenshotClass *klass) @@ -130,7 +115,7 @@ screenshot_query_procedures (PikaPlugIn *plug_in) static PikaProcedure * screenshot_create_procedure (PikaPlugIn *plug_in, - const gchar *name) + const gchar *name) { PikaProcedure *procedure = NULL; @@ -180,10 +165,10 @@ screenshot_create_procedure (PikaPlugIn *plug_in, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "shoot-type", - "Shoot type", + _("Shoot _area"), "The shoot type { SHOOT-WINDOW (0), SHOOT-ROOT (1), " "SHOOT-REGION (2) }", - 0, 2, 0, + 0, 2, SHOOT_WINDOW, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "x1", @@ -210,6 +195,42 @@ screenshot_create_procedure (PikaPlugIn *plug_in, G_MININT, G_MAXINT, 0, G_PARAM_READWRITE); + PIKA_PROC_ARG_BOOLEAN (procedure, "include-pointer", + "Include _mouse pointer", + "Your pointing device's cursor will be part of the image", + FALSE, + G_PARAM_READWRITE); + + /* Since no backends allow window screenshot non-interactively so far, no + * need to expose this argument to the API. + */ + PIKA_PROC_AUX_ARG_BOOLEAN (procedure, "include-decoration", + "Include window _decoration", + "Title bar, window borders and shadow will be part of the image", +#ifdef PLATFORM_OSX + /* on OS X, this just means shoot the shadow, default to nope */ + FALSE, +#else + TRUE, +#endif + G_PARAM_READWRITE); + PIKA_PROC_AUX_ARG_INT (procedure, "selection-delay", + "Selection d_elay", + "Delay before selection of the window or the region", + 0, 20, 0, + G_PARAM_READWRITE); + PIKA_PROC_AUX_ARG_INT (procedure, "screenshot-delay", + "Screenshot dela_y", + "Delay before snapping the screenshot", + 0, 20, 0, + G_PARAM_READWRITE); + PIKA_PROC_AUX_ARG_INT (procedure, "color-profile", + _("Color _Profile"), + "{ SCREENSHOT_PROFILE_POLICY_MONITOR, (0), " + "SCREENSHOT_PROFILE_POLICY_MONITOR, (1) } ", + 0, 1, SCREENSHOT_PROFILE_POLICY_MONITOR, + G_PARAM_READWRITE); + PIKA_PROC_VAL_IMAGE (procedure, "image", "Image", "Output image", @@ -222,7 +243,7 @@ screenshot_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * screenshot_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals; @@ -232,19 +253,29 @@ screenshot_run (PikaProcedure *procedure, PikaImage *image = NULL; GError *error = NULL; + ShootType shoot_type; + ScreenshotProfilePolicy profile_policy; + gegl_init (NULL, NULL); - run_mode = PIKA_VALUES_GET_ENUM (args, 0); - pika_ui_init (PLUG_IN_BINARY); + g_object_get (config, + "run-mode", &run_mode, + "shoot-type", &shoot_type, + NULL); + + if (! gdk_init_check (NULL, NULL)) + { + g_set_error_literal (&error, PIKA_PLUG_IN_ERROR, 0, _("GDK initialization failed.")); + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + error); + } #ifdef PLATFORM_OSX if (! backend && screenshot_osx_available ()) { backend = SCREENSHOT_BACKEND_OSX; capabilities = screenshot_osx_get_capabilities (); - - /* on OS X, this just means shoot the shadow, default to nope */ - shootvals.decorate = FALSE; } #endif @@ -269,24 +300,36 @@ screenshot_run (PikaProcedure *procedure, capabilities = screenshot_freedesktop_get_capabilities (); } + if (backend == SCREENSHOT_BACKEND_NONE) + { + g_set_error_literal (&error, PIKA_PLUG_IN_ERROR, 0, + _("No screenshot backends available.")); + return pika_procedure_new_return_values (procedure, + PIKA_PDB_EXECUTION_ERROR, + error); + } /* how are we running today? */ switch (run_mode) { case PIKA_RUN_INTERACTIVE: - /* Possibly retrieve data from a previous run */ - pika_get_data (PLUG_IN_PROC, &shootvals); - shootvals.window_id = 0; + pika_ui_init (PLUG_IN_BINARY); - if ((shootvals.shoot_type == SHOOT_WINDOW && + /* In interactive mode, coords are always reset. */ + g_object_set (config, + "x1", 0, "y1", 0, + "x2", 0, "y2", 0, + NULL); + + if ((shoot_type == SHOOT_WINDOW && ! (capabilities & SCREENSHOT_CAN_SHOOT_WINDOW)) || - (shootvals.shoot_type == SHOOT_REGION && + (shoot_type == SHOOT_REGION && ! (capabilities & SCREENSHOT_CAN_SHOOT_REGION))) { /* Shoot root is the only type of shoot which is definitely * shared by all screenshot backends (basically just snap the * whole display setup). */ - shootvals.shoot_type = SHOOT_ROOT; + g_object_set (config, "shoot-type", SHOOT_ROOT, NULL); } /* Get information from the dialog. Freedesktop portal comes with @@ -294,7 +337,7 @@ screenshot_run (PikaProcedure *procedure, */ if (backend != SCREENSHOT_BACKEND_FREEDESKTOP) { - if (! shoot_dialog (&monitor)) + if (! shoot_dialog (procedure, config, &monitor)) status = PIKA_PDB_CANCEL; } else @@ -308,30 +351,20 @@ screenshot_run (PikaProcedure *procedure, break; case PIKA_RUN_NONINTERACTIVE: - shootvals.shoot_type = PIKA_VALUES_GET_INT (args, 1); - shootvals.window_id = PIKA_VALUES_GET_INT (args, 2); - shootvals.select_delay = 0; - shootvals.x1 = PIKA_VALUES_GET_INT (args, 3); - shootvals.y1 = PIKA_VALUES_GET_INT (args, 4); - shootvals.x2 = PIKA_VALUES_GET_INT (args, 5); - shootvals.y2 = PIKA_VALUES_GET_INT (args, 6); - - if (! gdk_init_check (NULL, NULL)) - status = PIKA_PDB_CALLING_ERROR; - - if (! (capabilities & SCREENSHOT_CAN_PICK_NONINTERACTIVELY)) + if (backend == SCREENSHOT_BACKEND_FREEDESKTOP) { - if (shootvals.shoot_type == SHOOT_WINDOW || - shootvals.shoot_type == SHOOT_REGION) - { - status = PIKA_PDB_CALLING_ERROR; - } + /* With portals, even the basic full screenshot is interactive. */ + status = PIKA_PDB_CALLING_ERROR; + } + else if (! (capabilities & SCREENSHOT_CAN_PICK_NONINTERACTIVELY)) + { + if (shoot_type == SHOOT_WINDOW || + shoot_type == SHOOT_REGION) + status = PIKA_PDB_CALLING_ERROR; } break; case PIKA_RUN_WITH_LAST_VALS: - /* Possibly retrieve data from a previous run */ - pika_get_data (PLUG_IN_PROC, &shootvals); break; default: @@ -339,9 +372,7 @@ screenshot_run (PikaProcedure *procedure, } if (status == PIKA_PDB_SUCCESS) - { - status = shoot (monitor, &image, &error); - } + status = shoot (monitor, &image, config, &error); if (status == PIKA_PDB_SUCCESS) { @@ -349,7 +380,14 @@ screenshot_run (PikaProcedure *procedure, pika_image_undo_disable (image); - if (shootvals.profile_policy == SCREENSHOT_PROFILE_POLICY_SRGB) + g_object_get (config, + "color-profile", &profile_policy, + NULL); + + if (run_mode == PIKA_RUN_NONINTERACTIVE) + profile_policy = SCREENSHOT_PROFILE_POLICY_MONITOR; + + if (profile_policy == SCREENSHOT_PROFILE_POLICY_SRGB) { PikaColorProfile *srgb_profile = pika_color_profile_new_rgb_srgb (); @@ -378,13 +416,15 @@ screenshot_run (PikaProcedure *procedure, if (run_mode == PIKA_RUN_INTERACTIVE) { - /* Store variable states for next run */ - pika_set_data (PLUG_IN_PROC, &shootvals, sizeof (ScreenshotValues)); + guint select_delay; pika_display_new (image); + g_object_get (config, + "selection-delay", &select_delay, + NULL); /* Give some sort of feedback that the shot is done */ - if (shootvals.select_delay > 0) + if (select_delay > 0) { gdk_display_beep (gdk_monitor_get_display (monitor)); /* flush so the beep makes it to the server */ @@ -405,26 +445,45 @@ screenshot_run (PikaProcedure *procedure, /* The main Screenshot function */ static PikaPDBStatusType -shoot (GdkMonitor *monitor, - PikaImage **image, - GError **error) +shoot (GdkMonitor *monitor, + PikaImage **image, + PikaProcedureConfig *config, + GError **error) { + ShootType shoot_type; + gboolean decorate; + guint select_delay; + guint screenshot_delay; + gboolean show_cursor; + + g_object_get (config, + "shoot-type", &shoot_type, + "screenshot-delay", &screenshot_delay, + "selection-delay", &select_delay, + "include-decoration", &decorate, + "include-pointer", &show_cursor, + NULL); + #ifdef PLATFORM_OSX if (backend == SCREENSHOT_BACKEND_OSX) - return screenshot_osx_shoot (&shootvals, monitor, image, error); + return screenshot_osx_shoot (shoot_type, + select_delay, screenshot_delay, + decorate, show_cursor, + image, error); #endif #ifdef G_OS_WIN32 if (backend == SCREENSHOT_BACKEND_WIN32) - return screenshot_win32_shoot (&shootvals, monitor, image, error); + return screenshot_win32_shoot (shoot_type, screenshot_delay, show_cursor, + monitor, image, error); #endif if (backend == SCREENSHOT_BACKEND_FREEDESKTOP) - return screenshot_freedesktop_shoot (&shootvals, monitor, image, error); + return screenshot_freedesktop_shoot (monitor, image, error); #ifdef GDK_WINDOWING_X11 if (backend == SCREENSHOT_BACKEND_X11) - return screenshot_x11_shoot (&shootvals, monitor, image, error); + return screenshot_x11_shoot (config, monitor, image, error); #endif return PIKA_PDB_CALLING_ERROR; /* silence compiler */ @@ -433,416 +492,133 @@ shoot (GdkMonitor *monitor, /* Screenshot dialog */ -static void -shoot_dialog_add_hint (GtkNotebook *notebook, - ShootType type, - const gchar *hint) -{ - GtkWidget *label; - - label = g_object_new (GTK_TYPE_LABEL, - "label", hint, - "wrap", TRUE, - "justify", GTK_JUSTIFY_LEFT, - "xalign", 0.0, - "yalign", 0.0, - NULL); - pika_label_set_attributes (GTK_LABEL (label), - PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC, - -1); - - gtk_notebook_insert_page (notebook, label, NULL, type); - gtk_widget_show (label); -} - -static void -shoot_radio_button_toggled (GtkWidget *widget, - GtkWidget *notebook) -{ - pika_radio_button_update (widget, &shootvals.shoot_type); - - if (select_delay_grid) - { - if (shootvals.shoot_type == SHOOT_ROOT || - (shootvals.shoot_type == SHOOT_WINDOW && - ! (capabilities & SCREENSHOT_CAN_PICK_WINDOW))) - { - gtk_widget_hide (select_delay_grid); - } - else - { - gtk_widget_show (select_delay_grid); - } - } - if (shot_delay_grid) - { - if (shootvals.shoot_type == SHOOT_WINDOW && - (capabilities & SCREENSHOT_CAN_PICK_WINDOW) && - ! (capabilities & SCREENSHOT_CAN_DELAY_WINDOW_SHOT)) - { - gtk_widget_hide (shot_delay_grid); - } - else - { - gtk_widget_show (shot_delay_grid); - } - } - gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), shootvals.shoot_type); -} - static gboolean -shoot_dialog (GdkMonitor **monitor) +shoot_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config, + GdkMonitor **monitor) { - GtkWidget *dialog; - GtkWidget *main_vbox; - GtkWidget *notebook1; - GtkWidget *notebook2; - GtkWidget *frame; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *button; - GtkWidget *toggle; - GtkWidget *spinner; - GtkWidget *grid; - GSList *radio_group = NULL; - GtkAdjustment *adj; - gboolean run; - GtkWidget *cursor_toggle = NULL; + GtkWidget *dialog; + GtkListStore *store; + PikaValueArray *values; + GValue value = G_VALUE_INIT; + gboolean run; - dialog = pika_dialog_new (_("Screenshot"), PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, + dialog = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Screenshot")); + pika_procedure_dialog_set_ok_label (PIKA_PROCEDURE_DIALOG (dialog), _("S_nap")); - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("S_nap"), GTK_RESPONSE_OK, + store = pika_int_store_new (_("Take a screenshot of a single window"), SHOOT_WINDOW, + _("Take a screenshot of the entire screen"), SHOOT_ROOT, + _("Select a region to grab"), SHOOT_REGION, + NULL); + pika_procedure_dialog_get_int_combo (PIKA_PROCEDURE_DIALOG (dialog), + "shoot-type", PIKA_INT_STORE (store)); - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, - GTK_RESPONSE_CANCEL, - -1); - - main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - main_vbox, FALSE, FALSE, 0); - gtk_widget_show (main_vbox); - - - /* Create delay hints notebooks early */ - notebook1 = g_object_new (GTK_TYPE_NOTEBOOK, - "show-border", FALSE, - "show-tabs", FALSE, - NULL); - notebook2 = g_object_new (GTK_TYPE_NOTEBOOK, - "show-border", FALSE, - "show-tabs", FALSE, - NULL); - - /* Area */ - frame = pika_frame_new (_("Area")); - gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); - - /* Single window */ - if (capabilities & SCREENSHOT_CAN_SHOOT_WINDOW) + if (capabilities & SCREENSHOT_CAN_SHOOT_POINTER || + capabilities & SCREENSHOT_CAN_SHOOT_DECORATIONS) { - button = gtk_radio_button_new_with_mnemonic (radio_group, - _("Take a screenshot of " - "a single _window")); - radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); + if (! (capabilities & SCREENSHOT_CAN_SHOOT_POINTER)) + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "contents-box", + "include-decoration", + NULL); + else if (! (capabilities & SCREENSHOT_CAN_SHOOT_DECORATIONS)) + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "contents-box", + "include-pointer", + NULL); + else + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "contents-box", + "include-decoration", + "include-pointer", + NULL); - g_object_set_data (G_OBJECT (button), "pika-item-data", - GINT_TO_POINTER (SHOOT_WINDOW)); + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "contents-frame-title", + _("Contents"), FALSE, FALSE); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "contents-frame", "contents-frame-title", + FALSE, "contents-box"); - g_signal_connect (button, "toggled", - G_CALLBACK (shoot_radio_button_toggled), - notebook1); - g_signal_connect (button, "toggled", - G_CALLBACK (shoot_radio_button_toggled), - notebook2); - - /* Window decorations */ if (capabilities & SCREENSHOT_CAN_SHOOT_DECORATIONS) { - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - toggle = gtk_check_button_new_with_mnemonic (_("Include window _decoration")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - shootvals.decorate); - gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 24); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &shootvals.decorate); - - g_object_bind_property (button, "active", - toggle, "sensitive", - G_BINDING_SYNC_CREATE); + values = pika_value_array_new (1); + g_value_init (&value, G_TYPE_INT); + g_value_set_int (&value, SHOOT_WINDOW); + pika_value_array_append (values, &value); + g_value_unset (&value); + pika_procedure_dialog_set_sensitive_if_in (PIKA_PROCEDURE_DIALOG (dialog), + "include-decoration", + NULL, "shoot-type", + values, TRUE); } - /* Mouse pointer */ if (capabilities & SCREENSHOT_CAN_SHOOT_POINTER) { - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - cursor_toggle = gtk_check_button_new_with_mnemonic (_("Include _mouse pointer")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cursor_toggle), - shootvals.show_cursor); - gtk_box_pack_start (GTK_BOX (hbox), cursor_toggle, TRUE, TRUE, 24); - gtk_widget_show (cursor_toggle); - - g_signal_connect (cursor_toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &shootvals.show_cursor); - - g_object_bind_property (button, "active", - cursor_toggle, "sensitive", - G_BINDING_SYNC_CREATE); + values = pika_value_array_new (1); + g_value_init (&value, G_TYPE_INT); + g_value_set_int (&value, SHOOT_REGION); + pika_value_array_append (values, &value); + g_value_unset (&value); + pika_procedure_dialog_set_sensitive_if_in (PIKA_PROCEDURE_DIALOG (dialog), + "include-pointer", + NULL, "shoot-type", + values, FALSE); } - - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), - shootvals.shoot_type == SHOOT_WINDOW); } - /* Whole screen */ - button = gtk_radio_button_new_with_mnemonic (radio_group, - _("Take a screenshot of " - "the entire _screen")); - radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - g_object_set_data (G_OBJECT (button), "pika-item-data", - GINT_TO_POINTER (SHOOT_ROOT)); - - g_signal_connect (button, "toggled", - G_CALLBACK (shoot_radio_button_toggled), - notebook1); - g_signal_connect (button, "toggled", - G_CALLBACK (shoot_radio_button_toggled), - notebook2); - - /* Mouse pointer */ - if (capabilities & SCREENSHOT_CAN_SHOOT_POINTER) + if (capabilities & SCREENSHOT_CAN_DELAY_WINDOW_SHOT) { - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - toggle = gtk_check_button_new_with_mnemonic (_("Include _mouse pointer")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - shootvals.show_cursor); - gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 24); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (pika_toggle_button_update), - &shootvals.show_cursor); - - if (cursor_toggle) + if (capabilities & SCREENSHOT_CAN_PICK_WINDOW) { - g_object_bind_property (cursor_toggle, "active", - toggle, "active", - G_BINDING_BIDIRECTIONAL); + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "delay-box", + "selection-delay", + "screenshot-delay", + NULL); + + values = pika_value_array_new (1); + g_value_init (&value, G_TYPE_INT); + g_value_set_int (&value, SHOOT_ROOT); + pika_value_array_append (values, &value); + g_value_unset (&value); + pika_procedure_dialog_set_sensitive_if_in (PIKA_PROCEDURE_DIALOG (dialog), + "selection-delay", + NULL, "shoot-type", + values, FALSE); } - g_object_bind_property (button, "active", - toggle, "sensitive", - G_BINDING_SYNC_CREATE); + else + { + pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "delay-box", "screenshot-delay", NULL); + } + + pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog), + "delay-frame-title", + _("Delay"), FALSE, FALSE); + pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (dialog), + "delay-frame", "delay-frame-title", + FALSE, "delay-box"); } - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), - shootvals.shoot_type == SHOOT_ROOT); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), "shoot-type", NULL); - /* Dragged region */ - if (capabilities & SCREENSHOT_CAN_SHOOT_REGION) - { - button = gtk_radio_button_new_with_mnemonic (radio_group, - _("Select a _region to grab")); - radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), - shootvals.shoot_type == SHOOT_REGION); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); + store = pika_int_store_new (_("Tag image with monitor profile"), SCREENSHOT_PROFILE_POLICY_MONITOR, + _("Convert image with sRGB"), SCREENSHOT_PROFILE_POLICY_SRGB, + NULL); + pika_procedure_dialog_get_int_combo (PIKA_PROCEDURE_DIALOG (dialog), + "color-profile", PIKA_INT_STORE (store)); - g_object_set_data (G_OBJECT (button), "pika-item-data", - GINT_TO_POINTER (SHOOT_REGION)); + if ((capabilities & SCREENSHOT_CAN_SHOOT_POINTER) || + (capabilities & SCREENSHOT_CAN_SHOOT_DECORATIONS)) + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), "contents-frame", NULL); - g_signal_connect (button, "toggled", - G_CALLBACK (shoot_radio_button_toggled), - notebook1); - g_signal_connect (button, "toggled", - G_CALLBACK (shoot_radio_button_toggled), - notebook2); - } + if (capabilities & SCREENSHOT_CAN_DELAY_WINDOW_SHOT) + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), "delay-frame", NULL); - frame = pika_frame_new (_("Delay")); - gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); - - /* Selection delay */ - grid = gtk_grid_new (); - select_delay_grid = grid; - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); - /* Check if this delay must be hidden from start. */ - if (shootvals.shoot_type == SHOOT_REGION || - (shootvals.shoot_type == SHOOT_WINDOW && - capabilities & SCREENSHOT_CAN_PICK_WINDOW)) - { - gtk_widget_show (select_delay_grid); - } - - label = gtk_label_new (_("Selection delay: ")); - gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); - gtk_widget_show (label); - - adj = gtk_adjustment_new (shootvals.select_delay, - 0.0, 100.0, 1.0, 5.0, 0.0); - spinner = pika_spin_button_new (adj, 0, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner), TRUE); - gtk_grid_attach (GTK_GRID (grid), spinner, 1, 0, 1, 1); - gtk_widget_show (spinner); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (pika_int_adjustment_update), - &shootvals.select_delay); - - /* translators: this is the unit label of a spinbutton */ - label = gtk_label_new (_("seconds")); - gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 1, 1); - gtk_widget_set_hexpand (label, TRUE); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_widget_show (label); - - /* Selection delay hints */ - gtk_grid_attach (GTK_GRID (grid), notebook1, 0, 1, 3, 1); - gtk_widget_show (notebook1); - - /* No selection delay for full-screen. */ - shoot_dialog_add_hint (GTK_NOTEBOOK (notebook1), SHOOT_ROOT, ""); - shoot_dialog_add_hint (GTK_NOTEBOOK (notebook1), SHOOT_REGION, - _("After the delay, drag your mouse to select " - "the region for the screenshot.")); -#ifdef G_OS_WIN32 - shoot_dialog_add_hint (GTK_NOTEBOOK (notebook1), SHOOT_WINDOW, - _("Click in a window to snap it after delay.")); -#else - if (capabilities & SCREENSHOT_CAN_PICK_WINDOW) - { - shoot_dialog_add_hint (GTK_NOTEBOOK (notebook1), SHOOT_WINDOW, - _("At the end of the delay, click in a window " - "to snap it.")); - } - else - { - shoot_dialog_add_hint (GTK_NOTEBOOK (notebook1), SHOOT_WINDOW, ""); - } -#endif - gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook1), shootvals.shoot_type); - - /* Screenshot delay */ - grid = gtk_grid_new (); - shot_delay_grid = grid; - gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); - if (shootvals.shoot_type != SHOOT_WINDOW || - ! (capabilities & SCREENSHOT_CAN_PICK_WINDOW) || - (capabilities & SCREENSHOT_CAN_DELAY_WINDOW_SHOT)) - { - gtk_widget_show (grid); - } - - label = gtk_label_new_with_mnemonic (_("Screenshot dela_y: ")); - gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); - gtk_widget_show (label); - - adj = gtk_adjustment_new (shootvals.screenshot_delay, - 0.0, 100.0, 1.0, 5.0, 0.0); - spinner = pika_spin_button_new (adj, 0, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner), TRUE); - gtk_grid_attach (GTK_GRID (grid), spinner, 1, 0, 1, 1); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), GTK_WIDGET (spinner)); - gtk_widget_show (spinner); - - g_signal_connect (adj, "value-changed", - G_CALLBACK (pika_int_adjustment_update), - &shootvals.screenshot_delay); - - /* translators: this is the unit label of a spinbutton */ - label = gtk_label_new (_("seconds")); - gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 1, 1); - gtk_widget_set_hexpand (label, TRUE); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_widget_show (label); - - /* Screenshot delay hints */ - gtk_grid_attach (GTK_GRID (grid), notebook2, 0, 1, 3, 1); - gtk_widget_show (notebook2); - - shoot_dialog_add_hint (GTK_NOTEBOOK (notebook2), SHOOT_ROOT, - _("After the delay, the screenshot is taken.")); - shoot_dialog_add_hint (GTK_NOTEBOOK (notebook2), SHOOT_REGION, - _("Once the region is selected, it will be " - "captured after this delay.")); - if (capabilities & SCREENSHOT_CAN_PICK_WINDOW) - { - shoot_dialog_add_hint (GTK_NOTEBOOK (notebook2), SHOOT_WINDOW, - _("Once the window is selected, it will be " - "captured after this delay.")); - } - else - { - shoot_dialog_add_hint (GTK_NOTEBOOK (notebook2), SHOOT_WINDOW, - _("After the delay, the active window " - "will be captured.")); - } - gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook2), shootvals.shoot_type); - - /* Color profile */ - frame = pika_int_radio_group_new (TRUE, - _("Color Profile"), - G_CALLBACK (pika_radio_button_update), - &shootvals.profile_policy, NULL, - shootvals.profile_policy, - - _("Tag image with _monitor profile"), - SCREENSHOT_PROFILE_POLICY_MONITOR, - NULL, - - _("Convert image to sR_GB"), - SCREENSHOT_PROFILE_POLICY_SRGB, - NULL, - - NULL); - gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - - gtk_widget_show (dialog); - - run = (pika_dialog_run (PIKA_DIALOG (dialog)) == GTK_RESPONSE_OK); - - if (run) - { - /* get the screen on which we are running */ - *monitor = pika_widget_get_monitor (dialog); - } + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), "color-profile", NULL); + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); gtk_widget_destroy (dialog); @@ -884,7 +660,7 @@ shoot_delay_timeout (gpointer data) /* public functions */ void -screenshot_delay (gint seconds) +screenshot_wait_delay (gint seconds) { g_timeout_add (1000, shoot_delay_timeout, &seconds); gtk_main (); diff --git a/plug-ins/screenshot/screenshot.h b/plug-ins/screenshot/screenshot.h index 3ee19f8..43d8679 100644 --- a/plug-ins/screenshot/screenshot.h +++ b/plug-ins/screenshot/screenshot.h @@ -38,7 +38,7 @@ typedef enum SCREENSHOT_CAN_SHOOT_POINTER = 0x1 << 1, SCREENSHOT_CAN_PICK_NONINTERACTIVELY = 0x1 << 2, SCREENSHOT_CAN_SHOOT_REGION = 0x1 << 3, - /* SHOOT_WINDOW mode only: it window selection requires active click. */ + /* SHOOT_WINDOW mode only: if window selection requires active click. */ SCREENSHOT_CAN_PICK_WINDOW = 0x1 << 4, /* SHOOT_WINDOW + SCREENSHOT_CAN_PICK_WINDOW only: if a delay can be * inserted in-between selection click and actual snapshot. */ @@ -59,24 +59,8 @@ typedef enum SHOOT_REGION } ShootType; -typedef struct -{ - ShootType shoot_type; - gboolean decorate; - guint window_id; - GdkMonitor *monitor; - guint select_delay; - guint screenshot_delay; - gint x1; - gint y1; - gint x2; - gint y2; - gboolean show_cursor; - ScreenshotProfilePolicy profile_policy; -} ScreenshotValues; - -void screenshot_delay (gint seconds); +void screenshot_wait_delay (gint seconds); #endif /* __SCREENSHOT_H__ */ diff --git a/plug-ins/script-fu/console/script-fu-console.c b/plug-ins/script-fu/console/script-fu-console.c index 4849444..6e8a736 100644 --- a/plug-ins/script-fu/console/script-fu-console.c +++ b/plug-ins/script-fu/console/script-fu-console.c @@ -100,8 +100,8 @@ static void script_fu_command_to_history (ConsoleInterface *console, */ PikaValueArray * -script_fu_console_run (PikaProcedure *procedure, - const PikaValueArray *args) +script_fu_console_run (PikaProcedure *procedure, + PikaProcedureConfig *config) { ConsoleInterface console = { 0, }; GtkWidget *vbox; @@ -109,8 +109,6 @@ script_fu_console_run (PikaProcedure *procedure, GtkWidget *scrolled_window; GtkWidget *hbox; - PikaProcedureConfig *config; - script_fu_set_print_flag (1); pika_ui_init ("script-fu"); @@ -120,10 +118,6 @@ script_fu_console_run (PikaProcedure *procedure, console_history_init (&console.history); console_total_append_welcome (console.total_history); - /* Get previous or default settings into config. */ - config = pika_procedure_create_config (procedure); - pika_procedure_config_begin_run (config, NULL, PIKA_RUN_INTERACTIVE, args); - script_fu_models_from_settings (&console, config); console.dialog = pika_dialog_new (_("Script Console"), @@ -221,8 +215,6 @@ script_fu_console_run (PikaProcedure *procedure, /* Update config with user's change to history */ console_history_to_settings (&console.history, config); - /* Persist config */ - pika_procedure_config_end_run (config, PIKA_PDB_SUCCESS); return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } @@ -643,4 +635,4 @@ script_fu_command_to_history (ConsoleInterface *console, console_total_append_command (console->total_history, command); /* Ensure there is a new tail. */ -} \ No newline at end of file +} diff --git a/plug-ins/script-fu/console/script-fu-console.h b/plug-ins/script-fu/console/script-fu-console.h index b495686..dae2583 100644 --- a/plug-ins/script-fu/console/script-fu-console.h +++ b/plug-ins/script-fu/console/script-fu-console.h @@ -24,7 +24,7 @@ PikaValueArray * script_fu_console_run (PikaProcedure *procedure, - const PikaValueArray *args); + PikaProcedureConfig *config); #endif /* __SCRIPT_FU_CONSOLE_H__ */ diff --git a/plug-ins/script-fu/libscriptfu/scheme-wrapper.c b/plug-ins/script-fu/libscriptfu/scheme-wrapper.c index d5cda36..447f21f 100644 --- a/plug-ins/script-fu/libscriptfu/scheme-wrapper.c +++ b/plug-ins/script-fu/libscriptfu/scheme-wrapper.c @@ -642,18 +642,17 @@ script_fu_marshal_procedure_call (scheme *sc, gboolean permissive, gboolean deprecated) { - PikaProcedure *procedure; - PikaValueArray *args; - PikaValueArray *values = NULL; - gchar *proc_name; - GParamSpec **arg_specs; - gint n_arg_specs; - gint actual_arg_count; - gint consumed_arg_count = 0; - gchar error_str[1024]; - gint i; - pointer return_val = sc->NIL; - + PikaProcedure *procedure; + PikaProcedureConfig *config; + PikaValueArray *values = NULL; + gchar *proc_name; + GParamSpec **arg_specs; + gint n_arg_specs; + gint actual_arg_count; + gint consumed_arg_count = 0; + gchar error_str[1024]; + gint i; + pointer return_val = sc->NIL; g_debug ("In %s()", G_STRFUNC); @@ -692,6 +691,7 @@ script_fu_marshal_procedure_call (scheme *sc, return script_error (sc, error_str, 0); } + config = pika_procedure_create_config (procedure); arg_specs = pika_procedure_get_arguments (procedure, &n_arg_specs); actual_arg_count = sc->vptr->list_length (sc, a) - 1; @@ -724,8 +724,6 @@ script_fu_marshal_procedure_call (scheme *sc, } /* Marshall the supplied arguments */ - args = pika_value_array_new (n_arg_specs); - for (i = 0; i < n_arg_specs; i++) { GParamSpec *arg_spec = arg_specs[i]; @@ -756,34 +754,98 @@ script_fu_marshal_procedure_call (scheme *sc, if (G_VALUE_HOLDS_INT (&value)) { if (! sc->vptr->is_number (sc->vptr->pair_car (a))) - return script_type_error (sc, "numeric", i, proc_name); + { + return script_type_error (sc, "numeric", i, proc_name); + } else - g_value_set_int (&value, - sc->vptr->ivalue (sc->vptr->pair_car (a))); + { + GParamSpecInt *ispec = G_PARAM_SPEC_INT (arg_spec); + gint v = sc->vptr->ivalue (sc->vptr->pair_car (a)); + + if (v < ispec->minimum || v > ispec->maximum) + { + gchar error_message[1024]; + + g_snprintf (error_message, sizeof (error_message), + "Invalid value %d for argument %d: expected value between %d and %d", + v, i, ispec->minimum, ispec->maximum); + return script_error (sc, error_message, 0); + } + + g_value_set_int (&value, v); + } } else if (G_VALUE_HOLDS_UINT (&value)) { if (! sc->vptr->is_number (sc->vptr->pair_car (a))) - return script_type_error (sc, "numeric", i, proc_name); + { + return script_type_error (sc, "numeric", i, proc_name); + } else - g_value_set_uint (&value, - sc->vptr->ivalue (sc->vptr->pair_car (a))); + { + GParamSpecUInt *ispec = G_PARAM_SPEC_UINT (arg_spec); + gint v = sc->vptr->ivalue (sc->vptr->pair_car (a)); + + if (v < ispec->minimum || v > ispec->maximum) + { + gchar error_message[1024]; + + g_snprintf (error_message, sizeof (error_message), + "Invalid value %d for argument %d: expected value between %d and %d", + v, i, ispec->minimum, ispec->maximum); + return script_error (sc, error_message, 0); + } + + g_value_set_uint (&value, v); + } } else if (G_VALUE_HOLDS_UCHAR (&value)) { if (! sc->vptr->is_number (sc->vptr->pair_car (a))) - return script_type_error (sc, "numeric", i, proc_name); + { + return script_type_error (sc, "numeric", i, proc_name); + } else - g_value_set_uchar (&value, - sc->vptr->ivalue (sc->vptr->pair_car (a))); + { + GParamSpecUChar *cspec = G_PARAM_SPEC_UCHAR (arg_spec); + gint c = sc->vptr->ivalue (sc->vptr->pair_car (a)); + + if (c < cspec->minimum || c > cspec->maximum) + { + gchar error_message[1024]; + + g_snprintf (error_message, sizeof (error_message), + "Invalid value %d for argument %d: expected value between %d and %d", + c, i, cspec->minimum, cspec->maximum); + return script_error (sc, error_message, 0); + } + + g_value_set_uchar (&value, c); + } } else if (G_VALUE_HOLDS_DOUBLE (&value)) { if (! sc->vptr->is_number (sc->vptr->pair_car (a))) - return script_type_error (sc, "numeric", i, proc_name); + { + return script_type_error (sc, "numeric", i, proc_name); + } else - g_value_set_double (&value, - sc->vptr->rvalue (sc->vptr->pair_car (a))); + { + GParamSpecDouble *dspec = G_PARAM_SPEC_DOUBLE (arg_spec); + gdouble d = sc->vptr->rvalue (sc->vptr->pair_car (a)); + + if (d < dspec->minimum || d > dspec->maximum) + { + gchar error_message[1024]; + + g_snprintf (error_message, sizeof (error_message), + "Invalid value %f for argument %d: expected value between %f and %f", + d, i, dspec->minimum, dspec->maximum); + return script_error (sc, error_message, 0); + } + + g_value_set_double (&value, d); + } } else if (G_VALUE_HOLDS_ENUM (&value)) { @@ -850,8 +912,7 @@ script_fu_marshal_procedure_call (scheme *sc, { g_printerr (" "); for (j = 0; j < count; ++j) - g_printerr (" \"%s\"", - args[i].data.d_strv[j]); + g_printerr (" \"%s\"", array[j]); g_printerr ("\n"); } } @@ -992,7 +1053,12 @@ script_fu_marshal_procedure_call (scheme *sc, */ gint32 *array; - n_elements = PIKA_VALUES_GET_INT (args, i - 1); + if (i == 0) + return script_error (sc, "The first argument cannot be an array", a); + else if (! g_type_is_a (arg_specs[i - 1]->value_type, G_TYPE_INT)) + return script_error (sc, "Array arguments must be preceded by an int argument (number of items)", a); + + g_object_get (config, arg_specs[i - 1]->name, &n_elements, NULL); if (n_elements > sc->vptr->vector_length (vector)) return script_length_error_in_vector (sc, i, proc_name, n_elements, vector); @@ -1058,7 +1124,12 @@ script_fu_marshal_procedure_call (scheme *sc, { gdouble *array; - n_elements = PIKA_VALUES_GET_INT (args, i - 1); + if (i == 0) + return script_error (sc, "The first argument cannot be an array", a); + else if (! g_type_is_a (arg_specs[i - 1]->value_type, G_TYPE_INT)) + return script_error (sc, "Array arguments must be preceded by an int argument (number of items)", a); + + g_object_get (config, arg_specs[i - 1]->name, &n_elements, NULL); if (n_elements > sc->vptr->vector_length (vector)) return script_length_error_in_vector (sc, i, proc_name, n_elements, vector); @@ -1142,7 +1213,12 @@ script_fu_marshal_procedure_call (scheme *sc, { PikaRGB *array; - n_elements = PIKA_VALUES_GET_INT (args, i - 1); + if (i == 0) + return script_error (sc, "The first argument cannot be an array", a); + else if (! g_type_is_a (arg_specs[i - 1]->value_type, G_TYPE_INT)) + return script_error (sc, "Array arguments must be preceded by an int argument (number of items)", a); + + g_object_get (config, arg_specs[i - 1]->name, &n_elements, NULL); if (n_elements > sc->vptr->vector_length (vector)) return script_length_error_in_vector (sc, i, proc_name, n_elements, vector); @@ -1275,6 +1351,8 @@ script_fu_marshal_procedure_call (scheme *sc, * ID's are unique across all instances of Resource. */ resource = pika_resource_get_by_id (resource_id); + if (resource == NULL) + g_warning ("%s: passing null Resource, invalid ID.", G_STRFUNC); g_value_set_object (&value, resource); } @@ -1287,7 +1365,18 @@ script_fu_marshal_procedure_call (scheme *sc, return implementation_error (sc, error_str, 0); } debug_gvalue (&value); - pika_value_array_append (args, &value); + if (g_param_value_validate (arg_spec, &value)) + { + gchar error_message[1024]; + + g_snprintf (error_message, sizeof (error_message), + "Invalid value for argument %d", + i); + g_value_unset (&value); + + return script_error (sc, error_message, 0); + } + g_object_set_property (G_OBJECT (config), arg_specs[i]->name, &value); g_value_unset (&value); } @@ -1296,9 +1385,9 @@ script_fu_marshal_procedure_call (scheme *sc, return script_error (sc, "A script cannot refresh scripts", 0); g_debug ("calling %s", proc_name); - values = pika_pdb_run_procedure_array (pika_get_pdb (), - proc_name, args); + values = pika_procedure_run_config (procedure, config); g_debug ("done."); + g_clear_object (&config); /* Check the return status */ if (! values) @@ -1330,7 +1419,6 @@ script_fu_marshal_procedure_call (scheme *sc, pika_value_array_unref (values); /* free arguments and values */ - pika_value_array_unref (args); /* The callback is NULL except for script-fu-server. See explanation there. */ if (post_command_callback != NULL) diff --git a/plug-ins/script-fu/libscriptfu/script-fu-arg.c b/plug-ins/script-fu/libscriptfu/script-fu-arg.c index e56eb73..8ec3d71 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-arg.c +++ b/plug-ins/script-fu/libscriptfu/script-fu-arg.c @@ -98,6 +98,7 @@ script_fu_arg_free (SFArg *arg) switch (arg->type) { + /* Integer ID's: primitives not needing free. */ case SF_IMAGE: case SF_DRAWABLE: case SF_LAYER: @@ -106,6 +107,13 @@ script_fu_arg_free (SFArg *arg) case SF_DISPLAY: case SF_COLOR: case SF_TOGGLE: + + case SF_BRUSH: + case SF_FONT: + case SF_GRADIENT: + case SF_PALETTE: + case SF_PATTERN: + break; case SF_VALUE: @@ -124,36 +132,6 @@ script_fu_arg_free (SFArg *arg) g_free (arg->value.sfa_file.filename); break; - /* FUTURE: font..gradient could all use the same code. - * Since the type in the union are all the same: gchar*. - * That is, group these cases with SF_VALUE. - * But this method should go away altogether. - */ - case SF_FONT: - g_free (arg->default_value.sfa_font); - g_free (arg->value.sfa_font); - break; - - case SF_PALETTE: - g_free (arg->default_value.sfa_palette); - g_free (arg->value.sfa_palette); - break; - - case SF_PATTERN: - g_free (arg->default_value.sfa_pattern); - g_free (arg->value.sfa_pattern); - break; - - case SF_GRADIENT: - g_free (arg->default_value.sfa_gradient); - g_free (arg->value.sfa_gradient); - break; - - case SF_BRUSH: - g_free (arg->default_value.sfa_brush); - g_free (arg->value.sfa_brush); - break; - case SF_OPTION: g_slist_free_full (arg->default_value.sfa_option.list, (GDestroyNotify) g_free); @@ -180,6 +158,13 @@ script_fu_arg_reset (SFArg *arg, gboolean should_reset_ids) case SF_CHANNEL: case SF_VECTORS: case SF_DISPLAY: + + case SF_BRUSH: + case SF_FONT: + case SF_GRADIENT: + case SF_PALETTE: + case SF_PATTERN: + if (should_reset_ids) { /* !!! Use field name "sfa_image"; all these cases have same type in union. @@ -216,35 +201,6 @@ script_fu_arg_reset (SFArg *arg, gboolean should_reset_ids) value->sfa_file.filename = g_strdup (default_value->sfa_file.filename); break; - /* FUTURE: font..gradient could all use the same code. - * Since the type in the union are all the same: gchar*. - * That is, group these cases with SF_VALUE. - */ - case SF_FONT: - g_free (value->sfa_font); - value->sfa_font = g_strdup (default_value->sfa_font); - break; - - case SF_PALETTE: - g_free (value->sfa_palette); - value->sfa_palette = g_strdup (default_value->sfa_palette); - break; - - case SF_PATTERN: - g_free (value->sfa_pattern); - value->sfa_pattern = g_strdup (default_value->sfa_pattern); - break; - - case SF_GRADIENT: - g_free (value->sfa_gradient); - value->sfa_gradient = g_strdup (default_value->sfa_gradient); - break; - - case SF_BRUSH: - g_free (value->sfa_brush); - value->sfa_brush = g_strdup (default_value->sfa_brush); - break; - case SF_OPTION: value->sfa_option.history = default_value->sfa_option.history; break; @@ -486,6 +442,14 @@ script_fu_arg_append_repr_from_gvalue (SFArg *arg, case SF_CHANNEL: case SF_VECTORS: case SF_DISPLAY: + + /* The GValue is a GObject of type inheriting PikaResource, having id prop */ + case SF_BRUSH: + case SF_FONT: + case SF_GRADIENT: + case SF_PALETTE: + case SF_PATTERN: + { GObject *object = g_value_get_object (gvalue); gint id = -1; @@ -584,25 +548,6 @@ script_fu_arg_append_repr_from_gvalue (SFArg *arg, } break; - case SF_FONT: - case SF_PALETTE: - case SF_PATTERN: - case SF_GRADIENT: - case SF_BRUSH: - { - /* The GValue is a GObject of type inheriting PikaResource */ - PikaResource *resource; - gchar *name = NULL; - - resource = g_value_get_object (gvalue); - - if (resource) - name = pika_resource_get_name (resource); - - g_string_append_printf (result_string, "\"%s\"", name); - } - break; - case SF_OPTION: append_int_repr_from_gvalue (result_string, gvalue); break; @@ -648,6 +593,12 @@ script_fu_arg_append_repr_from_self (SFArg *arg, case SF_CHANNEL: case SF_VECTORS: case SF_DISPLAY: + + case SF_BRUSH: + case SF_FONT: + case SF_GRADIENT: + case SF_PALETTE: + case SF_PATTERN: g_string_append_printf (result_string, "%d", arg_value->sfa_image); break; @@ -701,26 +652,6 @@ script_fu_arg_append_repr_from_self (SFArg *arg, } break; - case SF_FONT: - g_string_append_printf (result_string, "\"%s\"", arg_value->sfa_font); - break; - - case SF_PALETTE: - g_string_append_printf (result_string, "\"%s\"", arg_value->sfa_palette); - break; - - case SF_PATTERN: - g_string_append_printf (result_string, "\"%s\"", arg_value->sfa_pattern); - break; - - case SF_GRADIENT: - g_string_append_printf (result_string, "\"%s\"", arg_value->sfa_gradient); - break; - - case SF_BRUSH: - g_string_append_printf (result_string, "\"%s\"", arg_value->sfa_brush); - break; - case SF_OPTION: g_string_append_printf (result_string, "%d", arg_value->sfa_option.history); break; @@ -883,6 +814,38 @@ script_fu_arg_generate_name_and_nick (SFArg *arg, } +/* Init the value of an SFArg that is a resource. + * In case user does not touch a widget. + * Cannot be called at registration time. + * Init to value from context, the same as a widget + * will do when passed a NULL initial resource. + */ +void +script_fu_arg_init_resource (SFArg *arg, GType resource_type) +{ + PikaResource *resource; + + if (resource_type == PIKA_TYPE_BRUSH) + resource = PIKA_RESOURCE (pika_context_get_brush ()); + else if (resource_type == PIKA_TYPE_FONT) + resource = PIKA_RESOURCE (pika_context_get_font ()); + else if (resource_type == PIKA_TYPE_GRADIENT) + resource = PIKA_RESOURCE (pika_context_get_gradient ()); + else if (resource_type == PIKA_TYPE_PALETTE) + resource = PIKA_RESOURCE (pika_context_get_palette ()); + else if (resource_type == PIKA_TYPE_PATTERN) + resource = PIKA_RESOURCE (pika_context_get_pattern ()); + else + { + g_warning ("%s: Failed get resource from context", G_STRFUNC); + arg->value.sfa_resource = -1; + return; + } + + arg->value.sfa_resource = pika_resource_get_id (resource); +} + + /* Set the default of a GParamSpec to a GFile for a path string. * The GFile is allocated and ownership is transferred to the GParamSpec. * The GFile is only a name and a so-named file might not exist. diff --git a/plug-ins/script-fu/libscriptfu/script-fu-arg.h b/plug-ins/script-fu/libscriptfu/script-fu-arg.h index a3fc0fd..ad0902f 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-arg.h +++ b/plug-ins/script-fu/libscriptfu/script-fu-arg.h @@ -40,4 +40,7 @@ void script_fu_arg_generate_name_and_nick (SFArg *arg, const gchar **name, const gchar **nick); +void script_fu_arg_init_resource (SFArg *arg, + GType resource_type); + #endif /* __SCRIPT_FU_ARG__ */ diff --git a/plug-ins/script-fu/libscriptfu/script-fu-command.c b/plug-ins/script-fu/libscriptfu/script-fu-command.c index 0ca7709..74d07d5 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-command.c +++ b/plug-ins/script-fu/libscriptfu/script-fu-command.c @@ -98,20 +98,19 @@ script_fu_run_command (const gchar *command, * 2) adds actual args image, drawable, etc. for PikaImageProcedure */ PikaValueArray * -script_fu_interpret_image_proc ( - PikaProcedure *procedure, - SFScript *script, - PikaImage *image, - guint n_drawables, - PikaDrawable **drawables, - const PikaValueArray *args) +script_fu_interpret_image_proc (PikaProcedure *procedure, + SFScript *script, + PikaImage *image, + guint n_drawables, + PikaDrawable **drawables, + PikaProcedureConfig *config) { gchar *command; PikaValueArray *result = NULL; gboolean interpretation_result; GError *error = NULL; - command = script_fu_script_get_command_for_image_proc (script, image, n_drawables, drawables, args); + command = script_fu_script_get_command_for_image_proc (script, image, n_drawables, drawables, config); /* Take responsibility for handling errors from the scripts further calls to PDB. * ScriptFu does not show an error dialog, but forwards errors back to PIKA. diff --git a/plug-ins/script-fu/libscriptfu/script-fu-command.h b/plug-ins/script-fu/libscriptfu/script-fu-command.h index 3d30ed9..2cb8f69 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-command.h +++ b/plug-ins/script-fu/libscriptfu/script-fu-command.h @@ -30,6 +30,6 @@ PikaValueArray *script_fu_interpret_image_proc (PikaProcedure *procedure, PikaImage *image, guint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args); + PikaProcedureConfig *config); #endif /* __SCRIPT_FU_COMMAND_H__ */ diff --git a/plug-ins/script-fu/libscriptfu/script-fu-dialog.c b/plug-ins/script-fu/libscriptfu/script-fu-dialog.c index 59d6a3c..02a43d7 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-dialog.c +++ b/plug-ins/script-fu/libscriptfu/script-fu-dialog.c @@ -64,72 +64,37 @@ dump_properties (PikaProcedureConfig *config) g_free (pspecs); } -static gint -get_length (PikaProcedureConfig *config) -{ - GParamSpec **pspecs; - guint n_pspecs; - - pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), - &n_pspecs); - g_free (pspecs); - g_debug ("length config: %d", n_pspecs); - - return n_pspecs; -} - -/* Fill a new (length zero) gva with new gvalues (empty but holding the correct type) - from the config. - */ static void -fill_gva_from (PikaProcedureConfig *config, - PikaValueArray *gva) -{ - GParamSpec **pspecs; - guint n_pspecs; - - pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), - &n_pspecs); - /* !!! Start at property 1 */ - for (guint i = 1; i < n_pspecs; i++) - { - g_debug ("%s %s\n", pspecs[i]->name, G_PARAM_SPEC_TYPE_NAME (pspecs[i])); - /* append empty gvalue */ - pika_value_array_append (gva, NULL); - } - - g_free (pspecs); -} - -static void -dump_objects (PikaProcedureConfig *config) +dump_objects (PikaProcedureConfig *config) { /* Check it will return non-null objects. */ - PikaValueArray *args; - gint length; + GParamSpec **pspecs; + guint n_pspecs; - /* Need one less gvalue !!! */ - args = pika_value_array_new (get_length (config) - 1); - /* The array still has length zero. */ - g_debug ("GVA length: %d", pika_value_array_length (args)); + pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), &n_pspecs); - fill_gva_from (config, args); - - pika_procedure_config_get_values (config, args); - if (args == NULL) + /* config will have at least 1 property: "procedure". */ + if (n_pspecs == 1) { g_debug ("config holds no values"); return; } - length = pika_value_array_length (args); - for (guint i = 1; i < length; i++) + for (gint i = 1; i < n_pspecs; i++) { - GValue *gvalue = pika_value_array_index (args, i); - if (G_VALUE_HOLDS_OBJECT (gvalue)) - if (g_value_get_object (gvalue) == NULL) + GParamSpec *pspec = pspecs[i]; + GValue value = G_VALUE_INIT; + + g_value_init (&value, pspec->value_type); + g_object_get_property (G_OBJECT (config), pspec->name, &value); + + if (G_VALUE_HOLDS_OBJECT (&value)) + if (g_value_get_object (&value) == NULL) g_debug ("gvalue %d holds NULL object", i); + + g_value_unset (&value); } + g_free (pspecs); } #endif @@ -152,18 +117,19 @@ script_fu_dialog_run (PikaProcedure *procedure, PikaImage *image, guint n_drawables, PikaDrawable **drawables, - const PikaValueArray *initial_args) + PikaProcedureConfig *config) { PikaValueArray *result = NULL; PikaProcedureDialog *dialog = NULL; - PikaProcedureConfig *config = NULL; gboolean not_canceled; + guint n_specs; if ( (! G_IS_OBJECT (procedure)) || script == NULL) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); - if ( pika_value_array_length (initial_args) < 1) + g_free (g_object_class_list_properties (G_OBJECT_GET_CLASS (config), &n_specs)); + if (n_specs < 2) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); /* We don't prevent concurrent dialogs as in script-fu-interface.c. @@ -179,22 +145,12 @@ script_fu_dialog_run (PikaProcedure *procedure, /* Script's menu label */ pika_ui_init (script_fu_script_get_title (script)); - config = pika_procedure_create_config (procedure); #if DEBUG_CONFIG_PROPERTIES dump_properties (config); - g_debug ("Len of initial_args %i", pika_value_array_length (initial_args) ); + g_debug ("Len of initial_args %i", n_specs - 1); + dump_objects (config); #endif - /* Get saved settings (last values) into the config. - * Since run mode is INTERACTIVE, initial_args is moot. - * Instead, last used values or default values populate the config. - */ - pika_procedure_config_begin_run (config, NULL, PIKA_RUN_INTERACTIVE, initial_args); - #if DEBUG_CONFIG_PROPERTIES - - dump_objects (config); - #endif - /* Create a dialog having properties (describing arguments of the procedure) * taken from the config. * @@ -220,22 +176,15 @@ script_fu_dialog_run (PikaProcedure *procedure, not_canceled = pika_procedure_dialog_run (dialog); /* Assert config holds validated arg values from a user interaction. */ - #if DEBUG_CONFIG_PROPERTIES - dump_objects (config); - #endif +#if DEBUG_CONFIG_PROPERTIES + dump_objects (config); +#endif if (not_canceled) { - PikaValueArray *final_args = pika_value_array_copy (initial_args); - - /* Store config's values into final_args. */ - pika_procedure_config_get_values (config, final_args); - result = script_fu_interpret_image_proc (procedure, script, image, n_drawables, drawables, - final_args); - - pika_value_array_unref (final_args); + config); } else { @@ -244,13 +193,5 @@ script_fu_dialog_run (PikaProcedure *procedure, gtk_widget_destroy ((GtkWidget*) dialog); - /* Persist config aka settings for the next run of the plugin. - * Passing the PikaPDBStatus from result[0]. - * We must have a matching end_run for the begin_run, regardless of status. - */ - pika_procedure_config_end_run (config, g_value_get_enum (pika_value_array_index (result, 0))); - - g_object_unref (config); - return result; } diff --git a/plug-ins/script-fu/libscriptfu/script-fu-dialog.h b/plug-ins/script-fu/libscriptfu/script-fu-dialog.h index 57ec2a2..8ae2b95 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-dialog.h +++ b/plug-ins/script-fu/libscriptfu/script-fu-dialog.h @@ -30,6 +30,6 @@ PikaValueArray *script_fu_dialog_run (PikaProcedure *procedure, PikaImage *image, guint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args); + PikaProcedureConfig *config); #endif /* __SCRIPT_FU_DIALOG_H__ */ diff --git a/plug-ins/script-fu/libscriptfu/script-fu-errors.c b/plug-ins/script-fu/libscriptfu/script-fu-errors.c index 0affc11..1ac43a1 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-errors.c +++ b/plug-ins/script-fu/libscriptfu/script-fu-errors.c @@ -48,6 +48,24 @@ }; +/* Called on event: language error in author's script, + * in the Scheme arg spec for a PDB registered argument. + * Returns an error which the caller must return to its caller. + */ +pointer registration_error (scheme *sc, + const gchar *error) +{ + gchar error_message[1024]; + + g_debug ("%s", error); + /* Prefix with name of SF function that discovered error. */ + g_snprintf (error_message, sizeof (error_message), + "script-fu-register: %s", + error); + return foreign_error (sc, error_message, 0); +} + + /* * Called on event: language error in the author's script. * Logs the error and returns a foreign_error. diff --git a/plug-ins/script-fu/libscriptfu/script-fu-errors.h b/plug-ins/script-fu/libscriptfu/script-fu-errors.h index 372d2fe..fe013db 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-errors.h +++ b/plug-ins/script-fu/libscriptfu/script-fu-errors.h @@ -22,6 +22,9 @@ #ifndef __SCRIPT_FU_ERRORS_H__ #define __SCRIPT_FU_ERRORS_H__ +pointer registration_error (scheme *sc, + const gchar *error_message); + pointer script_error (scheme *sc, const gchar *error_message, const pointer a); diff --git a/plug-ins/script-fu/libscriptfu/script-fu-interface.c b/plug-ins/script-fu/libscriptfu/script-fu-interface.c index 505dc9e..91df43b 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-interface.c +++ b/plug-ins/script-fu/libscriptfu/script-fu-interface.c @@ -39,6 +39,7 @@ #include "script-fu-interface.h" #include "script-fu-scripts.h" #include "script-fu-script.h" +#include "script-fu-arg.h" #include "script-fu-intl.h" @@ -91,7 +92,7 @@ static void script_fu_resource_set_handler (gpointer data, gboolean closing); static GtkWidget * script_fu_resource_widget (const gchar *title, - gchar **id, + gint32 *model, GType resource_type); static void script_fu_flush_events (void); @@ -177,6 +178,8 @@ script_fu_interface (SFScript *script, static gboolean gtk_initted = FALSE; + g_debug ("%s", G_STRFUNC); + /* Simply return if there is already an interface. This is an * ugly workaround for the fact that we can not process two * scripts at a time. @@ -467,35 +470,40 @@ script_fu_interface (SFScript *script, break; case SF_FONT: - widget = script_fu_resource_widget (_("Script-Fu Font Selection"), - &arg->value.sfa_font, + script_fu_arg_init_resource (arg, PIKA_TYPE_FONT); + widget = script_fu_resource_widget (label_text, + &arg->value.sfa_resource, PIKA_TYPE_FONT); break; case SF_PALETTE: - widget = script_fu_resource_widget (_("Script-Fu Palette Selection"), - &arg->value.sfa_palette, + script_fu_arg_init_resource (arg, PIKA_TYPE_PALETTE); + widget = script_fu_resource_widget (label_text, + &arg->value.sfa_resource, PIKA_TYPE_PALETTE); break; case SF_PATTERN: left_align = TRUE; - widget = script_fu_resource_widget (_("Script-Fu Pattern Selection"), - &arg->value.sfa_pattern, + script_fu_arg_init_resource (arg, PIKA_TYPE_PATTERN); + widget = script_fu_resource_widget (label_text, + &arg->value.sfa_resource, PIKA_TYPE_PATTERN); break; case SF_GRADIENT: left_align = TRUE; - widget = script_fu_resource_widget (_("Script-Fu Gradient Selection"), - &arg->value.sfa_gradient, + script_fu_arg_init_resource (arg, PIKA_TYPE_GRADIENT); + widget = script_fu_resource_widget (label_text, + &arg->value.sfa_resource, PIKA_TYPE_GRADIENT); break; case SF_BRUSH: left_align = TRUE; - widget = script_fu_resource_widget (_("Script-Fu Brush Selection"), - &arg->value.sfa_brush, + script_fu_arg_init_resource (arg, PIKA_TYPE_BRUSH); + widget = script_fu_resource_widget (label_text, + &arg->value.sfa_resource, PIKA_TYPE_BRUSH); break; @@ -596,37 +604,41 @@ script_fu_interface (SFScript *script, } /* Return a widget for choosing a resource. - * Generic on type. + * Dispatch on resource type. + * Widget will show initial choice from context. + * Widget will update model if user touches widget. */ -GtkWidget * +static GtkWidget * script_fu_resource_widget (const gchar *title, - gchar **id_handle, + gint32 *model, GType resource_type) { GtkWidget *result_widget = NULL; - PikaResource *resource; - resource = pika_resource_get_by_name (resource_type, *id_handle); + g_debug ("%s type: %ld", 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. + */ if (g_type_is_a (resource_type, PIKA_TYPE_FONT)) { - result_widget = pika_font_select_button_new (title, resource); + result_widget = pika_font_chooser_new (title, "", NULL); } else if (g_type_is_a (resource_type, PIKA_TYPE_BRUSH)) { - result_widget = pika_brush_select_button_new (title, resource); + result_widget = pika_brush_chooser_new (title, "", NULL); } else if (g_type_is_a (resource_type, PIKA_TYPE_GRADIENT)) { - result_widget = pika_gradient_select_button_new (title, resource); + result_widget = pika_gradient_chooser_new (title, "", NULL); } else if (g_type_is_a (resource_type, PIKA_TYPE_PALETTE)) { - result_widget = pika_palette_select_button_new (title, resource); + result_widget = pika_palette_chooser_new (title, "", NULL); } else if (g_type_is_a (resource_type, PIKA_TYPE_PATTERN)) { - result_widget = pika_pattern_select_button_new (title, resource); + result_widget = pika_pattern_chooser_new (title, "", NULL); } else { @@ -637,11 +649,11 @@ script_fu_resource_widget (const gchar *title, { /* All resource widgets emit signal resource-set * Connect to our handler which will be passed the id_handle, - * the place to store the ID of the new choice of resource. + * the model of the new choice of resource. */ g_signal_connect_swapped (result_widget, "resource-set", G_CALLBACK (script_fu_resource_set_handler), - id_handle); + model); /* data */ } return result_widget; @@ -650,29 +662,10 @@ script_fu_resource_widget (const gchar *title, static void script_fu_interface_quit (SFScript *script) { - gint i; - g_return_if_fail (script != NULL); g_return_if_fail (sf_interface != NULL); g_free (sf_interface->title); - - for (i = 0; i < script->n_args; i++) - switch (script->args[i].type) - { - case SF_FONT: - case SF_PALETTE: - case SF_PATTERN: - case SF_GRADIENT: - case SF_BRUSH: - pika_resource_select_button_close_popup - (PIKA_RESOURCE_SELECT_BUTTON (sf_interface->widgets[i])); - break; - - default: - break; - } - g_free (sf_interface->widgets); g_free (sf_interface->last_command); @@ -706,25 +699,21 @@ script_fu_combo_callback (GtkWidget *widget, } /* Handle resource-set signal. - * Store id of newly chosen resource in SF local cache of args. + * Store id of newly chosen resource in SF local cache of args, + * at the integer location passed by pointer in "data" * * Note the callback is the same for all resource types. - * The callback passes only the resource, and no attributes of the resource, - * except it's ID. + * The callback passes the resource, and no attributes of the resource. */ static void script_fu_resource_set_handler (gpointer data, /* callback "data" */ gpointer resource, gboolean closing) { - gchar **id_handle = data; + gint32 *id_pointer = data; - /* Free any existing copy of the id string. */ - if (*id_handle) - g_free (*id_handle); - - /* We don't own the resource, nor its string. Copy the string. */ - *id_handle = g_strdup (pika_resource_get_name (resource)); + /* Store integer ID, not pointer to Resource. We bind to integer ID. */ + *id_pointer = pika_resource_get_id (resource); if (closing) script_fu_activate_main_dialog (); } @@ -794,30 +783,22 @@ script_fu_response (GtkWidget *widget, script_fu_flush_events (); } +/* Update model for all widgets that + * don't have callbacks that update the model. + * Only the text and string widgets don't. + * + * The model is the arg.value field. + */ static void -script_fu_ok (SFScript *script) +script_fu_update_models (SFScript *script) { - GString *output; - gchar *command; - gint i; - - for (i = 0; i < script->n_args; i++) + for (gint i = 0; i < script->n_args; i++) { SFArgValue *arg_value = &script->args[i].value; GtkWidget *widget = sf_interface->widgets[i]; switch (script->args[i].type) { - case SF_IMAGE: - case SF_DRAWABLE: - case SF_LAYER: - case SF_CHANNEL: - case SF_VECTORS: - case SF_DISPLAY: - case SF_COLOR: - case SF_TOGGLE: - break; - case SF_VALUE: case SF_STRING: g_free (arg_value->sfa_value); @@ -843,20 +824,19 @@ script_fu_ok (SFScript *script) FALSE); } break; - - case SF_ADJUSTMENT: - case SF_FILENAME: - case SF_DIRNAME: - case SF_FONT: - case SF_PALETTE: - case SF_PATTERN: - case SF_GRADIENT: - case SF_BRUSH: - case SF_OPTION: - case SF_ENUM: - break; } } +} + + +/* Handler for event: OK button clicked. */ +static void +script_fu_ok (SFScript *script) +{ + GString *output; + gchar *command; + + script_fu_update_models (script); command = script_fu_script_get_command (script); @@ -969,23 +949,16 @@ script_fu_reset (SFScript *script) value->sfa_file.filename); break; - /* Reset should get the initial/default value that the plugin author - * declared by name in the SF- declaration. - * Said name is a string stored in the default_value.sfa_font - * - * But this code goes away when ScriptFu uses PikaProcedureDialog. - * Rather than make this temporary code do the correct thing, - * instead simply pass NULL to reset to the value from context. - * It is extremely unlikely that any user depends on or will notice - * this temporaryily slightly changed behavior. + /* Pass NULL to reset to the value from context. + * Since v3, script author cannot specify default resource by name. */ case SF_FONT: case SF_PALETTE: case SF_PATTERN: case SF_GRADIENT: case SF_BRUSH: - pika_resource_select_button_set_resource (PIKA_RESOURCE_SELECT_BUTTON (widget), - NULL); + pika_resource_chooser_set_resource (PIKA_RESOURCE_CHOOSER (widget), + NULL); break; case SF_OPTION: diff --git a/plug-ins/script-fu/libscriptfu/script-fu-register.c b/plug-ins/script-fu/libscriptfu/script-fu-register.c index 61ef959..e9a8143 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-register.c +++ b/plug-ins/script-fu/libscriptfu/script-fu-register.c @@ -35,6 +35,8 @@ #include "script-fu-types.h" #include "script-fu-script.h" #include "script-fu-register.h" +#include "script-fu-errors.h" + /* Methods for a script's call to script-fu-register or script-fu-register-filter. * Such calls declare a PDB procedure, that ScriptFu will register in the PDB, @@ -119,6 +121,263 @@ script_fu_script_new_from_metadata_args (scheme *sc, return script; } + +/* Parse a default spec from registration data. + * + * Side effects on arg. + * + * Returns sc->NIL on success. + * Returns pointer to a foreign_error on parsing errors. + * + * A default_spec can be an atom or a list. + * An atom is a single default value. + * A list for SF-COLOR is also a default value. + * In other cases, a list is a default and constraints. + * Some constraints are declared to and enforced by the PDB. + * Some constraints also convey to the widget for the arg. + * + * We check that each list is the correct length, + * so we don't car off the end of the list. + * + * We don't check the types of list elements. + * When they are not the correct type, + * they are *some* scheme object and getting the numeric value + * will return *some* value probably not the intended value, + * but at least not a memory error or crash. + */ +static pointer +script_fu_parse_default_spec (scheme *sc, + pointer default_spec, + SFArg *arg) +{ + switch (arg->type) + { + case SF_IMAGE: + case SF_DRAWABLE: + case SF_LAYER: + case SF_CHANNEL: + case SF_VECTORS: + case SF_DISPLAY: + if (!sc->vptr->is_integer (default_spec)) + return registration_error (sc, "default IDs must be integers"); + + arg->default_value.sfa_image = + sc->vptr->ivalue (default_spec); + break; + + case SF_COLOR: + if (sc->vptr->is_string (default_spec)) + { + if (! pika_rgb_parse_css (&arg->default_value.sfa_color, + sc->vptr->string_value (default_spec), + -1)) + return registration_error (sc, "invalid default color name"); + + pika_rgb_set_alpha (&arg->default_value.sfa_color, 1.0); + } + else if (sc->vptr->is_list (sc, default_spec) && + sc->vptr->list_length (sc, default_spec) == 3) + { + pointer color_list; + guchar r, g, b; + + color_list = default_spec; + r = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)), 0, 255); + color_list = sc->vptr->pair_cdr (color_list); + g = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)), 0, 255); + color_list = sc->vptr->pair_cdr (color_list); + b = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)), 0, 255); + + pika_rgb_set_uchar (&arg->default_value.sfa_color, r, g, b); + } + else + { + return registration_error (sc, "color defaults must be a list of 3 integers or a color name"); + } + break; + + case SF_TOGGLE: + if (!sc->vptr->is_integer (default_spec)) + return registration_error (sc, "toggle default must be an integer value"); + + arg->default_value.sfa_toggle = + (sc->vptr->ivalue (default_spec)) ? TRUE : FALSE; + break; + + case SF_VALUE: + if (!sc->vptr->is_string (default_spec)) + return registration_error (sc, "value defaults must be strings"); + + arg->default_value.sfa_value = + g_strdup (sc->vptr->string_value (default_spec)); + break; + + case SF_STRING: + case SF_TEXT: + if (!sc->vptr->is_string (default_spec)) + return registration_error (sc, "string defaults must be strings"); + + arg->default_value.sfa_value = + g_strdup (sc->vptr->string_value (default_spec)); + break; + + case SF_ADJUSTMENT: + { + pointer adj_list; + + if (!sc->vptr->is_list (sc, default_spec) && + sc->vptr->list_length (sc, default_spec) != 7) + return registration_error (sc, "adjustment defaults must be a list of 7 elements"); + + adj_list = default_spec; + arg->default_value.sfa_adjustment.value = + sc->vptr->rvalue (sc->vptr->pair_car (adj_list)); + + adj_list = sc->vptr->pair_cdr (adj_list); + arg->default_value.sfa_adjustment.lower = + sc->vptr->rvalue (sc->vptr->pair_car (adj_list)); + + adj_list = sc->vptr->pair_cdr (adj_list); + arg->default_value.sfa_adjustment.upper = + sc->vptr->rvalue (sc->vptr->pair_car (adj_list)); + + adj_list = sc->vptr->pair_cdr (adj_list); + arg->default_value.sfa_adjustment.step = + sc->vptr->rvalue (sc->vptr->pair_car (adj_list)); + + adj_list = sc->vptr->pair_cdr (adj_list); + arg->default_value.sfa_adjustment.page = + sc->vptr->rvalue (sc->vptr->pair_car (adj_list)); + + adj_list = sc->vptr->pair_cdr (adj_list); + arg->default_value.sfa_adjustment.digits = + sc->vptr->ivalue (sc->vptr->pair_car (adj_list)); + + adj_list = sc->vptr->pair_cdr (adj_list); + arg->default_value.sfa_adjustment.type = + sc->vptr->ivalue (sc->vptr->pair_car (adj_list)); + } + break; + + case SF_FILENAME: + if (!sc->vptr->is_string (default_spec)) + return registration_error (sc, "filename defaults must be strings"); + /* fallthrough */ + + case SF_DIRNAME: + if (!sc->vptr->is_string (default_spec)) + return registration_error (sc, "dirname defaults must be strings"); + + arg->default_value.sfa_file.filename = + g_strdup (sc->vptr->string_value (default_spec)); + +#ifdef G_OS_WIN32 + { + /* Replace POSIX slashes with Win32 backslashes. This + * is just so script-fus can be written with only + * POSIX directory separators. + */ + gchar *filename = arg->default_value.sfa_file.filename; + + while (*filename) + { + if (*filename == '/') + *filename = G_DIR_SEPARATOR; + + filename++; + } + } +#endif + break; + + case SF_FONT: + case SF_PALETTE: + case SF_PATTERN: + case SF_BRUSH: + case SF_GRADIENT: + /* Ignore default_spec given by author, it is just placeholder in script. + * We can't look up resource by name at registration time. + * The ParamSpecResource does not conveniently take a default. + * It makes no sense to set objects for defaults. + * Compare to SF_IMAGE. + * Since v3. + */ + arg->default_value.sfa_resource = -1; + break; + + case SF_OPTION: + { + pointer option_list; + + if (!sc->vptr->is_list (sc, default_spec) || + sc->vptr->list_length(sc, default_spec) < 1 ) + return registration_error (sc, "option defaults must be a non-empty list"); + + for (option_list = default_spec; + option_list != sc->NIL; + option_list = sc->vptr->pair_cdr (option_list)) + { + pointer option = (sc->vptr->pair_car (option_list)); + if (sc->vptr->is_string (option)) + arg->default_value.sfa_option.list = + g_slist_append (arg->default_value.sfa_option.list, + g_strdup (sc->vptr->string_value (option))); + else + return registration_error (sc, "options must be strings"); + } + } + break; + + case SF_ENUM: + { + pointer option_list; + const gchar *val; + gchar *type_name; + GEnumValue *enum_value; + GType enum_type; + + if (!sc->vptr->is_list (sc, default_spec)) + return registration_error (sc, "enum defaults must be a list"); + + option_list = default_spec; + if (!sc->vptr->is_string (sc->vptr->pair_car (option_list))) + return registration_error (sc, "first element in enum defaults must be a type-name"); + + val = sc->vptr->string_value (sc->vptr->pair_car (option_list)); + + if (g_str_has_prefix (val, "Pika")) + type_name = g_strdup (val); + else + type_name = g_strconcat ("Pika", val, NULL); + + enum_type = g_type_from_name (type_name); + if (! G_TYPE_IS_ENUM (enum_type)) + { + g_free (type_name); + return registration_error (sc, "first element in enum defaults must be the name of a registered type"); + } + + arg->default_value.sfa_enum.type_name = type_name; + + option_list = sc->vptr->pair_cdr (option_list); + if (!sc->vptr->is_string (sc->vptr->pair_car (option_list))) + return registration_error (sc, "second element in enum defaults must be a string"); + + enum_value = + g_enum_get_value_by_nick (g_type_class_peek (enum_type), + sc->vptr->string_value (sc->vptr->pair_car (option_list))); + if (enum_value) + arg->default_value.sfa_enum.history = enum_value->value; + } + break; + } /* end switch */ + + /* success */ + return sc->NIL; +} + + + /* Traverse suffix of Scheme argument list, * creating SFArgs (formal arg specs) from triplets. * @@ -145,300 +404,43 @@ script_fu_script_create_formal_args (scheme *sc, if (a != sc->NIL) { if (!sc->vptr->is_integer (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: argument types must be integer values", 0); + return registration_error (sc, "argument types must be integers"); arg->type = sc->vptr->ivalue (sc->vptr->pair_car (a)); a = sc->vptr->pair_cdr (a); } else - return foreign_error (sc, "script-fu-register: missing type specifier", 0); + return registration_error (sc, "missing type specifier"); if (a != sc->NIL) { if (!sc->vptr->is_string (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: argument labels must be strings", 0); + return registration_error (sc, "argument labels must be strings"); arg->label = g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a))); a = sc->vptr->pair_cdr (a); } else - return foreign_error (sc, "script-fu-register: missing arguments label", 0); + return registration_error (sc, "missing arguments label"); if (a != sc->NIL) { - switch (arg->type) - { - case SF_IMAGE: - case SF_DRAWABLE: - case SF_LAYER: - case SF_CHANNEL: - case SF_VECTORS: - case SF_DISPLAY: - if (!sc->vptr->is_integer (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: default IDs must be integer values", 0); + /* a is pointing into a sequence, grouped in three. + * (car a) is the third part of three. + * (cdr a) is the rest of the sequence + */ + pointer default_spec =sc->vptr->pair_car (a); + pointer error = script_fu_parse_default_spec (sc, default_spec, arg); - arg->default_value.sfa_image = - sc->vptr->ivalue (sc->vptr->pair_car (a)); - break; - - case SF_COLOR: - if (sc->vptr->is_string (sc->vptr->pair_car (a))) - { - if (! pika_rgb_parse_css (&arg->default_value.sfa_color, - sc->vptr->string_value (sc->vptr->pair_car (a)), - -1)) - return foreign_error (sc, "script-fu-register: invalid default color name", 0); - - pika_rgb_set_alpha (&arg->default_value.sfa_color, 1.0); - } - else if (sc->vptr->is_list (sc, sc->vptr->pair_car (a)) && - sc->vptr->list_length(sc, sc->vptr->pair_car (a)) == 3) - { - pointer color_list; - guchar r, g, b; - - color_list = sc->vptr->pair_car (a); - r = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)), 0, 255); - color_list = sc->vptr->pair_cdr (color_list); - g = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)), 0, 255); - color_list = sc->vptr->pair_cdr (color_list); - b = CLAMP (sc->vptr->ivalue (sc->vptr->pair_car (color_list)), 0, 255); - - pika_rgb_set_uchar (&arg->default_value.sfa_color, r, g, b); - } - else - { - return foreign_error (sc, "script-fu-register: color defaults must be a list of 3 integers or a color name", 0); - } - break; - - case SF_TOGGLE: - if (!sc->vptr->is_integer (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: toggle default must be an integer value", 0); - - arg->default_value.sfa_toggle = - (sc->vptr->ivalue (sc->vptr->pair_car (a))) ? TRUE : FALSE; - break; - - case SF_VALUE: - if (!sc->vptr->is_string (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: value defaults must be string values", 0); - - arg->default_value.sfa_value = - g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a))); - break; - - case SF_STRING: - case SF_TEXT: - if (!sc->vptr->is_string (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: string defaults must be string values", 0); - - arg->default_value.sfa_value = - g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a))); - break; - - case SF_ADJUSTMENT: - { - pointer adj_list; - - if (!sc->vptr->is_list (sc, a)) - return foreign_error (sc, "script-fu-register: adjustment defaults must be a list", 0); - - adj_list = sc->vptr->pair_car (a); - arg->default_value.sfa_adjustment.value = - sc->vptr->rvalue (sc->vptr->pair_car (adj_list)); - - adj_list = sc->vptr->pair_cdr (adj_list); - arg->default_value.sfa_adjustment.lower = - sc->vptr->rvalue (sc->vptr->pair_car (adj_list)); - - adj_list = sc->vptr->pair_cdr (adj_list); - arg->default_value.sfa_adjustment.upper = - sc->vptr->rvalue (sc->vptr->pair_car (adj_list)); - - adj_list = sc->vptr->pair_cdr (adj_list); - arg->default_value.sfa_adjustment.step = - sc->vptr->rvalue (sc->vptr->pair_car (adj_list)); - - adj_list = sc->vptr->pair_cdr (adj_list); - arg->default_value.sfa_adjustment.page = - sc->vptr->rvalue (sc->vptr->pair_car (adj_list)); - - adj_list = sc->vptr->pair_cdr (adj_list); - arg->default_value.sfa_adjustment.digits = - sc->vptr->ivalue (sc->vptr->pair_car (adj_list)); - - adj_list = sc->vptr->pair_cdr (adj_list); - arg->default_value.sfa_adjustment.type = - sc->vptr->ivalue (sc->vptr->pair_car (adj_list)); - } - break; - - case SF_FILENAME: - if (!sc->vptr->is_string (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: filename defaults must be string values", 0); - /* fallthrough */ - - case SF_DIRNAME: - if (!sc->vptr->is_string (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: dirname defaults must be string values", 0); - - arg->default_value.sfa_file.filename = - g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a))); - -#ifdef G_OS_WIN32 - { - /* Replace POSIX slashes with Win32 backslashes. This - * is just so script-fus can be written with only - * POSIX directory separators. - */ - gchar *filename = arg->default_value.sfa_file.filename; - - while (*filename) - { - if (*filename == '/') - *filename = G_DIR_SEPARATOR; - - filename++; - } - } -#endif - break; - - case SF_FONT: - if (!sc->vptr->is_string (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: font defaults must be string values", 0); - - arg->default_value.sfa_font = - g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a))); - break; - - case SF_PALETTE: - if (!sc->vptr->is_string (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: palette defaults must be string values", 0); - - arg->default_value.sfa_palette = - g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a))); - break; - - case SF_PATTERN: - if (!sc->vptr->is_string (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: pattern defaults must be string values", 0); - - arg->default_value.sfa_pattern = - g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a))); - break; - - case SF_BRUSH: - { - pointer brush_list; - - if (!sc->vptr->is_list (sc, a)) - return foreign_error (sc, "script-fu-register: brush defaults must be a list", 0); - - #ifdef OLD - temporarily, still a list, but use only the name - future: not a list, only a name - - brush_list = sc->vptr->pair_car (a); - arg->default_value.sfa_brush.name = - g_strdup (sc->vptr->string_value (sc->vptr->pair_car (brush_list))); - - brush_list = sc->vptr->pair_cdr (brush_list); - arg->default_value.sfa_brush.opacity = - sc->vptr->rvalue (sc->vptr->pair_car (brush_list)); - - brush_list = sc->vptr->pair_cdr (brush_list); - arg->default_value.sfa_brush.spacing = - sc->vptr->ivalue (sc->vptr->pair_car (brush_list)); - - brush_list = sc->vptr->pair_cdr (brush_list); - arg->default_value.sfa_brush.paint_mode = - sc->vptr->ivalue (sc->vptr->pair_car (brush_list)); - #else - brush_list = sc->vptr->pair_car (a); - arg->default_value.sfa_brush = - g_strdup (sc->vptr->string_value (sc->vptr->pair_car (brush_list))); - #endif - } - break; - - case SF_GRADIENT: - if (!sc->vptr->is_string (sc->vptr->pair_car (a))) - return foreign_error (sc, "script-fu-register: gradient defaults must be string values", 0); - - arg->default_value.sfa_gradient = - g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a))); - break; - - case SF_OPTION: - { - pointer option_list; - - if (!sc->vptr->is_list (sc, a)) - return foreign_error (sc, "script-fu-register: option defaults must be a list", 0); - - for (option_list = sc->vptr->pair_car (a); - option_list != sc->NIL; - option_list = sc->vptr->pair_cdr (option_list)) - { - arg->default_value.sfa_option.list = - g_slist_append (arg->default_value.sfa_option.list, - g_strdup (sc->vptr->string_value - (sc->vptr->pair_car (option_list)))); - } - } - break; - - case SF_ENUM: - { - pointer option_list; - const gchar *val; - gchar *type_name; - GEnumValue *enum_value; - GType enum_type; - - if (!sc->vptr->is_list (sc, a)) - return foreign_error (sc, "script-fu-register: enum defaults must be a list", 0); - - option_list = sc->vptr->pair_car (a); - if (!sc->vptr->is_string (sc->vptr->pair_car (option_list))) - return foreign_error (sc, "script-fu-register: first element in enum defaults must be a type-name", 0); - - val = sc->vptr->string_value (sc->vptr->pair_car (option_list)); - - if (g_str_has_prefix (val, "Pika")) - type_name = g_strdup (val); - else - type_name = g_strconcat ("Pika", val, NULL); - - enum_type = g_type_from_name (type_name); - if (! G_TYPE_IS_ENUM (enum_type)) - { - g_free (type_name); - return foreign_error (sc, "script-fu-register: first element in enum defaults must be the name of a registered type", 0); - } - - arg->default_value.sfa_enum.type_name = type_name; - - option_list = sc->vptr->pair_cdr (option_list); - if (!sc->vptr->is_string (sc->vptr->pair_car (option_list))) - return foreign_error (sc, "script-fu-register: second element in enum defaults must be a string", 0); - - enum_value = - g_enum_get_value_by_nick (g_type_class_peek (enum_type), - sc->vptr->string_value (sc->vptr->pair_car (option_list))); - if (enum_value) - arg->default_value.sfa_enum.history = enum_value->value; - } - break; - } - - a = sc->vptr->pair_cdr (a); + if (error != sc->NIL) + return error; + else + /* advance to next group of three in the sequence. */ + a = sc->vptr->pair_cdr (a); } else { - return foreign_error (sc, "script-fu-register: missing default argument", 0); + return registration_error (sc, "missing default argument"); } } /* end for */ diff --git a/plug-ins/script-fu/libscriptfu/script-fu-run-func.c b/plug-ins/script-fu/libscriptfu/script-fu-run-func.c index 9275397..69387f5 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-run-func.c +++ b/plug-ins/script-fu/libscriptfu/script-fu-run-func.c @@ -57,17 +57,17 @@ * Since 3.0 */ PikaValueArray * -script_fu_run_image_procedure ( PikaProcedure *procedure, /* PikaImageProcedure */ - PikaRunMode run_mode, - PikaImage *image, - guint n_drawables, - PikaDrawable **drawables, - const PikaValueArray *other_args, - gpointer data) +script_fu_run_image_procedure (PikaProcedure *procedure, /* PikaImageProcedure */ + PikaRunMode run_mode, + PikaImage *image, + guint n_drawables, + PikaDrawable **drawables, + PikaProcedureConfig *config, + gpointer data) { - PikaValueArray *result = NULL; - SFScript *script; + PikaValueArray *result = NULL; + SFScript *script; g_debug ("script_fu_run_image_procedure"); script = script_fu_find_script (pika_procedure_get_name (procedure)); @@ -81,33 +81,36 @@ script_fu_run_image_procedure ( PikaProcedure *procedure, /* PikaImagePr { case PIKA_RUN_INTERACTIVE: { - if (pika_value_array_length (other_args) > 0) + guint n_specs; + + g_free (g_object_class_list_properties (G_OBJECT_GET_CLASS (config), &n_specs)); + if (n_specs > 1) { /* Let user choose "other" args in a dialog, then interpret. Maintain a config. */ - result = script_fu_dialog_run (procedure, script, image, n_drawables, drawables, other_args); + result = script_fu_dialog_run (procedure, script, image, n_drawables, drawables, config); } else { /* No "other" args for user to choose. No config to maintain. */ - result = script_fu_interpret_image_proc (procedure, script, image, n_drawables, drawables, other_args); + result = script_fu_interpret_image_proc (procedure, script, image, n_drawables, drawables, config); } break; } case PIKA_RUN_NONINTERACTIVE: { /* A call from another PDB procedure. - * Use the given other_args, without interacting with user. + * Use the given config, without interacting with user. * Since no user interaction, no config to maintain. */ - result = script_fu_interpret_image_proc (procedure, script, image, n_drawables, drawables, other_args); + result = script_fu_interpret_image_proc (procedure, script, image, n_drawables, drawables, config); break; } case PIKA_RUN_WITH_LAST_VALS: { /* User invoked from a menu "Filter>Run with last values". - * Do not show dialog. other_args are already last values, from a config. + * Do not show dialog. config are already last values. */ - result = script_fu_interpret_image_proc (procedure, script, image, n_drawables, drawables, other_args); + result = script_fu_interpret_image_proc (procedure, script, image, n_drawables, drawables, config); break; } default: @@ -115,6 +118,7 @@ script_fu_run_image_procedure ( PikaProcedure *procedure, /* PikaImagePr result = pika_procedure_new_return_values (procedure, PIKA_PDB_CALLING_ERROR, NULL); } } + return result; } @@ -128,14 +132,17 @@ script_fu_run_image_procedure ( PikaProcedure *procedure, /* PikaImagePr * Since prior to 3.0 but formerly named script_fu_script_proc */ PikaValueArray * -script_fu_run_procedure (PikaProcedure *procedure, - const PikaValueArray *args, - gpointer data) +script_fu_run_procedure (PikaProcedure *procedure, + PikaProcedureConfig *config, + gpointer data) { - PikaPDBStatusType status = PIKA_PDB_SUCCESS; - SFScript *script; - PikaRunMode run_mode; - GError *error = NULL; + PikaPDBStatusType status = PIKA_PDB_SUCCESS; + SFScript *script; + GParamSpec **pspecs; + guint n_pspecs; + gint n_aux_args; + PikaRunMode run_mode; + GError *error = NULL; script = script_fu_find_script (pika_procedure_get_name (procedure)); @@ -144,7 +151,10 @@ script_fu_run_procedure (PikaProcedure *procedure, PIKA_PDB_CALLING_ERROR, NULL); - run_mode = PIKA_VALUES_GET_ENUM (args, 0); + pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), &n_pspecs); + pika_procedure_get_aux_arguments (procedure, &n_aux_args); + + g_object_get (config, "run-mode", &run_mode, NULL); ts_set_run_mode (run_mode); @@ -155,7 +165,7 @@ script_fu_run_procedure (PikaProcedure *procedure, gint min_args = 0; /* First, try to collect the standard script arguments... */ - min_args = script_fu_script_collect_standard_args (script, args); + min_args = script_fu_script_collect_standard_args (script, pspecs, n_pspecs, config); /* ...then acquire the rest of arguments (if any) with a dialog */ if (script->n_args > min_args) @@ -169,15 +179,18 @@ script_fu_run_procedure (PikaProcedure *procedure, } case PIKA_RUN_NONINTERACTIVE: - /* Make sure all the arguments are there */ - if (pika_value_array_length (args) != (script->n_args + 1)) + /* Verify actual args count equals declared arg count. + * Scripts declare args except run_mode (SF hides it.) + * pspecs have run_mode and one extra internal pspec, thus +2. + */ + if (n_pspecs != script->n_args + n_aux_args + 2) status = PIKA_PDB_CALLING_ERROR; if (status == PIKA_PDB_SUCCESS) { gchar *command; - command = script_fu_script_get_command_from_params (script, args); + command = script_fu_script_get_command_from_params (script, pspecs, n_pspecs, config); /* run the command through the interpreter */ if (! script_fu_run_command (command, &error)) @@ -196,7 +209,7 @@ script_fu_run_procedure (PikaProcedure *procedure, gchar *command; /* First, try to collect the standard script arguments */ - script_fu_script_collect_standard_args (script, args); + script_fu_script_collect_standard_args (script, pspecs, n_pspecs, config); command = script_fu_script_get_command (script); diff --git a/plug-ins/script-fu/libscriptfu/script-fu-run-func.h b/plug-ins/script-fu/libscriptfu/script-fu-run-func.h index cf03eb4..d754d27 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-run-func.h +++ b/plug-ins/script-fu/libscriptfu/script-fu-run-func.h @@ -23,7 +23,7 @@ #define __SCRIPT_FU_RUN_FUNC_H__ PikaValueArray *script_fu_run_procedure (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer data); PikaValueArray *script_fu_run_image_procedure (PikaProcedure *procedure, @@ -31,7 +31,7 @@ PikaValueArray *script_fu_run_image_procedure (PikaProcedure *procedure, PikaImage *image, guint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer data); #endif /* __SCRIPT_FU_RUN_FUNC__ */ diff --git a/plug-ins/script-fu/libscriptfu/script-fu-script.c b/plug-ins/script-fu/libscriptfu/script-fu-script.c index e713d09..2becf37 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-script.c +++ b/plug-ins/script-fu/libscriptfu/script-fu-script.c @@ -40,7 +40,9 @@ */ static gboolean script_fu_script_param_init (SFScript *script, - const PikaValueArray *args, + GParamSpec **pspecs, + guint n_pspecs, + PikaProcedureConfig *config, SFArgType type, gint n); static void script_fu_script_set_proc_metadata ( @@ -162,12 +164,11 @@ script_fu_script_create_PDB_procedure (PikaPlugIn *plug_in, g_debug ("script_fu_script_create_PDB_procedure: %s, plugin type %i, image_proc", script->name, plug_in_type); - procedure = pika_image_procedure_new ( - plug_in, script->name, - plug_in_type, - (PikaRunImageFunc) script_fu_run_image_procedure, - script, /* user_data, pointer in extension-script-fu process */ - NULL); + procedure = pika_image_procedure_new (plug_in, script->name, + plug_in_type, + (PikaRunImageFunc) script_fu_run_image_procedure, + script, /* user_data, pointer in extension-script-fu process */ + NULL); script_fu_script_set_proc_metadata (procedure, script); @@ -270,23 +271,25 @@ script_fu_script_reset (SFScript *script, gint script_fu_script_collect_standard_args (SFScript *script, - const PikaValueArray *args) + GParamSpec **pspecs, + guint n_pspecs, + PikaProcedureConfig *config) { gint params_consumed = 0; g_return_val_if_fail (script != NULL, 0); /* the first parameter may be a DISPLAY id */ - if (script_fu_script_param_init (script, - args, SF_DISPLAY, + if (script_fu_script_param_init (script, pspecs, n_pspecs, + config, SF_DISPLAY, params_consumed)) { params_consumed++; } /* an IMAGE id may come first or after the DISPLAY id */ - if (script_fu_script_param_init (script, - args, SF_IMAGE, + if (script_fu_script_param_init (script, pspecs, n_pspecs, + config, SF_IMAGE, params_consumed)) { params_consumed++; @@ -294,17 +297,17 @@ script_fu_script_collect_standard_args (SFScript *script, /* and may be followed by a DRAWABLE, LAYER, CHANNEL or * VECTORS id */ - if (script_fu_script_param_init (script, - args, SF_DRAWABLE, + if (script_fu_script_param_init (script, pspecs, n_pspecs, + config, SF_DRAWABLE, params_consumed) || - script_fu_script_param_init (script, - args, SF_LAYER, + script_fu_script_param_init (script, pspecs, n_pspecs, + config, SF_LAYER, params_consumed) || - script_fu_script_param_init (script, - args, SF_CHANNEL, + script_fu_script_param_init (script, pspecs, n_pspecs, + config, SF_CHANNEL, params_consumed) || - script_fu_script_param_init (script, - args, SF_VECTORS, + script_fu_script_param_init (script, pspecs, n_pspecs, + config, SF_VECTORS, params_consumed)) { params_consumed++; @@ -343,7 +346,9 @@ script_fu_script_get_command (SFScript *script) gchar * script_fu_script_get_command_from_params (SFScript *script, - const PikaValueArray *args) + GParamSpec **pspecs, + guint n_pspecs, + PikaProcedureConfig *config) { GString *s; gint i; @@ -355,13 +360,18 @@ script_fu_script_get_command_from_params (SFScript *script, for (i = 0; i < script->n_args; i++) { - GValue *value = pika_value_array_index (args, i + 1); + GValue value = G_VALUE_INIT; + GParamSpec *pspec = pspecs[i + 1]; + + g_value_init (&value, pspec->value_type); + g_object_get_property (G_OBJECT (config), pspec->name, &value); g_string_append_c (s, ' '); script_fu_arg_append_repr_from_gvalue (&script->args[i], s, - value); + &value); + g_value_unset (&value); } g_string_append_c (s, ')'); @@ -399,11 +409,15 @@ script_fu_script_get_command_for_image_proc (SFScript *script, PikaImage *image, guint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args) + PikaProcedureConfig *config) { - GString *s; + GParamSpec **pspecs; + guint n_pspecs; + GString *s; + gint i; g_return_val_if_fail (script != NULL, NULL); + g_return_val_if_fail (PIKA_IS_PROCEDURE_CONFIG (config), NULL); s = g_string_new ("("); g_string_append (s, script->name); @@ -424,20 +438,28 @@ script_fu_script_get_command_for_image_proc (SFScript *script, */ script_fu_command_append_drawables (s, n_drawables, drawables); - /* args contains the "other" args + /* config contains the "other" args * Iterate over the PikaValueArray. * But script->args should be the same length, and types should match. */ - for (guint i = 0; i < pika_value_array_length (args); i++) + pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (config), &n_pspecs); + + /* config will have 1 additional property: "procedure". */ + for (i = 1; i < n_pspecs; i++) { - GValue *value = pika_value_array_index (args, i); + GParamSpec *pspec = pspecs[i]; + GValue value = G_VALUE_INIT; + g_string_append_c (s, ' '); - script_fu_arg_append_repr_from_gvalue (&script->args[i], - s, - value); + + g_value_init (&value, pspec->value_type); + g_object_get_property (G_OBJECT (config), pspec->name, &value); + script_fu_arg_append_repr_from_gvalue (&script->args[i - 1], s, &value); + g_value_unset (&value); } g_string_append_c (s, ')'); + g_free (pspecs); return g_string_free (s, FALSE); } @@ -466,7 +488,9 @@ script_fu_script_infer_drawable_arity (SFScript *script) static gboolean script_fu_script_param_init (SFScript *script, - const PikaValueArray *args, + GParamSpec **pspecs, + guint n_pspecs, + PikaProcedureConfig *config, SFArgType type, gint n) { @@ -474,16 +498,20 @@ script_fu_script_param_init (SFScript *script, if (script->n_args > n && arg->type == type && - pika_value_array_length (args) > n + 1) + /* The first pspec is "procedure", the second is "run-mode". */ + n_pspecs > n + 2) { - GValue *value = pika_value_array_index (args, n + 1); + GValue value = G_VALUE_INIT; + GParamSpec *pspec = pspecs[n + 2]; + g_value_init (&value, pspec->value_type); + g_object_get_property (G_OBJECT (config), pspec->name, &value); switch (type) { case SF_IMAGE: - if (PIKA_VALUE_HOLDS_IMAGE (value)) + if (PIKA_VALUE_HOLDS_IMAGE (&value)) { - PikaImage *image = g_value_get_object (value); + PikaImage *image = g_value_get_object (&value); arg->value.sfa_image = pika_image_get_id (image); return TRUE; @@ -491,9 +519,9 @@ script_fu_script_param_init (SFScript *script, break; case SF_DRAWABLE: - if (PIKA_VALUE_HOLDS_DRAWABLE (value)) + if (PIKA_VALUE_HOLDS_DRAWABLE (&value)) { - PikaItem *item = g_value_get_object (value); + PikaItem *item = g_value_get_object (&value); arg->value.sfa_drawable = pika_item_get_id (item); return TRUE; @@ -501,9 +529,9 @@ script_fu_script_param_init (SFScript *script, break; case SF_LAYER: - if (PIKA_VALUE_HOLDS_LAYER (value)) + if (PIKA_VALUE_HOLDS_LAYER (&value)) { - PikaItem *item = g_value_get_object (value); + PikaItem *item = g_value_get_object (&value); arg->value.sfa_layer = pika_item_get_id (item); return TRUE; @@ -511,9 +539,9 @@ script_fu_script_param_init (SFScript *script, break; case SF_CHANNEL: - if (PIKA_VALUE_HOLDS_CHANNEL (value)) + if (PIKA_VALUE_HOLDS_CHANNEL (&value)) { - PikaItem *item = g_value_get_object (value); + PikaItem *item = g_value_get_object (&value); arg->value.sfa_channel = pika_item_get_id (item); return TRUE; @@ -521,9 +549,9 @@ script_fu_script_param_init (SFScript *script, break; case SF_VECTORS: - if (PIKA_VALUE_HOLDS_VECTORS (value)) + if (PIKA_VALUE_HOLDS_VECTORS (&value)) { - PikaItem *item = g_value_get_object (value); + PikaItem *item = g_value_get_object (&value); arg->value.sfa_vectors = pika_item_get_id (item); return TRUE; @@ -531,9 +559,9 @@ script_fu_script_param_init (SFScript *script, break; case SF_DISPLAY: - if (PIKA_VALUE_HOLDS_DISPLAY (value)) + if (PIKA_VALUE_HOLDS_DISPLAY (&value)) { - PikaDisplay *display = g_value_get_object (value); + PikaDisplay *display = g_value_get_object (&value); arg->value.sfa_display = pika_display_get_id (display); return TRUE; @@ -543,6 +571,7 @@ script_fu_script_param_init (SFScript *script, default: break; } + g_value_unset (&value); } return FALSE; diff --git a/plug-ins/script-fu/libscriptfu/script-fu-script.h b/plug-ins/script-fu/libscriptfu/script-fu-script.h index 5c1a5ce..ded1b47 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-script.h +++ b/plug-ins/script-fu/libscriptfu/script-fu-script.h @@ -43,17 +43,21 @@ void script_fu_script_reset (SFScript *scrip gboolean reset_ids); gint script_fu_script_collect_standard_args (SFScript *script, - const PikaValueArray *args); + GParamSpec **pspecs, + guint n_pspecs, + PikaProcedureConfig *config); gchar * script_fu_script_get_command (SFScript *script); gchar * script_fu_script_get_command_from_params (SFScript *script, - const PikaValueArray *args); + GParamSpec **pspecs, + guint n_pspecs, + PikaProcedureConfig *config); gchar * script_fu_script_get_command_for_image_proc ( SFScript *script, PikaImage *image, guint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args); + PikaProcedureConfig *config); PikaProcedure * script_fu_script_create_PDB_procedure (PikaPlugIn *plug_in, SFScript *script, diff --git a/plug-ins/script-fu/libscriptfu/script-fu-types.h b/plug-ins/script-fu/libscriptfu/script-fu-types.h index 5170e24..802aa81 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-types.h +++ b/plug-ins/script-fu/libscriptfu/script-fu-types.h @@ -54,6 +54,8 @@ typedef struct gint history; } SFEnum; +typedef gint32 SFResourceType; + typedef union { gint32 sfa_image; @@ -67,11 +69,7 @@ typedef union gchar *sfa_value; SFAdjustment sfa_adjustment; SFFilename sfa_file; - gchar *sfa_font; - gchar *sfa_gradient; - gchar *sfa_palette; - gchar *sfa_pattern; - gchar *sfa_brush; + SFResourceType sfa_resource; SFOption sfa_option; SFEnum sfa_enum; } SFArgValue; diff --git a/plug-ins/script-fu/script-fu-eval.c b/plug-ins/script-fu/script-fu-eval.c index a058680..85adb09 100644 --- a/plug-ins/script-fu/script-fu-eval.c +++ b/plug-ins/script-fu/script-fu-eval.c @@ -33,7 +33,7 @@ PikaValueArray * script_fu_eval_run (PikaProcedure *procedure, PikaRunMode run_mode, const gchar *code, - const PikaValueArray *args) + PikaProcedureConfig *config) { GString *output = g_string_new (NULL); PikaPDBStatusType status = PIKA_PDB_SUCCESS; diff --git a/plug-ins/script-fu/script-fu-eval.h b/plug-ins/script-fu/script-fu-eval.h index d263b2c..b939171 100644 --- a/plug-ins/script-fu/script-fu-eval.h +++ b/plug-ins/script-fu/script-fu-eval.h @@ -26,7 +26,7 @@ PikaValueArray * script_fu_eval_run (PikaProcedure *procedure, PikaRunMode run_mode, const gchar *code, - const PikaValueArray *args); + PikaProcedureConfig *config); #endif /* __SCRIPT_FU_EVAL_H__ */ diff --git a/plug-ins/script-fu/script-fu-text-console.c b/plug-ins/script-fu/script-fu-text-console.c index b6a690d..ec77257 100644 --- a/plug-ins/script-fu/script-fu-text-console.c +++ b/plug-ins/script-fu/script-fu-text-console.c @@ -37,7 +37,7 @@ PikaValueArray * script_fu_text_console_run (PikaProcedure *procedure, - const PikaValueArray *args) + PikaProcedureConfig *config) { script_fu_redirect_output_to_stdout (); diff --git a/plug-ins/script-fu/script-fu-text-console.h b/plug-ins/script-fu/script-fu-text-console.h index 5f9b2ad..e0e5dc8 100644 --- a/plug-ins/script-fu/script-fu-text-console.h +++ b/plug-ins/script-fu/script-fu-text-console.h @@ -24,7 +24,7 @@ PikaValueArray * script_fu_text_console_run (PikaProcedure *procedure, - const PikaValueArray *args); + PikaProcedureConfig *config); #endif /* __SCRIPT_FU_TEXT_CONSOLE_H__ */ diff --git a/plug-ins/script-fu/script-fu.c b/plug-ins/script-fu/script-fu.c index 8aacc2b..d66adc5 100644 --- a/plug-ins/script-fu/script-fu.c +++ b/plug-ins/script-fu/script-fu.c @@ -46,18 +46,18 @@ static PikaProcedure * script_fu_create_procedure (PikaPlugIn *plug_i const gchar *name); static PikaValueArray * script_fu_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static PikaValueArray * script_fu_batch_run (PikaProcedure *procedure, PikaRunMode run_mode, const gchar *code, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void script_fu_run_init (PikaProcedure *procedure, PikaRunMode run_mode); static void script_fu_extension_init (PikaPlugIn *plug_in); static PikaValueArray * script_fu_refresh_proc (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); @@ -195,17 +195,17 @@ script_fu_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * script_fu_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaPlugIn *plug_in = pika_procedure_get_plug_in (procedure); const gchar *name = pika_procedure_get_name (procedure); PikaValueArray *return_vals = NULL; + PikaRunMode run_mode = PIKA_RUN_NONINTERACTIVE; - if (pika_value_array_length (args) > 0) - script_fu_run_init (procedure, PIKA_VALUES_GET_ENUM (args, 0)); - else - script_fu_run_init (procedure, PIKA_RUN_NONINTERACTIVE); + if (g_object_class_find_property (G_OBJECT_GET_CLASS (config), "run-mode") != NULL) + g_object_get (config, "run-mode", &run_mode, NULL); + script_fu_run_init (procedure, run_mode); if (strcmp (name, "extension-script-fu") == 0) { @@ -226,7 +226,7 @@ script_fu_run (PikaProcedure *procedure, * The script-fu text console for interactive Scheme development */ - return_vals = script_fu_text_console_run (procedure, args); + return_vals = script_fu_text_console_run (procedure, config); } else if (strcmp (name, "plug-in-script-fu-console") == 0) { @@ -234,7 +234,7 @@ script_fu_run (PikaProcedure *procedure, * The script-fu console for interactive Scheme development */ - return_vals = script_fu_console_run (procedure, args); + return_vals = script_fu_console_run (procedure, config); } if (! return_vals) @@ -249,7 +249,7 @@ static PikaValueArray * script_fu_batch_run (PikaProcedure *procedure, PikaRunMode run_mode, const gchar *code, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { const gchar *name = pika_procedure_get_name (procedure); @@ -265,9 +265,9 @@ script_fu_batch_run (PikaProcedure *procedure, if (g_strcmp0 (code, "-") == 0) /* Redirecting to script-fu text console, for backward compatibility */ - return_vals = script_fu_text_console_run (procedure, args); + return_vals = script_fu_text_console_run (procedure, config); else - return_vals = script_fu_eval_run (procedure, run_mode, code, args); + return_vals = script_fu_eval_run (procedure, run_mode, code, config); } if (! return_vals) @@ -372,7 +372,7 @@ script_fu_extension_init (PikaPlugIn *plug_in) static PikaValueArray * script_fu_refresh_proc (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { if (script_fu_extension_is_busy ()) diff --git a/plug-ins/script-fu/scripts/addborder.scm b/plug-ins/script-fu/scripts/addborder.scm index 0fa20f6..d029c66 100644 --- a/plug-ins/script-fu/scripts/addborder.scm +++ b/plug-ins/script-fu/scripts/addborder.scm @@ -23,7 +23,7 @@ ; If > 255 set to 255 ; Return the new value -(define (script-fu-addborder aimg adraw xsize ysize color dvalue) +(define (script-fu-addborder aimg adraw xsize ysize color dvalue allow-resize) (define (deltacolor col delta) (let* ((newcol (+ col delta))) @@ -98,72 +98,87 @@ ) (let* ((img (car (pika-item-get-image adraw))) - (owidth (car (pika-image-get-width img))) - (oheight (car (pika-image-get-height img))) - (width (+ owidth (* 2 xsize))) - (height (+ oheight (* 2 ysize))) - (layer (car (pika-layer-new img - width height - (car (pika-drawable-type-with-alpha adraw)) - _"Border Layer" 100 LAYER-MODE-NORMAL)))) + (imagewidth (car (pika-image-get-width img))) + (imageheight (car (pika-image-get-height img))) + (innerwidth 0) + (innerheight 0) + (outerwidth 0) + (outerheight 0)) - (pika-context-push) - (pika-context-set-paint-mode LAYER-MODE-NORMAL) - (pika-context-set-opacity 100.0) - (pika-context-set-antialias FALSE) - (pika-context-set-feather FALSE) + (if (= allow-resize TRUE) + (begin + (set! outerwidth (+ imagewidth (* 2 xsize))) + (set! outerheight (+ imageheight (* 2 ysize))) + (set! innerwidth imagewidth) + (set! innerheight imageheight)) + (begin + (set! outerwidth imagewidth) + (set! outerheight imageheight) + (set! innerwidth (- imagewidth (* 2 xsize))) + (set! innerheight (- imageheight (* 2 ysize))))) - (pika-image-undo-group-start img) + (let* ((layer (car (pika-layer-new img + outerwidth outerheight + (car (pika-drawable-type-with-alpha adraw)) + _"Border Layer" 100 LAYER-MODE-NORMAL)))) - (pika-image-resize img - width - height - xsize - ysize) + (pika-context-push) + (pika-context-set-antialias FALSE) + (pika-context-set-feather FALSE) - (pika-image-insert-layer img layer 0 0) - (pika-drawable-fill layer FILL-TRANSPARENT) + (pika-image-undo-group-start img) - (pika-context-set-background (adjcolor color dvalue)) - (pika-image-select-polygon img - CHANNEL-OP-REPLACE - 10 - (gen_top_array xsize ysize owidth oheight width height)) - (pika-drawable-edit-fill layer FILL-BACKGROUND) - (pika-context-set-background (adjcolor color (/ dvalue 2))) - (pika-image-select-polygon img - CHANNEL-OP-REPLACE - 10 - (gen_left_array xsize ysize owidth oheight width height)) - (pika-drawable-edit-fill layer FILL-BACKGROUND) - (pika-context-set-background (adjcolor color (- 0 (/ dvalue 2)))) - (pika-image-select-polygon img - CHANNEL-OP-REPLACE - 10 - (gen_right_array xsize ysize owidth oheight width height)) + (if (= allow-resize TRUE) + (pika-image-resize img + outerwidth + outerheight + xsize + ysize)) - (pika-drawable-edit-fill layer FILL-BACKGROUND) - (pika-context-set-background (adjcolor color (- 0 dvalue))) - (pika-image-select-polygon img - CHANNEL-OP-REPLACE - 10 - (gen_bottom_array xsize ysize owidth oheight width height)) + (pika-image-insert-layer img layer 0 0) + (pika-drawable-fill layer FILL-TRANSPARENT) - (pika-drawable-edit-fill layer FILL-BACKGROUND) - (pika-selection-none img) - (pika-image-undo-group-end img) - (pika-displays-flush) + (pika-context-set-background (adjcolor color dvalue)) + (pika-image-select-polygon img + CHANNEL-OP-REPLACE + 10 + (gen_top_array xsize ysize innerwidth innerheight outerwidth outerheight)) + (pika-drawable-edit-fill layer FILL-BACKGROUND) + (pika-context-set-background (adjcolor color (/ dvalue 2))) + (pika-image-select-polygon img + CHANNEL-OP-REPLACE + 10 + (gen_left_array xsize ysize innerwidth innerheight outerwidth outerheight)) + (pika-drawable-edit-fill layer FILL-BACKGROUND) + (pika-context-set-background (adjcolor color (- 0 (/ dvalue 2)))) + (pika-image-select-polygon img + CHANNEL-OP-REPLACE + 10 + (gen_right_array xsize ysize innerwidth innerheight outerwidth outerheight)) - (pika-context-pop) + (pika-drawable-edit-fill layer FILL-BACKGROUND) + (pika-context-set-background (adjcolor color (- 0 dvalue))) + (pika-image-select-polygon img + CHANNEL-OP-REPLACE + 10 + (gen_bottom_array xsize ysize innerwidth innerheight outerwidth outerheight)) + + (pika-drawable-edit-fill layer FILL-BACKGROUND) + (pika-selection-none img) + (pika-image-undo-group-end img) + (pika-displays-flush) + + (pika-context-pop) + ) ) ) (script-fu-register "script-fu-addborder" _"Add _Border..." _"Add a border around an image" - "Andy Thomas " - "Andy Thomas" - "6/10/97" + "Andy Thomas , Michael Schumacher " + "Andy Thomas, Michael Schumacher" + "6/10/1997, 26/05/2017" "*" SF-IMAGE "Input image" 0 SF-DRAWABLE "Input drawable" 0 @@ -171,6 +186,7 @@ SF-ADJUSTMENT _"Border Y size" '(12 1 250 1 10 0 1) SF-COLOR _"Border color" '(38 31 207) SF-ADJUSTMENT _"Delta value on color" '(25 1 255 1 10 0 1) + SF-TOGGLE _"Allow resizing" TRUE ) (script-fu-menu-register "script-fu-addborder" diff --git a/plug-ins/script-fu/scripts/coffee.scm b/plug-ins/script-fu/scripts/coffee.scm index 17610b4..e30ca8f 100644 --- a/plug-ins/script-fu/scripts/coffee.scm +++ b/plug-ins/script-fu/scripts/coffee.scm @@ -23,6 +23,7 @@ (theNumber inNumber) (theSize (min theWidth theHeight)) (theStain 0) + (theSpread 0) ) (pika-context-push) @@ -42,6 +43,7 @@ (pika-drawable-edit-clear theStain) (let ((blobSize (/ (rand (- theSize 40)) (+ (rand 3) 1)))) + (if (< blobSize 32) (set! blobSize 32)) (pika-image-select-ellipse theImage CHANNEL-OP-REPLACE (/ (- theSize blobSize) 2) @@ -49,17 +51,24 @@ blobSize blobSize) ) + ; clamp the spread value to the 'plug-in-spread' limits + (set! theSpread (/ theSize 25)) + (if (> theSpread 200) (set! theSpread 200)) + (script-fu-distress-selection theImage theStain (- (* (+ (rand 15) 1) (+ (rand 15) 1)) 1) - (/ theSize 25) 4 2 TRUE TRUE) + theSpread 4 2 TRUE TRUE) (pika-context-set-gradient "Coffee") - (pika-drawable-edit-gradient-fill theStain - GRADIENT-SHAPEBURST-DIMPLED 0 - FALSE 0 0 - TRUE - 0 0 0 0) + ; only fill if there is a selection + (if (> (car (pika-selection-bounds theImage)) 0) + (pika-drawable-edit-gradient-fill theStain + GRADIENT-SHAPEBURST-DIMPLED 0 + FALSE 0 0 + TRUE + 0 0 0 0) + ) (pika-layer-set-offsets theStain (- (rand theWidth) (/ theSize 2)) diff --git a/plug-ins/script-fu/scripts/contactsheet.scm b/plug-ins/script-fu/scripts/contactsheet.scm index 0d1790f..c2017b9 100644 --- a/plug-ins/script-fu/scripts/contactsheet.scm +++ b/plug-ins/script-fu/scripts/contactsheet.scm @@ -115,11 +115,11 @@ (pika-drawable-fill (aref (cadr (pika-image-get-selected-layers img)) 0) FILL-BACKGROUND) (pika-selection-none img) - (set! text-layer (car (pika-text-fontname img -1 0 0 + (set! text-layer (car (pika-text-font img -1 0 0 (string-append _"Contact Sheet " (number->string num) _" for directory " dir) - 0 TRUE 14 PIXELS title-font))) + 0 TRUE 14 title-font))) (set! text-width (car (pika-drawable-get-width text-layer))) (set! text-height (car (pika-drawable-get-height text-layer))) (pika-layer-set-offsets text-layer @@ -246,8 +246,8 @@ (pika-image-delete new-img) - (set! tmp-layer (car (pika-text-fontname sheet-img -1 0 0 file - 0 TRUE 12 PIXELS legend-font))) + (set! tmp-layer (car (pika-text-font sheet-img -1 0 0 file + 0 TRUE 12 legend-font))) (pika-layer-set-offsets tmp-layer (+ border-x off-x (* pos-x (+ thumb-w border-x)) (/ (- thumb-w (car (pika-drawable-get-width tmp-layer))) 2)) diff --git a/plug-ins/script-fu/scripts/font-map.scm b/plug-ins/script-fu/scripts/font-map.scm index 3527bab..6167084 100644 --- a/plug-ins/script-fu/scripts/font-map.scm +++ b/plug-ins/script-fu/scripts/font-map.scm @@ -28,8 +28,8 @@ (if (= use-name TRUE) (set! text font)) - (set! extents (pika-text-get-extents-fontname text - font-size PIXELS + (set! extents (pika-text-get-extents-font text + font-size font)) (set! width (car extents)) (if (> width maxwidth) @@ -55,8 +55,8 @@ (if (= use-name TRUE) (set! text font) ) - (set! extents (pika-text-get-extents-fontname text - font-size PIXELS + (set! extents (pika-text-get-extents-font text + font-size font)) (set! height (cadr extents)) (if (> height maxheight) @@ -120,25 +120,25 @@ (if (= use-name TRUE) (set! text font)) - (pika-text-fontname img -1 + (pika-text-font img -1 border y text - 0 TRUE font-size PIXELS + 0 TRUE font-size font) (set! y (+ y maxheight)) (if (= labels TRUE) (begin - (pika-floating-sel-anchor (car (pika-text-fontname img drawable + (pika-floating-sel-anchor (car (pika-text-font img drawable (- border (/ label-size 2)) (- y (/ label-size 2)) font 0 TRUE - label-size PIXELS + label-size "Sans"))) (set! y (+ y label-size)) ) diff --git a/plug-ins/script-fu/scripts/slide.scm b/plug-ins/script-fu/scripts/slide.scm index 792de6a..f22dd4a 100644 --- a/plug-ins/script-fu/scripts/slide.scm +++ b/plug-ins/script-fu/scripts/slide.scm @@ -47,7 +47,7 @@ drawable text number - fontname + font font-color work-on-copy) @@ -134,50 +134,55 @@ ; add the text (pika-context-set-foreground font-color) - (pika-floating-sel-anchor (car (pika-text-fontname image + (pika-floating-sel-anchor (car (pika-text-font + image film-layer (+ hole-start (* -0.25 width)) (* 0.01 height) text 0 TRUE - (* 0.040 height) PIXELS fontname))) - (pika-floating-sel-anchor (car (pika-text-fontname image + (* 0.040 height) font))) + (pika-floating-sel-anchor (car (pika-text-font + image film-layer (+ hole-start (* 0.75 width)) (* 0.01 height) text 0 TRUE - (* 0.040 height) PIXELS - fontname ))) - (pika-floating-sel-anchor (car (pika-text-fontname image + (* 0.040 height) + font ))) + (pika-floating-sel-anchor (car (pika-text-font + image film-layer (+ hole-start (* 0.35 width)) 0.0 number 0 TRUE - (* 0.050 height) PIXELS - fontname ))) - (pika-floating-sel-anchor (car (pika-text-fontname image + (* 0.050 height) + font ))) + (pika-floating-sel-anchor (car (pika-text-font + image film-layer (+ hole-start (* 0.35 width)) (* 0.94 height) number 0 TRUE - (* 0.050 height) PIXELS - fontname ))) - (pika-floating-sel-anchor (car (pika-text-fontname image + (* 0.050 height) + font ))) + (pika-floating-sel-anchor (car (pika-text-font + image film-layer (+ hole-start (* 0.85 width)) (* 0.945 height) numbera 0 TRUE - (* 0.045 height) PIXELS - fontname ))) + (* 0.045 height) + font ))) ; create a mask for the holes and cut them out (let* ( diff --git a/plug-ins/script-fu/scripts/test-sphere-v3.scm b/plug-ins/script-fu/scripts/test-sphere-v3.scm index f2a21a6..7b3cfc6 100644 --- a/plug-ins/script-fu/scripts/test-sphere-v3.scm +++ b/plug-ins/script-fu/scripts/test-sphere-v3.scm @@ -51,9 +51,9 @@ (light-end-x (+ cx (* radius (cos (+ *pi* radians))))) (light-end-y (- cy (* radius (sin (+ *pi* radians))))) (offset (* radius 0.1)) - (text-extents (pika-text-get-extents-fontname multi-text - size PIXELS - font)) + (text-extents (pika-text-get-extents-font multi-text + size + font)) (x-position (- cx (/ (car text-extents) 2))) (y-position (- cy (/ (cadr text-extents) 2))) (shadow-w 0) @@ -116,11 +116,11 @@ (pika-selection-none img) (pika-context-set-foreground '(0 0 0)) - (pika-floating-sel-anchor (car (pika-text-fontname img drawable + (pika-floating-sel-anchor (car (pika-text-font img drawable x-position y-position multi-text 0 TRUE - size PIXELS + size font))) (pika-image-undo-enable img) diff --git a/plug-ins/script-fu/scripts/test-sphere.scm b/plug-ins/script-fu/scripts/test-sphere.scm index ad7efde..1ea4aaf 100644 --- a/plug-ins/script-fu/scripts/test-sphere.scm +++ b/plug-ins/script-fu/scripts/test-sphere.scm @@ -23,82 +23,57 @@ ; SF-COLOR "label" "color" ; ; ---------------------------------------------------------------------- -; SF-FONT -; creates a font-selection widget in the dialog. It returns a fontname as -; a string. There are two new pika-text procedures to ease the use of this -; return parameter: +; Resources: Brush, Font, Gradient, Palette, Pattern ; -; (pika-text-fontname image drawable -; x-pos y-pos text border antialias size unit font) -; (pika-text-get-extents-fontname text size unit font)) +; Resources are Pika objects for installed data such as fonts. + +; Resources have a unique integer ID for the lifetime of a Pika session. +; In ScriptFu, a resource argument is bound to an integer ID. ; -; where font is the fontname you get. The size specified in the fontname -; is silently ignored. It is only used in the font-selector. So you are -; asked to set it to a useful value (24 pixels is a good choice) when -; using SF-FONT. +; Resources have names, often unique, but not always. +; For example, fonts from different collections of fonts might +; have the same names. ; -; Usage: -; SF-FONT "label" "fontname" +; ScriptFu v3 does not let you name a default resource. +; In v2, the third term of a triplet named a default resource. +; In v3, the third term is just a placeholder and is ignored. +; This is compatible with v2 scripts, but any default +; in a v2 script will be ignored in v3. +; (Similarly as for SF-IMAGE.) +; +; In the code below, a default name is shown, +; but is ignored since v3. +; Some even name resources that are not installed with Pika any longer. +; +; In non-interactive mode, a resource argument in ScriptFu +; is an integer ID passed by the caller. +; +; In interactive mode, the widget to choose a resource +; initially shows a resource from the context. +; The user can choose a different value. +; +; The resource chooser widgets are buttons. +; The choice is previewed in the label of the button, +; or in a preview window beside the button. +; Clicking the button shows another dialog for choosing. +; Clicking a preview window shows an enlarged view of the choice. ; ; ---------------------------------------------------------------------- ; SF-BRUSH -; is only useful in interactive mode. It will create a widget in the control -; dialog. The widget consists of a preview area (which when pressed will -; produce a popup preview ) and a button with the "..." label. The button will -; popup a dialog where brushes can be selected and each of the -; characteristics of the brush can be modified. -; -; The actual value returned when the script is invoked is a list -; consisting of Brush name, opacity, spacing and brush mode in the same -; units as passed in as the default value. ; ; Usage: -; SF-BRUSH "Brush" '("Circle (03)" 100 44 0) -; -; Here the brush dialog will be popped up with a default brush of Circle (03) -; opacity 100 spacing 44 and paint mode of Normal (value 0). -; If this selection was unchanged the value passed to the function as a -; parameter would be '("Circle (03)" 100 44 0). -; +; SF-BRUSH "Brush to paint with" "" + +; Note that v2 required a list for the third argument, the default. +; If you need the spacing attribute of the brush, get it from the brush. +; If you want to set opacity and mode when painting with the brush, +; declare more arguments and set them into a temporary context. ; ---------------------------------------------------------------------- -; SF-PATTERN -; Only useful in interactive mode. It will create a widget in the control -; dialog. The widget consists of a preview area (which when pressed will -; produce a popup preview ) and a button with the "..." label. The button will -; popup a dialog where patterns can be selected. -; ; Usage: -; SF-PATTERN "Pattern" "Maple Leaves" -; -; The value returned when the script is invoked is a string containing the -; pattern name. If the above selection was not altered the string would -; contain "Maple Leaves" -; -; ---------------------------------------------------------------------- -; SF-GRADIENT -; Only useful in interactive mode. It will create a widget in the control -; dialog. The widget consists of a button containing a preview of the selected -; gradient. If the button is pressed a gradient selection dialog will popup. -; -; Usage: -; SF-GRADIENT "Gradient" "Deep Sea" -; -; The value returned when the script is invoked is a string containing the -; gradient name. If the above selection was not altered the string would -; contain "Deep Sea" -; -; ---------------------------------------------------------------------- -; SF-PALETTE -; Only useful in interactive mode. It will create a widget in the control -; dialog. The widget consists of a button containing a preview of the selected -; palette. If the button is pressed a palette selection dialog will popup. -; -; Usage: -; SF-PALETTE "Palette" "Named Colors" -; -; The value returned when the script is invoked is a string containing the -; palette name. If the above selection was not altered the string would -; contain "Named Colors" +; SF-FONT "Font to render with" "" +; SF-GRADIENT "Gradient to render with" "" +; SF-PALETTE "Palette to render with" "" +; SF-PATTERN "Pattern to render with" "" ; ; ---------------------------------------------------------------------- ; SF-FILENAME @@ -189,9 +164,9 @@ (light-end-x (+ cx (* radius (cos (+ *pi* radians))))) (light-end-y (- cy (* radius (sin (+ *pi* radians))))) (offset (* radius 0.1)) - (text-extents (pika-text-get-extents-fontname multi-text - size PIXELS - font)) + (text-extents (pika-text-get-extents-font multi-text + size + font)) (x-position (- cx (/ (car text-extents) 2))) (y-position (- cy (/ (cadr text-extents) 2))) (shadow-w 0) @@ -254,11 +229,11 @@ (pika-selection-none img) (pika-context-set-foreground '(0 0 0)) - (pika-floating-sel-anchor (car (pika-text-fontname img drawable + (pika-floating-sel-anchor (car (pika-text-font img drawable x-position y-position multi-text 0 TRUE - size PIXELS + size font))) (pika-image-undo-enable img) diff --git a/plug-ins/script-fu/scripts/ts-helloworld.scm b/plug-ins/script-fu/scripts/ts-helloworld.scm index 69bdbe6..49675dc 100644 --- a/plug-ins/script-fu/scripts/ts-helloworld.scm +++ b/plug-ins/script-fu/scripts/ts-helloworld.scm @@ -38,7 +38,7 @@ (pika-image-undo-disable img) (pika-context-set-foreground color) - (set! text-layer (car (pika-text-fontname img -1 0 0 text 10 TRUE size PIXELS font))) + (set! text-layer (car (pika-text-font img -1 0 0 text 10 TRUE size font))) (set! width (car (pika-drawable-get-width text-layer))) (set! height (car (pika-drawable-get-height text-layer))) (pika-image-resize img width height 0 0) @@ -52,7 +52,7 @@ (script-fu-register "script-fu-helloworld" "_Hello World..." - "Creates an image with a user specified text string." + "Creates an image of a text string." "Kevin Cozens " "Kevin Cozens" "February 29, 2004" diff --git a/plug-ins/script-fu/server/script-fu-server-plugin.c b/plug-ins/script-fu/server/script-fu-server-plugin.c index c7f09e2..ce17253 100644 --- a/plug-ins/script-fu/server/script-fu-server-plugin.c +++ b/plug-ins/script-fu/server/script-fu-server-plugin.c @@ -44,7 +44,7 @@ static PikaProcedure * script_fu_server_create_procedure (PikaPlugIn const gchar *name); static PikaValueArray * script_fu_server_outer_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); static void script_fu_server_run_init (PikaProcedure *procedure, PikaRunMode run_mode); @@ -188,15 +188,14 @@ script_fu_server_create_procedure (PikaPlugIn *plug_in, */ static PikaValueArray * script_fu_server_outer_run (PikaProcedure *procedure, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { PikaValueArray *return_vals = NULL; + PikaRunMode run_mode = PIKA_RUN_NONINTERACTIVE; - if (pika_value_array_length (args) > 0) - script_fu_server_run_init (procedure, PIKA_VALUES_GET_ENUM (args, 0)); - else - script_fu_server_run_init (procedure, PIKA_RUN_NONINTERACTIVE); + g_object_get (config, "run-mode", &run_mode, NULL); + script_fu_server_run_init (procedure, run_mode); /* Remind any users watching the console. */ g_debug ("Starting. Further logging by server might be to a log file."); @@ -205,7 +204,7 @@ script_fu_server_outer_run (PikaProcedure *procedure, * Call the inner run func, defined in script-fu-server.c * !!! This does not return unless a client evals "(pika-quit)" */ - return_vals = script_fu_server_run (procedure, args); + return_vals = script_fu_server_run (procedure, config); /* * The server returns SUCCESS but no other values (to the caller) diff --git a/plug-ins/script-fu/server/script-fu-server.c b/plug-ins/script-fu/server/script-fu-server.c index 2aafd6d..168162f 100644 --- a/plug-ins/script-fu/server/script-fu-server.c +++ b/plug-ins/script-fu/server/script-fu-server.c @@ -275,18 +275,20 @@ script_fu_server_post_command (void) PikaValueArray * script_fu_server_run (PikaProcedure *procedure, - const PikaValueArray *args) + PikaProcedureConfig *config) { PikaPDBStatusType status = PIKA_PDB_SUCCESS; PikaRunMode run_mode; - const gchar *ip; + gchar *ip; gint port; - const gchar *logfile; + gchar *logfile; - run_mode = PIKA_VALUES_GET_ENUM (args, 0); - ip = PIKA_VALUES_GET_STRING (args, 1); - port = PIKA_VALUES_GET_INT (args, 2); - logfile = PIKA_VALUES_GET_STRING (args, 3); + g_object_get (config, + "run-mode", &run_mode, + "ip", &ip, + "port", &port, + "logfile", &logfile, + NULL); script_fu_set_run_mode (run_mode); script_fu_set_print_flag (1); @@ -316,6 +318,8 @@ script_fu_server_run (PikaProcedure *procedure, default: break; } + g_free (ip); + g_free (logfile); return pika_procedure_new_return_values (procedure, status, NULL); } diff --git a/plug-ins/script-fu/server/script-fu-server.h b/plug-ins/script-fu/server/script-fu-server.h index 4d2d68b..f2cc91e 100644 --- a/plug-ins/script-fu/server/script-fu-server.h +++ b/plug-ins/script-fu/server/script-fu-server.h @@ -24,7 +24,7 @@ PikaValueArray * script_fu_server_run (PikaProcedure *procedure, - const PikaValueArray *args); + PikaProcedureConfig *config); #endif /* __SCRIPT_FU_SERVER__ */ diff --git a/plug-ins/script-fu/test/tests/PDB/image/image-ops.scm b/plug-ins/script-fu/test/tests/PDB/image/image-ops.scm index 81fc8d0..4cd0fe7 100644 --- a/plug-ins/script-fu/test/tests/PDB/image/image-ops.scm +++ b/plug-ins/script-fu/test/tests/PDB/image/image-ops.scm @@ -36,7 +36,11 @@ ; but then seems to slow down testing ; unless we scale down afterwards. ; This seems glacial if not scaled to 1,1 prior. -(assert `(pika-image-scale ,testImage 524288 524288)) +; FIXME commented out, crashes with: +; (pika-2.99:129): GLib-GObject-CRITICAL **: 13:19:28.145: +; value "524288.000000" of type 'gdouble' is invalid or out of range for property 'x' of type 'gdouble' +; but docs say 524288 is the max +; (assert `(pika-image-scale ,testImage 524288 524288)) ; down to min (assert `(pika-image-scale ,testImage 1 1)) diff --git a/plug-ins/script-fu/test/tests/PDB/item/item.scm b/plug-ins/script-fu/test/tests/PDB/item/item.scm index ab558cd..b7e9040 100644 --- a/plug-ins/script-fu/test/tests/PDB/item/item.scm +++ b/plug-ins/script-fu/test/tests/PDB/item/item.scm @@ -135,9 +135,10 @@ (define testLayer (vector-ref (cadr (pika-image-get-layers testImage )) 0)) (define testSelection (car (pika-image-get-selection testImage))) +(define testFont (car (pika-context-get-font))) (define testTextLayer - (car (pika-text-fontname + (car (pika-text-font testImage -1 ; drawable. -1 means NULL means create new text layer 0 0 ; coords @@ -145,8 +146,7 @@ 1 ; border size 1 ; antialias true 31 ; fontsize - PIXELS ; size units. !!! See UNIT-PIXEL - "fontName" ))) + testFont ))) (define testChannel (car (pika-channel-new testImage ; image 23 24 ; width, height diff --git a/plug-ins/script-fu/test/tests/PDB/pdb.scm b/plug-ins/script-fu/test/tests/PDB/pdb.scm index 4968d57..3288778 100644 --- a/plug-ins/script-fu/test/tests/PDB/pdb.scm +++ b/plug-ins/script-fu/test/tests/PDB/pdb.scm @@ -21,9 +21,7 @@ (testing:load-test "layer-mask.scm") ; TODO layer stack ops -; Commented out until PDB is fixed -; Known to crash PIKA -;(testing:load-test "text-layer-new.scm") +(testing:load-test "text-layer-new.scm") (testing:load-test "vectors-new.scm") (testing:load-test "channel-new.scm") @@ -36,9 +34,7 @@ ; Drawable and Item are superclasses ; Testing Drawable and Item uses extant instances; ; must be after instances of subclasses are created. -; commented out until text-get-fontname is fixed -; Known to crash PIKA -;(testing:load-test "item.scm") +(testing:load-test "item.scm") ; todo item ordering operations ; TODO drawable diff --git a/plug-ins/script-fu/test/tests/PDB/text-layer/text-layer-new.scm b/plug-ins/script-fu/test/tests/PDB/text-layer/text-layer-new.scm index d12098e..ebdba95 100644 --- a/plug-ins/script-fu/test/tests/PDB/text-layer/text-layer-new.scm +++ b/plug-ins/script-fu/test/tests/PDB/text-layer/text-layer-new.scm @@ -1,7 +1,7 @@ ; tests of TextLayer class ; !!! Some methods tested here are named strangely: -; text-fontname returns a new TextLayer +; text-font returns a new TextLayer @@ -11,23 +11,21 @@ ; Require image has no layer (define testImage (car (pika-image-new 21 22 RGB))) +(define testFont (car (pika-context-get-font))) + ; setup (not an assert ) (define testTextLayer (car (pika-text-layer-new testImage "textOfTestTextLayer" ; text - "fontName" ; fontname + testFont ; font 30 ; fontsize UNIT-PIXEL))) -; !!!! fontName is not valid -; The text displays anyway, using some font family, without error. -; The docs don't seem to say which font family is used. -; TODO better documentation -; The text layer still says it is using the given font family. -; TODO yield actual font family used. +; TOTO test if font is not valid or NULL + ; !!! UNIT-PIXEL PikaUnitsType is distinct from PIXELS PikaSizeType @@ -77,9 +75,9 @@ ; text (assert `(string=? (car (pika-text-layer-get-text ,testTextLayer)) "textOfTestTextLayer")) -; font -(assert `(string=? (car (pika-text-layer-get-font ,testTextLayer)) - "fontName")) +; font, numeric ID's equal +(assert `(= (car (pika-text-layer-get-font ,testTextLayer)) + ,testFont)) ; font-size (assert `(= (car (pika-text-layer-get-font-size ,testTextLayer)) 30)) @@ -100,15 +98,14 @@ ; misc method -; pika-text-get-extents-fontname +; pika-text-get-extents-font ; Yields extent of rendered text, independent of image or layer. ; Extent is (width, height, ascent, descent) in unstated units, pixels? ; Does not affect image. -(assert `(= (car (pika-text-get-extents-fontname +(assert `(= (car (pika-text-get-extents-font "zed" ; text 32 ; fontsize - POINTS ; size units. !!! See UNIT-PIXEL - "fontName" )) ; fontname + ,testFont )) 57)) ; usual result is (57 38 30 -8) @@ -117,11 +114,11 @@ ; alternate method for creating text layer -; pika-text-fontname creates text layer AND inserts it into image +; pika-text-font creates text layer AND inserts it into image ; setup, not assert (define testTextLayer2 - (car (pika-text-fontname + (car (pika-text-font testImage -1 ; drawable. -1 means NULL means create new text layer 0 0 ; coords @@ -129,11 +126,10 @@ 1 ; border size 1 ; antialias true 31 ; fontsize - PIXELS ; size units. !!! See UNIT-PIXEL - "fontName" ))) + testFont ))) -; error to insert layer created by pika-text-fontname +; error to insert layer created by pika-text-font ; TODO make the error message matching by prefix only (assert-error `(pika-image-insert-layer ,testImage diff --git a/plug-ins/selection-to-path/fit.c b/plug-ins/selection-to-path/fit.c index 8ee57ae..734b6fe 100644 --- a/plug-ins/selection-to-path/fit.c +++ b/plug-ins/selection-to-path/fit.c @@ -217,53 +217,30 @@ fitted_splines (pixel_outline_list_type pixel_outline_list) /* Set up the internal parameters from the external ones */ void -fit_set_params(SELVALS *selVals) +fit_set_params (PikaProcedureConfig *config) { - align_threshold = selVals->align_threshold; - corner_always_threshold = selVals->corner_always_threshold; - corner_surround = selVals->corner_surround; - corner_threshold = selVals->corner_threshold; - error_threshold = selVals->error_threshold; - filter_alternative_surround = selVals->filter_alternative_surround; - filter_epsilon = selVals->filter_epsilon; - filter_iteration_count = selVals->filter_iteration_count; - filter_percent = selVals->filter_percent; - filter_secondary_surround = selVals->filter_secondary_surround; - filter_surround = selVals->filter_surround; - keep_knees = selVals->keep_knees; - line_reversion_threshold = selVals->line_reversion_threshold; - line_threshold = selVals->line_threshold; - reparameterize_improvement = selVals->reparameterize_improvement; - reparameterize_threshold = selVals->reparameterize_threshold; - subdivide_search = selVals->subdivide_search; - subdivide_surround = selVals->subdivide_surround; - subdivide_threshold = selVals->subdivide_threshold; - tangent_surround = selVals->tangent_surround; -} - -void -fit_set_default_params(SELVALS *selVals) -{ - selVals->align_threshold = align_threshold; - selVals->corner_always_threshold = corner_always_threshold; - selVals->corner_surround = corner_surround; - selVals->corner_threshold = corner_threshold; - selVals->error_threshold = error_threshold; - selVals->filter_alternative_surround = filter_alternative_surround; - selVals->filter_epsilon = filter_epsilon; - selVals->filter_iteration_count = filter_iteration_count; - selVals->filter_percent = filter_percent; - selVals->filter_secondary_surround = filter_secondary_surround; - selVals->filter_surround = filter_surround; - selVals->keep_knees = keep_knees; - selVals->line_reversion_threshold = line_reversion_threshold; - selVals->line_threshold = line_threshold; - selVals->reparameterize_improvement = reparameterize_improvement; - selVals->reparameterize_threshold = reparameterize_threshold; - selVals->subdivide_search = subdivide_search; - selVals->subdivide_surround = subdivide_surround; - selVals->subdivide_threshold = subdivide_threshold; - selVals->tangent_surround = tangent_surround; + g_object_get (config, + "align-threshold", &align_threshold, + "corner-always-threshold", &corner_always_threshold, + "corner-surround", &corner_surround, + "corner-threshold", &corner_threshold, + "error-threshold", &error_threshold, + "filter-alternative-surround", &filter_alternative_surround, + "filter-epsilon", &filter_epsilon, + "filter-iteration-count", &filter_iteration_count, + "filter-percent", &filter_percent, + "filter-secondary-surround", &filter_secondary_surround, + "filter-surround", &filter_surround, + "keep-knees", &keep_knees, + "line-reversion-threshold", &line_reversion_threshold, + "line-threshold", &line_threshold, + "reparametrize-improvement", &reparameterize_improvement, + "reparametrize-threshold", &reparameterize_threshold, + "subdivide-search", &subdivide_search, + "subdivide-surround", &subdivide_surround, + "subdivide-threshold", &subdivide_threshold, + "tangent-surround", &tangent_surround, + NULL); } /* Fit the list of curves CURVE_LIST to a list of splines, and return diff --git a/plug-ins/selection-to-path/fit.h b/plug-ins/selection-to-path/fit.h index f009c9a..a0d0b9a 100644 --- a/plug-ins/selection-to-path/fit.h +++ b/plug-ins/selection-to-path/fit.h @@ -19,6 +19,8 @@ #ifndef FIT_H #define FIT_H +#include "libpika/pika.h" + #include "pxl-outline.h" #include "spline.h" @@ -47,8 +49,7 @@ extern unsigned tangent_surround; /* Fit splines and lines to LIST. */ -extern spline_list_array_type fitted_splines (pixel_outline_list_type list); -void fit_set_params(SELVALS *); -void fit_set_default_params(SELVALS *); +extern spline_list_array_type fitted_splines (pixel_outline_list_type list); +void fit_set_params (PikaProcedureConfig *config); #endif /* not FIT_H */ diff --git a/plug-ins/selection-to-path/meson.build b/plug-ins/selection-to-path/meson.build index a15bbfa..7e2cce7 100644 --- a/plug-ins/selection-to-path/meson.build +++ b/plug-ins/selection-to-path/meson.build @@ -6,7 +6,6 @@ plugin_sources = [ 'fit.c', 'math.c', 'pxl-outline.c', - 'selection-to-path-dialog.c', 'selection-to-path.c', 'spline.c', 'vector.c', diff --git a/plug-ins/selection-to-path/selection-to-path.c b/plug-ins/selection-to-path/selection-to-path.c index 4525c7e..9a9b09a 100644 --- a/plug-ins/selection-to-path/selection-to-path.c +++ b/plug-ins/selection-to-path/selection-to-path.c @@ -81,14 +81,11 @@ static PikaValueArray * sel2path_run (PikaProcedure *procedu PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); -static gint sel2path_dialog (SELVALS *sels); -static void sel2path_response (GtkWidget *widget, - gint response_id, - gpointer data); -static void dialog_print_selVals (SELVALS *sels); +static gint sel2path_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config); static gboolean sel2path (PikaImage *image); @@ -100,9 +97,7 @@ DEFINE_STD_SET_I18N static gint sel_x1, sel_y1, sel_x2, sel_y2; static gint has_sel, sel_width, sel_height; -static SELVALS selVals; static GeglSampler *sel_sampler; -static gboolean retVal = TRUE; /* Toggle if cancel button clicked */ static void @@ -145,8 +140,8 @@ sel2path_create_procedure (PikaPlugIn *plug_in, PIKA_PROCEDURE_SENSITIVE_NO_DRAWABLES); pika_procedure_set_documentation (procedure, - "Converts a selection to a path", - "Converts a selection to a path", + _("Converts a selection to a path"), + _("Converts a selection to a path"), name); pika_procedure_set_attribution (procedure, "Andy Thomas", @@ -154,122 +149,160 @@ sel2path_create_procedure (PikaPlugIn *plug_in, "1999"); PIKA_PROC_ARG_DOUBLE (procedure, "align-threshold", - "Align threshold", - "Align threshold", + _("_Align Threshold"), + _("If two endpoints are closer than this, " + "they are made to be equal."), 0.2, 2.0, 0.5, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "corner-always-threshold", - "Corner always threshold", - "Corner always threshold", + _("Corner Al_ways Threshold"), + _("If the angle defined by a point and its predecessors " + "and successors is smaller than this, it's a corner, " + "even if it's within 'corner_surround' pixels of a " + "point with a smaller angle."), 30, 180, 60.0, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "corner-surround", - "Corner surround", - "Corner surround", + _("Corner _Surround"), + _("Number of points to consider when determining if a " + "point is a corner or not."), 3, 8, 4, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "corner-threshold", - "Corner threshold", - "Corner threshold", + _("Cor_ner Threshold"), + _("If a point, its predecessors, and its successors " + "define an angle smaller than this, it's a corner."), 0, 180, 100.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "error-threshold", - "Error threshold", - "Error threshold", + _("Error Thres_hold"), + _("Amount of error at which a fitted spline is " + "unacceptable. If any pixel is further away " + "than this from the fitted curve, we try again."), 0.2, 10, 0.4, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "filter-alternative-surround", - "Filter alternative surround", - "Filter alternative surround", + _("_Filter Alternative Surround"), + _("A second number of adjacent points to consider " + "when filtering."), 1, 10, 1, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "filter-epsilon", - "Filter epsilon", - "Filter epsilon", + _("Filter E_psilon"), + _("If the angles between the vectors produced by " + "filter_surround and filter_alternative_surround " + "points differ by more than this, use the one from " + "filter_alternative_surround."), 5, 40, 10.0, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "filter-iteration-count", - "Filter iteration count", - "Filter iteration count", + _("Filter Iteration Co_unt"), + _("Number of times to smooth original data points. " + "Increasing this number dramatically --- to 50 or " + "so --- can produce vastly better results. But if " + "any points that 'should' be corners aren't found, " + "the curve goes to hell around that point."), 4, 70, 4, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "filter-percent", - "Filter percent", - "Filter percent", + _("Filt_er Percent"), + _("To produce the new point, use the old point plus " + "this times the neighbors."), 0, 1, 0.33, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "filter-secondary-surround", - "Filter secondary surround", - "Filter secondary surround", + _("Filter Secondar_y Surround"), + _("Number of adjacent points to consider if " + "'filter_surround' points defines a straight line."), 3, 10, 3, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "filter-surround", - "Filter surround", - "Filter surround", + _("Filter Surroun_d"), + _("Number of adjacent points to consider when filtering."), 2, 10, 2, G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "keep-knees", - "Keep knees", - "Keep knees", + _("_Keep Knees"), + _("Says whether or not to remove 'knee' " + "points after finding the outline."), FALSE, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "line-reversion-threshold", - "Line reversion threshold", - "Line reversion threshold", + _("_Line Reversion Threshold"), + _("If a spline is closer to a straight line than this, " + "it remains a straight line, even if it would otherwise " + "be changed back to a curve. This is weighted by the " + "square of the curve length, to make shorter curves " + "more likely to be reverted."), 0.01, 0.2, 0.01, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "line-threshold", - "Line threshold", - "Line threshold", + _("L_ine Threshold"), + _("How many pixels (on the average) a spline can " + "diverge from the line determined by its endpoints " + "before it is changed to a straight line."), 0.2, 4, 0.5, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "reparametrize-improvement", - "Reparametrize improvement", - "Reparametrize improvement", + _("Reparametri_ze Improvement"), + _("If reparameterization doesn't improve the fit by this " + "much percent, stop doing it. ""Amount of error at which " + "it is pointless to reparameterize."), 0, 1, 0.01, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "reparametrize-threshold", - "Reparametrize threshold", - "Reparametrize threshold", + _("Repara_metrize Threshold"), + _("Amount of error at which it is pointless to reparameterize. " + "This happens, for example, when we are trying to fit the " + "outline of the outside of an 'O' with a single spline. " + "The initial fit is not good enough for the Newton-Raphson " + "iteration to improve it. It may be that it would be better " + "to detect the cases where we didn't find any corners."), 1, 50, 1.0, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "subdivide-search", - "Subdivide search", - "Subdivide search", + _("Subdi_vide Search"), + _("Percentage of the curve away from the worst point " + "to look for a better place to subdivide."), 0.05, 1, 0.1, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "subdivide-surround", - "Subdivide surround", - "Subdivide surround", + _("Su_bdivide Surround"), + _("Number of points to consider when deciding whether " + "a given point is a better place to subdivide."), 2, 10, 4, G_PARAM_READWRITE); PIKA_PROC_ARG_DOUBLE (procedure, "subdivide-threshold", - "Subdivide threshold", - "Subdivide threshold", + _("Subdivide Th_reshold"), + _("How many pixels a point can diverge from a straight " + "line and still be considered a better place to " + "subdivide."), 0.01, 1, 0.03, G_PARAM_READWRITE); PIKA_PROC_ARG_INT (procedure, "tangent-surround", - "Tangent surround", - "Tangent surround", + _("_Tangent Surround"), + _("Number of points to look at on either side of a " + "point when computing the approximation to the " + "tangent at that point."), 2, 10, 3, G_PARAM_READWRITE); } @@ -283,7 +316,7 @@ sel2path_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { gegl_init (NULL, NULL); @@ -297,171 +330,133 @@ sel2path_run (PikaProcedure *procedure, NULL); } - fit_set_default_params (&selVals); + if (run_mode == PIKA_RUN_INTERACTIVE && + ! sel2path_dialog (procedure, config)) + return pika_procedure_new_return_values (procedure, + PIKA_PDB_CANCEL, + NULL); - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - if (pika_get_data_size (PLUG_IN_PROC) > 0) - pika_get_data (PLUG_IN_PROC, &selVals); - - if (! sel2path_dialog (&selVals)) - return pika_procedure_new_return_values (procedure, - PIKA_PDB_CANCEL, - NULL); - - /* Get the current settings */ - fit_set_params (&selVals); - break; - - case PIKA_RUN_NONINTERACTIVE: - selVals.align_threshold = PIKA_VALUES_GET_DOUBLE (args, 0); - selVals.corner_always_threshold = PIKA_VALUES_GET_DOUBLE (args, 1); - selVals.corner_surround = PIKA_VALUES_GET_INT (args, 2); - selVals.corner_threshold = PIKA_VALUES_GET_DOUBLE (args, 3); - selVals.error_threshold = PIKA_VALUES_GET_DOUBLE (args, 4); - selVals.filter_alternative_surround = PIKA_VALUES_GET_INT (args, 5); - selVals.filter_epsilon = PIKA_VALUES_GET_DOUBLE (args, 6); - selVals.filter_iteration_count = PIKA_VALUES_GET_INT (args, 7); - selVals.filter_percent = PIKA_VALUES_GET_DOUBLE (args, 8); - selVals.filter_secondary_surround = PIKA_VALUES_GET_INT (args, 9); - selVals.filter_surround = PIKA_VALUES_GET_INT (args, 10); - selVals.keep_knees = PIKA_VALUES_GET_BOOLEAN (args, 11); - selVals.line_reversion_threshold = PIKA_VALUES_GET_DOUBLE (args, 12); - selVals.line_threshold = PIKA_VALUES_GET_DOUBLE (args, 13); - selVals.reparameterize_improvement = PIKA_VALUES_GET_DOUBLE (args, 14); - selVals.reparameterize_threshold = PIKA_VALUES_GET_DOUBLE (args, 15); - selVals.subdivide_search = PIKA_VALUES_GET_DOUBLE (args, 16); - selVals.subdivide_surround = PIKA_VALUES_GET_INT (args, 17); - selVals.subdivide_threshold = PIKA_VALUES_GET_DOUBLE (args, 18); - selVals.tangent_surround = PIKA_VALUES_GET_INT (args, 19); - - fit_set_params (&selVals); - break; - - case PIKA_RUN_WITH_LAST_VALS: - if (pika_get_data_size (PLUG_IN_PROC) > 0) - { - pika_get_data (PLUG_IN_PROC, &selVals); - - /* Set up the last values */ - fit_set_params (&selVals); - } - break; - - default: - break; - } + fit_set_params (config); if (! sel2path (image)) return pika_procedure_new_return_values (procedure, PIKA_PDB_EXECUTION_ERROR, NULL); - dialog_print_selVals (&selVals); - - if (run_mode == PIKA_RUN_INTERACTIVE) - pika_set_data (PLUG_IN_PROC, &selVals, sizeof(SELVALS)); - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); } -static void -dialog_print_selVals (SELVALS *sels) -{ -#if 0 - printf ("selVals.align_threshold %g\n", selVals.align_threshold); - printf ("selVals.corner_always_threshol %g\n", selVals.corner_always_threshold); - printf ("selVals.corner_surround %g\n", selVals.corner_surround); - printf ("selVals.corner_threshold %g\n", selVals.corner_threshold); - printf ("selVals.error_threshold %g\n", selVals.error_threshold); - printf ("selVals.filter_alternative_surround %g\n", selVals.filter_alternative_surround); - printf ("selVals.filter_epsilon %g\n", selVals.filter_epsilon); - printf ("selVals.filter_iteration_count %g\n", selVals.filter_iteration_count); - printf ("selVals.filter_percent %g\n", selVals.filter_percent); - printf ("selVals.filter_secondary_surround %g\n", selVals.filter_secondary_surround); - printf ("selVals.filter_surround %g\n", selVals.filter_surround); - printf ("selVals.keep_knees %d\n", selVals.keep_knees); - printf ("selVals.line_reversion_threshold %g\n", selVals.line_reversion_threshold); - printf ("selVals.line_threshold %g\n", selVals.line_threshold); - printf ("selVals.reparameterize_improvement %g\n", selVals.reparameterize_improvement); - printf ("selVals.reparameterize_threshold %g\n", selVals.reparameterize_threshold); - printf ("selVals.subdivide_search %g\n" selVals.subdivide_search); - printf ("selVals.subdivide_surround %g\n", selVals.subdivide_surround); - printf ("selVals.subdivide_threshold %g\n", selVals.subdivide_threshold); - printf ("selVals.tangent_surround %g\n", selVals.tangent_surround); -#endif /* 0 */ -} - /* Build the dialog up. This was the hard part! */ static gint -sel2path_dialog (SELVALS *sels) +sel2path_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config) { - GtkWidget *dlg; - GtkWidget *table; - - retVal = FALSE; + GtkWidget *dialog; + GtkWidget *vbox; + GtkWidget *scrolled_win; + gboolean run; pika_ui_init (PLUG_IN_BINARY); - dlg = pika_dialog_new (_("Selection to Path Advanced Settings"), - PLUG_IN_ROLE, - NULL, 0, - pika_standard_help_func, PLUG_IN_PROC, + dialog = pika_procedure_dialog_new (procedure, + PIKA_PROCEDURE_CONFIG (config), + _("Selection to Path Advanced Settings")); - _("_Reset"), RESPONSE_RESET, - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_OK"), GTK_RESPONSE_OK, - - NULL); - - pika_dialog_set_alternative_button_order (GTK_DIALOG (dlg), + pika_dialog_set_alternative_button_order (GTK_DIALOG (dialog), RESPONSE_RESET, GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); - pika_window_set_transient (GTK_WINDOW (dlg)); + pika_window_set_transient (GTK_WINDOW (dialog)); - g_signal_connect (dlg, "response", - G_CALLBACK (sel2path_response), - NULL); - g_signal_connect (dlg, "destroy", - G_CALLBACK (gtk_main_quit), - NULL); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "align-threshold", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "corner-always-threshold", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "corner-surround", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "corner-threshold", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "error-threshold", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "filter-alternative-surround", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "filter-epsilon", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "filter-iteration-count", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "filter-percent", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "filter-secondary-surround", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "filter-surround", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "line-reversion-threshold", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "line-threshold", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "reparametrize-improvement", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "reparametrize-threshold", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "subdivide-search", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "subdivide-surround", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "subdivide-threshold", 1.0); + pika_procedure_dialog_get_scale_entry (PIKA_PROCEDURE_DIALOG (dialog), + "tangent-surround", 1.0); - table = dialog_create_selection_area (sels); - gtk_container_set_border_width (GTK_CONTAINER (table), 12); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))), - table, TRUE, TRUE, 0); - gtk_widget_show (table); + vbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), + "selection-to-path-box", + "align-threshold", + "corner-always-threshold", + "corner-surround", + "corner-threshold", + "error-threshold", + "filter-alternative-surround", + "filter-epsilon", + "filter-iteration-count", + "filter-percent", + "filter-secondary-surround", + "filter-surround", + "keep-knees", + "line-reversion-threshold", + "line-threshold", + "reparametrize-improvement", + "reparametrize-threshold", + "subdivide-search", + "subdivide-surround", + "subdivide-threshold", + "tangent-surround", + NULL); + gtk_box_set_spacing (GTK_BOX (vbox), 12); - gtk_widget_show (dlg); + scrolled_win = pika_procedure_dialog_fill_scrolled_window (PIKA_PROCEDURE_DIALOG (dialog), + "scrollwin", + "selection-to-path-box"); + gtk_widget_set_size_request (scrolled_win, 400, 400); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_SHADOW_NONE); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_NEVER, + GTK_POLICY_ALWAYS); + gtk_scrolled_window_set_overlay_scrolling (GTK_SCROLLED_WINDOW (scrolled_win), + FALSE); - gtk_main (); + pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), + "scrollwin", + NULL); - return retVal; -} + gtk_widget_show (dialog); -static void -sel2path_response (GtkWidget *widget, - gint response_id, - gpointer data) -{ - switch (response_id) - { - case RESPONSE_RESET: - reset_adv_dialog (); - fit_set_params (&selVals); - break; + run = pika_procedure_dialog_run (PIKA_PROCEDURE_DIALOG (dialog)); - case GTK_RESPONSE_OK: - retVal = TRUE; + gtk_widget_destroy (dialog); - default: - gtk_widget_destroy (widget); - break; - } + return run; } guchar diff --git a/plug-ins/twain/twain.c b/plug-ins/twain/twain.c index b19b10b..18fb6da 100644 --- a/plug-ins/twain/twain.c +++ b/plug-ins/twain/twain.c @@ -142,7 +142,7 @@ struct _TwainClass #define TWAIN_TYPE (twain_get_type ()) -#define TWAIN (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TWAIN_TYPE, Twain)) +#define TWAIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TWAIN_TYPE, Twain)) GType twain_get_type (void) G_GNUC_CONST; @@ -155,7 +155,7 @@ static PikaValueArray * twain_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data); G_DEFINE_TYPE (Twain, twain, PIKA_TYPE_PLUG_IN) @@ -232,6 +232,7 @@ twain_create_procedure (PikaPlugIn *plug_in, return procedure; } +#if 0 /* Data structure holding data between runs */ /* Currently unused... Eventually may be used * to track dialog data. @@ -257,6 +258,7 @@ static TwainValues twainvals = 0, 0, TWPT_RGB }; +#endif /* The standard callback functions */ TXFR_CB_FUNCS standardCbFuncs = @@ -391,7 +393,7 @@ twain_run (PikaProcedure *procedure, PikaImage *image, gint n_drawables, PikaDrawable **drawables, - const PikaValueArray *args, + PikaProcedureConfig *config, gpointer run_data) { /* Initialize the return values @@ -416,33 +418,11 @@ twain_run (PikaProcedure *procedure, NULL); } - /* How are we running today? */ - switch (run_mode) - { - case PIKA_RUN_INTERACTIVE: - /* Retrieve values from the last run... - * Currently ignored - */ - pika_get_data (PLUG_IN_NAME, &twainvals); - break; - - case PIKA_RUN_NONINTERACTIVE: - /* Currently, we don't do non-interactive calls. - * Bail if someone tries to call us non-interactively - */ - return pika_procedure_new_return_values (procedure, PIKA_PDB_CALLING_ERROR, - NULL); - - case PIKA_RUN_WITH_LAST_VALS: - /* Retrieve values from the last run... - * Currently ignored - */ - pika_get_data (PLUG_IN_NAME, &twainvals); - break; - - default: - break; - } + if (run_mode == PIKA_RUN_NONINTERACTIVE) + /* Currently, we don't do non-interactive calls. + * Bail if someone tries to call us non-interactively + */ + return pika_procedure_new_return_values (procedure, PIKA_PDB_CALLING_ERROR, NULL); /* Have we succeeded so far? */ if (status == PIKA_PDB_SUCCESS) @@ -457,11 +437,6 @@ twain_run (PikaProcedure *procedure, * datasource. Do final Interactive * steps. */ - if (run_mode == PIKA_RUN_INTERACTIVE) - { - /* Store variable states for next run */ - pika_set_data (PLUG_IN_NAME, &twainvals, sizeof (TwainValues)); - } num_images = g_list_length (image_list); images = g_new (PikaImage *, num_images); diff --git a/po-libpika/POTFILES.in b/po-libpika/POTFILES.in index 5abd2d1..0abc0be 100644 --- a/po-libpika/POTFILES.in +++ b/po-libpika/POTFILES.in @@ -2,16 +2,20 @@ # marked to allow runtime translation of messages libpika/pika.c -libpika/pikabrushselectbutton.c +libpika/pikabrushchooser.c +libpika/pikadrawablechooser.c libpika/pikaexport.c libpika/pikaimagemetadata.c libpika/pikaimagemetadata-save.c -libpika/pikapatternselectbutton.c +libpika/pikaloadprocedure.c +libpika/pikaparamspecs-desc.c +libpika/pikapatternchooser.c libpika/pikapdb.c libpika/pikaprocbrowserdialog.c libpika/pikaprocedure.c libpika/pikaproceduredialog.c libpika/pikaprocview.c +libpika/pikapropwidgets.c libpika/pikasaveprocedure.c libpika/pikasaveproceduredialog.c libpika/pikaunitcache.c diff --git a/po-libpika/ca.po b/po-libpika/ca.po index a8cf4f5..ed85753 100644 --- a/po-libpika/ca.po +++ b/po-libpika/ca.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: ca\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-07-15 14:41+0000\n" -"PO-Revision-Date: 2023-07-25 21:55+0100\n" +"POT-Creation-Date: 2023-10-21 01:50+0000\n" +"PO-Revision-Date: 2023-10-22 21:55+0100\n" "Last-Translator: Jordi Mas i Hernàndez \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -27,10 +27,14 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 1.8.12\n" -#: libpika/pikabrushselectbutton.c:130 libpika/pikapatternselectbutton.c:142 +#: libpika/pikabrushchooser.c:134 libpika/pikapatternchooser.c:129 msgid "_Browse..." msgstr "_Navega..." +#: libpika/pikadrawablechooser.c:238 +msgid "Browse..." +msgstr "Navega..." + #: libpika/pikaexport.c:332 libpika/pikaexport.c:368 #, c-format msgid "%s plug-in can't handle layers" @@ -51,7 +55,8 @@ msgstr "" #, c-format msgid "%s plug-in can only handle layers as animation frames" msgstr "" -"El connector %s només pot gestionar les capes com a fotogrames d'una animació" +"El connector %s només pot gestionar les capes com a fotogrames d'una " +"animació" #: libpika/pikaexport.c:351 libpika/pikaexport.c:360 msgid "Save as Animation" @@ -171,7 +176,7 @@ msgid "Confirm Save" msgstr "Confirmeu què voleu desar" #: 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 @@ -193,7 +198,7 @@ msgid "_Ignore" msgstr "_Ignora" #: libpika/pikaexport.c:629 libpika/pikaexport.c:1200 -#: libpika/pikaproceduredialog.c:277 +#: libpika/pikaproceduredialog.c:296 libpika/pikaproceduredialog.c:569 msgid "_Export" msgstr "_Exporta" @@ -201,11 +206,11 @@ msgstr "_Exporta" #: libpika/pikaexport.c:659 #, c-format msgid "" -"Your image should be exported before it can be saved as %s for the following " -"reasons:" +"Your image should be exported before it can be saved as %s for the following" +" reasons:" msgstr "" -"Pels motius següents, heu d'exportar la imatge abans de poder-la desar com a " -"%s:" +"Pels motius següents, heu d'exportar la imatge abans de poder-la desar com a" +" %s:" #. the footline #: libpika/pikaexport.c:733 @@ -232,12 +237,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:398 #, c-format msgid "Export Image as %s" msgstr "Exporta la imatge com a %s" -#: libpika/pikaimagemetadata.c:284 +#: libpika/pikaimagemetadata.c:283 msgid "Background" msgstr "Fons" @@ -245,23 +250,36 @@ msgstr "Fons" 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 "" +"Aquest connector de càrrega de fitxers ha retornat èxit com a estat sense " +"imatge. Això és un error en el codi del connector. Poseu-vos en contacte " +"amb el desenvolupador del connector." + +#: libpika/pikaparamspecs-desc.c:54 +msgid "Allowed values:" +msgstr "Valors permesos:" + #. procedure executed successfully -#: libpika/pikapdb.c:552 +#: libpika/pikapdb.c:336 msgid "success" msgstr "èxit" #. procedure execution failed -#: libpika/pikapdb.c:556 +#: libpika/pikapdb.c:340 msgid "execution error" msgstr "error d'execució" #. procedure called incorrectly -#: libpika/pikapdb.c:560 +#: libpika/pikapdb.c:344 msgid "calling error" msgstr "error en la crida" #. procedure execution cancelled -#: libpika/pikapdb.c:564 +#: libpika/pikapdb.c:348 msgid "cancelled" msgstr "cancel·lada" @@ -353,12 +371,12 @@ msgid_plural "%d procedures match your query" msgstr[0] "%d procediment es correspon amb la vostra cerca" msgstr[1] "%d procediments es corresponen amb la vostra cerca" -#: libpika/pikaprocedure.c:1925 +#: libpika/pikaprocedure.c:2050 #, c-format msgid "Procedure '%s' returned no return values" msgstr "El procediment «%s» no ha tornat cap valor de retorn" -#: libpika/pikaprocedure.c:2016 +#: libpika/pikaprocedure.c:2177 #, c-format msgid "" "Procedure '%s' returned a wrong value type for return value '%s' (#%d). " @@ -367,41 +385,41 @@ msgstr "" "El procediment «%s» ha tornat un tipus de valor incorrecte per al valor de " "retorn «%s» (#%d). Esperat %s, obtingut %s." -#: libpika/pikaprocedure.c:2028 +#: libpika/pikaprocedure.c:2189 #, c-format msgid "" -"Procedure '%s' has been called with a wrong value type for argument " -"'%s' (#%d). Expected %s, got %s." +"Procedure '%s' has been called with a wrong value type for argument '%s' " +"(#%d). Expected %s, got %s." msgstr "" "El procediment «%s» s'ha cridat amb un tipus de valor erroni per a " "l'argument «%s» (#%d). Esperat %s, obtingut %s." -#: libpika/pikaprocedure.c:2063 +#: libpika/pikaprocedure.c:2224 #, c-format msgid "" -"Procedure '%s' returned '%s' as return value '%s' (#%d, type %s). This value " -"is out of range." +"Procedure '%s' returned '%s' as return value '%s' (#%d, type %s). This value" +" is out of range." msgstr "" "El procediment «%s» ha tornat «%s» com a valor de retorn «%s» (#%d, tipus " "%s). Aquest valor està fora de l'interval." -#: libpika/pikaprocedure.c:2077 +#: libpika/pikaprocedure.c:2238 #, c-format msgid "" "Procedure '%s' has been called with value '%s' for argument '%s' (#%d, type " "%s). This value is out of range." msgstr "" -"El procediment «%s» s'ha cridat amb un valor «%s» per a l'argument " -"«%s» (#%d, tipus %s). Aquest valor està fora de l'interval." +"El procediment «%s» s'ha cridat amb un valor «%s» per a l'argument «%s» " +"(#%d, tipus %s). Aquest valor està fora de l'interval." -#: libpika/pikaprocedure.c:2121 +#: libpika/pikaprocedure.c:2282 #, c-format msgid "Procedure '%s' returned an invalid UTF-8 string for argument '%s'." msgstr "" "El procediment «%s» ha tornat una cadena UTF-8 no vàlida per a l'argument " "«%s»." -#: libpika/pikaprocedure.c:2131 +#: libpika/pikaprocedure.c:2292 #, c-format msgid "" "Procedure '%s' has been called with an invalid UTF-8 string for argument " @@ -410,63 +428,63 @@ msgstr "" "El procediment «%s» s'ha cridat amb una cadena UTF-8 no vàlida per a " "l'argument «%s»." -#: libpika/pikaproceduredialog.c:275 +#: libpika/pikaproceduredialog.c:294 libpika/pikaproceduredialog.c:567 #: libpikawidgets/pikacolorprofilechooserdialog.c:184 msgid "_Open" msgstr "_Obre" -#: 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 "_D'acord" -#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:570 +#: libpika/pikaproceduredialog.c:306 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "_Restableix" -#: libpika/pikaproceduredialog.c:339 +#: libpika/pikaproceduredialog.c:359 msgid "_Load Saved Settings" msgstr "_Carrega els paràmetres desats" -#: libpika/pikaproceduredialog.c:340 +#: libpika/pikaproceduredialog.c:360 msgid "Load settings saved with \"Save Settings\" button" msgstr "Carrega la configuració desada amb el botó «Desa la configuració»" -#: libpika/pikaproceduredialog.c:352 +#: libpika/pikaproceduredialog.c:372 msgid "_Save Settings" msgstr "_Desa la configuració" -#: libpika/pikaproceduredialog.c:353 +#: libpika/pikaproceduredialog.c:373 msgid "Store current settings for later reuse" msgstr "Desa la configuració actual per a usar-la després" -#: libpika/pikaproceduredialog.c:734 +#: libpika/pikaproceduredialog.c:784 msgid "Brush Chooser" msgstr "Selector de pinzells" -#: libpika/pikaproceduredialog.c:738 +#: libpika/pikaproceduredialog.c:788 msgid "Font Chooser" msgstr "Selector de tipus de lletra" -#: libpika/pikaproceduredialog.c:742 +#: libpika/pikaproceduredialog.c:792 msgid "Gradient Chooser" msgstr "Selector de degradat" -#: 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ó" -#: libpika/pikaproceduredialog.c:2128 +#: libpika/pikaproceduredialog.c:2492 msgid "Reset to _Initial Values" msgstr "Restable_ix els valors inicials" -#: libpika/pikaproceduredialog.c:2137 +#: libpika/pikaproceduredialog.c:2501 msgid "Reset to _Factory Defaults" msgstr "_Restableix els valors predeterminats de fàbrica" @@ -506,6 +524,79 @@ msgstr "Data:" msgid "Copyright:" msgstr "Copyright:" +#: libpika/pikapropwidgets.c:191 +#, c-format +msgid "Choose layer: %s" +msgstr "Trieu la capa: %s" + +#: libpika/pikapropwidgets.c:193 +#, c-format +msgid "Choose channel: %s" +msgstr "Trieu el canal: %s" + +#: libpika/pikapropwidgets.c:195 +#, c-format +msgid "Choose drawable: %s" +msgstr "Trieu el dibuixable: %s" + +#: libpika/pikasaveprocedure.c:467 +msgid "Save _Exif" +msgstr "Desa _Exif" + +#: libpika/pikasaveprocedure.c:468 +msgid "Save Exif (Exchangeable image file format) metadata" +msgstr "Desa les metadades Exif (format de fitxer d'imatge intercanviable)" + +#: libpika/pikasaveprocedure.c:473 +msgid "Save _IPTC" +msgstr "Desa _IPTC" + +#: libpika/pikasaveprocedure.c:474 +msgid "Save IPTC (International Press Telecommunications Council) metadata" +msgstr "" +"Desa les metadades IPTC (Consell Internacional de Telecomunicacions de " +"Premsa)" + +#: libpika/pikasaveprocedure.c:479 +msgid "Save _XMP" +msgstr "Desa _XMP" + +#: libpika/pikasaveprocedure.c:480 +msgid "Save XMP (Extensible Metadata Platform) metadata" +msgstr "Desa les metadades XMP (Plataforma de metadades extensible)" + +#: libpika/pikasaveprocedure.c:485 +msgid "Save color _profile" +msgstr "D_esa el perfil de color" + +#: libpika/pikasaveprocedure.c:486 +msgid "Save the ICC color profile as metadata" +msgstr "Desa el perfil de color ICC com a metadades" + +#: libpika/pikasaveprocedure.c:491 +msgid "Save _thumbnail" +msgstr "Desa _la miniatura" + +#: libpika/pikasaveprocedure.c:492 +msgid "Save a smaller representation of the image as metadata" +msgstr "Desa una representació més petita de la imatge com a metadades" + +#: libpika/pikasaveprocedure.c:498 +msgid "Save c_omment" +msgstr "Desa el c_omentari" + +#: libpika/pikasaveprocedure.c:499 +msgid "Save a comment as metadata" +msgstr "_Desa un comentari com a metadades" + +#: libpika/pikasaveprocedure.c:503 +msgid "Comment" +msgstr "Comentari" + +#: libpika/pikasaveprocedure.c:504 +msgid "Image comment" +msgstr "Comentari de la imatge" + #: libpika/pikasaveproceduredialog.c:166 msgid "Metadata" msgstr "Metadades" @@ -892,7 +983,8 @@ msgctxt "gradient-segment-color" msgid "HSV (counter-clockwise hue)" msgstr "HSV (to antihorari)" -#. Translators: this is an abbreviated version of "HSV (counter-clockwise hue)". +#. Translators: this is an abbreviated version of "HSV (counter-clockwise +#. hue)". #. Keep it short. #: libpikabase/pikabaseenums.c:619 msgctxt "gradient-segment-color" @@ -1031,7 +1123,8 @@ msgctxt "gradient-type" msgid "Spiral (counter-clockwise)" msgstr "Espiral (antihorari)" -#. Translators: this is an abbreviated version of "Spiral (counter-clockwise)". +#. Translators: this is an abbreviated version of "Spiral (counter- +#. clockwise)". #. Keep it short. #: libpikabase/pikabaseenums.c:727 msgctxt "gradient-type" @@ -1582,34 +1675,34 @@ msgstr "L'anàlisi de les dades IPTC ha fallat." msgid "Parsing XMP data failed." msgstr "L'anàlisi de les dades XMP ha fallat." -#: libpikabase/pikautils.c:219 libpikabase/pikautils.c:224 +#: libpikabase/pikautils.c:220 libpikabase/pikautils.c:225 msgid "(invalid UTF-8 string)" msgstr "(la cadena de text UTF-8 no és vàlida)" -#: libpikabase/pikautils.c:394 +#: libpikabase/pikautils.c:395 msgid "File path is NULL" msgstr "El camí dels fitxers és nul" -#: libpikabase/pikautils.c:402 +#: libpikabase/pikautils.c:403 msgid "Error converting UTF-8 filename to wide char" msgstr "" "S'ha produït un error en convertir un nom de fitxer UTF-8 a un de caràcter " "ample" -#: libpikabase/pikautils.c:410 +#: libpikabase/pikautils.c:411 msgid "ILCreateFromPath() failed" msgstr "IL Crea des d'un camí() ha fallat" -#: libpikabase/pikautils.c:449 +#: libpikabase/pikautils.c:450 #, c-format msgid "Cannot convert '%s' into a valid NSURL." msgstr "No es pot convertir «%s» en un NSURL vàlida." -#: libpikabase/pikautils.c:477 +#: libpikabase/pikautils.c:478 msgid "Connecting to org.freedesktop.FileManager1 failed: " msgstr "La connexió a org.freedesktop.FileManager1 ha fallat:" -#: libpikabase/pikautils.c:501 +#: libpikabase/pikautils.c:502 msgid "Calling ShowItems failed: " msgstr "Ha fallat la crida per a mostrar els articles:" @@ -1702,8 +1795,8 @@ msgid "" "fallback." msgstr "" "Si es marca l'opció, el PIKA intentarà fer servir el perfil de color del " -"sistema. El perfil configurat del monitor només es faria servir com a última " -"opció." +"sistema. El perfil configurat del monitor només es faria servir com a última" +" opció." #: libpikaconfig/pikacolorconfig.c:63 msgid "" @@ -1715,11 +1808,11 @@ msgstr "" #: libpikaconfig/pikacolorconfig.c:67 msgid "" -"The preferred grayscale working space color profile. It will be offered next " -"to the built-in grayscale profile when a color profile can be chosen." +"The preferred grayscale working space color profile. It will be offered next" +" to the built-in grayscale profile when a color profile can be chosen." msgstr "" -"El perfil preferit del color del lloc de treball en escala de grisos. Estarà " -"al costat del perfil en escala de grisos creat, quan un perfil del color " +"El perfil preferit del color del lloc de treball en escala de grisos. Estarà" +" al costat del perfil en escala de grisos creat, quan un perfil del color " "pugui ser elegit." #: libpikaconfig/pikacolorconfig.c:71 @@ -1729,8 +1822,8 @@ msgstr "El perfil de color CMYK emprat per a convertir entre RGB i CMYK." #: libpikaconfig/pikacolorconfig.c:74 msgid "" "The color profile to use for soft-proofing from your image's color space to " -"some other color space, including soft-proofing to a printer or other output " -"device profile." +"some other color space, including soft-proofing to a printer or other output" +" device profile." msgstr "" "El perfil del color que s'utilitza per a les proves en pantalla va des de " "l'espai del color de la imatge a algun altre espai del color, incloent-hi " @@ -1758,7 +1851,8 @@ msgstr "" #: libpikaconfig/pikacolorconfig.c:90 msgid "" -"When disabled, image display might be of better quality at the cost of speed." +"When disabled, image display might be of better quality at the cost of " +"speed." msgstr "" "Quan es desactiva, la visualització de la imatge podria ser de millor " "qualitat a costa de la velocitat." @@ -1766,8 +1860,8 @@ msgstr "" #: libpikaconfig/pikacolorconfig.c:94 msgid "" "How colors are converted from your image's color space to the output " -"simulation device (usually your monitor). Try them all and choose what looks " -"the best." +"simulation device (usually your monitor). Try them all and choose what looks" +" the best." msgstr "" "Com es converteixen els colors des de l'espai del color de la imatge pel " "dispositiu de simulació de sortida (en general el monitor). Proveu-los tots " @@ -1782,7 +1876,8 @@ msgstr "" #: libpikaconfig/pikacolorconfig.c:103 msgid "" -"When disabled, soft-proofing might be of better quality at the cost of speed." +"When disabled, soft-proofing might be of better quality at the cost of " +"speed." msgstr "" "Quan es desactiva, les proves en pantalla podrien ser de millor qualitat a " "costa de la velocitat." @@ -1797,21 +1892,22 @@ msgstr "" #: libpikaconfig/pikacolorconfig.c:111 msgid "The color to use for marking colors which are out of gamut." -msgstr "El color utilitzat per a marcar els colors que estan fora de la gamma." +msgstr "" +"El color utilitzat per a marcar els colors que estan fora de la gamma." #: libpikaconfig/pikacolorconfig.c:114 msgid "" "When enabled, set the color scales to display 0...255 instead of percentages" msgstr "" -"Quan està habilitat, estableix les escales de color per a mostrar 0...255 en " -"lloc de percentatges" +"Quan està habilitat, estableix les escales de color per a mostrar 0...255 en" +" lloc de percentatges" #: libpikaconfig/pikacolorconfig.c:118 msgid "" "When enabled, set the color scales to display HSV blend mode instead of LCh" msgstr "" -"Quan està habilitat, estableix les escales de color per a mostrar el mode de " -"barreja HSV en lloc de LCh" +"Quan està habilitat, estableix les escales de color per a mostrar el mode de" +" barreja HSV en lloc de LCh" #: libpikaconfig/pikacolorconfig.c:222 msgid "Mode of operation" @@ -1896,29 +1992,29 @@ msgstr "El perfil del color «%s» no és pel lloc del color gris." msgid "Color profile '%s' is not for CMYK color space." msgstr "El perfil de color «%s» no és pel lloc del color CMYK." -#: 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 "el valor per a l'element %s no és una cadena de text UTF-8 vàlida" #. 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 "" "S'esperava «yes» o «no» per a l'element booleà %s. Però s'ha trobat «%s»" -#: libpikaconfig/pikaconfig-deserialize.c:600 +#: libpikaconfig/pikaconfig-deserialize.c:607 #, c-format msgid "invalid value '%s' for token %s" msgstr "El valor «%s» no és vàlid per a l'element %s" -#: libpikaconfig/pikaconfig-deserialize.c:615 +#: libpikaconfig/pikaconfig-deserialize.c:622 #, c-format msgid "invalid value '%ld' for token %s" msgstr "El valor «%ld» no és vàlid per a l'element %s" -#: libpikaconfig/pikaconfig-deserialize.c:684 +#: libpikaconfig/pikaconfig-deserialize.c:691 #, c-format msgid "while parsing token '%s': %s" msgstr "en analitzar l'element «%s»: %s" @@ -2023,10 +2119,26 @@ msgstr "No s'ha pogut crear la miniatura de %s: %s" msgid "_Search:" msgstr "_Cerca:" +#: libpikawidgets/pikacolorbutton.c:380 +msgid "_Foreground Color" +msgstr "Color de _primer pla" + +#: libpikawidgets/pikacolorbutton.c:381 +msgid "_Background Color" +msgstr "Color de _fons" + +#: libpikawidgets/pikacolorbutton.c:386 +msgid "Blac_k" +msgstr "_Negre" + +#: libpikawidgets/pikacolorbutton.c:387 +msgid "_White" +msgstr "_Blanc" + #: libpikawidgets/pikacolorhexentry.c:134 msgid "" -"Hexadecimal color notation as used in HTML and CSS. This entry also accepts " -"CSS color names." +"Hexadecimal color notation as used in HTML and CSS. This entry also accepts" +" CSS color names." msgstr "" "Notació hexadecimal utilitzada en l'HTML i el CSS. També permet utilitzar " "els noms de colors del CSS." @@ -2101,7 +2213,7 @@ msgstr "Antic:" msgid "HTML _notation:" msgstr "_Notació HTML:" -#: libpikawidgets/pikadialog.c:177 +#: libpikawidgets/pikadialog.c:196 msgid "_Help" msgstr "_Ajuda" @@ -2144,7 +2256,6 @@ msgstr "Premeu F1 per a més ajuda" #. This string appears in an empty menu as in #. * "nothing selected and nothing to select" -#. #: libpikawidgets/pikaintstore.c:255 msgid "(Empty)" msgstr "(Buit)" @@ -2161,8 +2272,25 @@ msgstr "Mebibyte" msgid "Gibibyte" msgstr "Gibibyte" +#: libpikawidgets/pikapageselector.c:185 +msgid "N Pages" +msgstr "N pàgines" + +#: libpikawidgets/pikapageselector.c:186 +msgid "The number of pages to open" +msgstr "El nombre de pàgines a obrir" + +#: libpikawidgets/pikapageselector.c:199 +msgid "Target" +msgstr "Destí" + +#: libpikawidgets/pikapageselector.c:200 +msgid "the target to open to" +msgstr "destí en el qual obrir" + #. Count label -#: libpikawidgets/pikapageselector.c:283 libpikawidgets/pikapageselector.c:1079 +#: libpikawidgets/pikapageselector.c:283 +#: libpikawidgets/pikapageselector.c:1079 msgid "Nothing selected" msgstr "Selecció buida" @@ -2220,8 +2348,8 @@ msgid "" "Click the eyedropper, then click a color anywhere on your screen to select " "that color." msgstr "" -"Feu clic en el comptagotes, després feu clic en un color a la pantalla per a " -"seleccionar-lo." +"Feu clic en el comptagotes, després feu clic en un color a la pantalla per a" +" seleccionar-lo." # toggle button to (des)activate the instant preview #. toggle button to (de)activate the instant preview @@ -2245,7 +2373,7 @@ msgstr "Color personalitzat 1 de les comprovacions" msgid "Custom Checks Color 2" msgstr "Color personalitzat 2 de les comprovacions" -#: 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." @@ -2864,75 +2992,78 @@ msgstr "Canvia les pretransformacions en parades" 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 "Filtre de visualització del color d'avís del clip" -#: modules/display-filter-clip-warning.c:158 +#: modules/display-filter-clip-warning.c:161 msgid "Show shadows" msgstr "Mostra les ombres" -#: modules/display-filter-clip-warning.c:159 +#: modules/display-filter-clip-warning.c:162 msgid "Show warning for pixels with a negative component" msgstr "Mostra l'avís per a píxels amb un component negatiu" -#: modules/display-filter-clip-warning.c:165 +#: modules/display-filter-clip-warning.c:168 msgid "Shadows color" msgstr "Mostra el color" -#: modules/display-filter-clip-warning.c:166 +#: modules/display-filter-clip-warning.c:169 msgid "Shadows warning color" msgstr "Color d'advertència d'ombres" -#: modules/display-filter-clip-warning.c:178 +#: modules/display-filter-clip-warning.c:181 msgid "Show highlights" msgstr "Mostra els ressaltats" -#: 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 "Mostra l'avís per a píxels amb un component superior a un" -#: modules/display-filter-clip-warning.c:185 +#: modules/display-filter-clip-warning.c:188 msgid "Highlights color" msgstr "Color ressaltat" -#: modules/display-filter-clip-warning.c:186 +#: modules/display-filter-clip-warning.c:189 msgid "Highlights warning color" msgstr "Ressalta el color d'avís" -#: modules/display-filter-clip-warning.c:198 +#: modules/display-filter-clip-warning.c:201 msgid "Show bogus" msgstr "Mostra falsa" -#: 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 "Mostra l'avís per a píxels amb un component infinit o NaN" -#: modules/display-filter-clip-warning.c:205 +#: modules/display-filter-clip-warning.c:208 msgid "Bogus color" msgstr "Color fals" -#: modules/display-filter-clip-warning.c:206 +#: modules/display-filter-clip-warning.c:209 msgid "Bogus warning color" msgstr "Color d'avís fals" -#: modules/display-filter-clip-warning.c:218 +#: modules/display-filter-clip-warning.c:221 msgid "Include alpha component" msgstr "Inclou el component alfa" -#: modules/display-filter-clip-warning.c:219 +#: modules/display-filter-clip-warning.c:222 msgid "Include alpha component in the warning" msgstr "Inclou el component alfa en l'avís" -#: modules/display-filter-clip-warning.c:225 +#: modules/display-filter-clip-warning.c:228 msgid "Include transparent pixels" msgstr "Inclou píxels transparents" -#: modules/display-filter-clip-warning.c:226 +#: modules/display-filter-clip-warning.c:229 msgid "Include fully transparent pixels in the warning" msgstr "Inclou píxels totalment transparents en l'avís" -#: modules/display-filter-clip-warning.c:230 +#: modules/display-filter-clip-warning.c:233 msgid "Clip Warning" msgstr "Avís del clip" @@ -3003,20 +3134,8 @@ msgstr "Contrast" #, c-format #~ msgid "Conversion of the filename to system codepage failed." #~ msgstr "" -#~ "La conversió del nom del fitxer a la codificació de la pàgina del sistema " -#~ "ha fallat." - -#~ msgid "_Foreground Color" -#~ msgstr "Color de _primer pla" - -#~ msgid "_Background Color" -#~ msgstr "Color de _fons" - -#~ msgid "Blac_k" -#~ msgstr "_Negre" - -#~ msgid "_White" -#~ msgstr "_Blanc" +#~ "La conversió del nom del fitxer a la codificació de la pàgina del sistema ha" +#~ " fallat." #~ msgid "_Load Defaults" #~ msgstr "Carrega els va_lors predeterminats" @@ -3213,11 +3332,11 @@ msgstr "Contrast" #~ msgstr "Gestió del color" #~ msgid "" -#~ "This filter takes its configuration from the Color Management section in " -#~ "the Preferences dialog." +#~ "This filter takes its configuration from the Color Management section in the" +#~ " Preferences dialog." #~ msgstr "" -#~ "Aquest filtre pren la seva configuració de la secció de «Gestió del " -#~ "color» en el diàleg de «Preferències»." +#~ "Aquest filtre pren la seva configuració de la secció de «Gestió del color» " +#~ "en el diàleg de «Preferències»." #~ msgid "Mode of operation:" #~ msgstr "Mode d'operació:" @@ -3291,15 +3410,14 @@ msgstr "Contrast" #~ msgstr "Cap" #~ msgid "The color profile used for simulating a printed version (softproof)." -#~ msgstr "" -#~ "El perfil de color emprat per simular una versió impresa (softproof)." +#~ msgstr "El perfil de color emprat per simular una versió impresa (softproof)." #~ msgid "Sets how colors are mapped for your display." #~ msgstr "Estableix com estan mapats els colors en la vostra pantalla." #~ msgid "" -#~ "Sets how colors are converted from RGB working space to the print " -#~ "simulation device." +#~ "Sets how colors are converted from RGB working space to the print simulation" +#~ " device." #~ msgstr "" #~ "Estableix com es converteixen els colors RGB de l'espai de treball al " #~ "dispositiu de simulació d'impressió." diff --git a/po-libpika/da.po b/po-libpika/da.po index 617eea7..808c90f 100644 --- a/po-libpika/da.po +++ b/po-libpika/da.po @@ -11,14 +11,14 @@ # Per Kongstad , 2009. # Joe Hansen , 2011, 2015. # scootergrisen, 2015, 2016. -# Alan Mortensen , 2018 (oversat og gennemgået i sin helhed), 2019-22. +# Alan Mortensen , 2018 (oversat og gennemgået i sin helhed), 2019-23. # msgid "" msgstr "" "Project-Id-Version: PIKA libpika\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2022-11-22 14:37+0000\n" -"PO-Revision-Date: 2022-12-27 18:51+0100\n" +"POT-Creation-Date: 2023-10-19 10:04+0000\n" +"PO-Revision-Date: 2023-10-20 09:49+0200\n" "Last-Translator: Alan Mortensen \n" "Language-Team: Danish \n" "Language: da\n" @@ -30,14 +30,14 @@ msgstr "" "X-Language: da_DK\n" "X-Source-Language: C\n" -#: libpika/pikabrushselectbutton.c:178 -msgid "Brush Selection" -msgstr "Penselvalg" - -#: libpika/pikabrushselectbutton.c:887 libpika/pikapatternselectbutton.c:674 +#: libpika/pikabrushchooser.c:134 libpika/pikapatternchooser.c:129 msgid "_Browse..." msgstr "G_ennemse …" +#: libpika/pikadrawablechooser.c:238 +msgid "Browse..." +msgstr "Gennemse …" + #: libpika/pikaexport.c:332 libpika/pikaexport.c:368 #, c-format msgid "%s plug-in can't handle layers" @@ -178,7 +178,7 @@ msgid "Confirm Save" msgstr "Bekræft gem" #: libpika/pikaexport.c:546 libpika/pikaexport.c:628 libpika/pikaexport.c:1199 -#: libpika/pikaproceduredialog.c:303 libpikawidgets/pikacolorbutton.c:553 +#: libpika/pikaproceduredialog.c:324 libpikawidgets/pikacolorbutton.c:557 #: libpikawidgets/pikacolorprofilechooserdialog.c:173 #: libpikawidgets/pikacolorprofilechooserdialog.c:183 #: libpikawidgets/pikafileentry.c:466 libpikawidgets/pikaquerybox.c:274 @@ -200,7 +200,7 @@ msgid "_Ignore" msgstr "_Ignorér" #: libpika/pikaexport.c:629 libpika/pikaexport.c:1200 -#: libpika/pikaproceduredialog.c:275 +#: libpika/pikaproceduredialog.c:296 libpika/pikaproceduredialog.c:569 msgid "_Export" msgstr "_Eksportér" @@ -239,126 +239,123 @@ 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 "Eksportér billede som %s" -#: libpika/pikafontselectbutton.c:137 -msgid "Font Selection" -msgstr "Skrifttypevalg" - -#: libpika/pikagradientselectbutton.c:155 -msgid "Gradient Selection" -msgstr "Farveovergangsvalg" - -#: libpika/pikaimagemetadata.c:306 +#: libpika/pikaimagemetadata.c:283 msgid "Background" msgstr "Baggrund" -#: 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/pikapaletteselectbutton.c:136 -msgid "Palette Selection" -msgstr "Paletvalg" +#: 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 "" +"Dette udvidelsesmodul til filindlæsning returnerede SUCCESS som status uden " +"et billede. Dette er en fejl i udvidelsesmodulkoden. Kontakt udvikleren af " +"udvidelsesmodulet." -#: libpika/pikapatternselectbutton.c:165 -msgid "Pattern Selection" -msgstr "Mønstervalg" +#: libpika/pikaparamspecs-desc.c:54 +msgid "Allowed values:" +msgstr "Tilladte værdier:" #. procedure executed successfully -#: libpika/pikapdb.c:552 +#: libpika/pikapdb.c:336 msgid "success" msgstr "gennemført" #. procedure execution failed -#: libpika/pikapdb.c:556 +#: libpika/pikapdb.c:340 msgid "execution error" msgstr "kørselsfejl" #. procedure called incorrectly -#: libpika/pikapdb.c:560 +#: libpika/pikapdb.c:344 msgid "calling error" msgstr "fejl i kald" #. procedure execution cancelled -#: libpika/pikapdb.c:564 +#: libpika/pikapdb.c:348 msgid "cancelled" msgstr "afbrudt" -#: libpika/pikaprocbrowserdialog.c:162 +#: libpika/pikaprocbrowserdialog.c:164 msgid "by name" msgstr "efter navn" -#: libpika/pikaprocbrowserdialog.c:163 +#: libpika/pikaprocbrowserdialog.c:165 msgid "by description" msgstr "efter beskrivelse" -#: libpika/pikaprocbrowserdialog.c:164 +#: libpika/pikaprocbrowserdialog.c:166 msgid "by help" msgstr "efter hjælp" -#: libpika/pikaprocbrowserdialog.c:165 +#: libpika/pikaprocbrowserdialog.c:167 msgid "by authors" msgstr "efter forfattere" -#: libpika/pikaprocbrowserdialog.c:166 +#: libpika/pikaprocbrowserdialog.c:168 msgid "by copyright" msgstr "efter ophavsret" -#: libpika/pikaprocbrowserdialog.c:167 +#: libpika/pikaprocbrowserdialog.c:169 msgid "by date" msgstr "efter dato" -#: libpika/pikaprocbrowserdialog.c:168 +#: libpika/pikaprocbrowserdialog.c:170 msgid "by type" msgstr "efter type" #. 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 "Ingen fundet" -#: libpika/pikaprocbrowserdialog.c:372 +#: libpika/pikaprocbrowserdialog.c:374 msgid "Search term invalid or incomplete" msgstr "Søgebetingelse er ugyldig eller ufuldstændig" -#: libpika/pikaprocbrowserdialog.c:381 +#: libpika/pikaprocbrowserdialog.c:383 msgid "Searching" msgstr "Søgning" -#: libpika/pikaprocbrowserdialog.c:393 +#: libpika/pikaprocbrowserdialog.c:395 msgid "Searching by name" msgstr "Søgning efter navn" -#: libpika/pikaprocbrowserdialog.c:414 +#: libpika/pikaprocbrowserdialog.c:416 msgid "Searching by description" msgstr "Søgning efter beskrivelse" -#: libpika/pikaprocbrowserdialog.c:422 +#: libpika/pikaprocbrowserdialog.c:424 msgid "Searching by help" msgstr "Søgning efter hjælp" -#: libpika/pikaprocbrowserdialog.c:430 +#: libpika/pikaprocbrowserdialog.c:432 msgid "Searching by authors" msgstr "Søgning efter forfattere" -#: libpika/pikaprocbrowserdialog.c:438 +#: libpika/pikaprocbrowserdialog.c:440 msgid "Searching by copyright" msgstr "Søgning efter ophavsret" -#: libpika/pikaprocbrowserdialog.c:446 +#: libpika/pikaprocbrowserdialog.c:448 msgid "Searching by date" msgstr "Søgning efter dato" -#: libpika/pikaprocbrowserdialog.c:454 +#: libpika/pikaprocbrowserdialog.c:456 msgid "Searching by type" msgstr "Søgning efter type" -#: libpika/pikaprocbrowserdialog.c:467 +#: libpika/pikaprocbrowserdialog.c:469 #, c-format msgid "%d procedure" msgid_plural "%d procedures" @@ -366,24 +363,24 @@ msgstr[0] "%d procedure" msgstr[1] "%d procedurer" # "for your query" er lidt svær og sådan set overflødig -#: libpika/pikaprocbrowserdialog.c:476 +#: libpika/pikaprocbrowserdialog.c:478 msgid "No matches for your query" msgstr "Ingen fundet" # "for your query" er lidt svær og sådan set overflødig -#: 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 procedure fundet" msgstr[1] "%d procedurer fundet" -#: libpika/pikaprocedure.c:1917 +#: libpika/pikaprocedure.c:2091 #, c-format msgid "Procedure '%s' returned no return values" msgstr "Proceduren “%s” returnerede ingen returværdier" -#: libpika/pikaprocedure.c:2008 +#: libpika/pikaprocedure.c:2182 #, c-format msgid "" "Procedure '%s' returned a wrong value type for return value '%s' (#%d). " @@ -392,7 +389,7 @@ msgstr "" "Proceduren “%s” returnerede en forkert værditype for returværdien “%s” (nr. " "%d). Forventede %s, modtog %s." -#: libpika/pikaprocedure.c:2020 +#: libpika/pikaprocedure.c:2194 #, c-format msgid "" "Procedure '%s' has been called with a wrong value type for argument " @@ -401,7 +398,7 @@ msgstr "" "Proceduren “%s” blev kaldt med en forkert værditype for parameteren " "“%s” (nr. %d). Forventede %s, modtog %s." -#: libpika/pikaprocedure.c:2055 +#: libpika/pikaprocedure.c:2229 #, c-format msgid "" "Procedure '%s' returned '%s' as return value '%s' (#%d, type %s). This value " @@ -410,7 +407,7 @@ msgstr "" "Proceduren “%s” returnerede “%s” som returværdien “%s” (nr. %d, typen %s). " "Denne værdi er uden for det gyldige interval." -#: libpika/pikaprocedure.c:2069 +#: libpika/pikaprocedure.c:2243 #, c-format msgid "" "Procedure '%s' has been called with value '%s' for argument '%s' (#%d, type " @@ -419,13 +416,13 @@ msgstr "" "Proceduren “%s” er blevet kaldt med værdien “%s” for parameteren “%s” (nr. " "%d, typen %s). Denne værdi er uden for det gyldige interval." -#: libpika/pikaprocedure.c:2113 +#: libpika/pikaprocedure.c:2287 #, c-format msgid "Procedure '%s' returned an invalid UTF-8 string for argument '%s'." msgstr "" "Proceduren “%s” returnerede en ugyldig UTF-8-streng til argumentet “%s”." -#: libpika/pikaprocedure.c:2123 +#: libpika/pikaprocedure.c:2297 #, c-format msgid "" "Procedure '%s' has been called with an invalid UTF-8 string for argument " @@ -433,43 +430,63 @@ msgid "" msgstr "" "Proceduren “%s” blev kaldt med en ugyldig UTF-8-streng til argumentet “%s”." -#: libpika/pikaproceduredialog.c:273 +#: libpika/pikaproceduredialog.c:294 libpika/pikaproceduredialog.c:567 #: libpikawidgets/pikacolorprofilechooserdialog.c:184 msgid "_Open" msgstr "_Åbn" -#: libpika/pikaproceduredialog.c:277 libpikawidgets/pikacolorbutton.c:554 -#: 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:285 libpikawidgets/pikacolorbutton.c:552 +#: libpika/pikaproceduredialog.c:306 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "_Nulstil" -#: libpika/pikaproceduredialog.c:337 +#: libpika/pikaproceduredialog.c:359 msgid "_Load Saved Settings" msgstr "_Indlæs gemte indstillinger" -#: libpika/pikaproceduredialog.c:338 +#: libpika/pikaproceduredialog.c:360 msgid "Load settings saved with \"Save Settings\" button" msgstr "Indlæs indstillinger gemt med knappen “Gem indstillinger“" -#: libpika/pikaproceduredialog.c:350 +#: libpika/pikaproceduredialog.c:372 msgid "_Save Settings" msgstr "_Gem indstillinger" -#: libpika/pikaproceduredialog.c:351 +#: libpika/pikaproceduredialog.c:373 msgid "Store current settings for later reuse" msgstr "Gem aktuelle indstillinger til brug senere" -#: libpika/pikaproceduredialog.c:1964 +#: libpika/pikaproceduredialog.c:784 +msgid "Brush Chooser" +msgstr "Penselvælger" + +#: libpika/pikaproceduredialog.c:788 +msgid "Font Chooser" +msgstr "Skrifttypevælger" + +#: libpika/pikaproceduredialog.c:792 +msgid "Gradient Chooser" +msgstr "Farveovergangsvælger" + +#: libpika/pikaproceduredialog.c:796 +msgid "Palette Chooser" +msgstr "Paletvælger" + +#: libpika/pikaproceduredialog.c:800 +msgid "Pattern Chooser" +msgstr "Mønstervælger" + +#: libpika/pikaproceduredialog.c:2492 msgid "Reset to _Initial Values" msgstr "Nulstil _til de oprindelige værdier" -#: libpika/pikaproceduredialog.c:1973 +#: libpika/pikaproceduredialog.c:2501 msgid "Reset to _Factory Defaults" msgstr "Nulstil til fabriksstandard" @@ -509,6 +526,77 @@ msgstr "Dato:" msgid "Copyright:" msgstr "Ophavsret:" +#: libpika/pikapropwidgets.c:191 +#, c-format +msgid "Choose layer: %s" +msgstr "Væg lag: %s" + +#: libpika/pikapropwidgets.c:193 +#, c-format +msgid "Choose channel: %s" +msgstr "Vælg kanal: %s" + +#: libpika/pikapropwidgets.c:195 +#, c-format +msgid "Choose drawable: %s" +msgstr "Vælg tegneobjekt: %s" + +#: libpika/pikasaveprocedure.c:467 +msgid "Save _Exif" +msgstr "Gem _Exif" + +#: libpika/pikasaveprocedure.c:468 +msgid "Save Exif (Exchangeable image file format) metadata" +msgstr "Gem Exif-metadata (Exchangeable image file format)" + +#: libpika/pikasaveprocedure.c:473 +msgid "Save _IPTC" +msgstr "Save _IPTC" + +#: libpika/pikasaveprocedure.c:474 +msgid "Save IPTC (International Press Telecommunications Council) metadata" +msgstr "Gem IPTC-metadata (International Press Telecommunications Council)" + +#: libpika/pikasaveprocedure.c:479 +msgid "Save _XMP" +msgstr "Gem _XMP" + +#: libpika/pikasaveprocedure.c:480 +msgid "Save XMP (Extensible Metadata Platform) metadata" +msgstr "Gem XMP-metadata (Extensible Metadata Platform)" + +#: libpika/pikasaveprocedure.c:485 +msgid "Save color _profile" +msgstr "Gem _farveprofil" + +#: libpika/pikasaveprocedure.c:486 +msgid "Save the ICC color profile as metadata" +msgstr "Gem ICC-farveprofilen som metadata" + +#: libpika/pikasaveprocedure.c:491 +msgid "Save _thumbnail" +msgstr "Gem minia_ture" + +#: libpika/pikasaveprocedure.c:492 +msgid "Save a smaller representation of the image as metadata" +msgstr "Gem en mindre udgave af billedet som metadata" + +#: libpika/pikasaveprocedure.c:498 +msgid "Save c_omment" +msgstr "Gem _kommentar" + +#: libpika/pikasaveprocedure.c:499 +msgid "Save a comment as metadata" +msgstr "Gem en kommentar som metadata" + +#: libpika/pikasaveprocedure.c:503 +msgid "Comment" +msgstr "Kommentar" + +#: libpika/pikasaveprocedure.c:504 +msgid "Image comment" +msgstr "Billedkommentar" + #: libpika/pikasaveproceduredialog.c:166 msgid "Metadata" msgstr "Metadata" @@ -847,52 +935,57 @@ msgctxt "dodge-burn-type" msgid "Burn" msgstr "Mørkne" -#: libpikabase/pikabaseenums.c:519 +#: libpikabase/pikabaseenums.c:520 msgctxt "fill-type" msgid "Foreground color" msgstr "Forgrundsfarve" -#: libpikabase/pikabaseenums.c:520 +#: libpikabase/pikabaseenums.c:521 msgctxt "fill-type" msgid "Background color" msgstr "Baggrundsfarve" -#: libpikabase/pikabaseenums.c:521 +#: libpikabase/pikabaseenums.c:522 +msgctxt "fill-type" +msgid "Middle Gray (CIELAB)" +msgstr "Middelgrå (CIELAB)" + +#: libpikabase/pikabaseenums.c:523 msgctxt "fill-type" msgid "White" msgstr "Hvid" -#: libpikabase/pikabaseenums.c:522 +#: libpikabase/pikabaseenums.c:524 msgctxt "fill-type" msgid "Transparency" msgstr "Gennemsigtighed" -#: libpikabase/pikabaseenums.c:523 +#: libpikabase/pikabaseenums.c:525 msgctxt "fill-type" msgid "Pattern" msgstr "Mønster" -#: libpikabase/pikabaseenums.c:581 +#: libpikabase/pikabaseenums.c:583 msgctxt "gradient-blend-color-space" msgid "Perceptual RGB" msgstr "Perceptuel RGB" -#: libpikabase/pikabaseenums.c:582 +#: libpikabase/pikabaseenums.c:584 msgctxt "gradient-blend-color-space" msgid "Linear RGB" msgstr "Lineær RGB" -#: libpikabase/pikabaseenums.c:583 +#: libpikabase/pikabaseenums.c:585 msgctxt "gradient-blend-color-space" msgid "CIE Lab" msgstr "CIE Lab" -#: libpikabase/pikabaseenums.c:613 +#: libpikabase/pikabaseenums.c:615 msgctxt "gradient-segment-color" msgid "RGB" msgstr "RGB" -#: libpikabase/pikabaseenums.c:614 +#: libpikabase/pikabaseenums.c:616 msgctxt "gradient-segment-color" msgid "HSV (counter-clockwise hue)" msgstr "HSV (farvetone mod uret)" @@ -900,141 +993,141 @@ msgstr "HSV (farvetone mod uret)" # http://developer.pika.org/api/2.0/libpikabase/libpikabase-pikabaseenums.html #. Translators: this is an abbreviated version of "HSV (counter-clockwise hue)". #. Keep it short. -#: libpikabase/pikabaseenums.c:617 +#: libpikabase/pikabaseenums.c:619 msgctxt "gradient-segment-color" msgid "HSV (ccw)" msgstr "HSV (↺)" -#: libpikabase/pikabaseenums.c:618 +#: libpikabase/pikabaseenums.c:620 msgctxt "gradient-segment-color" msgid "HSV (clockwise hue)" msgstr "HSV (farvetone med uret)" #. Translators: this is an abbreviated version of "HSV (clockwise hue)". #. Keep it short. -#: libpikabase/pikabaseenums.c:621 +#: libpikabase/pikabaseenums.c:623 msgctxt "gradient-segment-color" msgid "HSV (cw)" msgstr "HSV (↻)" -#: libpikabase/pikabaseenums.c:654 +#: libpikabase/pikabaseenums.c:656 msgctxt "gradient-segment-type" msgid "Linear" msgstr "Lineær" -#: libpikabase/pikabaseenums.c:655 +#: libpikabase/pikabaseenums.c:657 msgctxt "gradient-segment-type" msgid "Curved" msgstr "Buet" -#: libpikabase/pikabaseenums.c:656 +#: libpikabase/pikabaseenums.c:658 msgctxt "gradient-segment-type" msgid "Sinusoidal" msgstr "Bølgelignende" -#: libpikabase/pikabaseenums.c:657 +#: libpikabase/pikabaseenums.c:659 msgctxt "gradient-segment-type" msgid "Spherical (increasing)" msgstr "Sfærisk (voksende)" #. Translators: this is an abbreviated version of "Spherical (increasing)". #. Keep it short. -#: libpikabase/pikabaseenums.c:660 +#: libpikabase/pikabaseenums.c:662 msgctxt "gradient-segment-type" msgid "Spherical (inc)" msgstr "Sfærisk (voks)" -#: libpikabase/pikabaseenums.c:661 +#: libpikabase/pikabaseenums.c:663 msgctxt "gradient-segment-type" msgid "Spherical (decreasing)" msgstr "Sfærisk (aftagende)" #. Translators: this is an abbreviated version of "Spherical (decreasing)". #. Keep it short. -#: libpikabase/pikabaseenums.c:664 +#: libpikabase/pikabaseenums.c:666 msgctxt "gradient-segment-type" msgid "Spherical (dec)" msgstr "Sfærisk (aft)" -#: libpikabase/pikabaseenums.c:665 +#: libpikabase/pikabaseenums.c:667 msgctxt "gradient-segment-type" msgid "Step" msgstr "Trin" -#: libpikabase/pikabaseenums.c:703 +#: libpikabase/pikabaseenums.c:705 msgctxt "gradient-type" msgid "Linear" msgstr "Lineær" -#: libpikabase/pikabaseenums.c:704 +#: libpikabase/pikabaseenums.c:706 msgctxt "gradient-type" msgid "Bi-linear" msgstr "Bilineær" -#: libpikabase/pikabaseenums.c:705 +#: libpikabase/pikabaseenums.c:707 msgctxt "gradient-type" msgid "Radial" msgstr "Radial" -#: libpikabase/pikabaseenums.c:706 +#: libpikabase/pikabaseenums.c:708 msgctxt "gradient-type" msgid "Square" msgstr "Kvadratisk" -#: libpikabase/pikabaseenums.c:707 +#: libpikabase/pikabaseenums.c:709 msgctxt "gradient-type" msgid "Conical (symmetric)" msgstr "Konisk (symmetrisk)" #. Translators: this is an abbreviated version of "Conical (symmetric)". #. Keep it short. -#: libpikabase/pikabaseenums.c:710 +#: libpikabase/pikabaseenums.c:712 msgctxt "gradient-type" msgid "Conical (sym)" msgstr "Konisk (sym)" -#: libpikabase/pikabaseenums.c:711 +#: libpikabase/pikabaseenums.c:713 msgctxt "gradient-type" msgid "Conical (asymmetric)" msgstr "Konisk (asymmetrisk)" #. Translators: this is an abbreviated version of "Conical (asymmetric)". #. Keep it short. -#: libpikabase/pikabaseenums.c:714 +#: libpikabase/pikabaseenums.c:716 msgctxt "gradient-type" msgid "Conical (asym)" msgstr "Konisk (asym)" -#: libpikabase/pikabaseenums.c:715 +#: libpikabase/pikabaseenums.c:717 msgctxt "gradient-type" msgid "Shaped (angular)" msgstr "Formet (vinklet)" -#: libpikabase/pikabaseenums.c:716 +#: libpikabase/pikabaseenums.c:718 msgctxt "gradient-type" msgid "Shaped (spherical)" msgstr "Formet (sfærisk)" -#: libpikabase/pikabaseenums.c:717 +#: libpikabase/pikabaseenums.c:719 msgctxt "gradient-type" msgid "Shaped (dimpled)" msgstr "Formet (forsænket)" # http://developer.pika.org/api/2.0/libpikabase/libpikabase-pikabaseenums.html -#: libpikabase/pikabaseenums.c:718 +#: libpikabase/pikabaseenums.c:720 msgctxt "gradient-type" msgid "Spiral (clockwise)" msgstr "Spiral (med uret)" #. Translators: this is an abbreviated version of "Spiral (clockwise)". #. Keep it short. -#: libpikabase/pikabaseenums.c:721 +#: libpikabase/pikabaseenums.c:723 msgctxt "gradient-type" msgid "Spiral (cw)" msgstr "Spiral (↻)" # http://developer.pika.org/api/2.0/libpikabase/libpikabase-pikabaseenums.html -#: libpikabase/pikabaseenums.c:722 +#: libpikabase/pikabaseenums.c:724 msgctxt "gradient-type" msgid "Spiral (counter-clockwise)" msgstr "Spiral (mod uret)" @@ -1042,583 +1135,583 @@ msgstr "Spiral (mod uret)" # http://developer.pika.org/api/2.0/libpikabase/libpikabase-pikabaseenums.html #. Translators: this is an abbreviated version of "Spiral (counter-clockwise)". #. Keep it short. -#: libpikabase/pikabaseenums.c:725 +#: libpikabase/pikabaseenums.c:727 msgctxt "gradient-type" msgid "Spiral (ccw)" msgstr "Spiral (↺)" -#: libpikabase/pikabaseenums.c:757 +#: libpikabase/pikabaseenums.c:759 msgctxt "grid-style" msgid "Intersections (dots)" msgstr "Kryds (prikker)" -#: libpikabase/pikabaseenums.c:758 +#: libpikabase/pikabaseenums.c:760 msgctxt "grid-style" msgid "Intersections (crosshairs)" msgstr "Kryds (sigtekorn)" -#: libpikabase/pikabaseenums.c:759 +#: libpikabase/pikabaseenums.c:761 msgctxt "grid-style" msgid "Dashed" msgstr "Stiplet" -#: libpikabase/pikabaseenums.c:760 +#: libpikabase/pikabaseenums.c:762 msgctxt "grid-style" msgid "Double dashed" msgstr "Dobbeltstiplet" -#: libpikabase/pikabaseenums.c:761 +#: libpikabase/pikabaseenums.c:763 msgctxt "grid-style" msgid "Solid" msgstr "Ensfarvet" -#: libpikabase/pikabaseenums.c:831 +#: libpikabase/pikabaseenums.c:833 msgctxt "icon-type" msgid "Icon name" msgstr "Ikonnavn" -#: libpikabase/pikabaseenums.c:832 +#: libpikabase/pikabaseenums.c:834 msgctxt "icon-type" msgid "Pixbuf" msgstr "Pixbuf" -#: libpikabase/pikabaseenums.c:833 +#: libpikabase/pikabaseenums.c:835 msgctxt "icon-type" msgid "Image file" msgstr "Billedfil" -#: libpikabase/pikabaseenums.c:863 +#: libpikabase/pikabaseenums.c:865 msgctxt "image-base-type" msgid "RGB color" msgstr "RGB-farve" -#: libpikabase/pikabaseenums.c:864 +#: libpikabase/pikabaseenums.c:866 msgctxt "image-base-type" msgid "Grayscale" msgstr "Gråtoner" -#: libpikabase/pikabaseenums.c:865 +#: libpikabase/pikabaseenums.c:867 msgctxt "image-base-type" msgid "Indexed color" msgstr "Indekseret farve" -#: libpikabase/pikabaseenums.c:898 +#: libpikabase/pikabaseenums.c:900 msgctxt "image-type" msgid "RGB" msgstr "RGB" -#: libpikabase/pikabaseenums.c:899 +#: libpikabase/pikabaseenums.c:901 msgctxt "image-type" msgid "RGB-alpha" msgstr "RGB-alfa" -#: libpikabase/pikabaseenums.c:900 +#: libpikabase/pikabaseenums.c:902 msgctxt "image-type" msgid "Grayscale" msgstr "Gråtoner" -#: libpikabase/pikabaseenums.c:901 +#: libpikabase/pikabaseenums.c:903 msgctxt "image-type" msgid "Grayscale-alpha" msgstr "Gråtone-alfa" -#: libpikabase/pikabaseenums.c:902 +#: libpikabase/pikabaseenums.c:904 msgctxt "image-type" msgid "Indexed" msgstr "Indekseret" -#: libpikabase/pikabaseenums.c:903 +#: libpikabase/pikabaseenums.c:905 msgctxt "image-type" msgid "Indexed-alpha" msgstr "Indekseret-alfa" -#: libpikabase/pikabaseenums.c:933 +#: libpikabase/pikabaseenums.c:935 msgctxt "ink-blob-type" msgid "Circle" msgstr "Cirkel" -#: libpikabase/pikabaseenums.c:934 +#: libpikabase/pikabaseenums.c:936 msgctxt "ink-blob-type" msgid "Square" msgstr "Kvadrat" -#: libpikabase/pikabaseenums.c:935 +#: libpikabase/pikabaseenums.c:937 msgctxt "ink-blob-type" msgid "Diamond" msgstr "Diamant" -#: libpikabase/pikabaseenums.c:967 +#: libpikabase/pikabaseenums.c:969 msgctxt "interpolation-type" msgid "None" msgstr "Ingen" -#: libpikabase/pikabaseenums.c:968 +#: libpikabase/pikabaseenums.c:970 msgctxt "interpolation-type" msgid "Linear" msgstr "Lineær" -#: libpikabase/pikabaseenums.c:969 +#: libpikabase/pikabaseenums.c:971 msgctxt "interpolation-type" msgid "Cubic" msgstr "Kubisk" -#: libpikabase/pikabaseenums.c:970 +#: libpikabase/pikabaseenums.c:972 msgctxt "interpolation-type" msgid "NoHalo" msgstr "IngenHalo" -#: libpikabase/pikabaseenums.c:971 +#: libpikabase/pikabaseenums.c:973 msgctxt "interpolation-type" msgid "LoHalo" msgstr "LidtHalo" # Photoshop: https://helpx.adobe.com/dk/photoshop/using/modify-shapes.html -#: libpikabase/pikabaseenums.c:1001 +#: libpikabase/pikabaseenums.c:1003 msgctxt "join-style" msgid "Miter" msgstr "Spids" -#: libpikabase/pikabaseenums.c:1002 +#: libpikabase/pikabaseenums.c:1004 msgctxt "join-style" msgid "Round" msgstr "Rund" -#: libpikabase/pikabaseenums.c:1003 +#: libpikabase/pikabaseenums.c:1005 msgctxt "join-style" msgid "Bevel" -msgstr "Facet" +msgstr "Fas" -#: libpikabase/pikabaseenums.c:1064 +#: libpikabase/pikabaseenums.c:1066 msgctxt "merge-type" msgid "Expanded as necessary" msgstr "Udvidet om nødvendigt" -#: libpikabase/pikabaseenums.c:1065 +#: libpikabase/pikabaseenums.c:1067 msgctxt "merge-type" msgid "Clipped to image" msgstr "Beskåret til billedet" -#: libpikabase/pikabaseenums.c:1066 +#: libpikabase/pikabaseenums.c:1068 msgctxt "merge-type" msgid "Clipped to bottom layer" msgstr "Beskåret til det nederste lag" -#: libpikabase/pikabaseenums.c:1067 +#: libpikabase/pikabaseenums.c:1069 msgctxt "merge-type" msgid "Flatten" msgstr "Forén billedets lag (fjern gennemsigtighed)" -#: libpikabase/pikabaseenums.c:1161 +#: libpikabase/pikabaseenums.c:1163 msgctxt "orientation-type" msgid "Horizontal" msgstr "Vandret" -#: libpikabase/pikabaseenums.c:1162 +#: libpikabase/pikabaseenums.c:1164 msgctxt "orientation-type" msgid "Vertical" msgstr "Lodret" -#: libpikabase/pikabaseenums.c:1163 +#: libpikabase/pikabaseenums.c:1165 msgctxt "orientation-type" msgid "Unknown" msgstr "Ukendt" -#: libpikabase/pikabaseenums.c:1192 +#: libpikabase/pikabaseenums.c:1194 msgctxt "paint-application-mode" msgid "Constant" msgstr "Konstant" -#: libpikabase/pikabaseenums.c:1193 +#: libpikabase/pikabaseenums.c:1195 msgctxt "paint-application-mode" msgid "Incremental" msgstr "Trinvis" -#: libpikabase/pikabaseenums.c:1254 +#: libpikabase/pikabaseenums.c:1256 msgctxt "pdb-proc-type" msgid "Internal PIKA procedure" msgstr "Intern PIKA-procedure" -#: libpikabase/pikabaseenums.c:1255 +#: libpikabase/pikabaseenums.c:1257 msgctxt "pdb-proc-type" msgid "PIKA Plug-In" msgstr "PIKA-udvidelsesmodul" -#: libpikabase/pikabaseenums.c:1256 +#: libpikabase/pikabaseenums.c:1258 msgctxt "pdb-proc-type" msgid "PIKA Extension" msgstr "PIKA-udvidelse" -#: libpikabase/pikabaseenums.c:1257 +#: libpikabase/pikabaseenums.c:1259 msgctxt "pdb-proc-type" msgid "Temporary Procedure" msgstr "Midlertidig procedure" -#: libpikabase/pikabaseenums.c:1344 +#: libpikabase/pikabaseenums.c:1346 msgctxt "precision" msgid "8-bit linear integer" msgstr "8 bit heltal (lineær)" -#: libpikabase/pikabaseenums.c:1345 +#: libpikabase/pikabaseenums.c:1347 msgctxt "precision" msgid "8-bit non-linear integer" msgstr "8 bit heltal (ikkelineær)" -#: libpikabase/pikabaseenums.c:1346 +#: libpikabase/pikabaseenums.c:1348 msgctxt "precision" msgid "8-bit perceptual integer" msgstr "8 bit heltal (perceptuel)" -#: libpikabase/pikabaseenums.c:1347 +#: libpikabase/pikabaseenums.c:1349 msgctxt "precision" msgid "16-bit linear integer" msgstr "16 bit heltal (lineær)" -#: libpikabase/pikabaseenums.c:1348 +#: libpikabase/pikabaseenums.c:1350 msgctxt "precision" msgid "16-bit non-linear integer" msgstr "16 bit heltal (ikkelineær)" -#: libpikabase/pikabaseenums.c:1349 +#: libpikabase/pikabaseenums.c:1351 msgctxt "precision" msgid "16-bit perceptual integer" msgstr "16 bit heltal (perceptuel)" -#: libpikabase/pikabaseenums.c:1350 +#: libpikabase/pikabaseenums.c:1352 msgctxt "precision" msgid "32-bit linear integer" msgstr "32 bit heltal (lineær)" -#: libpikabase/pikabaseenums.c:1351 +#: libpikabase/pikabaseenums.c:1353 msgctxt "precision" msgid "32-bit non-linear integer" msgstr "32 bit heltal (ikkelineær)" -#: libpikabase/pikabaseenums.c:1352 +#: libpikabase/pikabaseenums.c:1354 msgctxt "precision" msgid "32-bit perceptual integer" msgstr "32 bit heltal (perceptuel)" -#: libpikabase/pikabaseenums.c:1353 +#: libpikabase/pikabaseenums.c:1355 msgctxt "precision" msgid "16-bit linear floating point" msgstr "16 bit flydende tal (lineær)" -#: libpikabase/pikabaseenums.c:1354 +#: libpikabase/pikabaseenums.c:1356 msgctxt "precision" msgid "16-bit non-linear floating point" msgstr "16 bit flydende tal (ikkelineær)" -#: libpikabase/pikabaseenums.c:1355 +#: libpikabase/pikabaseenums.c:1357 msgctxt "precision" msgid "16-bit perceptual floating point" msgstr "16 bit flydende tal (perceptuel)" -#: libpikabase/pikabaseenums.c:1356 +#: libpikabase/pikabaseenums.c:1358 msgctxt "precision" msgid "32-bit linear floating point" msgstr "32 bit flydende tal (lineær)" -#: libpikabase/pikabaseenums.c:1357 +#: libpikabase/pikabaseenums.c:1359 msgctxt "precision" msgid "32-bit non-linear floating point" msgstr "32 bit flydende tal (ikkelineær)" -#: libpikabase/pikabaseenums.c:1358 +#: libpikabase/pikabaseenums.c:1360 msgctxt "precision" msgid "32-bit perceptual floating point" msgstr "32 bit flydende tal (perceptuel)" -#: libpikabase/pikabaseenums.c:1359 +#: libpikabase/pikabaseenums.c:1361 msgctxt "precision" msgid "64-bit linear floating point" msgstr "64 bit flydende tal (lineær)" -#: libpikabase/pikabaseenums.c:1360 +#: libpikabase/pikabaseenums.c:1362 msgctxt "precision" msgid "64-bit non-linear floating point" msgstr "64 bit flydende tal (ikkelineær)" -#: libpikabase/pikabaseenums.c:1361 +#: libpikabase/pikabaseenums.c:1363 msgctxt "precision" msgid "64-bit perceptual floating point" msgstr "64 bit flydende tal (perceptuel)" -#: libpikabase/pikabaseenums.c:1472 +#: libpikabase/pikabaseenums.c:1474 msgctxt "repeat-mode" msgid "None (extend)" msgstr "Ingen (udvid)" -#: libpikabase/pikabaseenums.c:1473 +#: libpikabase/pikabaseenums.c:1475 msgctxt "repeat-mode" msgid "Sawtooth wave" msgstr "Savtakket bølge" -#: libpikabase/pikabaseenums.c:1474 +#: libpikabase/pikabaseenums.c:1476 msgctxt "repeat-mode" msgid "Triangular wave" msgstr "Trekantet bølge" -#: libpikabase/pikabaseenums.c:1475 +#: libpikabase/pikabaseenums.c:1477 msgctxt "repeat-mode" msgid "Truncate" msgstr "Afkort" -#: libpikabase/pikabaseenums.c:1537 +#: libpikabase/pikabaseenums.c:1539 msgctxt "run-mode" msgid "Run interactively" msgstr "Kør interaktivt" -#: libpikabase/pikabaseenums.c:1538 +#: libpikabase/pikabaseenums.c:1540 msgctxt "run-mode" msgid "Run non-interactively" msgstr "Kør ikke-interaktivt" -#: libpikabase/pikabaseenums.c:1539 +#: libpikabase/pikabaseenums.c:1541 msgctxt "run-mode" msgid "Run with last used values" msgstr "Kør med sidst brugte værdier" -#: libpikabase/pikabaseenums.c:1577 +#: libpikabase/pikabaseenums.c:1579 msgctxt "select-criterion" msgid "Composite" msgstr "Sammensat" -#: libpikabase/pikabaseenums.c:1578 +#: libpikabase/pikabaseenums.c:1580 msgctxt "select-criterion" msgid "Red" msgstr "Rød" -#: libpikabase/pikabaseenums.c:1579 +#: libpikabase/pikabaseenums.c:1581 msgctxt "select-criterion" msgid "Green" msgstr "Grøn" -#: libpikabase/pikabaseenums.c:1580 +#: libpikabase/pikabaseenums.c:1582 msgctxt "select-criterion" msgid "Blue" msgstr "Blå" -#: libpikabase/pikabaseenums.c:1581 +#: libpikabase/pikabaseenums.c:1583 msgctxt "select-criterion" msgid "HSV Hue" msgstr "HSV-farvetone" -#: libpikabase/pikabaseenums.c:1582 +#: libpikabase/pikabaseenums.c:1584 msgctxt "select-criterion" msgid "HSV Saturation" msgstr "HSV-mætning" -#: libpikabase/pikabaseenums.c:1583 +#: libpikabase/pikabaseenums.c:1585 msgctxt "select-criterion" msgid "HSV Value" msgstr "HSV-valør" -#: libpikabase/pikabaseenums.c:1584 +#: libpikabase/pikabaseenums.c:1586 msgctxt "select-criterion" msgid "LCh Lightness" msgstr "LCh-lyshed" -#: libpikabase/pikabaseenums.c:1585 +#: libpikabase/pikabaseenums.c:1587 msgctxt "select-criterion" msgid "LCh Chroma" msgstr "LCh-farvestyrke" -#: libpikabase/pikabaseenums.c:1586 +#: libpikabase/pikabaseenums.c:1588 msgctxt "select-criterion" msgid "LCh Hue" msgstr "LCh-farvetone" -#: libpikabase/pikabaseenums.c:1587 +#: libpikabase/pikabaseenums.c:1589 msgctxt "select-criterion" msgid "Alpha" msgstr "Alfa" -#: libpikabase/pikabaseenums.c:1616 +#: libpikabase/pikabaseenums.c:1618 msgctxt "size-type" msgid "Pixels" msgstr "Pixels" -#: libpikabase/pikabaseenums.c:1617 +#: libpikabase/pikabaseenums.c:1619 msgctxt "size-type" msgid "Points" msgstr "Punkter" -#: libpikabase/pikabaseenums.c:1678 +#: libpikabase/pikabaseenums.c:1680 msgctxt "stroke-method" msgid "Stroke line" msgstr "Optegningslinje" -#: libpikabase/pikabaseenums.c:1679 +#: libpikabase/pikabaseenums.c:1681 msgctxt "stroke-method" msgid "Stroke with a paint tool" msgstr "Optegn med et maleværktøj" -#: libpikabase/pikabaseenums.c:1712 +#: libpikabase/pikabaseenums.c:1714 msgctxt "text-direction" msgid "From left to right" msgstr "Fra venstre mod højre" -#: libpikabase/pikabaseenums.c:1713 +#: libpikabase/pikabaseenums.c:1715 msgctxt "text-direction" msgid "From right to left" msgstr "Fra højre mod venstre" -#: libpikabase/pikabaseenums.c:1714 +#: libpikabase/pikabaseenums.c:1716 msgctxt "text-direction" msgid "Vertical, right to left (mixed orientation)" msgstr "Lodret, fra højre mod venstre (blandet orientering)" -#: libpikabase/pikabaseenums.c:1715 +#: libpikabase/pikabaseenums.c:1717 msgctxt "text-direction" msgid "Vertical, right to left (upright orientation)" msgstr "Lodret, fra højre mod venstre (oprejst orientering)" -#: libpikabase/pikabaseenums.c:1716 +#: libpikabase/pikabaseenums.c:1718 msgctxt "text-direction" msgid "Vertical, left to right (mixed orientation)" msgstr "Lodret, fra venstre mod højre (blandet orientering)" -#: libpikabase/pikabaseenums.c:1717 +#: libpikabase/pikabaseenums.c:1719 msgctxt "text-direction" msgid "Vertical, left to right (upright orientation)" msgstr "Lodret, fra venstre mod højre (oprejst orientering)" -#: libpikabase/pikabaseenums.c:1748 +#: libpikabase/pikabaseenums.c:1750 msgctxt "text-hint-style" msgid "None" msgstr "Ingen" -#: libpikabase/pikabaseenums.c:1749 +#: libpikabase/pikabaseenums.c:1751 msgctxt "text-hint-style" msgid "Slight" msgstr "Let" -#: libpikabase/pikabaseenums.c:1750 +#: libpikabase/pikabaseenums.c:1752 msgctxt "text-hint-style" msgid "Medium" msgstr "Medium" -#: libpikabase/pikabaseenums.c:1751 +#: libpikabase/pikabaseenums.c:1753 msgctxt "text-hint-style" msgid "Full" msgstr "Fuld" -#: libpikabase/pikabaseenums.c:1782 +#: libpikabase/pikabaseenums.c:1784 msgctxt "text-justification" msgid "Left justified" msgstr "Venstrestillet" -#: libpikabase/pikabaseenums.c:1783 +#: libpikabase/pikabaseenums.c:1785 msgctxt "text-justification" msgid "Right justified" msgstr "Højrestillet" -#: libpikabase/pikabaseenums.c:1784 +#: libpikabase/pikabaseenums.c:1786 msgctxt "text-justification" msgid "Centered" msgstr "Centreret" -#: libpikabase/pikabaseenums.c:1785 +#: libpikabase/pikabaseenums.c:1787 msgctxt "text-justification" msgid "Filled" msgstr "Udfyldt" -#: libpikabase/pikabaseenums.c:1815 +#: libpikabase/pikabaseenums.c:1817 msgctxt "transfer-mode" msgid "Shadows" msgstr "Skygger" -#: libpikabase/pikabaseenums.c:1816 +#: libpikabase/pikabaseenums.c:1818 msgctxt "transfer-mode" msgid "Midtones" msgstr "Mellemtoner" -#: libpikabase/pikabaseenums.c:1817 +#: libpikabase/pikabaseenums.c:1819 msgctxt "transfer-mode" msgid "Highlights" msgstr "Højlys" -#: libpikabase/pikabaseenums.c:1846 +#: libpikabase/pikabaseenums.c:1848 msgctxt "transform-direction" msgid "Normal (Forward)" msgstr "Normal (fremad)" -#: libpikabase/pikabaseenums.c:1847 +#: libpikabase/pikabaseenums.c:1849 msgctxt "transform-direction" msgid "Corrective (Backward)" msgstr "Korrigerende (tilbage)" -#: libpikabase/pikabaseenums.c:1878 +#: libpikabase/pikabaseenums.c:1880 msgctxt "transform-resize" msgid "Adjust" msgstr "Justér" -#: libpikabase/pikabaseenums.c:1879 +#: libpikabase/pikabaseenums.c:1881 msgctxt "transform-resize" msgid "Clip" msgstr "Klip" -#: libpikabase/pikabaseenums.c:1880 +#: libpikabase/pikabaseenums.c:1882 msgctxt "transform-resize" msgid "Crop to result" msgstr "Beskær til resultat" -#: libpikabase/pikabaseenums.c:1881 +#: libpikabase/pikabaseenums.c:1883 msgctxt "transform-resize" msgid "Crop with aspect" msgstr "Beskær med forhold" -#: libpikabase/pikametadata.c:1072 +#: libpikabase/pikametadata.c:1215 msgid "Can load metadata only from local files" msgstr "Kan kun indlæse metadata fra lokale filer" -#: libpikabase/pikametadata.c:1128 +#: libpikabase/pikametadata.c:1271 msgid "Can save metadata only to local files" msgstr "Kan kun gemme metadata til lokale filer" -#: libpikabase/pikametadata.c:1176 +#: libpikabase/pikametadata.c:1319 msgid "Invalid Exif data size." msgstr "Ugyldig Exif-datastørrelse." -#: libpikabase/pikametadata.c:1205 +#: libpikabase/pikametadata.c:1348 msgid "Parsing Exif data failed." msgstr "Fortolkning af Exif-data mislykkedes." -#: libpikabase/pikametadata.c:1255 +#: libpikabase/pikametadata.c:1398 msgid "Parsing IPTC data failed." msgstr "Fortolkning af IPTC-data mislykkedes." -#: libpikabase/pikametadata.c:1303 +#: libpikabase/pikametadata.c:1446 msgid "Parsing XMP data failed." msgstr "Fortolkning af XMP-data mislykkedes." -#: libpikabase/pikautils.c:219 libpikabase/pikautils.c:224 +#: libpikabase/pikautils.c:220 libpikabase/pikautils.c:225 msgid "(invalid UTF-8 string)" msgstr "(ugyldig UTF-8-streng)" -#: libpikabase/pikautils.c:394 +#: libpikabase/pikautils.c:395 msgid "File path is NULL" msgstr "Filstien er NULL" # Har det et dansk navn: https://en.wikipedia.org/wiki/Wide_character -#: libpikabase/pikautils.c:403 libpikabase/pikautils.c:414 +#: libpikabase/pikautils.c:403 msgid "Error converting UTF-8 filename to wide char" msgstr "Fejl ved konvertering af filnavn i UTF-8 til “wide character“" -#: libpikabase/pikautils.c:422 +#: libpikabase/pikautils.c:411 msgid "ILCreateFromPath() failed" msgstr "ILCreateFromPath() mislykkedes" -#: libpikabase/pikautils.c:459 +#: libpikabase/pikautils.c:450 #, c-format msgid "Cannot convert '%s' into a valid NSURL." msgstr "Kan ikke konvertere “%s” til en gyldig NSURL." -#: libpikabase/pikautils.c:487 +#: libpikabase/pikautils.c:478 msgid "Connecting to org.freedesktop.FileManager1 failed: " msgstr "Kunne ikke forbinde til org.freedesktop.FileManager1: " -#: libpikabase/pikautils.c:511 +#: libpikabase/pikautils.c:502 msgid "Calling ShowItems failed: " msgstr "Kunne ikke kalde ShowItems: " @@ -1815,103 +1908,127 @@ msgstr "" "Farven der skal bruges som for markering af farver, som er udenfor " "farveskala." -#: libpikaconfig/pikacolorconfig.c:210 +# Lignende har afsluttende punktum +#: libpikaconfig/pikacolorconfig.c:114 +msgid "" +"When enabled, set the color scales to display 0...255 instead of percentages" +msgstr "" +"Når aktiveret indstilles farveskalaerne til at vise 0–255 i stedet for " +"procenter." + +#: libpikaconfig/pikacolorconfig.c:118 +msgid "" +"When enabled, set the color scales to display HSV blend mode instead of LCh" +msgstr "" +"Når aktiveret indstilles farveskalaerne til at vise HSV-blandingstilstand i " +"stedet for LCh." + +#: libpikaconfig/pikacolorconfig.c:222 msgid "Mode of operation" msgstr "Virkemåde" -#: libpikaconfig/pikacolorconfig.c:218 +#: libpikaconfig/pikacolorconfig.c:230 msgid "Preferred RGB profile" msgstr "Foretrukken RGB-profil" -#: libpikaconfig/pikacolorconfig.c:225 +#: libpikaconfig/pikacolorconfig.c:237 msgid "Preferred grayscale profile" msgstr "Foretrukken gråtoneprofil" -#: libpikaconfig/pikacolorconfig.c:232 +#: libpikaconfig/pikacolorconfig.c:244 msgid "CMYK profile" msgstr "CMYK-profil" -#: libpikaconfig/pikacolorconfig.c:239 +#: libpikaconfig/pikacolorconfig.c:251 msgid "Monitor profile" msgstr "Skærmprofil" -#: libpikaconfig/pikacolorconfig.c:246 +#: libpikaconfig/pikacolorconfig.c:258 msgid "Use the system monitor profile" msgstr "Brug systemets skærmprofil" -#: libpikaconfig/pikacolorconfig.c:253 +#: libpikaconfig/pikacolorconfig.c:265 msgid "Simulation profile for soft-proofing" msgstr "Simuleringsprofil til skærmkorrektur" -#: libpikaconfig/pikacolorconfig.c:260 +#: libpikaconfig/pikacolorconfig.c:272 msgid "Display rendering intent" msgstr "Gengivelsesmetode for skærmen" -#: libpikaconfig/pikacolorconfig.c:268 +#: libpikaconfig/pikacolorconfig.c:280 msgid "Use black point compensation for the display" msgstr "Brug sortpunktskompensation til skærmen" -#: libpikaconfig/pikacolorconfig.c:275 +#: libpikaconfig/pikacolorconfig.c:287 msgid "Optimize display color transformations" msgstr "Optimér skærmens farvetransformationer" -#: libpikaconfig/pikacolorconfig.c:282 +#: libpikaconfig/pikacolorconfig.c:294 msgid "Soft-proofing rendering intent" msgstr "Gengivelsesmetode for skærmkorrektur" -#: libpikaconfig/pikacolorconfig.c:290 +#: libpikaconfig/pikacolorconfig.c:302 msgid "Use black point compensation for soft-proofing" msgstr "Brug sortpunktskompensation til skærmkorrektur" -#: libpikaconfig/pikacolorconfig.c:297 +#: libpikaconfig/pikacolorconfig.c:309 msgid "Optimize soft-proofing color transformations" msgstr "Optimér skærmkorrekturens farvetransformationer" -#: libpikaconfig/pikacolorconfig.c:304 +#: libpikaconfig/pikacolorconfig.c:316 msgid "Mark out of gamut colors" msgstr "Markér farver uden for farveskalaen" -#: libpikaconfig/pikacolorconfig.c:311 +#: libpikaconfig/pikacolorconfig.c:323 msgid "Out of gamut warning color" msgstr "Advarselsfarve for farver uden for farveskalaen" -#: libpikaconfig/pikacolorconfig.c:661 libpikaconfig/pikacolorconfig.c:854 +#: libpikaconfig/pikacolorconfig.c:331 +msgid "Show RGB 0..255 scales" +msgstr "Vis RGB-skalaer 0–255" + +# Hedder LCh +#: libpikaconfig/pikacolorconfig.c:338 +msgid "Show HSV instead of LCH" +msgstr "Vis HSV i stedet for LCh" + +#: libpikaconfig/pikacolorconfig.c:699 libpikaconfig/pikacolorconfig.c:892 #, c-format msgid "Color profile '%s' is not for RGB color space." msgstr "Farveprofilen “%s” er ikke til RGB-farverummet." -#: libpikaconfig/pikacolorconfig.c:705 libpikaconfig/pikacolorconfig.c:904 +#: libpikaconfig/pikacolorconfig.c:743 libpikaconfig/pikacolorconfig.c:942 #, c-format msgid "Color profile '%s' is not for GRAY color space." msgstr "Farveprofilen “%s” er ikke til gråtonefarverummet." -#: libpikaconfig/pikacolorconfig.c:749 libpikaconfig/pikacolorconfig.c:954 +#: libpikaconfig/pikacolorconfig.c:787 libpikaconfig/pikacolorconfig.c:992 #, c-format msgid "Color profile '%s' is not for CMYK color space." msgstr "Farveprofilen “%s” er ikke til CMYK-farverummet." -#: 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 "værdi for symbolet %s er ikke en gyldig UTF-8-streng" #. 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 "forventede “yes” eller “no” for boolesk symbol %s, fik “%s”" -#: libpikaconfig/pikaconfig-deserialize.c:595 +#: libpikaconfig/pikaconfig-deserialize.c:607 #, c-format msgid "invalid value '%s' for token %s" msgstr "ugyldig værdi “%s” for symbolet %s" -#: libpikaconfig/pikaconfig-deserialize.c:610 +#: libpikaconfig/pikaconfig-deserialize.c:622 #, c-format msgid "invalid value '%ld' for token %s" msgstr "ugyldig værdi “%ld” for symbolet %s" -#: libpikaconfig/pikaconfig-deserialize.c:679 +#: libpikaconfig/pikaconfig-deserialize.c:691 #, c-format msgid "while parsing token '%s': %s" msgstr "under fortolkning af symbolet “%s”: %s" @@ -1967,26 +2084,26 @@ msgstr "forventede “yes” eller “no” for boolesk symbol, fik “%s”" msgid "Error while parsing '%s' in line %d: %s" msgstr "Fejl under fortolkning af “%s” i linje %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 "Indlæsningsfejl for modulet “%s”: %s" -#: libpikamodule/pikamoduledb.c:500 +#: libpikamodule/pikamoduledb.c:450 msgid "Module error" msgstr "Modulfejl" -#: libpikamodule/pikamoduledb.c:501 +#: libpikamodule/pikamoduledb.c:451 msgid "Loaded" msgstr "Indlæst" -#: libpikamodule/pikamoduledb.c:502 +#: libpikamodule/pikamoduledb.c:452 msgid "Load failed" msgstr "Indlæsning mislykkedes" -#: libpikamodule/pikamoduledb.c:503 +#: libpikamodule/pikamoduledb.c:453 msgid "Not loaded" msgstr "Ikke indlæst" @@ -2017,19 +2134,19 @@ msgstr "Kunne ikke oprette miniature for %s: %s" msgid "_Search:" msgstr "_Søg:" -#: libpikawidgets/pikacolorbutton.c:152 +#: libpikawidgets/pikacolorbutton.c:380 msgid "_Foreground Color" msgstr "_Forgrundsfarve" -#: libpikawidgets/pikacolorbutton.c:156 +#: libpikawidgets/pikacolorbutton.c:381 msgid "_Background Color" msgstr "_Baggrundsfarve" -#: libpikawidgets/pikacolorbutton.c:160 +#: libpikawidgets/pikacolorbutton.c:386 msgid "Blac_k" msgstr "_Sort" -#: libpikawidgets/pikacolorbutton.c:164 +#: libpikawidgets/pikacolorbutton.c:387 msgid "_White" msgstr "_Hvid" @@ -2079,23 +2196,23 @@ msgstr "Producent: " msgid "Copyright: " msgstr "Ophavsret: " -#: libpikawidgets/pikacolorscales.c:205 +#: libpikawidgets/pikacolorscales.c:212 msgid "Scales" msgstr "Skalaer" -#: libpikawidgets/pikacolorscales.c:434 +#: libpikawidgets/pikacolorscales.c:446 msgid "0..100" msgstr "0..100" -#: libpikawidgets/pikacolorscales.c:436 +#: libpikawidgets/pikacolorscales.c:448 msgid "0..255" msgstr "0..255" -#: libpikawidgets/pikacolorscales.c:457 +#: libpikawidgets/pikacolorscales.c:469 msgid "LCh" msgstr "LCh" -#: libpikawidgets/pikacolorscales.c:459 +#: libpikawidgets/pikacolorscales.c:471 msgid "HSV" msgstr "HSV" @@ -2111,6 +2228,10 @@ msgstr "Tidligere:" msgid "HTML _notation:" msgstr "HTML-_notation:" +#: libpikawidgets/pikadialog.c:196 +msgid "_Help" +msgstr "_Hjælp" + #: libpikawidgets/pikafileentry.c:167 msgid "Show file location in the file manager" msgstr "Vis placering af filen i filhåndtering" @@ -2144,7 +2265,7 @@ msgstr "Vælg mappe" msgid "Select File" msgstr "Vælg fil" -#: libpikawidgets/pikahelpui.c:384 +#: libpikawidgets/pikahelpui.c:379 msgid "Press F1 for more help" msgstr "Tryk på F1 for yderligere hjælp" @@ -2167,6 +2288,23 @@ msgstr "Mebibyte" msgid "Gibibyte" msgstr "Gibibyte" +#: libpikawidgets/pikapageselector.c:185 +msgid "N Pages" +msgstr "N sider" + +#: libpikawidgets/pikapageselector.c:186 +msgid "The number of pages to open" +msgstr "Antal sider der skal åbnes" + +#: libpikawidgets/pikapageselector.c:199 +msgid "Target" +msgstr "Mål" + +# Stort begyndelsesbogstav som lignende +#: libpikawidgets/pikapageselector.c:200 +msgid "the target to open to" +msgstr "Målet der skal åbnes til" + #. Count label #: libpikawidgets/pikapageselector.c:283 libpikawidgets/pikapageselector.c:1079 msgid "Nothing selected" @@ -2252,7 +2390,7 @@ msgstr "Farve 1 for tilpassede tern" msgid "Custom Checks Color 2" msgstr "Farve 2 for tilpassede tern" -#: 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." @@ -2508,7 +2646,7 @@ msgstr "Vandfarvestil-farvevælger" msgid "Watercolor" msgstr "Vandfarve" -#: modules/color-selector-water.c:198 +#: modules/color-selector-water.c:196 msgid "Pressure" msgstr "Tryk" @@ -2875,75 +3013,78 @@ msgstr "Aces RRT" # Over-/undereksponerede områder indikeres med en farve # Adobe bruger klipning: https://helpx.adobe.com/dk/creative-suite/using/make-color-tonal-adjustments-camera.html, men denne brug af klipning fremgår ikke af Den Danske Ordbog # Nok bedst at kalde det over-/undereksponering for ikke at forveksle med Cut - Warning er overflødigt (fremgår af navnet Clip Warning) -#: 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 "Filter til visning af over-/undereksponerede områder med farve" -#: modules/display-filter-clip-warning.c:158 +#: modules/display-filter-clip-warning.c:161 msgid "Show shadows" msgstr "Vis skygger" -#: modules/display-filter-clip-warning.c:159 +#: modules/display-filter-clip-warning.c:162 msgid "Show warning for pixels with a negative component" msgstr "Vis advarsel for pixels med en negativ komponent" -#: modules/display-filter-clip-warning.c:165 +#: modules/display-filter-clip-warning.c:168 msgid "Shadows color" msgstr "Farve for undereksponeret" -#: modules/display-filter-clip-warning.c:166 +#: modules/display-filter-clip-warning.c:169 msgid "Shadows warning color" msgstr "Advarselsfarve for undereksponerede områder" -#: modules/display-filter-clip-warning.c:178 +#: modules/display-filter-clip-warning.c:181 msgid "Show highlights" msgstr "Vis overeksponerede" -#: 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 "Vis advarsel for pixels med en komponent større end en" -#: modules/display-filter-clip-warning.c:185 +#: modules/display-filter-clip-warning.c:188 msgid "Highlights color" msgstr "Farve for overeksponeret" -#: modules/display-filter-clip-warning.c:186 +#: modules/display-filter-clip-warning.c:189 msgid "Highlights warning color" msgstr "Advarselsfarve for overeksponerede områder" -#: modules/display-filter-clip-warning.c:198 +#: modules/display-filter-clip-warning.c:201 msgid "Show bogus" msgstr "Vis falske" -#: 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 "Vis advarsel for pixels med NaN eller uendelig komponent" -#: modules/display-filter-clip-warning.c:205 +#: modules/display-filter-clip-warning.c:208 msgid "Bogus color" msgstr "Farve for falske" -#: modules/display-filter-clip-warning.c:206 +#: modules/display-filter-clip-warning.c:209 msgid "Bogus warning color" msgstr "Advarselsfarve for falske pixels" -#: modules/display-filter-clip-warning.c:218 +#: modules/display-filter-clip-warning.c:221 msgid "Include alpha component" msgstr "Medtag alfakomponenten" -#: modules/display-filter-clip-warning.c:219 +#: modules/display-filter-clip-warning.c:222 msgid "Include alpha component in the warning" msgstr "Medtag alfakomponenten i advarslen" -#: modules/display-filter-clip-warning.c:225 +#: modules/display-filter-clip-warning.c:228 msgid "Include transparent pixels" msgstr "Medtag gennemsigtige pixels" -#: modules/display-filter-clip-warning.c:226 +#: modules/display-filter-clip-warning.c:229 msgid "Include fully transparent pixels in the warning" msgstr "Medtag fuldt gennemsigtige pixels i advarslen" -#: modules/display-filter-clip-warning.c:230 +#: modules/display-filter-clip-warning.c:233 msgid "Clip Warning" msgstr "Over-/undereksponeringsadvarsel" @@ -2995,3 +3136,18 @@ msgstr "Kontrastcyklusser" #: modules/display-filter-high-contrast.c:128 msgid "Contrast" msgstr "Kontrast" + +#~ msgid "Brush Selection" +#~ msgstr "Penselvalg" + +#~ msgid "Font Selection" +#~ msgstr "Skrifttypevalg" + +#~ msgid "Gradient Selection" +#~ msgstr "Farveovergangsvalg" + +#~ msgid "Palette Selection" +#~ msgstr "Paletvalg" + +#~ msgid "Pattern Selection" +#~ msgstr "Mønstervalg" diff --git a/po-libpika/eu.po b/po-libpika/eu.po index 7ffd4fe..0be8c92 100644 --- a/po-libpika/eu.po +++ b/po-libpika/eu.po @@ -11,8 +11,8 @@ msgid "" msgstr "Project-Id-Version: pika master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-05-28 03:13+0000\n" -"PO-Revision-Date: 2023-06-04 10:00+0100\n" +"POT-Creation-Date: 2023-10-04 12:21+0000\n" +"PO-Revision-Date: 2023-10-14 10:00+0100\n" "Last-Translator: Asier Sarasua Garmendia \n" "Language-Team: Basque \n" "Language: eu\n" @@ -21,10 +21,14 @@ msgstr "Project-Id-Version: pika master\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: libpika/pikabrushselectbutton.c:325 libpika/pikapatternselectbutton.c:335 +#: libpika/pikabrushchooser.c:134 libpika/pikapatternchooser.c:129 msgid "_Browse..." msgstr "_Arakatu..." +#: libpika/pikadrawablechooser.c:238 +msgid "Browse..." +msgstr "Arakatu..." + #: libpika/pikaexport.c:332 libpika/pikaexport.c:368 #, c-format msgid "%s plug-in can't handle layers" @@ -157,7 +161,7 @@ msgid "Confirm Save" msgstr "Berretsi gordetzea" #: 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 @@ -179,7 +183,7 @@ msgid "_Ignore" msgstr "E_zikusi egin" #: libpika/pikaexport.c:629 libpika/pikaexport.c:1200 -#: libpika/pikaproceduredialog.c:277 +#: libpika/pikaproceduredialog.c:296 libpika/pikaproceduredialog.c:569 msgid "_Export" msgstr "_Esportatu" @@ -214,12 +218,12 @@ msgstr "Kanal bat (gordetako hautaketa) %s gisa gordetzera zoaz.\n" #. 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 "Esportatu irudia %s gisa" -#: libpika/pikaimagemetadata.c:284 +#: libpika/pikaimagemetadata.c:283 msgid "Background" msgstr "Atzeko planoa" @@ -227,6 +231,16 @@ msgstr "Atzeko planoa" 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 "Fitxategiak kargatzeko plugin honek ARRAKASTA itzuli du egoera gisa, baina irudirik gabe. Pluginaren kodeak akatsa du, jarri harremanetan pluginaren garatzailearekin." + +#: libpika/pikaparamspecs-desc.c:54 +msgid "Allowed values:" +msgstr "Onartutako balioak:" + #. procedure executed successfully #: libpika/pikapdb.c:552 msgid "success" @@ -335,108 +349,108 @@ msgid_plural "%d procedures match your query" msgstr[0] "prozedura %d bat dator kontsultarekin" msgstr[1] "%d prozedura bat datoz kontsultarekin" -#: libpika/pikaprocedure.c:1913 +#: libpika/pikaprocedure.c:1959 #, c-format msgid "Procedure '%s' returned no return values" msgstr "'%s' prozedurak ez du itzulerako baliorik itzuli" -#: libpika/pikaprocedure.c:2004 +#: libpika/pikaprocedure.c:2050 #, c-format msgid "" "Procedure '%s' returned a wrong value type for return value '%s' (#%d). " "Expected %s, got %s." msgstr "'%s' prozedurak itzulerako '%s' (#%d) balioaren okerreko balio mota itzuli du. %s espero zen, baina %s jaso da." -#: libpika/pikaprocedure.c:2016 +#: libpika/pikaprocedure.c:2062 #, c-format msgid "" "Procedure '%s' has been called with a wrong value type for argument " "'%s' (#%d). Expected %s, got %s." msgstr "'%s' prozedurak itzulerako '%s' (#%d) argumentuaren okerreko balio mota itzuli du. %s espero zen, baina %s jaso da." -#: libpika/pikaprocedure.c:2051 +#: libpika/pikaprocedure.c:2097 #, c-format msgid "" "Procedure '%s' returned '%s' as return value '%s' (#%d, type %s). This value " "is out of range." msgstr "'%s' prozedurak '%s' itzuli du '%s' (#%d, %s mota) itzulerako balio gisa. Balio hau barrutiz kanpo dago." -#: libpika/pikaprocedure.c:2065 +#: libpika/pikaprocedure.c:2111 #, c-format msgid "" "Procedure '%s' has been called with value '%s' for argument '%s' (#%d, type " "%s). This value is out of range." msgstr "'%1$s' prozedurak '%3$s' (#%4$d, %5$s mota) argumentua '%2$s' balioarekin deitu du. Balio hau barrutiz kanpo dago." -#: libpika/pikaprocedure.c:2109 +#: libpika/pikaprocedure.c:2155 #, c-format msgid "Procedure '%s' returned an invalid UTF-8 string for argument '%s'." msgstr "'%s' prozedurak baliogabeko UTF-8 kate bat itzuli du '%s' argumenturako." -#: libpika/pikaprocedure.c:2119 +#: libpika/pikaprocedure.c:2165 #, c-format msgid "" "Procedure '%s' has been called with an invalid UTF-8 string for argument " "'%s'." msgstr "'%s' prozedura baliogabeko UTF-8 kate batekin deitu da '%s' argumenturako." -#: libpika/pikaproceduredialog.c:275 +#: libpika/pikaproceduredialog.c:294 libpika/pikaproceduredialog.c:567 #: libpikawidgets/pikacolorprofilechooserdialog.c:184 msgid "_Open" msgstr "_Ireki" -#: 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 "_Ados" -#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:570 +#: libpika/pikaproceduredialog.c:306 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "_Berrezarri" -#: libpika/pikaproceduredialog.c:339 +#: libpika/pikaproceduredialog.c:359 msgid "_Load Saved Settings" msgstr "_Kargatu gordetako ezarpenak" -#: libpika/pikaproceduredialog.c:340 +#: libpika/pikaproceduredialog.c:360 msgid "Load settings saved with \"Save Settings\" button" msgstr "Kargatu \"Gorde ezarpenak\" botoiarekin gordetako ezarpenak" -#: libpika/pikaproceduredialog.c:352 +#: libpika/pikaproceduredialog.c:372 msgid "_Save Settings" msgstr "_Gorde ezarpenak" -#: libpika/pikaproceduredialog.c:353 +#: libpika/pikaproceduredialog.c:373 msgid "Store current settings for later reuse" msgstr "Bitegiratu uneko ezarpenak geroago erabili ahal izateko" -#: libpika/pikaproceduredialog.c:734 +#: libpika/pikaproceduredialog.c:784 msgid "Brush Chooser" msgstr "Brotxaren hautatzailea" -#: libpika/pikaproceduredialog.c:738 +#: libpika/pikaproceduredialog.c:788 msgid "Font Chooser" msgstr "Letra-tipoen hautatzailea" -#: libpika/pikaproceduredialog.c:742 +#: libpika/pikaproceduredialog.c:792 msgid "Gradient Chooser" msgstr "Gradienteen hautatzailea" -#: libpika/pikaproceduredialog.c:746 +#: libpika/pikaproceduredialog.c:796 msgid "Palette Chooser" msgstr "Paleten hautatzailea" -#: libpika/pikaproceduredialog.c:750 +#: libpika/pikaproceduredialog.c:800 msgid "Pattern Chooser" msgstr "Ereduen hautatzailea" -#: libpika/pikaproceduredialog.c:2036 +#: libpika/pikaproceduredialog.c:2492 msgid "Reset to _Initial Values" msgstr "Berrezarri _hasierako balioak" -#: libpika/pikaproceduredialog.c:2045 +#: libpika/pikaproceduredialog.c:2501 msgid "Reset to _Factory Defaults" msgstr "Berrezarri _fabrikako lehenetsiak" @@ -476,6 +490,77 @@ msgstr "Eguna:" msgid "Copyright:" msgstr "Copyright-a:" +#: libpika/pikapropwidgets.c:191 +#, c-format +msgid "Choose layer: %s" +msgstr "Aukeratu geruza: %s" + +#: libpika/pikapropwidgets.c:193 +#, c-format +msgid "Choose channel: %s" +msgstr "Aukeratu kanala: %s" + +#: libpika/pikapropwidgets.c:195 +#, c-format +msgid "Choose drawable: %s" +msgstr "Aukeratu marrazgaia: %s" + +#: libpika/pikasaveprocedure.c:460 +msgid "Save _Exif" +msgstr "Gorde _EXIFa" + +#: libpika/pikasaveprocedure.c:461 +msgid "Save Exif (Exchangeable image file format) metadata" +msgstr "Gorde EXIF (Exchangeable image file format) metadatuak" + +#: libpika/pikasaveprocedure.c:466 +msgid "Save _IPTC" +msgstr "Gorde _IPTCa" + +#: libpika/pikasaveprocedure.c:467 +msgid "Save IPTC (International Press Telecommunications Council) metadata" +msgstr "Gorde IPTC (International Press Telecommunications Council) metadatuak" + +#: libpika/pikasaveprocedure.c:472 +msgid "Save _XMP" +msgstr "Gorde _XMPa" + +#: libpika/pikasaveprocedure.c:473 +msgid "Save XMP (Extensible Metadata Platform) metadata" +msgstr "Gorde XMP (Extensible Metadata Platforma) metadatuak" + +#: libpika/pikasaveprocedure.c:478 +msgid "Save color _profile" +msgstr "Gorde kolore-_profila" + +#: libpika/pikasaveprocedure.c:479 +msgid "Save the ICC color profile as metadata" +msgstr "Gorde ICC kolore-profila metadatu gisa" + +#: libpika/pikasaveprocedure.c:484 +msgid "Save _thumbnail" +msgstr "Gorde _miniatura" + +#: libpika/pikasaveprocedure.c:485 +msgid "Save a smaller representation of the image as metadata" +msgstr "Gorde irudiaren ordezko txikiagoa metadatu gisa" + +#: libpika/pikasaveprocedure.c:491 +msgid "Save c_omment" +msgstr "Gorde ir_uzkina" + +#: libpika/pikasaveprocedure.c:492 +msgid "Save a comment as metadata" +msgstr "Gorde iruzkina metadatu gisa" + +#: libpika/pikasaveprocedure.c:496 +msgid "Comment" +msgstr "Iruzkina" + +#: libpika/pikasaveprocedure.c:497 +msgid "Image comment" +msgstr "Irudi-iruzkina" + #: libpika/pikasaveproceduredialog.c:166 msgid "Metadata" msgstr "Metadatuak" @@ -1552,32 +1637,32 @@ msgstr "IPTC datuen analisiak huts egin du." msgid "Parsing XMP data failed." msgstr "XMP datuen analisiak huts egin du." -#: libpikabase/pikautils.c:219 libpikabase/pikautils.c:224 +#: libpikabase/pikautils.c:220 libpikabase/pikautils.c:225 msgid "(invalid UTF-8 string)" msgstr "(UTF-8 kate baliogabea)" -#: libpikabase/pikautils.c:394 +#: libpikabase/pikautils.c:395 msgid "File path is NULL" msgstr "Fitxategi-bidea NULL da" -#: libpikabase/pikautils.c:402 +#: libpikabase/pikautils.c:403 msgid "Error converting UTF-8 filename to wide char" msgstr "Errorea UTF-8 fitxategi-izena karaktere zabaletara bihurtzean" -#: libpikabase/pikautils.c:410 +#: libpikabase/pikautils.c:411 msgid "ILCreateFromPath() failed" msgstr "ILCreateFromPath() funtzioak huts egin du" -#: libpikabase/pikautils.c:449 +#: libpikabase/pikautils.c:450 #, c-format msgid "Cannot convert '%s' into a valid NSURL." msgstr "Ezin da '%s' baliozko NSURL bihurtu." -#: libpikabase/pikautils.c:477 +#: libpikabase/pikautils.c:478 msgid "Connecting to org.freedesktop.FileManager1 failed: " msgstr "org.freedesktop.FileManager1 konexioak huts egin du: " -#: libpikabase/pikautils.c:501 +#: libpikabase/pikautils.c:502 msgid "Calling ShowItems failed: " msgstr "ShowItems deiak huts egin du: " @@ -1831,28 +1916,28 @@ msgstr "'%s' kolore-profila ez da GRAY kolore-espaziorako." msgid "Color profile '%s' is not for CMYK color space." msgstr "'%s' kolore-profila ez da CMYK kolore-espaziorako." -#: 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 "%s tokenarentzako balioa ez da baliozko UTF-8 katea" #. 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 "'yes' edo 'no' espero zen %s token boolearrarentzat, baina '%s' jaso da" -#: libpikaconfig/pikaconfig-deserialize.c:595 +#: libpikaconfig/pikaconfig-deserialize.c:607 #, c-format msgid "invalid value '%s' for token %s" msgstr "baliogabeko '%s' balioa %s tokenarentzat" -#: libpikaconfig/pikaconfig-deserialize.c:610 +#: libpikaconfig/pikaconfig-deserialize.c:622 #, c-format msgid "invalid value '%ld' for token %s" msgstr "Baliogabeko '%ld' balioa %s tokenarentzat" -#: libpikaconfig/pikaconfig-deserialize.c:679 +#: libpikaconfig/pikaconfig-deserialize.c:691 #, c-format msgid "while parsing token '%s': %s" msgstr "'%s' tokena analizatzen zen bitartean: %s" @@ -1956,6 +2041,22 @@ msgstr "Ezin izan da '%s'(r)en koadro txikia sortu: %s" msgid "_Search:" msgstr "_Bilatu:" +#: libpikawidgets/pikacolorbutton.c:380 +msgid "_Foreground Color" +msgstr "A_urreko planoaren kolorea" + +#: libpikawidgets/pikacolorbutton.c:381 +msgid "_Background Color" +msgstr "A_tzeko planoaren kolorea" + +#: libpikawidgets/pikacolorbutton.c:386 +msgid "Blac_k" +msgstr "_Beltza" + +#: libpikawidgets/pikacolorbutton.c:387 +msgid "_White" +msgstr "_Zuria" + #: libpikawidgets/pikacolorhexentry.c:134 msgid "" "Hexadecimal color notation as used in HTML and CSS. This entry also accepts " @@ -2032,6 +2133,10 @@ msgstr "Zaharra:" msgid "HTML _notation:" msgstr "HTML -notazioa:" +#: libpikawidgets/pikadialog.c:181 +msgid "_Help" +msgstr "_Laguntza" + #: libpikawidgets/pikafileentry.c:167 msgid "Show file location in the file manager" msgstr "Erakutsi fitxategiaren kokalekua fitxategi-kudeatzailean" @@ -2088,6 +2193,22 @@ msgstr "Mebibyteak" msgid "Gibibyte" msgstr "Gibibyteak" +#: libpikawidgets/pikapageselector.c:185 +msgid "N Pages" +msgstr "N orri" + +#: libpikawidgets/pikapageselector.c:186 +msgid "The number of pages to open" +msgstr "Irekiko den orri kopurua" + +#: libpikawidgets/pikapageselector.c:199 +msgid "Target" +msgstr "Helburua" + +#: libpikawidgets/pikapageselector.c:200 +msgid "the target to open to" +msgstr "zein helburutan irekiko den" + #. Count label #: libpikawidgets/pikapageselector.c:283 libpikawidgets/pikapageselector.c:1079 msgid "Nothing selected" @@ -2169,7 +2290,7 @@ msgstr "Lauza pertsonalizatuen 1. kolorea" msgid "Custom Checks Color 2" msgstr "Lauza pertsonalizatuen 2. kolorea" -#: 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." @@ -2778,75 +2899,78 @@ msgstr "Aurre-eraldaketaren aldaketa geldiuneetan" 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 "Mozte-abisuko kolorea bistaratzeko iragazkia" -#: modules/display-filter-clip-warning.c:158 +#: modules/display-filter-clip-warning.c:161 msgid "Show shadows" msgstr "Erakutsi itzalak" -#: modules/display-filter-clip-warning.c:159 +#: modules/display-filter-clip-warning.c:162 msgid "Show warning for pixels with a negative component" msgstr "Erakutsi abisua osagai negatiboa duten pixeletarako" -#: modules/display-filter-clip-warning.c:165 +#: modules/display-filter-clip-warning.c:168 msgid "Shadows color" msgstr "Itzalen kolorea" -#: modules/display-filter-clip-warning.c:166 +#: modules/display-filter-clip-warning.c:169 msgid "Shadows warning color" msgstr "Itzalen abisuaren kolorea" -#: modules/display-filter-clip-warning.c:178 +#: modules/display-filter-clip-warning.c:181 msgid "Show highlights" msgstr "Erakutsi distirak" -#: 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 "Erakutsi abisua bat baino handiagoa den osagaia duten pixeletarako" -#: modules/display-filter-clip-warning.c:185 +#: modules/display-filter-clip-warning.c:188 msgid "Highlights color" msgstr "Distiren kolorea" -#: modules/display-filter-clip-warning.c:186 +#: modules/display-filter-clip-warning.c:189 msgid "Highlights warning color" msgstr "Distiren abisuaren kolorea" -#: modules/display-filter-clip-warning.c:198 +#: modules/display-filter-clip-warning.c:201 msgid "Show bogus" msgstr "Erakutsi faltsuak" -#: 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 "Erakutsi abisua osagai mugagabea edo NaN osagaia duten pixeletarako" -#: modules/display-filter-clip-warning.c:205 +#: modules/display-filter-clip-warning.c:208 msgid "Bogus color" msgstr "Faltsuen kolorea" -#: modules/display-filter-clip-warning.c:206 +#: modules/display-filter-clip-warning.c:209 msgid "Bogus warning color" msgstr "Faltsuen abisuaren kolorea" -#: modules/display-filter-clip-warning.c:218 +#: modules/display-filter-clip-warning.c:221 msgid "Include alpha component" msgstr "Sartu alfa osagaia" -#: modules/display-filter-clip-warning.c:219 +#: modules/display-filter-clip-warning.c:222 msgid "Include alpha component in the warning" msgstr "Sartu alfa osagaia abisuan" -#: modules/display-filter-clip-warning.c:225 +#: modules/display-filter-clip-warning.c:228 msgid "Include transparent pixels" msgstr "Sartu pixel gardenak" -#: modules/display-filter-clip-warning.c:226 +#: modules/display-filter-clip-warning.c:229 msgid "Include fully transparent pixels in the warning" msgstr "Sartu pixel erabat gardenak abisuan" -#: modules/display-filter-clip-warning.c:230 +#: modules/display-filter-clip-warning.c:233 msgid "Clip Warning" msgstr "Mozte-abisua" @@ -2898,18 +3022,6 @@ msgstr "Kontraste-zikloak" msgid "Contrast" msgstr "Kontrastea" -#~ msgid "_Foreground Color" -#~ msgstr "A_urreko planoaren kolorea" - -#~ msgid "_Background Color" -#~ msgstr "A_tzeko planoaren kolorea" - -#~ msgid "Blac_k" -#~ msgstr "_Beltza" - -#~ msgid "_White" -#~ msgstr "_Zuria" - #~ msgid "Brush Selection" #~ msgstr "Brotxaren hautapena" diff --git a/po-libpika/ka.po b/po-libpika/ka.po index 5da184e..47b53a3 100644 --- a/po-libpika/ka.po +++ b/po-libpika/ka.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: pika master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-08-26 14:00+0000\n" -"PO-Revision-Date: 2023-08-27 16:05+0200\n" +"POT-Creation-Date: 2023-10-02 00:02+0000\n" +"PO-Revision-Date: 2023-10-02 14:27+0200\n" "Last-Translator: Ekaterine Papava \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -17,12 +17,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.4\n" -#: libpika/pikabrushselectbutton.c:130 libpika/pikapatternselectbutton.c:142 +#: libpika/pikabrushchooser.c:134 libpika/pikapatternchooser.c:129 msgid "_Browse..." msgstr "_დათვალიერება..." +#: libpika/pikadrawablechooser.c:238 +msgid "Browse..." +msgstr "დათვალიერება..." + #: libpika/pikaexport.c:332 libpika/pikaexport.c:368 #, c-format msgid "%s plug-in can't handle layers" @@ -153,7 +157,7 @@ msgid "Confirm Save" msgstr "შენახვის დადასტურება" #: 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 @@ -175,7 +179,7 @@ msgid "_Ignore" msgstr "_იგნორი" #: libpika/pikaexport.c:629 libpika/pikaexport.c:1200 -#: libpika/pikaproceduredialog.c:277 +#: libpika/pikaproceduredialog.c:296 libpika/pikaproceduredialog.c:569 msgid "_Export" msgstr "_გატანა" @@ -208,12 +212,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 "გამოსახულების გატანა, როგორც %s" -#: libpika/pikaimagemetadata.c:284 +#: libpika/pikaimagemetadata.c:283 msgid "Background" msgstr "ფონი" @@ -221,6 +225,16 @@ msgstr "ფონი" 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 "" + +#: libpika/pikaparamspecs-desc.c:54 +msgid "Allowed values:" +msgstr "" + #. procedure executed successfully #: libpika/pikapdb.c:552 msgid "success" @@ -327,108 +341,108 @@ msgid "%d procedure matches your query" msgid_plural "%d procedures match your query" msgstr[0] "%d დამთხვევა" -#: libpika/pikaprocedure.c:1924 +#: libpika/pikaprocedure.c:1959 #, c-format msgid "Procedure '%s' returned no return values" msgstr "პროცედურამ %s გასაბრუნებელი მნიშვნელობები არ დააბრუნა" -#: libpika/pikaprocedure.c:2015 +#: libpika/pikaprocedure.c:2050 #, c-format msgid "" "Procedure '%s' returned a wrong value type for return value '%s' (#%d). " "Expected %s, got %s." msgstr "" -#: libpika/pikaprocedure.c:2027 +#: libpika/pikaprocedure.c:2062 #, c-format msgid "" "Procedure '%s' has been called with a wrong value type for argument " "'%s' (#%d). Expected %s, got %s." msgstr "" -#: libpika/pikaprocedure.c:2062 +#: libpika/pikaprocedure.c:2097 #, c-format msgid "" "Procedure '%s' returned '%s' as return value '%s' (#%d, type %s). This value " "is out of range." msgstr "" -#: libpika/pikaprocedure.c:2076 +#: libpika/pikaprocedure.c:2111 #, c-format msgid "" "Procedure '%s' has been called with value '%s' for argument '%s' (#%d, type " "%s). This value is out of range." msgstr "" -#: libpika/pikaprocedure.c:2120 +#: libpika/pikaprocedure.c:2155 #, c-format msgid "Procedure '%s' returned an invalid UTF-8 string for argument '%s'." msgstr "" -#: libpika/pikaprocedure.c:2130 +#: libpika/pikaprocedure.c:2165 #, c-format msgid "" "Procedure '%s' has been called with an invalid UTF-8 string for argument " "'%s'." msgstr "" -#: libpika/pikaproceduredialog.c:275 +#: libpika/pikaproceduredialog.c:294 libpika/pikaproceduredialog.c:567 #: libpikawidgets/pikacolorprofilechooserdialog.c:184 msgid "_Open" msgstr "_გახსნა" -#: 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 "_დიახ" -#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:556 +#: libpika/pikaproceduredialog.c:306 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "_საწყისი მნიშვნელობებზე დაბრუნება" -#: libpika/pikaproceduredialog.c:339 +#: libpika/pikaproceduredialog.c:359 msgid "_Load Saved Settings" msgstr "შენახული პარამეტრების წაკითხვა" -#: libpika/pikaproceduredialog.c:340 +#: libpika/pikaproceduredialog.c:360 msgid "Load settings saved with \"Save Settings\" button" msgstr "" -#: libpika/pikaproceduredialog.c:352 +#: libpika/pikaproceduredialog.c:372 msgid "_Save Settings" msgstr "პარამეტრების შენახვა" -#: libpika/pikaproceduredialog.c:353 +#: libpika/pikaproceduredialog.c:373 msgid "Store current settings for later reuse" msgstr "" -#: libpika/pikaproceduredialog.c:734 +#: libpika/pikaproceduredialog.c:784 msgid "Brush Chooser" msgstr "ფუნჯის ამრჩევი" -#: libpika/pikaproceduredialog.c:738 +#: libpika/pikaproceduredialog.c:788 msgid "Font Chooser" msgstr "ფონტის ამრჩევი" -#: libpika/pikaproceduredialog.c:742 +#: libpika/pikaproceduredialog.c:792 msgid "Gradient Chooser" msgstr "გრადიენტის ამრჩევი" -#: libpika/pikaproceduredialog.c:746 +#: libpika/pikaproceduredialog.c:796 msgid "Palette Chooser" msgstr "პალიტრის ამრჩევი" -#: libpika/pikaproceduredialog.c:750 +#: libpika/pikaproceduredialog.c:800 msgid "Pattern Chooser" msgstr "შაბლონის ამრჩევი" -#: libpika/pikaproceduredialog.c:2128 +#: libpika/pikaproceduredialog.c:2492 msgid "Reset to _Initial Values" msgstr "საწყის მნიშვნელობებზე დაბრუნება" -#: libpika/pikaproceduredialog.c:2137 +#: libpika/pikaproceduredialog.c:2501 msgid "Reset to _Factory Defaults" msgstr "ქარხნულ _პარამეტრებზე დაბრუნება" @@ -468,59 +482,74 @@ msgstr "თარიღი:" msgid "Copyright:" msgstr "უფლებები:" -#: libpika/pikasaveprocedure.c:408 +#: libpika/pikapropwidgets.c:191 +#, c-format +msgid "Choose layer: %s" +msgstr "" + +#: libpika/pikapropwidgets.c:193 +#, c-format +msgid "Choose channel: %s" +msgstr "აირჩიეთ არხი: %s" + +#: libpika/pikapropwidgets.c:195 +#, c-format +msgid "Choose drawable: %s" +msgstr "" + +#: libpika/pikasaveprocedure.c:460 msgid "Save _Exif" msgstr "_Exif-ის შენახვა" -#: libpika/pikasaveprocedure.c:409 +#: libpika/pikasaveprocedure.c:461 msgid "Save Exif (Exchangeable image file format) metadata" msgstr "" -#: libpika/pikasaveprocedure.c:414 +#: libpika/pikasaveprocedure.c:466 msgid "Save _IPTC" msgstr "_IPTC-ის შენახვა" -#: libpika/pikasaveprocedure.c:415 +#: libpika/pikasaveprocedure.c:467 msgid "Save IPTC (International Press Telecommunications Council) metadata" msgstr "" -#: libpika/pikasaveprocedure.c:420 +#: libpika/pikasaveprocedure.c:472 msgid "Save _XMP" msgstr "_XMP-ის შენახვა" -#: libpika/pikasaveprocedure.c:421 +#: libpika/pikasaveprocedure.c:473 msgid "Save XMP (Extensible Metadata Platform) metadata" msgstr "" -#: libpika/pikasaveprocedure.c:426 +#: libpika/pikasaveprocedure.c:478 msgid "Save color _profile" msgstr "ფერის პროფილის _შენახვა" -#: libpika/pikasaveprocedure.c:427 +#: libpika/pikasaveprocedure.c:479 msgid "Save the ICC color profile as metadata" msgstr "" -#: libpika/pikasaveprocedure.c:432 +#: libpika/pikasaveprocedure.c:484 msgid "Save _thumbnail" msgstr "მინიატურის _შენახვა" -#: libpika/pikasaveprocedure.c:433 +#: libpika/pikasaveprocedure.c:485 msgid "Save a smaller representation of the image as metadata" msgstr "" -#: libpika/pikasaveprocedure.c:439 +#: libpika/pikasaveprocedure.c:491 msgid "Save c_omment" msgstr "_კომენტარის შენახვა" -#: libpika/pikasaveprocedure.c:440 +#: libpika/pikasaveprocedure.c:492 msgid "Save a comment as metadata" msgstr "" -#: libpika/pikasaveprocedure.c:444 +#: libpika/pikasaveprocedure.c:496 msgid "Comment" msgstr "კომენტარი" -#: libpika/pikasaveprocedure.c:445 +#: libpika/pikasaveprocedure.c:497 msgid "Image comment" msgstr "გამოსახულების კომენტარი" @@ -1879,28 +1908,28 @@ msgstr "" msgid "Color profile '%s' is not for CMYK color space." msgstr "" -#: 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 "ტოკენის (%s) მნიშვნელობა სწორ UTF-8 ტიპის სტრიქონს არ წარმოადგენს" #. 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 "" -#: libpikaconfig/pikaconfig-deserialize.c:600 +#: libpikaconfig/pikaconfig-deserialize.c:607 #, c-format msgid "invalid value '%s' for token %s" msgstr "" -#: libpikaconfig/pikaconfig-deserialize.c:615 +#: libpikaconfig/pikaconfig-deserialize.c:622 #, c-format msgid "invalid value '%ld' for token %s" msgstr "" -#: libpikaconfig/pikaconfig-deserialize.c:684 +#: libpikaconfig/pikaconfig-deserialize.c:691 #, c-format msgid "while parsing token '%s': %s" msgstr "" @@ -2095,7 +2124,7 @@ msgstr "ძველი:" msgid "HTML _notation:" msgstr "HTML ნოტაცია:" -#: libpikawidgets/pikadialog.c:177 +#: libpikawidgets/pikadialog.c:181 msgid "_Help" msgstr "_დახმარება" @@ -2229,6 +2258,8 @@ msgid "" "Click the eyedropper, then click a color anywhere on your screen to select " "that color." msgstr "" +"დააწკაპუნეთ პიპეტზე, შემდეგ კი დააწკაპუნეთ ნებისმიერ ადგილას ეკრანზე, რათა " +"ის ფერი აირჩიოთ." #. toggle button to (de)activate the instant preview #: libpikawidgets/pikapreview.c:288 @@ -2251,7 +2282,7 @@ msgstr "" msgid "Custom Checks Color 2" msgstr "" -#: 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-libpika/sl.po b/po-libpika/sl.po index b75abdc..e59fe30 100644 --- a/po-libpika/sl.po +++ b/po-libpika/sl.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Pika - libpika\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-08-26 14:00+0000\n" -"PO-Revision-Date: 2023-08-27 07:24+0200\n" +"POT-Creation-Date: 2023-10-02 00:02+0000\n" +"PO-Revision-Date: 2023-10-02 16:46+0200\n" "Last-Translator: Martin Srebotnjak \n" "Language-Team: Martin Srebotnjak \n" "Language: sl\n" @@ -23,10 +23,14 @@ msgstr "" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Generator: Poedit 2.2.1\n" -#: libpika/pikabrushselectbutton.c:130 libpika/pikapatternselectbutton.c:142 +#: libpika/pikabrushchooser.c:134 libpika/pikapatternchooser.c:129 msgid "_Browse..." msgstr "Pre_brskaj ..." +#: libpika/pikadrawablechooser.c:238 +msgid "Browse..." +msgstr "Prebrskaj ..." + #: libpika/pikaexport.c:332 libpika/pikaexport.c:368 #, c-format msgid "%s plug-in can't handle layers" @@ -162,7 +166,7 @@ msgid "Confirm Save" msgstr "Potrditev shranjevanja" #: 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 @@ -184,7 +188,7 @@ msgid "_Ignore" msgstr "_Prezri" #: libpika/pikaexport.c:629 libpika/pikaexport.c:1200 -#: libpika/pikaproceduredialog.c:277 +#: libpika/pikaproceduredialog.c:296 libpika/pikaproceduredialog.c:569 msgid "_Export" msgstr "_Izvozi" @@ -223,12 +227,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 "Izvozi sliko kot %s" -#: libpika/pikaimagemetadata.c:284 +#: libpika/pikaimagemetadata.c:283 msgid "Background" msgstr "Ozadje" @@ -236,6 +240,18 @@ msgstr "Ozadje" 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 "" +"Ta vstavek za nalaganje datotek je vrnil stanje SUCCESS (uspešno) brez " +"slike. To je napaka v kodi vstavka. Obrnite se na razvijalca vstavka." + +#: libpika/pikaparamspecs-desc.c:54 +msgid "Allowed values:" +msgstr "Dovoljene vrednosti:" + #. procedure executed successfully #: libpika/pikapdb.c:552 msgid "success" @@ -348,12 +364,12 @@ msgstr[1] "%d procedura se ujema z vašim povpraševanjem" msgstr[2] "%d proceduri se ujemata z vašim povpraševanjem" msgstr[3] "%d procedure se ujemajo z vašim povpraševanjem" -#: libpika/pikaprocedure.c:1924 +#: libpika/pikaprocedure.c:1959 #, c-format msgid "Procedure '%s' returned no return values" msgstr "Procedura »%s« ni vrnila nobenih vrednosti" -#: 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 +378,7 @@ msgstr "" "Procedura »%s« je vrnila napačno vrsto vrnjene vrednosti »%s« (#%d). " "Pričakovana vrednost %s, prejeta %s." -#: libpika/pikaprocedure.c:2027 +#: libpika/pikaprocedure.c:2062 #, c-format msgid "" "Procedure '%s' has been called with a wrong value type for argument '%s' (#" @@ -371,7 +387,7 @@ msgstr "" "Procedura »%s« je bila priklicana z napačno vrsto vrednosti argumenta »%s« (#" "%d). Pričakovano %s, prejeto %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 +396,7 @@ msgstr "" "Procedura »%s« je vrnila »%s« kot vrnjeno vrednost »%s« (#%d, vrsta %s). Ta " "vrednost je izven dovoljenega obsega." -#: 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,12 +405,12 @@ msgstr "" "Klic procedure »%s« ima vrednost »%s« za argument »%s« (#%d, vrsta %s). Ta " "vrednost je zunaj dovoljenega obsega." -#: libpika/pikaprocedure.c:2120 +#: libpika/pikaprocedure.c:2155 #, c-format msgid "Procedure '%s' returned an invalid UTF-8 string for argument '%s'." msgstr "Procedura »%s« je vrnila neveljaven niz UTF-8 za argument »%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 " @@ -402,63 +418,63 @@ msgid "" msgstr "" "Procedura »%s« je bila klicana z neveljavnim nizom UTF-8 za argument »%s«." -#: libpika/pikaproceduredialog.c:275 +#: libpika/pikaproceduredialog.c:294 libpika/pikaproceduredialog.c:567 #: libpikawidgets/pikacolorprofilechooserdialog.c:184 msgid "_Open" msgstr "_Odpri" -#: 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 "V _redu" -#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:556 +#: libpika/pikaproceduredialog.c:306 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "_Ponastavi" -#: libpika/pikaproceduredialog.c:339 +#: libpika/pikaproceduredialog.c:359 msgid "_Load Saved Settings" msgstr "_Naloži shranjene nastavitve" -#: libpika/pikaproceduredialog.c:340 +#: libpika/pikaproceduredialog.c:360 msgid "Load settings saved with \"Save Settings\" button" msgstr "Naloži nastavitve, shranjene s funkcijo Shrani nastavitve" -#: libpika/pikaproceduredialog.c:352 +#: libpika/pikaproceduredialog.c:372 msgid "_Save Settings" msgstr "_Shrani nastavitve" -#: libpika/pikaproceduredialog.c:353 +#: libpika/pikaproceduredialog.c:373 msgid "Store current settings for later reuse" msgstr "Shrani trenutne nastavitve za kasnejšo rabo" -#: libpika/pikaproceduredialog.c:734 +#: libpika/pikaproceduredialog.c:784 msgid "Brush Chooser" msgstr "Izbirnik čopičev" -#: libpika/pikaproceduredialog.c:738 +#: libpika/pikaproceduredialog.c:788 msgid "Font Chooser" msgstr "Izbirnik pisav" -#: libpika/pikaproceduredialog.c:742 +#: libpika/pikaproceduredialog.c:792 msgid "Gradient Chooser" msgstr "Izbirnik prelivov" -#: libpika/pikaproceduredialog.c:746 +#: libpika/pikaproceduredialog.c:796 msgid "Palette Chooser" msgstr "Izbirnik palet" -#: libpika/pikaproceduredialog.c:750 +#: libpika/pikaproceduredialog.c:800 msgid "Pattern Chooser" msgstr "Izbirnik vzorcev" -#: libpika/pikaproceduredialog.c:2128 +#: libpika/pikaproceduredialog.c:2492 msgid "Reset to _Initial Values" msgstr "Ponastavi na _začetne vrednosti" -#: libpika/pikaproceduredialog.c:2137 +#: libpika/pikaproceduredialog.c:2501 msgid "Reset to _Factory Defaults" msgstr "Ponastavi na _tovarniške vrednosti" @@ -498,60 +514,75 @@ msgstr "Datum:" msgid "Copyright:" msgstr "Nosilec avtorskih pravic:" -#: libpika/pikasaveprocedure.c:408 +#: libpika/pikapropwidgets.c:191 +#, c-format +msgid "Choose layer: %s" +msgstr "Izberi plast: %s" + +#: libpika/pikapropwidgets.c:193 +#, c-format +msgid "Choose channel: %s" +msgstr "Izberi kanal: %s" + +#: libpika/pikapropwidgets.c:195 +#, c-format +msgid "Choose drawable: %s" +msgstr "Izberi risani predmet: %s" + +#: libpika/pikasaveprocedure.c:460 msgid "Save _Exif" msgstr "Shrani _Exif" -#: libpika/pikasaveprocedure.c:409 +#: libpika/pikasaveprocedure.c:461 msgid "Save Exif (Exchangeable image file format) metadata" msgstr "Shranite metapodatke Exif (zapis Exchangeable image file)" -#: libpika/pikasaveprocedure.c:414 +#: libpika/pikasaveprocedure.c:466 msgid "Save _IPTC" msgstr "Shrani _IPTC" -#: libpika/pikasaveprocedure.c:415 +#: libpika/pikasaveprocedure.c:467 msgid "Save IPTC (International Press Telecommunications Council) metadata" msgstr "" "Shranite metapodatke IPTC (International Press Telecommunications Council)" -#: libpika/pikasaveprocedure.c:420 +#: libpika/pikasaveprocedure.c:472 msgid "Save _XMP" msgstr "Shrani _XMP" -#: libpika/pikasaveprocedure.c:421 +#: libpika/pikasaveprocedure.c:473 msgid "Save XMP (Extensible Metadata Platform) metadata" msgstr "Shranite metapodatke XMP (Extensible Metadata Platform)" -#: libpika/pikasaveprocedure.c:426 +#: libpika/pikasaveprocedure.c:478 msgid "Save color _profile" msgstr "Shrani barvni _profil" -#: libpika/pikasaveprocedure.c:427 +#: libpika/pikasaveprocedure.c:479 msgid "Save the ICC color profile as metadata" msgstr "Shranite barvni profil slike ICC kot metapodatke" -#: libpika/pikasaveprocedure.c:432 +#: libpika/pikasaveprocedure.c:484 msgid "Save _thumbnail" msgstr "Shrani _ogledno sliico" -#: libpika/pikasaveprocedure.c:433 +#: libpika/pikasaveprocedure.c:485 msgid "Save a smaller representation of the image as metadata" msgstr "Shranite manjšo inačico slike kot metapodatke" -#: libpika/pikasaveprocedure.c:439 +#: libpika/pikasaveprocedure.c:491 msgid "Save c_omment" msgstr "Shrani k_omentar" -#: libpika/pikasaveprocedure.c:440 +#: libpika/pikasaveprocedure.c:492 msgid "Save a comment as metadata" msgstr "Shrani komentar kot metapodatke" -#: libpika/pikasaveprocedure.c:444 +#: libpika/pikasaveprocedure.c:496 msgid "Comment" msgstr "Komentar" -#: libpika/pikasaveprocedure.c:445 +#: libpika/pikasaveprocedure.c:497 msgid "Image comment" msgstr "Komentar slike" @@ -1939,30 +1970,30 @@ msgstr "Barvni profil ‘%s’ ni za sivinski barvni prostor." msgid "Color profile '%s' is not for CMYK color space." msgstr "Barvni profil ‘%s’ ni za barvni prostor CMYK." -#: 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 "vrednost za žeton %s ni veljaven niz UTF-8" #. 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 "" "za logični žeton %s je pričakovana vrednost »yes« ali »no«, vrnjena vrednost " "pa je »%s«" -#: libpikaconfig/pikaconfig-deserialize.c:600 +#: libpikaconfig/pikaconfig-deserialize.c:607 #, c-format msgid "invalid value '%s' for token %s" msgstr "neveljavna vrednost »%s« za žeton %s" -#: libpikaconfig/pikaconfig-deserialize.c:615 +#: libpikaconfig/pikaconfig-deserialize.c:622 #, c-format msgid "invalid value '%ld' for token %s" msgstr "neveljavna vrednost »%ld« za žeton %s" -#: libpikaconfig/pikaconfig-deserialize.c:684 +#: libpikaconfig/pikaconfig-deserialize.c:691 #, c-format msgid "while parsing token '%s': %s" msgstr "pri razčlenjevanju žetona »%s«: %s" @@ -2163,7 +2194,7 @@ msgstr "Staro:" msgid "HTML _notation:" msgstr "Zapis _HTML:" -#: libpikawidgets/pikadialog.c:177 +#: libpikawidgets/pikadialog.c:181 msgid "_Help" msgstr "Po_moč" @@ -2324,7 +2355,7 @@ msgstr "Barva 1 šahovnice po meri" msgid "Custom Checks Color 2" msgstr "Barva 2 šahovnice po meri" -#: 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-libpika/sv.po b/po-libpika/sv.po index ceb164d..4b99323 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-07-15 14:41+0000\n" -"PO-Revision-Date: 2023-07-15 13:57+0200\n" +"POT-Creation-Date: 2023-08-26 19:07+0000\n" +"PO-Revision-Date: 2023-09-27 21:27+0200\n" "Last-Translator: Anders Jonsson \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -167,7 +167,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:571 +#: libpika/pikaproceduredialog.c:305 libpikawidgets/pikacolorbutton.c:557 #: libpikawidgets/pikacolorprofilechooserdialog.c:173 #: libpikawidgets/pikacolorprofilechooserdialog.c:183 #: libpikawidgets/pikafileentry.c:466 libpikawidgets/pikaquerybox.c:274 @@ -348,12 +348,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:1925 +#: libpika/pikaprocedure.c:1924 #, c-format msgid "Procedure '%s' returned no return values" msgstr "Proceduren ”%s” returnerade inga svarsvärden" -#: libpika/pikaprocedure.c:2016 +#: libpika/pikaprocedure.c:2015 #, c-format msgid "" "Procedure '%s' returned a wrong value type for return value '%s' (#%d). " @@ -362,7 +362,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:2028 +#: libpika/pikaprocedure.c:2027 #, c-format msgid "" "Procedure '%s' has been called with a wrong value type for argument " @@ -371,7 +371,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:2063 +#: libpika/pikaprocedure.c:2062 #, c-format msgid "" "Procedure '%s' returned '%s' as return value '%s' (#%d, type %s). This value " @@ -380,7 +380,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:2077 +#: libpika/pikaprocedure.c:2076 #, c-format msgid "" "Procedure '%s' has been called with value '%s' for argument '%s' (#%d, type " @@ -389,13 +389,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:2121 +#: libpika/pikaprocedure.c:2120 #, 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:2131 +#: libpika/pikaprocedure.c:2130 #, c-format msgid "" "Procedure '%s' has been called with an invalid UTF-8 string for argument " @@ -408,14 +408,14 @@ msgstr "" msgid "_Open" msgstr "_Öppna" -#: libpika/pikaproceduredialog.c:279 libpikawidgets/pikacolorbutton.c:572 +#: 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 msgid "_OK" msgstr "_OK" -#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:570 +#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "_Återställ" @@ -499,6 +499,62 @@ msgstr "Datum:" msgid "Copyright:" msgstr "Copyright:" +#: libpika/pikasaveprocedure.c:408 +msgid "Save _Exif" +msgstr "Spara _Exif" + +#: libpika/pikasaveprocedure.c:409 +msgid "Save Exif (Exchangeable image file format) metadata" +msgstr "Spara Exif-metadata (Exchangeable image file format)" + +#: libpika/pikasaveprocedure.c:414 +msgid "Save _IPTC" +msgstr "Spara _IPTC" + +#: libpika/pikasaveprocedure.c:415 +msgid "Save IPTC (International Press Telecommunications Council) metadata" +msgstr "Spara IPTC-metadata (International Press Telecommunications Council)" + +#: libpika/pikasaveprocedure.c:420 +msgid "Save _XMP" +msgstr "Spara _XMP" + +#: libpika/pikasaveprocedure.c:421 +msgid "Save XMP (Extensible Metadata Platform) metadata" +msgstr "Spara XMP-metadata (Extensible Metadata Platform)" + +#: libpika/pikasaveprocedure.c:426 +msgid "Save color _profile" +msgstr "Spara färg_profil" + +#: libpika/pikasaveprocedure.c:427 +msgid "Save the ICC color profile as metadata" +msgstr "Spara ICC-färgprofilen som metadata" + +#: libpika/pikasaveprocedure.c:432 +msgid "Save _thumbnail" +msgstr "Spara _miniatyrbild" + +#: libpika/pikasaveprocedure.c:433 +msgid "Save a smaller representation of the image as metadata" +msgstr "Spara en mindre representation av bilden som metadata" + +#: libpika/pikasaveprocedure.c:439 +msgid "Save c_omment" +msgstr "Spara k_ommentar" + +#: libpika/pikasaveprocedure.c:440 +msgid "Save a comment as metadata" +msgstr "Spara en kommentar som metadata" + +#: libpika/pikasaveprocedure.c:444 +msgid "Comment" +msgstr "Kommentar" + +#: libpika/pikasaveprocedure.c:445 +msgid "Image comment" +msgstr "Bildkommentar" + #: libpika/pikasaveproceduredialog.c:166 msgid "Metadata" msgstr "Metadata" @@ -1576,32 +1632,32 @@ msgstr "Tolkning av IPTC-data misslyckades." msgid "Parsing XMP data failed." msgstr "Misslyckades med tolkning av XMP-data." -#: libpikabase/pikautils.c:219 libpikabase/pikautils.c:224 +#: libpikabase/pikautils.c:220 libpikabase/pikautils.c:225 msgid "(invalid UTF-8 string)" msgstr "(ogiltig UTF-8-sträng)" -#: libpikabase/pikautils.c:394 +#: libpikabase/pikautils.c:395 msgid "File path is NULL" msgstr "Filsökväg är NULL" -#: libpikabase/pikautils.c:402 +#: libpikabase/pikautils.c:403 msgid "Error converting UTF-8 filename to wide char" msgstr "Fel vid konvertering av UTF-8-filnamn till breda tecken" -#: libpikabase/pikautils.c:410 +#: libpikabase/pikautils.c:411 msgid "ILCreateFromPath() failed" msgstr "ILCreateFromPath() misslyckades" -#: libpikabase/pikautils.c:449 +#: libpikabase/pikautils.c:450 #, c-format msgid "Cannot convert '%s' into a valid NSURL." msgstr "Kan inte konvertera ”%s” till en giltig NSURL." -#: libpikabase/pikautils.c:477 +#: libpikabase/pikautils.c:478 msgid "Connecting to org.freedesktop.FileManager1 failed: " msgstr "Misslyckades med att ansluta till org.freedesktop.FileManager1: " -#: libpikabase/pikautils.c:501 +#: libpikabase/pikautils.c:502 msgid "Calling ShowItems failed: " msgstr "Misslyckades med att anropa ShowItems: " @@ -1990,7 +2046,7 @@ msgid "" "Thumbnails will be stored in the folder for temporary files (%s) instead." msgstr "" "Kan inte fastställa en giltig katalog för miniatyrbilder.\n" -"Miniatyrbilder kommer istället att lagras i mappen för temporärfiler (%s)." +"Miniatyrbilder kommer i stället att lagras i mappen för temporärfiler (%s)." #: libpikathumb/pikathumb-utils.c:299 libpikathumb/pikathumb-utils.c:367 #, c-format @@ -2010,6 +2066,22 @@ msgstr "Kunde inte skapa miniatyrbild för %s: %s" msgid "_Search:" msgstr "_Sök:" +#: libpikawidgets/pikacolorbutton.c:380 +msgid "_Foreground Color" +msgstr "_Förgrundsfärg" + +#: libpikawidgets/pikacolorbutton.c:381 +msgid "_Background Color" +msgstr "_Bakgrundsfärg" + +#: libpikawidgets/pikacolorbutton.c:386 +msgid "Blac_k" +msgstr "_Svart" + +#: libpikawidgets/pikacolorbutton.c:387 +msgid "_White" +msgstr "_Vit" + #: libpikawidgets/pikacolorhexentry.c:134 msgid "" "Hexadecimal color notation as used in HTML and CSS. This entry also accepts " @@ -2148,6 +2220,22 @@ msgstr "mebibyte" msgid "Gibibyte" msgstr "gibibyte" +#: libpikawidgets/pikapageselector.c:185 +msgid "N Pages" +msgstr "N sidor" + +#: libpikawidgets/pikapageselector.c:186 +msgid "The number of pages to open" +msgstr "Antalet sidor att öppna" + +#: libpikawidgets/pikapageselector.c:199 +msgid "Target" +msgstr "Mål" + +#: libpikawidgets/pikapageselector.c:200 +msgid "the target to open to" +msgstr "målet att öppna till" + #. Count label #: libpikawidgets/pikapageselector.c:283 libpikawidgets/pikapageselector.c:1079 msgid "Nothing selected" @@ -2848,75 +2936,78 @@ msgstr "Ändring före transform i stopp" 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 "Klippvarningsfärgvisningsfilter" -#: modules/display-filter-clip-warning.c:158 +#: modules/display-filter-clip-warning.c:161 msgid "Show shadows" msgstr "Visa skuggor" -#: modules/display-filter-clip-warning.c:159 +#: modules/display-filter-clip-warning.c:162 msgid "Show warning for pixels with a negative component" msgstr "Visa varning för bildpunkter med en negativ komponent" -#: modules/display-filter-clip-warning.c:165 +#: modules/display-filter-clip-warning.c:168 msgid "Shadows color" msgstr "Skuggfärg" -#: modules/display-filter-clip-warning.c:166 +#: modules/display-filter-clip-warning.c:169 msgid "Shadows warning color" msgstr "Varningsfärg för skuggor" -#: modules/display-filter-clip-warning.c:178 +#: modules/display-filter-clip-warning.c:181 msgid "Show highlights" msgstr "Visa högdagrar" -#: 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 "Visa varning för bildpunkter med en komponent som är större än ett" -#: modules/display-filter-clip-warning.c:185 +#: modules/display-filter-clip-warning.c:188 msgid "Highlights color" msgstr "Högdagerfärg" -#: modules/display-filter-clip-warning.c:186 +#: modules/display-filter-clip-warning.c:189 msgid "Highlights warning color" msgstr "Varningsfärg för högdagrar" -#: modules/display-filter-clip-warning.c:198 +#: modules/display-filter-clip-warning.c:201 msgid "Show bogus" msgstr "Visa felaktiga" -#: 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 "Visa varning för bildpunkter med en komponent som är oändlig eller NaN" -#: modules/display-filter-clip-warning.c:205 +#: modules/display-filter-clip-warning.c:208 msgid "Bogus color" msgstr "Felaktig färg" -#: modules/display-filter-clip-warning.c:206 +#: modules/display-filter-clip-warning.c:209 msgid "Bogus warning color" msgstr "Varningsfärg för felaktigheter" -#: modules/display-filter-clip-warning.c:218 +#: modules/display-filter-clip-warning.c:221 msgid "Include alpha component" msgstr "Inkludera alfakomponent" -#: modules/display-filter-clip-warning.c:219 +#: modules/display-filter-clip-warning.c:222 msgid "Include alpha component in the warning" msgstr "Inkludera alfakomponent i varningen" -#: modules/display-filter-clip-warning.c:225 +#: modules/display-filter-clip-warning.c:228 msgid "Include transparent pixels" msgstr "Inkludera transparenta bildpunkter" -#: modules/display-filter-clip-warning.c:226 +#: modules/display-filter-clip-warning.c:229 msgid "Include fully transparent pixels in the warning" msgstr "Inkludera helt transparenta bildpunkter i varningen" -#: modules/display-filter-clip-warning.c:230 +#: modules/display-filter-clip-warning.c:233 msgid "Clip Warning" msgstr "Klippvarning" @@ -2969,18 +3060,6 @@ msgstr "Kontrastcykler" msgid "Contrast" msgstr "Kontrast" -#~ msgid "_Foreground Color" -#~ msgstr "_Förgrundsfärg" - -#~ msgid "_Background Color" -#~ msgstr "_Bakgrundsfärg" - -#~ msgid "Blac_k" -#~ msgstr "_Svart" - -#~ msgid "_White" -#~ msgstr "_Vit" - #~ msgid "Brush Selection" #~ msgstr "Penselval" diff --git a/po-libpika/tr.po b/po-libpika/tr.po index 850ea3d..a612eda 100644 --- a/po-libpika/tr.po +++ b/po-libpika/tr.po @@ -15,8 +15,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-08-27 05:42+0000\n" -"PO-Revision-Date: 2023-08-27 11:13+0300\n" +"POT-Creation-Date: 2023-10-04 12:21+0000\n" +"PO-Revision-Date: 2023-10-14 13:04+0300\n" "Last-Translator: Sabri Ünal \n" "Language-Team: Türkçe \n" "Language: tr\n" @@ -24,15 +24,19 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.4\n" "X-Launchpad-Export-Date: 2010-10-09 17:28+0000\n" "X-POOTLE-MTIME: 1436650713.000000\n" "X-Poedit-SourceCharset: UTF-8\n" -#: libpika/pikabrushselectbutton.c:130 libpika/pikapatternselectbutton.c:142 +#: libpika/pikabrushchooser.c:134 libpika/pikapatternchooser.c:129 msgid "_Browse..." msgstr "_Gözat..." +#: libpika/pikadrawablechooser.c:238 +msgid "Browse..." +msgstr "Göz At..." + #: libpika/pikaexport.c:332 libpika/pikaexport.c:368 #, c-format msgid "%s plug-in can't handle layers" @@ -170,14 +174,14 @@ msgid "Confirm Save" msgstr "Kaydetmeyi Onayla" #: 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 #: libpikawidgets/pikaquerybox.c:337 libpikawidgets/pikaquerybox.c:403 #: libpikawidgets/pikaquerybox.c:479 msgid "_Cancel" -msgstr "_İptal" +msgstr "İ_ptal" #: libpika/pikaexport.c:547 msgid "C_onfirm" @@ -192,7 +196,7 @@ msgid "_Ignore" msgstr "_Yoksay" #: libpika/pikaexport.c:629 libpika/pikaexport.c:1200 -#: libpika/pikaproceduredialog.c:277 +#: libpika/pikaproceduredialog.c:296 libpika/pikaproceduredialog.c:569 msgid "_Export" msgstr "_Dışa Aktar" @@ -231,12 +235,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 "Görüntüyü %s Olarak Dışa Aktar" -#: libpika/pikaimagemetadata.c:284 +#: libpika/pikaimagemetadata.c:283 msgid "Background" msgstr "Artalan" @@ -244,6 +248,16 @@ msgstr "Artalan" 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 "" + +#: libpika/pikaparamspecs-desc.c:54 +msgid "Allowed values:" +msgstr "İzin verilen değerler:" + #. procedure executed successfully #: libpika/pikapdb.c:552 msgid "success" @@ -350,12 +364,12 @@ msgid "%d procedure matches your query" msgid_plural "%d procedures match your query" msgstr[0] "%d yordam sorgulamanız ile eşleşiyor" -#: libpika/pikaprocedure.c:1924 +#: libpika/pikaprocedure.c:1959 #, c-format msgid "Procedure '%s' returned no return values" msgstr "'%s' yordamı dönüş değeri döndürmedi" -#: libpika/pikaprocedure.c:2015 +#: libpika/pikaprocedure.c:2050 #, c-format msgid "" "Procedure '%s' returned a wrong value type for return value '%s' (#%d). " @@ -364,7 +378,7 @@ msgstr "" "'%s' yordamı, '%s' dönüş değeri için yanlış bir değer türünü döndürdü (#%d). " "%s istendi, %s alındı." -#: libpika/pikaprocedure.c:2027 +#: libpika/pikaprocedure.c:2062 #, c-format msgid "" "Procedure '%s' has been called with a wrong value type for argument " @@ -373,7 +387,7 @@ msgstr "" "'%s' yordamı, '%s' bağımsız değişkeni için yanlış bir değer türü ile " "çağrıldı (#%d). %s istendi, %s alındı." -#: libpika/pikaprocedure.c:2062 +#: libpika/pikaprocedure.c:2097 #, c-format msgid "" "Procedure '%s' returned '%s' as return value '%s' (#%d, type %s). This value " @@ -382,7 +396,7 @@ msgstr "" "'%s' yordamı, '%s' e, '%s' dönüş değeri olarak dönüştü (#%d, %s türü). Bu " "değer, istenenin dışındadır." -#: libpika/pikaprocedure.c:2076 +#: libpika/pikaprocedure.c:2111 #, c-format msgid "" "Procedure '%s' has been called with value '%s' for argument '%s' (#%d, type " @@ -391,13 +405,13 @@ msgstr "" "'%s' yordamı, '%s' ile, '%s' bağımsız değişkeni için çağrıldı (#%d,%s türü). " "Bu değer istenenin dışındadır." -#: libpika/pikaprocedure.c:2120 +#: libpika/pikaprocedure.c:2155 #, c-format msgid "Procedure '%s' returned an invalid UTF-8 string for argument '%s'." msgstr "" "'%s' yordamı, '%s' bağımsız değişkeni için geçersiz UTF-8 dizgesi döndürdü." -#: libpika/pikaprocedure.c:2130 +#: libpika/pikaprocedure.c:2165 #, c-format msgid "" "Procedure '%s' has been called with an invalid UTF-8 string for argument " @@ -406,63 +420,63 @@ msgstr "" "'%s' yordamı, '%s' bağımsız değişkeni için geçersiz UTF-8 dizgesiyle " "çağrıldı." -#: libpika/pikaproceduredialog.c:275 +#: libpika/pikaproceduredialog.c:294 libpika/pikaproceduredialog.c:567 #: libpikawidgets/pikacolorprofilechooserdialog.c:184 msgid "_Open" msgstr "_Aç" -#: 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 "_Tamam" -#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:556 +#: libpika/pikaproceduredialog.c:306 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "_Sıfırla" -#: libpika/pikaproceduredialog.c:339 +#: libpika/pikaproceduredialog.c:359 msgid "_Load Saved Settings" msgstr "Kaydedilmiş Ayarları _Yükle" -#: libpika/pikaproceduredialog.c:340 +#: libpika/pikaproceduredialog.c:360 msgid "Load settings saved with \"Save Settings\" button" msgstr "\"Ayarları Kaydet\" düğmesiyle kaydedilen ayarları yükle" -#: libpika/pikaproceduredialog.c:352 +#: libpika/pikaproceduredialog.c:372 msgid "_Save Settings" msgstr "Ayarları _Kaydet" -#: libpika/pikaproceduredialog.c:353 +#: libpika/pikaproceduredialog.c:373 msgid "Store current settings for later reuse" msgstr "Geçerli ayarları daha sonra yeniden kullanmak için depola" -#: libpika/pikaproceduredialog.c:734 +#: libpika/pikaproceduredialog.c:784 msgid "Brush Chooser" msgstr "Fırça Seçici" -#: libpika/pikaproceduredialog.c:738 +#: libpika/pikaproceduredialog.c:788 msgid "Font Chooser" msgstr "Yazı Tipi Seçici" -#: libpika/pikaproceduredialog.c:742 +#: libpika/pikaproceduredialog.c:792 msgid "Gradient Chooser" msgstr "Renk Geçişi Seçici" -#: libpika/pikaproceduredialog.c:746 +#: libpika/pikaproceduredialog.c:796 msgid "Palette Chooser" msgstr "Palet Seçici" -#: libpika/pikaproceduredialog.c:750 +#: libpika/pikaproceduredialog.c:800 msgid "Pattern Chooser" msgstr "Desen Seçici" -#: libpika/pikaproceduredialog.c:2128 +#: libpika/pikaproceduredialog.c:2492 msgid "Reset to _Initial Values" msgstr "_Başlangıç Değerlerine Sıfırla" -#: libpika/pikaproceduredialog.c:2137 +#: libpika/pikaproceduredialog.c:2501 msgid "Reset to _Factory Defaults" msgstr "_Fabrika Öntanımlılarına Sıfırla" @@ -502,60 +516,76 @@ msgstr "Tarih:" msgid "Copyright:" msgstr "Telif Hakkı:" -#: libpika/pikasaveprocedure.c:408 +#: libpika/pikapropwidgets.c:191 +#, c-format +msgid "Choose layer: %s" +msgstr "Katman seç: %s" + +#: libpika/pikapropwidgets.c:193 +#, c-format +#| msgid "Channel:" +msgid "Choose channel: %s" +msgstr "Kanal seç: %s" + +#: libpika/pikapropwidgets.c:195 +#, c-format +msgid "Choose drawable: %s" +msgstr "Çizilebilir seç: %s" + +#: libpika/pikasaveprocedure.c:460 msgid "Save _Exif" msgstr "_Exif Kaydet" -#: libpika/pikasaveprocedure.c:409 +#: libpika/pikasaveprocedure.c:461 msgid "Save Exif (Exchangeable image file format) metadata" msgstr "Exif (Exchangeable image file format) üst verilerini kaydet" -#: libpika/pikasaveprocedure.c:414 +#: libpika/pikasaveprocedure.c:466 msgid "Save _IPTC" msgstr "_IPTC Kaydet" -#: libpika/pikasaveprocedure.c:415 +#: libpika/pikasaveprocedure.c:467 msgid "Save IPTC (International Press Telecommunications Council) metadata" msgstr "" "IPTC (International Press Telecommunications Council) üst verilerini kaydet" -#: libpika/pikasaveprocedure.c:420 +#: libpika/pikasaveprocedure.c:472 msgid "Save _XMP" msgstr "_XMP Kaydet" -#: libpika/pikasaveprocedure.c:421 +#: libpika/pikasaveprocedure.c:473 msgid "Save XMP (Extensible Metadata Platform) metadata" msgstr "XMP (Extensible Metadata Platform) üst verilerini kaydet" -#: libpika/pikasaveprocedure.c:426 +#: libpika/pikasaveprocedure.c:478 msgid "Save color _profile" msgstr "Renk profilini _kaydet" -#: libpika/pikasaveprocedure.c:427 +#: libpika/pikasaveprocedure.c:479 msgid "Save the ICC color profile as metadata" msgstr "ICC renk profilini üst veri olarak kaydet" -#: libpika/pikasaveprocedure.c:432 +#: libpika/pikasaveprocedure.c:484 msgid "Save _thumbnail" msgstr "_Küçük resmi kaydet" -#: libpika/pikasaveprocedure.c:433 +#: libpika/pikasaveprocedure.c:485 msgid "Save a smaller representation of the image as metadata" msgstr "Görüntünün küçük bir sunumunu üst veri olarak kaydet" -#: libpika/pikasaveprocedure.c:439 +#: libpika/pikasaveprocedure.c:491 msgid "Save c_omment" msgstr "_Yorumu kaydet" -#: libpika/pikasaveprocedure.c:440 +#: libpika/pikasaveprocedure.c:492 msgid "Save a comment as metadata" msgstr "Yorumu üst veri olarak kaydet" -#: libpika/pikasaveprocedure.c:444 +#: libpika/pikasaveprocedure.c:496 msgid "Comment" msgstr "Yorum" -#: libpika/pikasaveprocedure.c:445 +#: libpika/pikasaveprocedure.c:497 msgid "Image comment" msgstr "Görüntü yorumu" @@ -1949,29 +1979,29 @@ msgstr "'%s' renk profili GRİ renk uzayı için değildir." msgid "Color profile '%s' is not for CMYK color space." msgstr "'%s' renk profili CMYK renk uzayı için değildir." -#: 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 "%s için alınan jeton geçerli bir UTF-8 dizgesi değil" #. 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 "" "%s boolean jetonu için beklenen değer 'yes' ya da 'no', alınan değer '%s'" -#: libpikaconfig/pikaconfig-deserialize.c:600 +#: libpikaconfig/pikaconfig-deserialize.c:607 #, c-format msgid "invalid value '%s' for token %s" msgstr "geçersiz değer '%s' (jeton %s)" -#: libpikaconfig/pikaconfig-deserialize.c:615 +#: libpikaconfig/pikaconfig-deserialize.c:622 #, c-format msgid "invalid value '%ld' for token %s" msgstr "geçersiz değer '%ld' (jeton %s)" -#: libpikaconfig/pikaconfig-deserialize.c:684 +#: libpikaconfig/pikaconfig-deserialize.c:691 #, c-format msgid "while parsing token '%s': %s" msgstr "'%s' jetonu ayrıştırılırken: '%s" @@ -2173,7 +2203,7 @@ msgstr "Eski:" msgid "HTML _notation:" msgstr "HTML _gösterimi:" -#: libpikawidgets/pikadialog.c:177 +#: libpikawidgets/pikadialog.c:181 msgid "_Help" msgstr "Ya_rdım" @@ -2338,7 +2368,7 @@ msgstr "Özel Denetimler Rengi 1" msgid "Custom Checks Color 2" msgstr "Özel Denetimler Rengi 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." @@ -3043,7 +3073,7 @@ msgstr "Eksik renk canlandırma filtresi (Brettel-Vienot-Mollon algoritması)" #: modules/display-filter-color-blind.c:253 msgid "Type" -msgstr "Tip" +msgstr "Tür" #: modules/display-filter-color-blind.c:254 msgid "Color vision deficiency type" diff --git a/po-libpika/uk.po b/po-libpika/uk.po index 0270b67..b968c4d 100644 --- a/po-libpika/uk.po +++ b/po-libpika/uk.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PIKA\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-08-26 14:00+0000\n" -"PO-Revision-Date: 2023-08-26 21:42+0300\n" +"POT-Creation-Date: 2023-10-02 00:02+0000\n" +"PO-Revision-Date: 2023-10-02 09:54+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -20,10 +20,15 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 20.12.0\n" -#: libpika/pikabrushselectbutton.c:130 libpika/pikapatternselectbutton.c:142 +#: libpika/pikabrushchooser.c:134 libpika/pikapatternchooser.c:129 msgid "_Browse..." msgstr "Ви_брати…" +#: libpika/pikadrawablechooser.c:238 +#| msgid "_Browse..." +msgid "Browse..." +msgstr "Вибрати…" + #: libpika/pikaexport.c:332 libpika/pikaexport.c:368 #, c-format msgid "%s plug-in can't handle layers" @@ -159,7 +164,7 @@ msgid "Confirm Save" msgstr "Підтвердження збереження" #: 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 @@ -181,7 +186,7 @@ msgid "_Ignore" msgstr "_Ігнорувати" #: libpika/pikaexport.c:629 libpika/pikaexport.c:1200 -#: libpika/pikaproceduredialog.c:277 +#: libpika/pikaproceduredialog.c:296 libpika/pikaproceduredialog.c:569 msgid "_Export" msgstr "_Експорт" @@ -220,12 +225,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 "Експортувати зображення як %s" -#: libpika/pikaimagemetadata.c:284 +#: libpika/pikaimagemetadata.c:283 msgid "Background" msgstr "Тло" @@ -233,6 +238,19 @@ msgstr "Тло" 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 "" +"Цей додаток завантаження файлів повернув повідомлення SUCCESS як стан без" +" зображення. Це вада у програмному коді додатка. Повідомте про неї" +" розробника додатка." + +#: libpika/pikaparamspecs-desc.c:54 +msgid "Allowed values:" +msgstr "Дозволені значення:" + #. procedure executed successfully #: libpika/pikapdb.c:552 msgid "success" @@ -343,12 +361,12 @@ msgstr[0] "%d процедура збігається із запитом" msgstr[1] "%d процедури збігають із запитом" msgstr[2] "%d процедур збігають із запитом" -#: libpika/pikaprocedure.c:1924 +#: libpika/pikaprocedure.c:1959 #, c-format msgid "Procedure '%s' returned no return values" msgstr "Процедура «%s» не повернула жодного значення" -#: libpika/pikaprocedure.c:2015 +#: libpika/pikaprocedure.c:2050 #, c-format msgid "" "Procedure '%s' returned a wrong value type for return value '%s' (#%d). " @@ -357,7 +375,7 @@ msgstr "" "Процедура «%s» повернула некоректний тип значення для значення результату " "«%s» (#%d). Очікувався %s, отримано %s." -#: libpika/pikaprocedure.c:2027 +#: libpika/pikaprocedure.c:2062 #, c-format msgid "" "Procedure '%s' has been called with a wrong value type for argument " @@ -366,7 +384,7 @@ msgstr "" "Процедура «%s» викликана з деяким значенням аргументу «%s» (#%d). " "Очікувалось %s, отримано %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 " @@ -375,7 +393,7 @@ msgstr "" "Процедура «%s» повернула «%s» як значення «%s» (#%d, тип %s). Значення " "знаходиться поза межами припустимого діапазону" -#: libpika/pikaprocedure.c:2076 +#: libpika/pikaprocedure.c:2111 #, c-format msgid "" "Procedure '%s' has been called with value '%s' for argument '%s' (#%d, type " @@ -384,12 +402,12 @@ msgstr "" "Процедура «%s» викликана із значенням «%s» аргументу «%s» (#%d, тип %s). " "Значення знаходиться поза межами допустимого діапазону." -#: libpika/pikaprocedure.c:2120 +#: libpika/pikaprocedure.c:2155 #, c-format msgid "Procedure '%s' returned an invalid UTF-8 string for argument '%s'." msgstr "Процедура «%s» повернула некоректний рядок UTF-8 для аргументу «%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 " @@ -397,66 +415,66 @@ msgid "" msgstr "" "Процедуру «%s» було викликано з некоректним рядком UTF-8 для аргументу «%s»." -#: libpika/pikaproceduredialog.c:275 +#: libpika/pikaproceduredialog.c:294 libpika/pikaproceduredialog.c:567 #: libpikawidgets/pikacolorprofilechooserdialog.c:184 msgid "_Open" msgstr "_Відкрити" -#: 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 "_Гаразд" -#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:556 +#: libpika/pikaproceduredialog.c:306 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "С_кинути" -#: libpika/pikaproceduredialog.c:339 +#: libpika/pikaproceduredialog.c:359 msgid "_Load Saved Settings" msgstr "З_авантажити збережені параметри" -#: libpika/pikaproceduredialog.c:340 +#: libpika/pikaproceduredialog.c:360 msgid "Load settings saved with \"Save Settings\" button" msgstr "" "Завантажити параметри, які було збережено за допомогою кнопки «Зберегти " "параметри»" -#: libpika/pikaproceduredialog.c:352 +#: libpika/pikaproceduredialog.c:372 msgid "_Save Settings" msgstr "З_берегти параметри" -#: libpika/pikaproceduredialog.c:353 +#: libpika/pikaproceduredialog.c:373 msgid "Store current settings for later reuse" msgstr "" "Зберегти поточні значення параметрів для подальшого повторного використання" -#: libpika/pikaproceduredialog.c:734 +#: libpika/pikaproceduredialog.c:784 msgid "Brush Chooser" msgstr "Вибір пензля" -#: libpika/pikaproceduredialog.c:738 +#: libpika/pikaproceduredialog.c:788 msgid "Font Chooser" msgstr "Вибір шрифту" -#: libpika/pikaproceduredialog.c:742 +#: libpika/pikaproceduredialog.c:792 msgid "Gradient Chooser" msgstr "Вибір градієнта" -#: libpika/pikaproceduredialog.c:746 +#: libpika/pikaproceduredialog.c:796 msgid "Palette Chooser" msgstr "Вибір палітри" -#: libpika/pikaproceduredialog.c:750 +#: libpika/pikaproceduredialog.c:800 msgid "Pattern Chooser" msgstr "Вибір текстури" -#: libpika/pikaproceduredialog.c:2128 +#: libpika/pikaproceduredialog.c:2492 msgid "Reset to _Initial Values" msgstr "Повернути до по_чаткових значень" -#: libpika/pikaproceduredialog.c:2137 +#: libpika/pikaproceduredialog.c:2501 msgid "Reset to _Factory Defaults" msgstr "Повернути до стандартних _початкових значень" @@ -496,63 +514,76 @@ msgstr "Дата:" msgid "Copyright:" msgstr "Авторські права:" -#: libpika/pikasaveprocedure.c:408 +#: libpika/pikapropwidgets.c:191 +#, c-format +msgid "Choose layer: %s" +msgstr "Вибір шару: %s" + +#: libpika/pikapropwidgets.c:193 +#, c-format +#| msgid "Channel:" +msgid "Choose channel: %s" +msgstr "Вибір каналу: %s" + +#: libpika/pikapropwidgets.c:195 +#, c-format +msgid "Choose drawable: %s" +msgstr "Вибір малюнка: %s" + +#: libpika/pikasaveprocedure.c:460 msgid "Save _Exif" msgstr "Зберегти _Exif" -#: libpika/pikasaveprocedure.c:409 +#: libpika/pikasaveprocedure.c:461 msgid "Save Exif (Exchangeable image file format) metadata" msgstr "Зберегти метадані Exif (Exchangeable image file format)" -#: libpika/pikasaveprocedure.c:414 +#: libpika/pikasaveprocedure.c:466 msgid "Save _IPTC" msgstr "Зберегти _IPTC" -#: libpika/pikasaveprocedure.c:415 +#: libpika/pikasaveprocedure.c:467 msgid "Save IPTC (International Press Telecommunications Council) metadata" msgstr "" "Зберегти метадані IPTC (International Press Telecommunications Council)" -#: libpika/pikasaveprocedure.c:420 +#: libpika/pikasaveprocedure.c:472 msgid "Save _XMP" msgstr "Зберегти дані _XMP" -#: libpika/pikasaveprocedure.c:421 +#: libpika/pikasaveprocedure.c:473 msgid "Save XMP (Extensible Metadata Platform) metadata" msgstr "Зберегти метадані XMP (Extensible Metadata Platform)" -#: libpika/pikasaveprocedure.c:426 -#| msgid "Monitor profile" +#: libpika/pikasaveprocedure.c:478 msgid "Save color _profile" msgstr "Зберегти _профіль кольорів" -#: libpika/pikasaveprocedure.c:427 +#: libpika/pikasaveprocedure.c:479 msgid "Save the ICC color profile as metadata" msgstr "Зберегти профіль кольорів ICC як метадані" -#: libpika/pikasaveprocedure.c:432 +#: libpika/pikasaveprocedure.c:484 msgid "Save _thumbnail" msgstr "Зберегти _ескіз" -#: libpika/pikasaveprocedure.c:433 +#: libpika/pikasaveprocedure.c:485 msgid "Save a smaller representation of the image as metadata" msgstr "Зберегти зменшену версію зображення як метадані" -#: libpika/pikasaveprocedure.c:439 +#: libpika/pikasaveprocedure.c:491 msgid "Save c_omment" msgstr "З_берегти коментар" -#: libpika/pikasaveprocedure.c:440 +#: libpika/pikasaveprocedure.c:492 msgid "Save a comment as metadata" msgstr "Зберегти коментар як метадані" -#: libpika/pikasaveprocedure.c:444 +#: libpika/pikasaveprocedure.c:496 msgid "Comment" msgstr "Коментар" -#: libpika/pikasaveprocedure.c:445 -#| msgctxt "icon-type" -#| msgid "Image file" +#: libpika/pikasaveprocedure.c:497 msgid "Image comment" msgstr "Коментар до зображення" @@ -1946,28 +1977,28 @@ msgstr "Колірний профіль '%s' не для колірного пр msgid "Color profile '%s' is not for CMYK color space." msgstr "Колірний профіль '%s' не для колірного простору CMYK." -#: 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 "значення для маркера %s не є коректним рядком UTF-8" #. 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' або 'no' для булевого маркера %s, отримано '%s'" -#: libpikaconfig/pikaconfig-deserialize.c:600 +#: libpikaconfig/pikaconfig-deserialize.c:607 #, c-format msgid "invalid value '%s' for token %s" msgstr "неправильне значення '%s' для маркера %s" -#: libpikaconfig/pikaconfig-deserialize.c:615 +#: libpikaconfig/pikaconfig-deserialize.c:622 #, c-format msgid "invalid value '%ld' for token %s" msgstr "неправильне значення '%ld' для маркера %s" -#: libpikaconfig/pikaconfig-deserialize.c:684 +#: libpikaconfig/pikaconfig-deserialize.c:691 #, c-format msgid "while parsing token '%s': %s" msgstr "при синтаксичному розборі маркера '%s': %s" @@ -2166,7 +2197,7 @@ msgstr "Старий:" msgid "HTML _notation:" msgstr "_Нотація HTML:" -#: libpikawidgets/pikadialog.c:177 +#: libpikawidgets/pikadialog.c:181 msgid "_Help" msgstr "_Довідка" @@ -2227,8 +2258,6 @@ msgid "Gibibyte" msgstr "Гібібайт" #: libpikawidgets/pikapageselector.c:185 -#| msgctxt "page-selector-target" -#| msgid "Images" msgid "N Pages" msgstr "N сторінок" @@ -2237,8 +2266,6 @@ msgid "The number of pages to open" msgstr "Кількість сторінок, які слід відкрити" #: libpikawidgets/pikapageselector.c:199 -#| msgctxt "check-size" -#| msgid "Large" msgid "Target" msgstr "Ціль" @@ -2330,7 +2357,7 @@ msgstr "Колір 1 нетипових клітинок" msgid "Custom Checks Color 2" msgstr "Колір 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-libpika/zh_CN.po b/po-libpika/zh_CN.po index efdad85..19b9584 100644 --- a/po-libpika/zh_CN.po +++ b/po-libpika/zh_CN.po @@ -12,21 +12,25 @@ msgid "" msgstr "" "Project-Id-Version: PIKA-master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-08-26 14:00+0000\n" -"PO-Revision-Date: 2023-08-26 14:16-0400\n" -"Last-Translator: Boyuan Yang <073plan@gmail.com>\n" +"POT-Creation-Date: 2023-10-02 00:02+0000\n" +"PO-Revision-Date: 2023-10-02 18:50+0800\n" +"Last-Translator: lumingzh \n" "Language-Team: Chinese - China \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.3.2\n" +"Plural-Forms: nplurals=1; plural=0\n" +"X-Generator: Gtranslator 45.1\n" -#: libpika/pikabrushselectbutton.c:130 libpika/pikapatternselectbutton.c:142 +#: libpika/pikabrushchooser.c:134 libpika/pikapatternchooser.c:129 msgid "_Browse..." msgstr "浏览(_B)…" +#: libpika/pikadrawablechooser.c:238 +msgid "Browse..." +msgstr "浏览…" + #: libpika/pikaexport.c:332 libpika/pikaexport.c:368 #, c-format msgid "%s plug-in can't handle layers" @@ -161,7 +165,7 @@ msgid "Confirm Save" msgstr "确认保存" #: 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 @@ -183,7 +187,7 @@ msgid "_Ignore" msgstr "忽略(_I)" #: libpika/pikaexport.c:629 libpika/pikaexport.c:1200 -#: libpika/pikaproceduredialog.c:277 +#: libpika/pikaproceduredialog.c:296 libpika/pikaproceduredialog.c:569 msgid "_Export" msgstr "导出(_E)" @@ -220,12 +224,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 "导出图像为 %s" -#: libpika/pikaimagemetadata.c:284 +#: libpika/pikaimagemetadata.c:283 msgid "Background" msgstr "背景" @@ -233,6 +237,18 @@ msgstr "背景" 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 "" +"该文件加载插件返回了不带图像的成功状态。这是插件代码中的缺陷。请联系插件开发" +"者。" + +#: libpika/pikaparamspecs-desc.c:54 +msgid "Allowed values:" +msgstr "允许的值:" + #. procedure executed successfully #: libpika/pikapdb.c:552 msgid "success" @@ -339,19 +355,19 @@ msgid "%d procedure matches your query" msgid_plural "%d procedures match your query" msgstr[0] "%d 个过程与您的查询相匹配" -#: libpika/pikaprocedure.c:1924 +#: libpika/pikaprocedure.c:1959 #, c-format msgid "Procedure '%s' returned no return values" msgstr "“%s”过程无返回值" -#: libpika/pikaprocedure.c:2015 +#: libpika/pikaprocedure.c:2050 #, c-format msgid "" "Procedure '%s' returned a wrong value type for return value '%s' (#%d). " "Expected %s, got %s." msgstr "“%s”过程返回了错误的值类型用于返回值“%s” (#%d) 。需要 %s,但获得 %s。" -#: libpika/pikaprocedure.c:2027 +#: libpika/pikaprocedure.c:2062 #, c-format msgid "" "Procedure '%s' has been called with a wrong value type for argument " @@ -359,89 +375,89 @@ msgid "" msgstr "" "调用“%s”过程使用了错误的值类型用于参数“%s” (#%d) 。需要 %s,但获得 %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 " "is out of range." msgstr "“%s”过程返回了“%s”作为返回值“%s”(#%d,%s 类型)。此值超出范围。" -#: libpika/pikaprocedure.c:2076 +#: libpika/pikaprocedure.c:2111 #, c-format msgid "" "Procedure '%s' has been called with value '%s' for argument '%s' (#%d, type " "%s). This value is out of range." msgstr "“%s”过程使用了“%s”值用于“%s”参数(#%d,%s 类型)。此值超出范围。" -#: libpika/pikaprocedure.c:2120 +#: libpika/pikaprocedure.c:2155 #, c-format msgid "Procedure '%s' returned an invalid UTF-8 string for argument '%s'." msgstr "“%s”过程为参数“%s”返回了一个无效的 UTF-8 字符串。" -#: libpika/pikaprocedure.c:2130 +#: libpika/pikaprocedure.c:2165 #, c-format msgid "" "Procedure '%s' has been called with an invalid UTF-8 string for argument " "'%s'." msgstr "调用“%s”过程时为参数“%s”使用了无效的 UTF-8 字符串。" -#: libpika/pikaproceduredialog.c:275 +#: libpika/pikaproceduredialog.c:294 libpika/pikaproceduredialog.c:567 #: libpikawidgets/pikacolorprofilechooserdialog.c:184 msgid "_Open" msgstr "打开(_O)" -#: 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 "确定(_O)" -#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:556 +#: libpika/pikaproceduredialog.c:306 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "重置(_R)" -#: libpika/pikaproceduredialog.c:339 +#: libpika/pikaproceduredialog.c:359 msgid "_Load Saved Settings" msgstr "加载保存的设置(_L)" -#: libpika/pikaproceduredialog.c:340 +#: libpika/pikaproceduredialog.c:360 msgid "Load settings saved with \"Save Settings\" button" msgstr "加载用“保存设置”按钮保存的设置" -#: libpika/pikaproceduredialog.c:352 +#: libpika/pikaproceduredialog.c:372 msgid "_Save Settings" msgstr "保存设置(_S)" -#: libpika/pikaproceduredialog.c:353 +#: libpika/pikaproceduredialog.c:373 msgid "Store current settings for later reuse" msgstr "为之后重用保存当前设置" -#: libpika/pikaproceduredialog.c:734 +#: libpika/pikaproceduredialog.c:784 msgid "Brush Chooser" msgstr "笔刷选择器" -#: libpika/pikaproceduredialog.c:738 +#: libpika/pikaproceduredialog.c:788 msgid "Font Chooser" msgstr "字体选择器" -#: libpika/pikaproceduredialog.c:742 +#: libpika/pikaproceduredialog.c:792 msgid "Gradient Chooser" msgstr "渐变选择器" -#: libpika/pikaproceduredialog.c:746 +#: libpika/pikaproceduredialog.c:796 msgid "Palette Chooser" msgstr "色板选择器" -#: libpika/pikaproceduredialog.c:750 +#: libpika/pikaproceduredialog.c:800 msgid "Pattern Chooser" msgstr "图案选择器" -#: libpika/pikaproceduredialog.c:2128 +#: libpika/pikaproceduredialog.c:2492 msgid "Reset to _Initial Values" msgstr "重置为初始值(_I)" -#: libpika/pikaproceduredialog.c:2137 +#: libpika/pikaproceduredialog.c:2501 msgid "Reset to _Factory Defaults" msgstr "重置为出厂默认值(_F)" @@ -481,59 +497,74 @@ msgstr "日期:" msgid "Copyright:" msgstr "版权:" -#: libpika/pikasaveprocedure.c:408 +#: libpika/pikapropwidgets.c:191 +#, c-format +msgid "Choose layer: %s" +msgstr "选择图层:%s" + +#: libpika/pikapropwidgets.c:193 +#, c-format +msgid "Choose channel: %s" +msgstr "选择通道:%s" + +#: libpika/pikapropwidgets.c:195 +#, c-format +msgid "Choose drawable: %s" +msgstr "选择可绘区:%s" + +#: libpika/pikasaveprocedure.c:460 msgid "Save _Exif" msgstr "保存 _Exif" -#: libpika/pikasaveprocedure.c:409 +#: libpika/pikasaveprocedure.c:461 msgid "Save Exif (Exchangeable image file format) metadata" msgstr "保存 Exif(可交换图像文件格式)元数据" -#: libpika/pikasaveprocedure.c:414 +#: libpika/pikasaveprocedure.c:466 msgid "Save _IPTC" msgstr "保存 _IPTC" -#: libpika/pikasaveprocedure.c:415 +#: libpika/pikasaveprocedure.c:467 msgid "Save IPTC (International Press Telecommunications Council) metadata" msgstr "保存 IPTC(国际出版电讯委员会)元数据" -#: libpika/pikasaveprocedure.c:420 +#: libpika/pikasaveprocedure.c:472 msgid "Save _XMP" msgstr "保存 _XMP" -#: libpika/pikasaveprocedure.c:421 +#: libpika/pikasaveprocedure.c:473 msgid "Save XMP (Extensible Metadata Platform) metadata" msgstr "保存 XMP(可扩展元数据平台)元数据" -#: libpika/pikasaveprocedure.c:426 +#: libpika/pikasaveprocedure.c:478 msgid "Save color _profile" msgstr "保存颜色配置信息(_P)" -#: libpika/pikasaveprocedure.c:427 +#: libpika/pikasaveprocedure.c:479 msgid "Save the ICC color profile as metadata" msgstr "保存 ICC 颜色配置信息为元数据" -#: libpika/pikasaveprocedure.c:432 +#: libpika/pikasaveprocedure.c:484 msgid "Save _thumbnail" msgstr "保存缩略图(_T)" -#: libpika/pikasaveprocedure.c:433 +#: libpika/pikasaveprocedure.c:485 msgid "Save a smaller representation of the image as metadata" msgstr "保存图像较小尺寸的形式为元数据" -#: libpika/pikasaveprocedure.c:439 +#: libpika/pikasaveprocedure.c:491 msgid "Save c_omment" msgstr "保存注释(_O)" -#: libpika/pikasaveprocedure.c:440 +#: libpika/pikasaveprocedure.c:492 msgid "Save a comment as metadata" msgstr "保存注释为元数据" -#: libpika/pikasaveprocedure.c:444 +#: libpika/pikasaveprocedure.c:496 msgid "Comment" msgstr "注释" -#: libpika/pikasaveprocedure.c:445 +#: libpika/pikasaveprocedure.c:497 msgid "Image comment" msgstr "图像注释" @@ -1905,28 +1936,28 @@ msgstr "颜色配置“%s”并非用于灰度颜色空间。" msgid "Color profile '%s' is not for CMYK color space." msgstr "颜色配置“%s”并非用于 CMYK 颜色空间。" -#: 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 "%s 的值不是有效的 UTF-8 字符串" #. 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 "期待布尔值 %s 为 “yes” 或 “no”,但得到 “%s”" -#: libpikaconfig/pikaconfig-deserialize.c:600 +#: libpikaconfig/pikaconfig-deserialize.c:607 #, c-format msgid "invalid value '%s' for token %s" msgstr "%2$s 的值 “%1$s” 无效" -#: libpikaconfig/pikaconfig-deserialize.c:615 +#: libpikaconfig/pikaconfig-deserialize.c:622 #, c-format msgid "invalid value '%ld' for token %s" msgstr "%2$s 的值 “%1$ld” 无效" -#: libpikaconfig/pikaconfig-deserialize.c:684 +#: libpikaconfig/pikaconfig-deserialize.c:691 #, c-format msgid "while parsing token '%s': %s" msgstr "解析 “%s” 时:%s" @@ -2123,7 +2154,7 @@ msgstr "旧的:" msgid "HTML _notation:" msgstr "HTML 标记(_N):" -#: libpikawidgets/pikadialog.c:177 +#: libpikawidgets/pikadialog.c:181 msgid "_Help" msgstr "帮助(_H)" @@ -2279,7 +2310,7 @@ msgstr "自定义方格颜色 1" msgid "Custom Checks Color 2" msgstr "自定义方格颜色 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/POTFILES.in b/po-plug-ins/POTFILES.in index a4a5c5a..6cc25cc 100644 --- a/po-plug-ins/POTFILES.in +++ b/po-plug-ins/POTFILES.in @@ -229,5 +229,4 @@ plug-ins/screenshot/screenshot-win32.c plug-ins/screenshot/screenshot-x11.c plug-ins/selection-to-path/pxl-outline.c plug-ins/selection-to-path/selection-to-path.c -plug-ins/selection-to-path/selection-to-path-dialog.c plug-ins/twain/twain.c diff --git a/po-plug-ins/be.po b/po-plug-ins/be.po index 9e81697..c1b2285 100644 --- a/po-plug-ins/be.po +++ b/po-plug-ins/be.po @@ -2,1398 +2,1092 @@ msgid "" msgstr "" "Project-Id-Version: pika 2.7\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2012-02-20 23:00+0300\n" -"PO-Revision-Date: 2012-02-20 23:00+0300\n" -"Last-Translator: Hleb Valoshka <375gnu@gmail.com>\n" +"POT-Creation-Date: 2023-09-28 14:56+0000\n" +"PO-Revision-Date: 2023-09-28 20:58+0300\n" +"Last-Translator: Yuras Shumovich \n" "Language-Team: Belarusian \n" "Language: be\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Poedit-Language: Belarusian\n" -"X-Poedit-Country: BELARUS\n" -"X-Poedit-SourceCharset: utf-8\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-Basepath: /tmp/pika-2.7.1/po\n" +"X-Generator: Poedit 3.3.2\n" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:118 -msgid "Original" -msgstr "Спачатны" +#: extensions/goat-exercises/goat-exercise-c.c:114 +msgid "Exercise in _C minor" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:136 -msgid "Rotated" -msgstr "Павернуты" +#: extensions/goat-exercises/goat-exercise-c.c:120 +msgid "Exercise a goat in the C language" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:154 -msgid "Continuous update" -msgstr "Пастаяннае абнаўленьне" +#: extensions/goat-exercises/goat-exercise-c.c:150 plug-ins/common/blinds.c:202 +#: plug-ins/common/border-average.c:186 plug-ins/common/checkerboard.c:177 +#: plug-ins/common/cml-explorer.c:558 plug-ins/common/compose.c:557 +#: plug-ins/common/contrast-retinex.c:253 plug-ins/common/crop-zealous.c:151 +#: plug-ins/common/curve-bend.c:665 plug-ins/common/decompose.c:376 +#: plug-ins/common/depth-merge.c:307 plug-ins/common/despeckle.c:232 +#: plug-ins/common/destripe.c:182 plug-ins/common/gradient-map.c:216 +#: plug-ins/common/grid.c:283 plug-ins/common/hot.c:311 +#: plug-ins/common/jigsaw.c:473 plug-ins/common/nl-filter.c:224 +#: plug-ins/common/qbist.c:253 plug-ins/common/sample-colorize.c:431 +#: plug-ins/common/smooth-palette.c:208 plug-ins/common/sparkle.c:307 +#: plug-ins/common/sphere-designer.c:3179 plug-ins/common/tile.c:220 +#: plug-ins/common/tile-small.c:308 plug-ins/common/van-gogh-lic.c:913 +#: plug-ins/common/warp.c:375 plug-ins/common/wavelet-decompose.c:182 +#: plug-ins/file-dds/dds.c:519 plug-ins/flame/flame.c:241 +#: plug-ins/fractal-explorer/fractal-explorer.c:399 plug-ins/gfig/gfig.c:215 +#: plug-ins/pikaressionist/pika.c:178 +#: plug-ins/gradient-flare/gradient-flare.c:935 +#: plug-ins/ifs-compose/ifs-compose.c:487 plug-ins/imagemap/imap_main.c:264 +#: plug-ins/lighting/lighting-main.c:404 +#: plug-ins/map-object/map-object-main.c:496 plug-ins/pagecurl/pagecurl.c:302 +#, c-format +msgid "Procedure '%s' only works with one drawable." +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:167 -msgid "Area:" -msgstr "Вобласьць:" +#: extensions/goat-exercises/goat-exercise-c.c:180 +msgid "Exercise a goat (C)" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:171 -msgid "Entire Layer" -msgstr "Увесь пласт" +#: extensions/goat-exercises/goat-exercise-c.c:184 +#: extensions/goat-exercises/goat-exercise-gjs.js:94 +#: 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:1348 +#: plug-ins/common/cml-explorer.c:2114 plug-ins/common/cml-explorer.c:2247 +#: plug-ins/common/colormap-remap.c:687 plug-ins/common/compose.c:1183 +#: plug-ins/common/curve-bend.c:1203 plug-ins/common/curve-bend.c:1977 +#: plug-ins/common/curve-bend.c:2012 plug-ins/common/depth-merge.c:734 +#: plug-ins/common/file-cel.c:1001 plug-ins/common/file-gif-save.c:1164 +#: plug-ins/common/file-heif.c:2351 plug-ins/common/file-pdf-load.c:709 +#: plug-ins/common/file-pdf-save.c:1113 plug-ins/common/file-svg.c:839 +#: plug-ins/common/file-wmf.c:546 plug-ins/common/film.c:1323 +#: plug-ins/common/grid.c:761 plug-ins/common/qbist.c:848 +#: plug-ins/common/qbist.c:890 plug-ins/common/qbist.c:944 +#: plug-ins/common/smooth-palette.c:511 plug-ins/common/sphere-designer.c:2287 +#: plug-ins/common/sphere-designer.c:2632 plug-ins/common/tile.c:492 +#: plug-ins/common/tile-small.c:446 plug-ins/common/unit-editor.c:439 +#: plug-ins/common/van-gogh-lic.c:709 plug-ins/common/warp.c:490 +#: plug-ins/common/web-page.c:278 plug-ins/file-tiff/file-tiff-load.c:2553 +#: plug-ins/flame/flame.c:540 plug-ins/flame/flame.c:716 +#: plug-ins/flame/flame.c:1033 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:561 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1631 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1669 +#: plug-ins/fractal-explorer/fractal-explorer.c:875 +#: plug-ins/fractal-explorer/fractal-explorer.c:1269 +#: plug-ins/gfig/gfig-dialog.c:354 plug-ins/gfig/gfig-dialog.c:781 +#: plug-ins/gfig/gfig-dialog.c:831 plug-ins/pikaressionist/brush.c:270 +#: plug-ins/pikaressionist/pikaressionist.c:142 +#: plug-ins/pikaressionist/orientmap.c:528 +#: plug-ins/pikaressionist/presets.c:642 plug-ins/pikaressionist/sizemap.c:401 +#: plug-ins/gradient-flare/gradient-flare.c:2517 +#: plug-ins/gradient-flare/gradient-flare.c:3367 +#: plug-ins/gradient-flare/gradient-flare.c:3479 +#: 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/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:1038 +#: plug-ins/lighting/lighting-ui.c:1163 plug-ins/lighting/lighting-ui.c:1307 +#: plug-ins/map-object/map-object-ui.c:1317 +#: 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/pagecurl/pagecurl.c:496 +#: plug-ins/screenshot/screenshot.c:513 +#: plug-ins/selection-to-path/selection-to-path.c:413 +msgid "_Cancel" +msgstr "_Скасаваць" -#. Create selection -#: ../plug-ins/color-rotate/color-rotate-dialog.c:172 -#: ../plug-ins/common/film.c:965 ../plug-ins/imagemap/imap_selection.c:339 -#: ../plug-ins/selection-to-path/selection-to-path.c:434 -msgid "Selection" -msgstr "Выбар" +#: extensions/goat-exercises/goat-exercise-c.c:185 +#: extensions/goat-exercises/goat-exercise-gjs.js:95 +#: extensions/goat-exercises/goat-exercise-lua.lua:72 +#: extensions/goat-exercises/goat-exercise-py3.py:78 +#: extensions/goat-exercises/goat-exercise-vala.vala:74 +msgid "_Source" +msgstr "_Зыходны код" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:173 -msgid "Context" -msgstr "Кантэкст" +#: extensions/goat-exercises/goat-exercise-c.c:186 +#: extensions/goat-exercises/goat-exercise-vala.vala:75 +msgid "_Run" +msgstr "_Запусціць" -#. spinbutton 1 -#: ../plug-ins/color-rotate/color-rotate-dialog.c:297 -msgctxt "color-range" -msgid "From:" -msgstr "Ад:" +#. XXX We use printf-style string for sharing the localized +#. string. You may just use recommended Python format() or +#. any style you like in your plug-ins. +#: extensions/goat-exercises/goat-exercise-c.c:200 +#: extensions/goat-exercises/goat-exercise-lua.lua:88 +#: extensions/goat-exercises/goat-exercise-py3.py:93 +#: extensions/goat-exercises/goat-exercise-vala.vala:89 +#, c-format, python-format, lua-format +msgid "" +"This plug-in is an exercise in '%s' to demo plug-in creation.\n" +"Check out the last version of the source code online by clicking the " +"\"Source\" button." +msgstr "" -#. spinbutton 2 -#: ../plug-ins/color-rotate/color-rotate-dialog.c:323 -msgctxt "color-range" -msgid "To:" -msgstr "Да:" +#: extensions/goat-exercises/goat-exercise-gjs.js:63 +msgid "Exercise a JavaScript goat" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:375 -msgctxt "color-rotate" -msgid "From:" -msgstr "З:" +#: extensions/goat-exercises/goat-exercise-gjs.js:67 +msgid "Exercise a goat in the JavaScript language (GJS)" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:376 -msgctxt "color-rotate" -msgid "To:" -msgstr "У:" +#: extensions/goat-exercises/goat-exercise-gjs.js:68 +msgid "Takes a goat for a walk in Javascript with the GJS interpreter" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:416 -#: ../plug-ins/common/file-ps.c:3096 ../plug-ins/imagemap/imap_menu.c:213 -msgid "Gray" -msgstr "Адценьні шэрага" +#: extensions/goat-exercises/goat-exercise-gjs.js:90 +msgid "Exercise a goat (JavaScript)" +msgstr "" -#. Gray: Circle: Spinbutton 1 -#: ../plug-ins/color-rotate/color-rotate-dialog.c:464 -msgid "Hue:" -msgstr "Адценьне:" +#: 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:1349 plug-ins/common/colormap-remap.c:688 +#: plug-ins/common/compose.c:1184 plug-ins/common/curve-bend.c:1204 +#: plug-ins/common/depth-merge.c:735 plug-ins/common/file-heif.c:2352 +#: plug-ins/common/file-pdf-load.c:710 plug-ins/common/file-svg.c:840 +#: plug-ins/common/file-wmf.c:547 plug-ins/common/film.c:1324 +#: plug-ins/common/grid.c:762 plug-ins/common/qbist.c:945 +#: plug-ins/common/smooth-palette.c:512 plug-ins/common/sphere-designer.c:2633 +#: plug-ins/common/tile.c:493 plug-ins/common/tile-small.c:447 +#: plug-ins/common/unit-editor.c:268 plug-ins/common/van-gogh-lic.c:710 +#: plug-ins/common/warp.c:491 plug-ins/file-exr/file-exr.c:419 +#: plug-ins/file-psd/psd-load.c:3533 plug-ins/flame/flame.c:717 +#: plug-ins/flame/flame.c:1034 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:562 +#: plug-ins/fractal-explorer/fractal-explorer.c:1270 +#: plug-ins/pikaressionist/pikaressionist.c:143 +#: 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:2518 +#: plug-ins/gradient-flare/gradient-flare.c:3480 +#: plug-ins/ifs-compose/ifs-compose.c:909 +#: plug-ins/imagemap/imap_default_dialog.c:109 +#: plug-ins/lighting/lighting-ui.c:1039 +#: plug-ins/map-object/map-object-ui.c:1318 plug-ins/pagecurl/pagecurl.c:497 +#: plug-ins/selection-to-path/selection-to-path.c:414 +msgid "_OK" +msgstr "" -#. Gray: Circle: Spinbutton 2 -#: ../plug-ins/color-rotate/color-rotate-dialog.c:491 -#: ../plug-ins/color-rotate/color-rotate-dialog.c:553 -msgid "Saturation:" -msgstr "Насычанасьць:" +#. PIKA - Photo and Image Kooker Application +#. Copyright (C) 1995 Spencer Kimball and Peter Mattis +#. +#. goat-exercise-lua.lua +#. Copyright (C) Jehan +#. +#. 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. +#. +#. You should have received a copy of the GNU General Public License +#. along with this program. If not, see . +#. procedure:new_return_values() crashes LGI so we construct the +#. PikaValueArray manually. +#. Not sure why run_mode has become a string instead of testing +#. against Pika.RunMode.INTERACTIVE. +#: extensions/goat-exercises/goat-exercise-lua.lua:67 +msgid "Exercise a goat (Lua)" +msgstr "" -#. * Gray: Operation-Mode * -#: ../plug-ins/color-rotate/color-rotate-dialog.c:511 -msgid "Gray Mode" -msgstr "Рэжым шэрых колераў" +#. CANCEL, CLOSE, DELETE_EVENT +#: extensions/goat-exercises/goat-exercise-lua.lua:172 +msgid "Exercise a Lua goat" +msgstr "" -#. Gray: Operation-Mode: two radio buttons -#: ../plug-ins/color-rotate/color-rotate-dialog.c:520 -msgid "Treat as this" -msgstr "Апрацоўваць як гэты" +#: extensions/goat-exercises/goat-exercise-lua.lua:176 +msgid "Exercise a goat in the Lua language" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:532 -msgid "Change to this" -msgstr "Зьмяніць у гэты" +#: extensions/goat-exercises/goat-exercise-py3.py:46 +msgid "Exercise a goat and a python" +msgstr "" -#. * Gray: What is gray? * -#: ../plug-ins/color-rotate/color-rotate-dialog.c:545 -msgid "Gray Threshold" -msgstr "Парог шэрага" +#: extensions/goat-exercises/goat-exercise-py3.py:50 +msgid "Exercise a goat in the Python 3 language" +msgstr "" -#. * Misc: Used unit selection * -#: ../plug-ins/color-rotate/color-rotate-dialog.c:585 -#: ../plug-ins/color-rotate/color-rotate-dialog.c:695 -msgid "Units" -msgstr "Адзінкі" +#: extensions/goat-exercises/goat-exercise-py3.py:51 +msgid "Takes a goat for a walk in Python 3" +msgstr "" -#. Misc: Used unit selection: 3 radio buttons -#: ../plug-ins/color-rotate/color-rotate-dialog.c:594 -msgid "Radians" -msgstr "Радыяны" +#: extensions/goat-exercises/goat-exercise-py3.py:59 +msgid "Procedure '{}' only works with one drawable." +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:606 -msgid "Radians/Pi" -msgstr "Радыяны/Pi" +#: extensions/goat-exercises/goat-exercise-py3.py:74 +msgid "Exercise a goat (Python 3)" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:618 -msgid "Degrees" -msgstr "Ґрадусы" +#: extensions/goat-exercises/goat-exercise-vala.vala:45 +msgid "Exercise a Vala goat" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:649 -msgid "Rotate Colors" -msgstr "Павернуць колеры" +#: extensions/goat-exercises/goat-exercise-vala.vala:46 +msgid "Exercise a goat in the Vala language" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:689 -msgid "Main Options" -msgstr "Асноўныя выборы" +#: extensions/goat-exercises/goat-exercise-vala.vala:47 +msgid "Takes a goat for a walk in Vala" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-dialog.c:692 -msgid "Gray Options" -msgstr "Выборы шэрага" +#: extensions/goat-exercises/goat-exercise-vala.vala:67 +msgid "Exercise a goat (Vala)" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-stock.c:34 -msgid "Switch to Clockwise" -msgstr "За стрэлкай" +#: extensions/goat-exercises/technology.heckin.extension.goat-exercises.metainfo.xml.in.in:5 +msgid "Goat Exercises" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-stock.c:36 -msgid "Switch to C/Clockwise" -msgstr "Супраць стрэлкі" +#: extensions/goat-exercises/technology.heckin.extension.goat-exercises.metainfo.xml.in.in:6 +msgid "Official Demo Plug-ins" +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-stock.c:38 -msgid "Change Order of Arrows" -msgstr "Зьмяніць парадак стрэлак" +#: extensions/goat-exercises/technology.heckin.extension.goat-exercises.metainfo.xml.in.in:8 +msgid "" +"This extension provides a set of basic examples to demonstrate how to create " +"your own plug-ins. Each plug-in does the same thing, except it is developed " +"in a different programming language. They all create a GTK dialog with a " +"text view displaying their own code (hence also demonstrating how to package " +"data) and a button which calls a GEGL operation on the active layer." +msgstr "" -#: ../plug-ins/color-rotate/color-rotate-stock.c:40 -#: ../plug-ins/imagemap/imap_cmd_select_all.c:50 -msgid "Select All" -msgstr "Выбраць усё" - -#: ../plug-ins/color-rotate/color-rotate.c:98 -msgid "Replace a range of colors with another" -msgstr "Замена дыяпазону колераў на іншы" - -#: ../plug-ins/color-rotate/color-rotate.c:105 -msgid "_Rotate Colors..." -msgstr "_Павернуць колеры…" - -#: ../plug-ins/color-rotate/color-rotate.c:139 -msgid "Rotating the colors" -msgstr "Паварот колераў" - -#: ../plug-ins/common/alien-map.c:140 -msgid "_Modify red channel" -msgstr "Зьмяніць _чырвоны канал" - -#: ../plug-ins/common/alien-map.c:140 -msgid "_Modify hue channel" -msgstr "Зьмяніць канал _адценьня" - -#: ../plug-ins/common/alien-map.c:141 -msgid "Mo_dify green channel" -msgstr "Зьмяніць _зялёны канал" - -#: ../plug-ins/common/alien-map.c:141 -msgid "Mo_dify saturation channel" -msgstr "Зьмяніць канал _насычанасьці" - -#: ../plug-ins/common/alien-map.c:142 -msgid "Mod_ify blue channel" -msgstr "Зьмяніць _сіні канал" - -#: ../plug-ins/common/alien-map.c:142 -msgid "Mod_ify luminosity channel" -msgstr "Зьмяніць канал _яркасьці" - -#: ../plug-ins/common/alien-map.c:147 -msgid "Red _frequency:" -msgstr "Часьціня _чырвонага:" - -#: ../plug-ins/common/alien-map.c:147 -msgid "Hue _frequency:" -msgstr "Часьціня _адценьня:" - -#: ../plug-ins/common/alien-map.c:148 -msgid "Green fr_equency:" -msgstr "Часьціня _зялёнага:" - -#: ../plug-ins/common/alien-map.c:148 -msgid "Saturation fr_equency:" -msgstr "Часьціня _насычанасьці:" - -#: ../plug-ins/common/alien-map.c:149 -msgid "Blue freq_uency:" -msgstr "Часьціня _сіняга:" - -#: ../plug-ins/common/alien-map.c:149 -msgid "Luminosity freq_uency:" -msgstr "Часьціня _яркасьці:" - -#: ../plug-ins/common/alien-map.c:151 -msgid "Red _phaseshift:" -msgstr "Зрух фазы _чырвонага:" - -#: ../plug-ins/common/alien-map.c:151 -msgid "Hue _phaseshift:" -msgstr "Зрух фазы _адценьня:" - -#: ../plug-ins/common/alien-map.c:152 -msgid "Green ph_aseshift:" -msgstr "Зрух фазы _зялёнага:" - -#: ../plug-ins/common/alien-map.c:152 -msgid "Saturation ph_aseshift:" -msgstr "Зрух фазы _насычанасьці:" - -#: ../plug-ins/common/alien-map.c:153 -msgid "Blue pha_seshift:" -msgstr "Зрух фазы _сіняга:" - -#: ../plug-ins/common/alien-map.c:153 -msgid "Luminosity pha_seshift:" -msgstr "Зрух фазы _яркасьці:" - -#: ../plug-ins/common/alien-map.c:183 -msgid "Alter colors in various psychedelic ways" -msgstr "Зьмяніць колеры рознымі псыхадэлічнымі спосабамі" - -#: ../plug-ins/common/alien-map.c:188 -msgid "_Alien Map..." -msgstr "_Чужое ператварэньне…" - -#: ../plug-ins/common/alien-map.c:320 -msgid "Alien Map: Transforming" -msgstr "Адбываеца чужое ператварэньне" - -#: ../plug-ins/common/alien-map.c:393 -msgid "Alien Map" -msgstr "Чужое ператварэньне" - -#: ../plug-ins/common/alien-map.c:442 ../plug-ins/common/alien-map.c:466 -#: ../plug-ins/common/alien-map.c:490 -msgid "Number of cycles covering full value range" -msgstr "Колькасьць цыкляў, што расьцягваюцца на ўвесь дыяпазон яркасьці" - -#: ../plug-ins/common/alien-map.c:454 ../plug-ins/common/alien-map.c:478 -#: ../plug-ins/common/alien-map.c:502 -msgid "Phase angle, range 0-360" -msgstr "Вугал фазы, ад 0 да 360" - -#. Propagate Mode -#: ../plug-ins/common/alien-map.c:516 ../plug-ins/common/hot.c:613 -#: ../plug-ins/common/value-propagate.c:1121 ../plug-ins/common/waves.c:279 -msgid "Mode" -msgstr "Рэжым" - -#: ../plug-ins/common/alien-map.c:520 -msgid "_RGB color model" -msgstr "Мадэль колераў _RGB" - -#: ../plug-ins/common/alien-map.c:521 -msgid "_HSL color model" -msgstr "Мадэль колераў _HSL" - -#: ../plug-ins/common/align-layers.c:128 -msgid "Align all visible layers of the image" -msgstr "Раўнаваць усе бачныя пласты відарысы" - -#: ../plug-ins/common/align-layers.c:133 +#: plug-ins/common/align-layers.c:179 msgid "Align Visi_ble Layers..." -msgstr "_Раўнаваць бачныя пласты…" +msgstr "_Раўнаваць бачныя слаі…" -#: ../plug-ins/common/align-layers.c:173 +#: plug-ins/common/align-layers.c:183 +msgid "Align all visible layers of the image" +msgstr "Раўнаваць усе бачныя слаі відарысы" + +#: plug-ins/common/align-layers.c:192 +#, fuzzy +#| msgid "_Horizontal style:" +msgid "_Horizontal style" +msgstr "_Гарызнатальны стыль:" + +#: plug-ins/common/align-layers.c:193 plug-ins/common/align-layers.c:208 +msgid "" +"(None = 0, Collect = 1, Fill left to right = 2, Fill right to left = 3, Snap " +"to grid = 4)" +msgstr "" + +#: plug-ins/common/align-layers.c:200 +#, fuzzy +#| msgid "Ho_rizontal base:" +msgid "Hori_zontal base" +msgstr "Аснова па г_арызанталі:" + +#: plug-ins/common/align-layers.c:201 plug-ins/common/align-layers.c:216 +msgid "(Left edge = 0, Center = 1, Right edge = 2)" +msgstr "" + +#: plug-ins/common/align-layers.c:207 +#, fuzzy +#| msgid "_Vertical style:" +msgid "_Vertical style" +msgstr "_Вертыкальны стыль:" + +#: plug-ins/common/align-layers.c:215 +#, fuzzy +#| msgid "Ver_tical base:" +msgid "Ver_tical base" +msgstr "Аснова па в_эртыкалі:" + +#: plug-ins/common/align-layers.c:222 +msgid "_Grid" +msgstr "_Сетка" + +#: plug-ins/common/align-layers.c:223 plug-ins/common/grid.c:757 +#: plug-ins/gfig/gfig-dialog.c:1360 plug-ins/gfig/gfig-menu.ui:31 +#: plug-ins/imagemap/imap_main.c:1555 plug-ins/imagemap/imap-menu.ui:197 +#: plug-ins/imagemap/imap-menu.ui:289 +msgid "Grid" +msgstr "Сетка" + +#: plug-ins/common/align-layers.c:229 +#, fuzzy +#| msgid "_Ignore the bottom layer even if visible" +msgid "Ignore the _bottom layer even if visible" +msgstr "_Ігнараваць найніжэйшы слой, нават бачны" + +#: plug-ins/common/align-layers.c:230 +#, fuzzy +#| msgid "_Ignore the bottom layer even if visible" +msgid "Ignore the bottom layer even if visible" +msgstr "_Ігнараваць найніжэйшы слой, нават бачны" + +#: plug-ins/common/align-layers.c:236 +#, fuzzy +msgid "_Use the (invisible) bottom layer as the base" +msgstr "_Выкарыстоўваць (нябачны) найніжэйшы слой як аснову" + +#: plug-ins/common/align-layers.c:237 +#, fuzzy +msgid "Use the (invisible) bottom layer as the base" +msgstr "_Выкарыстоўваць (нябачны) найніжэйшы слой як аснову" + +#: plug-ins/common/align-layers.c:291 msgid "There are not enough layers to align." -msgstr "Не стае пластоў для раўнаваньня." +msgstr "Не стае слаёў для раўнавання." -#: ../plug-ins/common/align-layers.c:400 +#: plug-ins/common/align-layers.c:739 msgid "Align Visible Layers" -msgstr "Раўнаваць бачныя пласты" +msgstr "Раўнаваць бачныя слаі" -#: ../plug-ins/common/align-layers.c:424 ../plug-ins/common/align-layers.c:455 -msgctxt "align-style" +#. Text antialiasing +#. Graphics antialiasing +#. file save type +#: plug-ins/common/align-layers.c:748 plug-ins/common/align-layers.c:766 +#: plug-ins/common/file-ps.c:3745 plug-ins/common/file-ps.c:3753 +#: plug-ins/common/file-psp.c:840 plug-ins/file-tiff/file-tiff-save.c:1322 +#: plug-ins/metadata/metadata-tags.c:211 plug-ins/metadata/metadata-tags.c:223 +#: plug-ins/metadata/metadata-tags.c:254 +#, fuzzy +#| msgctxt "align-style" +#| msgid "None" msgid "None" msgstr "Нічога" -#: ../plug-ins/common/align-layers.c:425 ../plug-ins/common/align-layers.c:456 +#: plug-ins/common/align-layers.c:749 plug-ins/common/align-layers.c:767 msgid "Collect" msgstr "Сабраць" -#: ../plug-ins/common/align-layers.c:426 +#: plug-ins/common/align-layers.c:750 msgid "Fill (left to right)" -msgstr "Запоўніць (зьлева направа)" +msgstr "Запоўніць (злева направа)" -#: ../plug-ins/common/align-layers.c:427 +#: plug-ins/common/align-layers.c:751 msgid "Fill (right to left)" msgstr "Запоўніць (справа налева)" -#: ../plug-ins/common/align-layers.c:428 ../plug-ins/common/align-layers.c:459 +#: plug-ins/common/align-layers.c:752 plug-ins/common/align-layers.c:770 msgid "Snap to grid" msgstr "Прыцягваць да сеткі" -#: ../plug-ins/common/align-layers.c:437 -msgid "_Horizontal style:" -msgstr "_Гарызнатальны стыль:" - -#: ../plug-ins/common/align-layers.c:441 +#: plug-ins/common/align-layers.c:758 msgid "Left edge" msgstr "Левы край" -#: ../plug-ins/common/align-layers.c:442 ../plug-ins/common/align-layers.c:472 -#: ../plug-ins/gradient-flare/gradient-flare.c:2712 +#: plug-ins/common/align-layers.c:759 plug-ins/common/align-layers.c:777 +#: plug-ins/gradient-flare/gradient-flare.c:2878 msgid "Center" -msgstr "Цэнтар" +msgstr "Цэнтр" -#: ../plug-ins/common/align-layers.c:443 +#: plug-ins/common/align-layers.c:760 msgid "Right edge" msgstr "Правы край" -#: ../plug-ins/common/align-layers.c:452 -msgid "Ho_rizontal base:" -msgstr "Аснова па г_арызанталі:" - -#: ../plug-ins/common/align-layers.c:457 +#: plug-ins/common/align-layers.c:768 msgid "Fill (top to bottom)" -msgstr "Запоўніць (зьверху ўніз)" +msgstr "Запоўніць (зверху ўніз)" -#: ../plug-ins/common/align-layers.c:458 +#: plug-ins/common/align-layers.c:769 msgid "Fill (bottom to top)" -msgstr "Запоўніць (зьнізу ўверх)" +msgstr "Запоўніць (знізу ўверх)" -#: ../plug-ins/common/align-layers.c:468 -msgid "_Vertical style:" -msgstr "_Вэртыкальны стыль:" - -#: ../plug-ins/common/align-layers.c:471 +#: plug-ins/common/align-layers.c:776 msgid "Top edge" msgstr "Верхні край" -#: ../plug-ins/common/align-layers.c:473 +#: plug-ins/common/align-layers.c:778 msgid "Bottom edge" msgstr "Ніжні край" -#: ../plug-ins/common/align-layers.c:482 -msgid "Ver_tical base:" -msgstr "Аснова па в_эртыкалі:" - -#: ../plug-ins/common/align-layers.c:486 -msgid "_Grid size:" -msgstr "_Памер сеткі:" - -#: ../plug-ins/common/align-layers.c:495 -msgid "_Ignore the bottom layer even if visible" -msgstr "_Іґнараваць найніжэйшы пласт, нават бачны" - -#: ../plug-ins/common/align-layers.c:505 -msgid "_Use the (invisible) bottom layer as the base" -msgstr "_Ужываць (нябачны) найніжэйшы пласт як аснову" - -#: ../plug-ins/common/animation-optimize.c:132 -msgid "Modify image to reduce size when saved as GIF animation" -msgstr "Зьмяніць відарыс, каб зьменшыць памер пры захоўваньні анімацыі GIF" - -#: ../plug-ins/common/animation-optimize.c:144 +#: plug-ins/common/animation-optimize.c:179 msgid "Optimize (for _GIF)" msgstr "Аптымізаваць (для _GIF)" -#: ../plug-ins/common/animation-optimize.c:152 -msgid "Reduce file size where combining layers is possible" -msgstr "Зьменшыць памер файла, калі магчыма спалучэньне пластоў" +#: plug-ins/common/animation-optimize.c:182 +msgid "Modify image to reduce size when saved as GIF animation" +msgstr "Змяніць відарыс, каб зменшыць памер пры захоўванні анімацыі GIF" -#: ../plug-ins/common/animation-optimize.c:162 +#: plug-ins/common/animation-optimize.c:207 msgid "_Optimize (Difference)" -msgstr "_Аптымізаваць (адрозьненьні)" +msgstr "_Аптымізаваць (адрозненні)" -#: ../plug-ins/common/animation-optimize.c:170 -msgid "Remove optimization to make editing easier" -msgstr "Прыбраць аптымізацыю, каб спросьціць рэдаґаваньне" +#: plug-ins/common/animation-optimize.c:210 +msgid "Reduce file size where combining layers is possible" +msgstr "Зменшыць памер файла, калі магчыма спалучэнне слаёў" -#: ../plug-ins/common/animation-optimize.c:177 +#: plug-ins/common/animation-optimize.c:232 msgid "_Unoptimize" msgstr "_Разаптымізаваць" -#: ../plug-ins/common/animation-optimize.c:197 +#: plug-ins/common/animation-optimize.c:235 +msgid "Remove optimization to make editing easier" +msgstr "Прыбраць аптымізацыю, каб спросціць рэдагаванне" + +#: plug-ins/common/animation-optimize.c:254 msgid "_Remove Backdrop" msgstr "_Выдаліць заднік" -#: ../plug-ins/common/animation-optimize.c:213 +#: plug-ins/common/animation-optimize.c:275 msgid "_Find Backdrop" -msgstr "_Знайсьці заднік" +msgstr "_Знайсці заднік" -#: ../plug-ins/common/animation-optimize.c:426 +#: plug-ins/common/animation-optimize.c:523 msgid "Unoptimizing animation" -msgstr "Разаптымізаваньне анімацыі" +msgstr "Разаптымізаванне анімацыі" -#: ../plug-ins/common/animation-optimize.c:429 +#: plug-ins/common/animation-optimize.c:526 msgid "Removing animation background" -msgstr "Выдаленьне асноведзі анімацыі" +msgstr "Выдаленне фону анімацыі" -#: ../plug-ins/common/animation-optimize.c:432 +#: plug-ins/common/animation-optimize.c:529 msgid "Finding animation background" -msgstr "Пошук асноведзі анімацыі" +msgstr "Пошук фону анімацыі" -#: ../plug-ins/common/animation-optimize.c:436 +#: plug-ins/common/animation-optimize.c:533 msgid "Optimizing animation" -msgstr "Аптымізаваньне анімацыі" +msgstr "Аптымізаванне анімацыі" -#: ../plug-ins/common/animation-play.c:169 -msgid "Preview a PIKA layer-based animation" -msgstr "Прагляд анімацыі з пластоў PIKA" - -#: ../plug-ins/common/animation-play.c:174 +#: plug-ins/common/animation-play.c:330 msgid "_Playback..." msgstr "_Прайграць…" -#: ../plug-ins/common/animation-play.c:453 -msgid "_Step" -msgstr "_Крок" +#: plug-ins/common/animation-play.c:335 +msgid "Preview a PIKA layer-based animation" +msgstr "Прагляд анімацыі з слаёў PIKA" -#: ../plug-ins/common/animation-play.c:453 +#: plug-ins/common/animation-play.c:370 plug-ins/common/animation-play.c:736 +#: plug-ins/common/animation-play.c:1352 +msgid "Start playback" +msgstr "Пачать прайграванне" + +#: plug-ins/common/animation-play.c:371 plug-ins/common/animation-play.c:738 +msgid "Step back to previous frame" +msgstr "Да папярэдняга кадра" + +#: plug-ins/common/animation-play.c:372 plug-ins/common/animation-play.c:740 msgid "Step to next frame" msgstr "Да наступнага кадра" -#: ../plug-ins/common/animation-play.c:457 +#: plug-ins/common/animation-play.c:373 plug-ins/common/animation-play.c:742 msgid "Rewind the animation" -msgstr "Пераматаць мультыплікацыю" +msgstr "Пераматаць анімацыю" -#: ../plug-ins/common/animation-play.c:475 -msgid "Faster" -msgstr "Хутчэй" - -#: ../plug-ins/common/animation-play.c:475 +#: plug-ins/common/animation-play.c:378 msgid "Increase the speed of the animation" -msgstr "Павялічыць хуткасьць" +msgstr "Павялічыць хуткасць" -#: ../plug-ins/common/animation-play.c:480 -msgid "Slower" -msgstr "Павольней" - -#: ../plug-ins/common/animation-play.c:480 +#: plug-ins/common/animation-play.c:379 msgid "Decrease the speed of the animation" -msgstr "Зьменшыць хуткасьць" +msgstr "Зменшыць хуткасць" -#: ../plug-ins/common/animation-play.c:485 -msgid "Reset speed" -msgstr "Вернуць хуткасьць" - -#: ../plug-ins/common/animation-play.c:485 +#: plug-ins/common/animation-play.c:380 msgid "Reset the speed of the animation" -msgstr "Вернуць хуткасьць мультыплікацыі" +msgstr "Вярнуць хуткасць анімацыі" -#: ../plug-ins/common/animation-play.c:493 -#: ../plug-ins/common/animation-play.c:1474 -msgid "Start playback" -msgstr "Пачать працграваньне" +#: plug-ins/common/animation-play.c:385 plug-ins/common/animation-play.c:745 +msgid "Detach the animation from the dialog window" +msgstr "Адчапіць анімацыю ад дыялогавага акна" -#: ../plug-ins/common/animation-play.c:497 +#: plug-ins/common/animation-play.c:386 plug-ins/common/animation-play.c:747 +msgid "Reload the image" +msgstr "Перазагрузіць відарыс" + +#: plug-ins/common/animation-play.c:387 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 +#, c-format +msgid "%.1f %%" +msgstr "%.1f %%" + +#. Image Name +#: plug-ins/common/animation-play.c:658 +msgid "Animation Playback:" +msgstr "Прайграванне анімацыі:" + +#: plug-ins/common/animation-play.c:738 +msgid "Step _back" +msgstr "Крок _назад" + +#: plug-ins/common/animation-play.c:740 +msgid "_Step" +msgstr "_Крок" + +#: plug-ins/common/animation-play.c:745 msgid "Detach" msgstr "Адчапіць" -#: ../plug-ins/common/animation-play.c:498 -msgid "Detach the animation from the dialog window" -msgstr "Адчапіць анімацыю ад дыялёґа" - -#: ../plug-ins/common/animation-play.c:590 -msgid "Animation Playback:" -msgstr "Прайграваньне мультыплікацыі" +#. Zoom Options +#: plug-ins/common/animation-play.c:818 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:649 +#: plug-ins/imagemap/imap-menu.ui:276 +msgid "Zoom" +msgstr "Маштаб" #. list is given in "fps" - frames per second -#: ../plug-ins/common/animation-play.c:663 +#: plug-ins/common/animation-play.c:828 #, c-format msgid "%d fps" msgstr "%d к/с" -#: ../plug-ins/common/animation-play.c:674 +#: plug-ins/common/animation-play.c:839 msgid "Default framerate" -msgstr "Прадвызначаная хуткасьць кадраў" +msgstr "Прадвызначаная хуткасць кадраў" -#: ../plug-ins/common/animation-play.c:695 +#: plug-ins/common/animation-play.c:859 msgid "Playback speed" -msgstr "Хуткасьць прайграваньня" +msgstr "Хуткасць прайгравання" -#: ../plug-ins/common/animation-play.c:831 -msgid "Tried to display an invalid layer." -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:1273 +msgid "Cumulative layers (combine)" +msgstr "Сабраныя слаі (злучыць)" -#: ../plug-ins/common/animation-play.c:1351 +#: plug-ins/common/animation-play.c:875 plug-ins/common/file-gif-save.c:1275 +msgid "One frame per layer (replace)" +msgstr "Адзін кадр на слой (замяніць)" + +#: plug-ins/common/animation-play.c:971 +msgid "Memory could not be allocated to the frame container." +msgstr "" + +#: plug-ins/common/animation-play.c:1038 +msgid "Invalid image. Did you close it?" +msgstr "" + +#: plug-ins/common/animation-play.c:1150 #, c-format msgid "Frame %d of %d" msgstr "Кадр %d з %d" -#: ../plug-ins/common/animation-play.c:1474 +#: plug-ins/common/animation-play.c:1352 msgid "Stop playback" -msgstr "Спыніць прайграваньне" +msgstr "Спыніць прайграванне" -#: ../plug-ins/common/antialias.c:84 -msgid "Antialias using the Scale3X edge-extrapolation algorithm" -msgstr "Згладзіць выкарыстоўваючы альґарытм экстрапаляцыі краёў Scale3X" - -#: ../plug-ins/common/antialias.c:90 -msgid "_Antialias" -msgstr "_Згладзіць" - -#: ../plug-ins/common/antialias.c:147 -msgid "Antialiasing..." -msgstr "Згладжваньне…" - -#: ../plug-ins/common/apply-canvas.c:1140 -msgid "Add a canvas texture to the image" -msgstr "Дадаць да відарыса тэкстуру палатна" - -#: ../plug-ins/common/apply-canvas.c:1145 -msgid "_Apply Canvas..." -msgstr "Дадаць палатно" - -#: ../plug-ins/common/apply-canvas.c:1226 -msgid "Applying canvas" -msgstr "Дадаваньне палатна" - -#: ../plug-ins/common/apply-canvas.c:1263 -msgid "Apply Canvas" -msgstr "Дадаваньне палатна" - -#. ***************************************************** -#. radio buttons for choosing LEFT or RIGHT -#. ************************************************* -#: ../plug-ins/common/apply-canvas.c:1293 ../plug-ins/common/wind.c:943 -#: ../plug-ins/lighting/lighting-ui.c:520 -msgid "Direction" -msgstr "Напрамак" - -#: ../plug-ins/common/apply-canvas.c:1297 -msgid "_Top-right" -msgstr "_Верхні правы" - -#: ../plug-ins/common/apply-canvas.c:1298 -msgid "Top-_left" -msgstr "Верхні _левы" - -#: ../plug-ins/common/apply-canvas.c:1299 -msgid "_Bottom-left" -msgstr "_Ніжні левы" - -#: ../plug-ins/common/apply-canvas.c:1300 -msgid "Bottom-_right" -msgstr "Ніжні _правы" - -#: ../plug-ins/common/apply-canvas.c:1325 ../plug-ins/common/bump-map.c:922 -#: ../plug-ins/common/emboss.c:525 ../plug-ins/common/fractal-trace.c:797 -#: ../plug-ins/map-object/map-object-ui.c:527 -msgid "_Depth:" -msgstr "_Глыбіня:" - -#: ../plug-ins/common/blinds.c:113 -msgid "Simulate an image painted on window blinds" -msgstr "Удаць відарыс, зроблены на ваконных жалюзі" - -#: ../plug-ins/common/blinds.c:118 +#: plug-ins/common/blinds.c:140 msgid "_Blinds..." msgstr "_Жалюзі…" -#: ../plug-ins/common/blinds.c:185 -msgid "Adding blinds" -msgstr "Дабаўленьне «жалюзяў»" +#: plug-ins/common/blinds.c:144 +msgid "Simulate an image painted on window blinds" +msgstr "Удаць відарыс, зроблены на аконных жалюзі" -#: ../plug-ins/common/blinds.c:223 -msgid "Blinds" -msgstr "Жалюзі" +#: plug-ins/common/blinds.c:154 +#, fuzzy +#| msgid "_Displacement:" +msgid "_Displacement" +msgstr "_Зрушэнне:" -#. Orientation toggle box -#: ../plug-ins/common/blinds.c:258 ../plug-ins/common/ripple.c:557 +#: plug-ins/common/blinds.c:155 +#, fuzzy +#| msgid "_Displacement:" +msgid "Angle of Displacement" +msgstr "_Зрушэнне:" + +#: plug-ins/common/blinds.c:160 +msgid "_Number of segments" +msgstr "_Колькасць сегментаў" + +#: plug-ins/common/blinds.c:161 +msgid "Number of segments in blinds" +msgstr "_Колькасць сегментаў у жалюзі" + +#: plug-ins/common/blinds.c:166 msgid "Orientation" msgstr "Арыентацыя" -#: ../plug-ins/common/blinds.c:262 ../plug-ins/common/ripple.c:561 -#: ../plug-ins/common/tile-small.c:434 ../plug-ins/pagecurl/pagecurl.c:535 -msgid "_Horizontal" -msgstr "Па _гарызанталі" +#: plug-ins/common/blinds.c:167 +msgid "The orientation" +msgstr "Арыентацыя" -#: ../plug-ins/common/blinds.c:265 ../plug-ins/common/ripple.c:564 -#: ../plug-ins/common/tile-small.c:444 ../plug-ins/pagecurl/pagecurl.c:534 -msgid "_Vertical" -msgstr "Па _вэртыкалі" +#: plug-ins/common/blinds.c:174 +msgid "_Transparent" +msgstr "_Празрыстасць" + +#: plug-ins/common/blinds.c:175 +msgid "Background transparent" +msgstr "Празрысты фон" + +#: plug-ins/common/blinds.c:238 +msgid "Adding blinds" +msgstr "Дабаўленне «жалюзі»" + +#: plug-ins/common/blinds.c:279 +msgid "Blinds" +msgstr "Жалюзі" + +#: plug-ins/common/blinds.c:294 +msgid "Horizontal" +msgstr "Гарызантальныя" + +#: plug-ins/common/blinds.c:295 +msgid "Vertical" +msgstr "Вертыкальныя" #. #. * Create the "background" layer to hold the image... #. -#: ../plug-ins/common/blinds.c:279 ../plug-ins/common/compose.c:936 -#: ../plug-ins/common/decompose.c:729 ../plug-ins/common/file-cel.c:363 -#: ../plug-ins/common/file-cel.c:366 ../plug-ins/common/file-dicom.c:612 -#: ../plug-ins/common/file-gif-load.c:943 -#: ../plug-ins/common/file-jp2-load.c:354 ../plug-ins/common/file-pcx.c:425 -#: ../plug-ins/common/file-pcx.c:431 ../plug-ins/common/file-pix.c:382 -#: ../plug-ins/common/file-png.c:891 ../plug-ins/common/file-pnm.c:583 -#: ../plug-ins/common/file-raw.c:763 ../plug-ins/common/file-sunras.c:977 -#: ../plug-ins/common/file-tga.c:1064 ../plug-ins/common/file-tiff-load.c:997 -#: ../plug-ins/common/file-xbm.c:897 ../plug-ins/common/film.c:745 -#: ../plug-ins/common/smooth-palette.c:257 ../plug-ins/common/tile.c:262 -#: ../plug-ins/file-bmp/bmp-read.c:380 ../plug-ins/file-bmp/bmp-read.c:647 -#: ../plug-ins/file-faxg3/faxg3.c:474 ../plug-ins/file-fits/fits.c:530 -#: ../plug-ins/file-jpeg/jpeg-load.c:255 ../plug-ins/file-jpeg/jpeg-load.c:819 -#: ../plug-ins/file-psd/psd-image-res-load.c:1001 -#: ../plug-ins/file-psd/psd-load.c:1637 ../plug-ins/file-sgi/sgi.c:407 -#: ../plug-ins/gfig/gfig-dialog.c:1321 -#: ../plug-ins/pikaressionist/general.c:139 -#: ../plug-ins/map-object/map-object-apply.c:252 ../plug-ins/twain/twain.c:567 -#: ../plug-ins/win-snap/winsnap.c:1162 +#: plug-ins/common/blinds.c:301 plug-ins/common/compose.c:1129 +#: plug-ins/common/decompose.c:666 plug-ins/common/file-cel.c:496 +#: plug-ins/common/file-cel.c:501 plug-ins/common/file-dicom.c:745 +#: plug-ins/common/file-farbfeld.c:322 plug-ins/common/file-gegl.c:465 +#: plug-ins/common/file-gif-load.c:1097 plug-ins/common/file-iff.c:343 +#: plug-ins/common/file-jp2-load.c:1317 plug-ins/common/file-pcx.c:742 +#: plug-ins/common/file-pcx.c:750 plug-ins/common/file-pcx.c:758 +#: plug-ins/common/file-pix.c:450 plug-ins/common/file-png.c:950 +#: plug-ins/common/file-pnm.c:869 plug-ins/common/file-qoi.c:321 +#: plug-ins/common/file-raw-data.c:1836 plug-ins/common/file-sunras.c:1083 +#: plug-ins/common/file-tga.c:1117 plug-ins/common/file-wbmp.c:270 +#: plug-ins/common/file-xbm.c:912 plug-ins/common/film.c:811 +#: plug-ins/common/smooth-palette.c:332 plug-ins/common/tile.c:405 +#: plug-ins/file-bmp/bmp-load.c:737 plug-ins/file-exr/file-exr.c:278 +#: plug-ins/file-faxg3/faxg3.c:574 plug-ins/file-fits/fits.c:701 +#: 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:475 +#: plug-ins/file-tiff/file-tiff-load.c:1534 +#: plug-ins/file-webp/file-webp-load.c:166 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:315 plug-ins/twain/twain.c:661 msgid "Background" -msgstr "Асноведзь" +msgstr "Фон" -#: ../plug-ins/common/blinds.c:283 ../plug-ins/common/fractal-trace.c:739 -#: ../plug-ins/common/tile-paper.c:385 -msgid "_Transparent" -msgstr "_Празрыстасьць" - -#: ../plug-ins/common/blinds.c:309 -msgid "_Displacement:" -msgstr "_Зрушэньне:" - -#: ../plug-ins/common/blinds.c:321 -msgid "_Number of segments:" -msgstr "_Колькасьць сэгмэнтаў:" - -#: ../plug-ins/common/blur-gauss-selective.c:104 -msgid "Blur neighboring pixels, but only in low-contrast areas" -msgstr "Размыць суседнія піксэлі, але толькі ў нізкакантрасных абласьцях." - -#: ../plug-ins/common/blur-gauss-selective.c:115 -msgid "_Selective Gaussian Blur..." -msgstr "_Сэлекцыйнае Ґаўсаўскае размыцьцё…" - -#: ../plug-ins/common/blur-gauss-selective.c:195 -#: ../plug-ins/common/blur-gauss-selective.c:232 -msgid "Selective Gaussian Blur" -msgstr "Сэлекцыйнае Ґаўсаўскае размыцьцё" - -#: ../plug-ins/common/blur-gauss-selective.c:211 -#: ../plug-ins/common/blur-gauss.c:448 ../plug-ins/common/cartoon.c:232 -#: ../plug-ins/common/edge-dog.c:269 ../plug-ins/common/edge-neon.c:228 -#: ../plug-ins/common/edge-sobel.c:212 ../plug-ins/common/photocopy.c:244 -#: ../plug-ins/common/pixelize.c:293 ../plug-ins/common/softglow.c:224 -#: ../plug-ins/file-sgi/sgi.c:558 ../plug-ins/file-xjt/xjt.c:1687 -#: ../plug-ins/gradient-flare/gradient-flare.c:966 -msgid "Cannot operate on indexed color images." -msgstr "Немагчыма працаваць зь відарысамі ў індэксаваных колерах." - -#: ../plug-ins/common/blur-gauss-selective.c:272 -msgid "_Blur radius:" -msgstr "_Радыюс размыцьця:" - -#: ../plug-ins/common/blur-gauss-selective.c:282 -msgid "_Max. delta:" -msgstr "Макс. дэльта:" - -#: ../plug-ins/common/blur-gauss.c:159 -msgid "Simplest, most commonly used way of blurring" -msgstr "Найпросты, найчасьцей ужываны спосаб размываньня" - -#: ../plug-ins/common/blur-gauss.c:172 -msgid "_Gaussian Blur..." -msgstr "_Ґаўсаўскае размыцьцё…" - -#: ../plug-ins/common/blur-gauss.c:179 ../plug-ins/common/blur-gauss.c:199 -#: ../plug-ins/common/blur-gauss.c:219 ../plug-ins/common/blur-gauss.c:239 -msgid "Apply a gaussian blur" -msgstr "Ужыць ґаўсаўскае размыцьцё" - -#: ../plug-ins/common/blur-gauss.c:428 ../plug-ins/common/blur-gauss.c:478 -msgid "Gaussian Blur" -msgstr "Ґаўсаўскае размыцьцё" - -#. parameter settings -#: ../plug-ins/common/blur-gauss.c:509 -msgid "Blur Radius" -msgstr "Радыюс размыцьця" - -#: ../plug-ins/common/blur-gauss.c:523 ../plug-ins/common/jigsaw.c:2435 -#: ../plug-ins/common/noise-spread.c:385 -msgid "_Horizontal:" -msgstr "Па _гарызанталі:" - -#: ../plug-ins/common/blur-gauss.c:527 ../plug-ins/common/jigsaw.c:2452 -#: ../plug-ins/common/noise-spread.c:389 -msgid "_Vertical:" -msgstr "Па _вэртыкалі:" - -#: ../plug-ins/common/blur-gauss.c:550 -msgid "Blur Method" -msgstr "Мэтад размыцьця" - -#: ../plug-ins/common/blur-gauss.c:554 -msgid "_IIR" -msgstr "_IIR" - -#: ../plug-ins/common/blur-gauss.c:555 -msgid "_RLE" -msgstr "_RLE" - -#: ../plug-ins/common/blur-motion.c:157 ../plug-ins/common/blur-motion.c:171 -msgid "Simulate movement using directional blur" -msgstr "Удаць рух, выкарыстоўваючы накіраванае размыцьцё" - -#: ../plug-ins/common/blur-motion.c:164 ../plug-ins/common/blur-motion.c:177 -msgid "_Motion Blur..." -msgstr "_Размыцьцё руху…" - -#: ../plug-ins/common/blur-motion.c:909 -msgid "Motion blurring" -msgstr "Размываньне руху" - -#: ../plug-ins/common/blur-motion.c:1012 -msgid "Motion Blur" -msgstr "Размыцьцё руху" - -#: ../plug-ins/common/blur-motion.c:1046 -msgid "Blur Type" -msgstr "Тып размыцьця" - -#: ../plug-ins/common/blur-motion.c:1050 -msgctxt "blur-type" -msgid "_Linear" -msgstr "_Лінейны" - -#: ../plug-ins/common/blur-motion.c:1051 -msgctxt "blur-type" -msgid "_Radial" -msgstr "_Радыяльны" - -#: ../plug-ins/common/blur-motion.c:1052 -msgctxt "blur-type" -msgid "_Zoom" -msgstr "_Набліжэньне" - -#: ../plug-ins/common/blur-motion.c:1059 -msgid "Blur Center" -msgstr "Сярэдзіна размыцьця" - -#: ../plug-ins/common/blur-motion.c:1095 ../plug-ins/common/lens-flare.c:764 -#: ../plug-ins/common/nova.c:454 ../plug-ins/common/tile-paper.c:283 -#: ../plug-ins/flame/flame.c:1250 -#: ../plug-ins/gradient-flare/gradient-flare.c:2724 -#: ../plug-ins/lighting/lighting-ui.c:479 -msgid "_X:" -msgstr "_X:" - -#: ../plug-ins/common/blur-motion.c:1100 ../plug-ins/common/lens-flare.c:769 -#: ../plug-ins/common/nova.c:459 ../plug-ins/common/tile-paper.c:292 -#: ../plug-ins/flame/flame.c:1264 -#: ../plug-ins/gradient-flare/gradient-flare.c:2728 -#: ../plug-ins/lighting/lighting-ui.c:494 -msgid "_Y:" -msgstr "_Y:" - -#: ../plug-ins/common/blur-motion.c:1102 -msgid "Blur _outward" -msgstr "Размыцьцё _навонкі" - -#: ../plug-ins/common/blur-motion.c:1115 -msgid "Blur Parameters" -msgstr "Параметры размыцьця" - -#: ../plug-ins/common/blur-motion.c:1126 -#: ../plug-ins/map-object/map-object-ui.c:1206 -msgid "L_ength:" -msgstr "_Даўжыня:" - -#: ../plug-ins/common/blur-motion.c:1139 ../plug-ins/common/newsprint.c:992 -msgid "_Angle:" -msgstr "_Вугал:" - -#: ../plug-ins/common/blur.c:124 -msgid "Simple blur, fast but not very strong" -msgstr "Простае размыцьцё, хуткае, але ня вельмі моцнае" - -#: ../plug-ins/common/blur.c:133 -msgid "_Blur" -msgstr "_Размыцьцё" - -#: ../plug-ins/common/blur.c:177 ../plug-ins/common/unsharp-mask.c:582 -msgid "Blurring" -msgstr "Размываньне" - -#: ../plug-ins/common/border-average.c:99 -msgid "Set foreground to the average color of the image border" -msgstr "Зрабіць сярэдні колер мяжы відарыса колерам рысаваньня" - -#: ../plug-ins/common/border-average.c:104 +#: plug-ins/common/border-average.c:124 +#, fuzzy msgid "_Border Average..." msgstr "_Сярэдняе мяжы…" -#: ../plug-ins/common/border-average.c:171 +#: plug-ins/common/border-average.c:128 +msgid "Set foreground to the average color of the image border" +msgstr "Зрабіць сярэдні колер мяжы відарыса колерам малявання" + +#: plug-ins/common/border-average.c:137 +msgid "_Thickness" +msgstr "_Таўшчыня" + +#: plug-ins/common/border-average.c:138 +msgid "Border size to take in count" +msgstr "" + +#: plug-ins/common/border-average.c:142 +msgid "Thickness unit of measure" +msgstr "" + +#: plug-ins/common/border-average.c:143 +msgid "Border size unit of measure" +msgstr "" + +#: plug-ins/common/border-average.c:147 +#, fuzzy +#| msgid "_Bucket size:" +msgid "Bucket Si_ze" +msgstr "_Памер вядра:" + +#: plug-ins/common/border-average.c:148 +msgid "Bits for bucket size (default=4: 16 Levels)" +msgstr "" + +#: plug-ins/common/border-average.c:153 plug-ins/common/border-average.c:154 +#, fuzzy +#| msgid "Set foreground to the average color of the image border" +msgid "The average color of the specified border." +msgstr "Зрабіць сярэдні колер мяжы відарыса колерам малявання" + +#: plug-ins/common/border-average.c:225 plug-ins/common/border-average.c:406 msgid "Border Average" msgstr "Сярэдняе мяжы" -#: ../plug-ins/common/border-average.c:347 -msgid "Borderaverage" -msgstr "Сярэдняе мяжы" - -#: ../plug-ins/common/border-average.c:369 +#: plug-ins/common/border-average.c:417 msgid "Border Size" msgstr "Памер мяжы" -#: ../plug-ins/common/border-average.c:377 -msgid "_Thickness:" -msgstr "_Таўшчыня:" - #. Number of Colors frame -#: ../plug-ins/common/border-average.c:412 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:910 +#: plug-ins/common/border-average.c:443 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:906 msgid "Number of Colors" -msgstr "Колькасьць колераў" +msgstr "Колькасць колераў" -#: ../plug-ins/common/border-average.c:420 -msgid "_Bucket size:" -msgstr "_Памер вядра:" +#: plug-ins/common/busy-dialog.c:255 plug-ins/common/busy-dialog.c:271 +msgid "Please Wait" +msgstr "Пачакайце" -#: ../plug-ins/common/bump-map.c:257 -msgid "Create an embossing effect using a bump map" -msgstr "Стварыць эфэкт рэльефу, ужываючы мапу паверхні" +#. the title label +#: plug-ins/common/busy-dialog.c:299 +msgid "Please wait for the operation to complete" +msgstr "" -#: ../plug-ins/common/bump-map.c:267 -msgid "_Bump Map..." -msgstr "_Мапа паверхні…" +#: plug-ins/common/busy-dialog.c:359 +msgid "Canceling..." +msgstr "Скасаванне..." -#: ../plug-ins/common/bump-map.c:419 -msgid "Bump-mapping" -msgstr "Стварэньне мапы паверхні" +#: plug-ins/common/checkerboard.c:123 +msgid "_Checkerboard (legacy)..." +msgstr "_Шахматная дошка (састарэлае)..." -#: ../plug-ins/common/bump-map.c:771 -msgid "Bump Map" -msgstr "Мапа паверхні" - -#: ../plug-ins/common/bump-map.c:838 -msgid "_Bump map:" -msgstr "_Мапа паверхні:" - -#. Map type menu -#: ../plug-ins/common/bump-map.c:841 ../plug-ins/flame/flame.c:747 -#: ../plug-ins/lighting/lighting-ui.c:845 -msgid "Linear" -msgstr "Лінейная" - -#: ../plug-ins/common/bump-map.c:842 ../plug-ins/flame/flame.c:749 -#: ../plug-ins/lighting/lighting-ui.c:848 -msgid "Spherical" -msgstr "Сфэрычная" - -#: ../plug-ins/common/bump-map.c:843 ../plug-ins/flame/flame.c:748 -#: ../plug-ins/lighting/lighting-ui.c:847 -msgid "Sinusoidal" -msgstr "Сінусная" - -#: ../plug-ins/common/bump-map.c:850 -msgid "_Map type:" -msgstr "_Тып мапы:" - -#. Compensate darkening -#: ../plug-ins/common/bump-map.c:855 -msgid "Co_mpensate for darkening" -msgstr "_Кампэнсаваць зацямненьне" - -#. Invert bumpmap -#: ../plug-ins/common/bump-map.c:869 -msgid "I_nvert bumpmap" -msgstr "_Інвэртаваць мапу" - -#. Tile bumpmap -#: ../plug-ins/common/bump-map.c:883 -msgid "_Tile bumpmap" -msgstr "_Замосьціць мапай" - -#: ../plug-ins/common/bump-map.c:898 ../plug-ins/common/emboss.c:501 -msgid "_Azimuth:" -msgstr "_Азімут:" - -#: ../plug-ins/common/bump-map.c:910 -msgid "_Elevation:" -msgstr "_Вышыня:" - -#: ../plug-ins/common/bump-map.c:936 ../plug-ins/common/file-ps.c:3250 -msgid "_X offset:" -msgstr "_Зрух па X:" - -#: ../plug-ins/common/bump-map.c:939 ../plug-ins/common/bump-map.c:953 -msgid "" -"The offset can be adjusted by dragging the preview using the middle mouse " -"button." -msgstr "Зрух можна зьмяніць, пацягнуўшы агляд сярэдняй кнопкай мышы." - -#: ../plug-ins/common/bump-map.c:950 ../plug-ins/common/file-ps.c:3259 -msgid "_Y offset:" -msgstr "_Зрух па Y:" - -#: ../plug-ins/common/bump-map.c:964 -msgid "_Waterlevel:" -msgstr "_Ровень вады:" - -#: ../plug-ins/common/bump-map.c:976 -msgid "A_mbient:" -msgstr "_Навакольле:" - -#: ../plug-ins/common/cartoon.c:142 -msgid "Simulate a cartoon by enhancing edges" -msgstr "Удаць карыкатуру, паляпшаючы краі" - -#: ../plug-ins/common/cartoon.c:147 -msgid "Ca_rtoon..." -msgstr "_Карыкатура…" - -#: ../plug-ins/common/cartoon.c:809 -msgid "Cartoon" -msgstr "Карыкатура" - -#: ../plug-ins/common/cartoon.c:847 ../plug-ins/common/photocopy.c:878 -msgid "_Mask radius:" -msgstr "_Радыюс маскі:" - -#: ../plug-ins/common/cartoon.c:861 -msgid "_Percent black:" -msgstr "Адсотак _чорнага:" - -#: ../plug-ins/common/channel-mixer.c:175 -msgid "Alter colors by mixing RGB Channels" -msgstr "Зьмяніць колеры, перамяшаўшы RGB каналы" - -#: ../plug-ins/common/channel-mixer.c:180 -msgid "Channel Mi_xer..." -msgstr "_Мікшэр каналаў…" - -#. printf("Channel Mixer:: Mode:%d r %f g %f b %f\n ", -#. param[3].data.d_int32, mix.black.red_gain, -#. mix.black.green_gain, mix.black.blue_gain); -#: ../plug-ins/common/channel-mixer.c:271 -#: ../plug-ins/common/channel-mixer.c:492 -msgid "Channel Mixer" -msgstr "Мікшэр каналаў" - -#: ../plug-ins/common/channel-mixer.c:530 -msgid "O_utput channel:" -msgstr "_Выходны канал:" - -#. Redmode radio frame -#: ../plug-ins/common/channel-mixer.c:539 ../plug-ins/common/decompose.c:174 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:993 -msgid "Red" -msgstr "Чырвоны" - -#. Greenmode radio frame -#: ../plug-ins/common/channel-mixer.c:544 ../plug-ins/common/decompose.c:175 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1034 -msgid "Green" -msgstr "Зялёны" - -#. Bluemode radio frame -#: ../plug-ins/common/channel-mixer.c:549 ../plug-ins/common/decompose.c:176 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1075 -msgid "Blue" -msgstr "Сіні" - -#: ../plug-ins/common/channel-mixer.c:584 -#: ../plug-ins/common/color-exchange.c:412 ../plug-ins/common/compose.c:190 -#: ../plug-ins/common/compose.c:201 ../plug-ins/common/diffraction.c:506 -#: ../plug-ins/common/diffraction.c:544 ../plug-ins/common/diffraction.c:582 -#: ../plug-ins/common/noise-rgb.c:533 ../plug-ins/common/noise-rgb.c:540 -msgid "_Red:" -msgstr "_Чырвоны:" - -#: ../plug-ins/common/channel-mixer.c:602 -#: ../plug-ins/common/color-exchange.c:468 ../plug-ins/common/compose.c:191 -#: ../plug-ins/common/compose.c:202 ../plug-ins/common/diffraction.c:515 -#: ../plug-ins/common/diffraction.c:553 ../plug-ins/common/diffraction.c:591 -#: ../plug-ins/common/noise-rgb.c:534 ../plug-ins/common/noise-rgb.c:541 -msgid "_Green:" -msgstr "_Зялёны:" - -#: ../plug-ins/common/channel-mixer.c:621 -#: ../plug-ins/common/color-exchange.c:524 ../plug-ins/common/compose.c:192 -#: ../plug-ins/common/compose.c:203 ../plug-ins/common/diffraction.c:524 -#: ../plug-ins/common/diffraction.c:562 ../plug-ins/common/diffraction.c:600 -#: ../plug-ins/common/noise-rgb.c:535 ../plug-ins/common/noise-rgb.c:542 -msgid "_Blue:" -msgstr "_Сіні:" - -#: ../plug-ins/common/channel-mixer.c:637 -msgid "_Monochrome" -msgstr "_Манахромны" - -#: ../plug-ins/common/channel-mixer.c:650 -msgid "Preserve _luminosity" -msgstr "_Захоўваць яркасьць" - -#: ../plug-ins/common/channel-mixer.c:876 -msgid "Load Channel Mixer Settings" -msgstr "Загрузіць настройкі мікшэра каналаў" - -#. stat error (file does not exist) -#: ../plug-ins/common/channel-mixer.c:980 -#: ../plug-ins/common/cml-explorer.c:2208 ../plug-ins/common/curve-bend.c:892 -#: ../plug-ins/common/file-cel.c:312 ../plug-ins/common/file-dicom.c:340 -#: ../plug-ins/common/file-gbr.c:368 ../plug-ins/common/file-gif-load.c:355 -#: ../plug-ins/common/file-gih.c:640 ../plug-ins/common/file-jp2-load.c:194 -#: ../plug-ins/common/file-jp2-load.c:203 ../plug-ins/common/file-mng.c:1156 -#: ../plug-ins/common/file-pat.c:337 ../plug-ins/common/file-pcx.c:361 -#: ../plug-ins/common/file-pix.c:343 ../plug-ins/common/file-png.c:756 -#: ../plug-ins/common/file-pnm.c:494 ../plug-ins/common/file-ps.c:1014 -#: ../plug-ins/common/file-ps.c:2910 ../plug-ins/common/file-psp.c:1717 -#: ../plug-ins/common/file-raw.c:256 ../plug-ins/common/file-raw.c:711 -#: ../plug-ins/common/file-sunras.c:391 ../plug-ins/common/file-svg.c:333 -#: ../plug-ins/common/file-svg.c:713 ../plug-ins/common/file-tga.c:442 -#: ../plug-ins/common/file-tiff-load.c:291 ../plug-ins/common/file-xbm.c:737 -#: ../plug-ins/common/file-xmc.c:663 ../plug-ins/common/file-xmc.c:848 -#: ../plug-ins/common/file-xwd.c:433 ../plug-ins/common/sphere-designer.c:2010 -#: ../plug-ins/file-bmp/bmp-read.c:153 ../plug-ins/file-faxg3/faxg3.c:229 -#: ../plug-ins/file-fits/fits.c:358 ../plug-ins/file-fli/fli-pika.c:459 -#: ../plug-ins/file-fli/fli-pika.c:496 ../plug-ins/file-ico/ico-load.c:651 -#: ../plug-ins/file-ico/ico-load.c:729 ../plug-ins/file-jpeg/jpeg-load.c:117 -#: ../plug-ins/file-jpeg/jpeg-load.c:889 ../plug-ins/file-psd/psd-load.c:130 -#: ../plug-ins/file-psd/psd-thumb-load.c:79 -#: ../plug-ins/file-uri/uri-backend-libcurl.c:193 -#: ../plug-ins/file-xjt/xjt.c:2529 ../plug-ins/file-xjt/xjt.c:2537 -#: ../plug-ins/flame/flame.c:411 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1865 -#: ../plug-ins/fractal-explorer/fractal-explorer.c:926 -#: ../plug-ins/gfig/gfig.c:433 ../plug-ins/help/pikahelplocale.c:222 -#: ../plug-ins/help/pikahelplocale.c:238 -#: ../plug-ins/lighting/lighting-ui.c:1367 -#, c-format -msgid "Could not open '%s' for reading: %s" -msgstr "Немагчыма адкрыць «%s» для чытаньня: %s" - -#: ../plug-ins/common/channel-mixer.c:1003 -msgid "Save Channel Mixer Settings" -msgstr "Захаваць настройкі мікшэра каналаў" - -#: ../plug-ins/common/channel-mixer.c:1058 -#: ../plug-ins/common/cml-explorer.c:2035 ../plug-ins/common/curve-bend.c:840 -#: ../plug-ins/common/file-cel.c:585 ../plug-ins/common/file-csource.c:407 -#: ../plug-ins/common/file-dicom.c:1351 ../plug-ins/common/file-gbr.c:663 -#: ../plug-ins/common/file-gif-save.c:782 ../plug-ins/common/file-gih.c:1258 -#: ../plug-ins/common/file-html-table.c:236 ../plug-ins/common/file-mng.c:649 -#: ../plug-ins/common/file-mng.c:984 ../plug-ins/common/file-pat.c:486 -#: ../plug-ins/common/file-pcx.c:712 ../plug-ins/common/file-pix.c:526 -#: ../plug-ins/common/file-png.c:1358 ../plug-ins/common/file-pnm.c:1010 -#: ../plug-ins/common/file-ps.c:1190 ../plug-ins/common/file-raw.c:591 -#: ../plug-ins/common/file-raw.c:619 ../plug-ins/common/file-sunras.c:565 -#: ../plug-ins/common/file-tga.c:1171 ../plug-ins/common/file-tiff-save.c:684 -#: ../plug-ins/common/file-xbm.c:1036 ../plug-ins/common/file-xmc.c:1455 -#: ../plug-ins/common/file-xwd.c:619 ../plug-ins/common/sphere-designer.c:2121 -#: ../plug-ins/file-bmp/bmp-write.c:306 ../plug-ins/file-fits/fits.c:476 -#: ../plug-ins/file-fli/fli-pika.c:750 ../plug-ins/file-ico/ico-save.c:1007 -#: ../plug-ins/file-jpeg/jpeg-save.c:332 ../plug-ins/file-psd/psd-save.c:1652 -#: ../plug-ins/file-uri/uri-backend-libcurl.c:166 -#: ../plug-ins/file-xjt/xjt.c:1276 ../plug-ins/file-xjt/xjt.c:1715 -#: ../plug-ins/flame/flame.c:442 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1548 -#: ../plug-ins/gfig/gfig.c:797 ../plug-ins/ifs-compose/ifs-compose.c:2408 -#: ../plug-ins/lighting/lighting-ui.c:1223 -#, c-format -msgid "Could not open '%s' for writing: %s" -msgstr "Немагчыма адкрыць «%s» на запіс: %s" - -#: ../plug-ins/common/channel-mixer.c:1066 -#: ../plug-ins/common/cml-explorer.c:2090 -#, c-format -msgid "Parameters were saved to '%s'" -msgstr "Парамэтры былі захаваныя ў «%s»" - -#: ../plug-ins/common/checkerboard.c:89 +#: plug-ins/common/checkerboard.c:128 msgid "Create a checkerboard pattern" msgstr "Стварыць ўзор «шахматная дошка»" -#: ../plug-ins/common/checkerboard.c:94 -msgid "_Checkerboard..." -msgstr "_Шахматная дошка…" +#: plug-ins/common/checkerboard.c:137 +msgid "_Psychobilly" +msgstr "_Псіхадэлія" -#: ../plug-ins/common/checkerboard.c:161 -msgid "Adding checkerboard" -msgstr "Дабаўленьне «шахматнай дошкі»" +#: plug-ins/common/checkerboard.c:138 +msgid "Render a psychobilly checkerboard" +msgstr "" -#: ../plug-ins/common/checkerboard.c:346 +#: plug-ins/common/checkerboard.c:143 plug-ins/pikaressionist/size.c:94 +msgid "_Size" +msgstr "_Памер" + +#: plug-ins/common/checkerboard.c:144 +msgid "Size of the checks" +msgstr "Памер клетак" + +#: plug-ins/common/checkerboard.c:149 plug-ins/common/checkerboard.c:150 +msgid "Check size unit of measure" +msgstr "" + +#: plug-ins/common/checkerboard.c:370 plug-ins/common/checkerboard.c:500 msgid "Checkerboard" msgstr "Шахматная дошка" -#: ../plug-ins/common/checkerboard.c:413 ../plug-ins/common/file-xmc.c:1162 -#: ../plug-ins/pikaressionist/sizemap.c:510 -msgid "_Size:" -msgstr "_Памер:" - -#: ../plug-ins/common/checkerboard.c:422 -msgid "_Psychobilly" -msgstr "_Сайкабілі" - -#: ../plug-ins/common/cml-explorer.c:129 +#: plug-ins/common/cml-explorer.c:130 msgid "Keep image's values" -msgstr "Пакінуць значэньні відарыса" +msgstr "Пакінуць значэнні відарыса" -#: ../plug-ins/common/cml-explorer.c:130 +#: plug-ins/common/cml-explorer.c:131 msgid "Keep the first value" -msgstr "Пакінуць першае значэньне" +msgstr "Пакінуць першае значэнне" -#: ../plug-ins/common/cml-explorer.c:131 +#: plug-ins/common/cml-explorer.c:132 msgid "Fill with parameter k" -msgstr "Запоўніць парамэтрам k" +msgstr "Запоўніць параметрам k" -#: ../plug-ins/common/cml-explorer.c:132 +#: plug-ins/common/cml-explorer.c:133 msgid "k{x(1-x)}^p" msgstr "k{x(1-x)}^p" -#: ../plug-ins/common/cml-explorer.c:133 +#: plug-ins/common/cml-explorer.c:134 msgid "k{x(1-x)}^p stepped" -msgstr "k{x(1-x)}^p прыступкавая" +msgstr "k{x(1-x)}^p ступеньчатая" -#: ../plug-ins/common/cml-explorer.c:134 +#: plug-ins/common/cml-explorer.c:135 msgid "kx^p" msgstr "kx^p" -#: ../plug-ins/common/cml-explorer.c:135 +#: plug-ins/common/cml-explorer.c:136 msgid "kx^p stepped" -msgstr "kx^p прыступкавая" +msgstr "kx^p ступеньчатая" -#: ../plug-ins/common/cml-explorer.c:136 +#: plug-ins/common/cml-explorer.c:137 msgid "k(1-x^p)" msgstr "k(1-x^p)" -#: ../plug-ins/common/cml-explorer.c:137 +#: plug-ins/common/cml-explorer.c:138 msgid "k(1-x^p) stepped" -msgstr "k(1-x^p) прыступкавая" +msgstr "k(1-x^p) ступеньчатая" -#: ../plug-ins/common/cml-explorer.c:138 +#: plug-ins/common/cml-explorer.c:139 msgid "Delta function" msgstr "Дэльта-функцыя" -#: ../plug-ins/common/cml-explorer.c:139 +#: plug-ins/common/cml-explorer.c:140 msgid "Delta function stepped" -msgstr "Прыступкавая дэльта-функцыя" +msgstr "Cтупеньчатая дэльта-функцыя" -#: ../plug-ins/common/cml-explorer.c:140 +#: plug-ins/common/cml-explorer.c:141 msgid "sin^p-based function" msgstr "Вытворная ад sin^p" -#: ../plug-ins/common/cml-explorer.c:141 +#: plug-ins/common/cml-explorer.c:142 msgid "sin^p, stepped" -msgstr "sin^p, прыступкавая" +msgstr "sin^p, ступеньчатая" -#: ../plug-ins/common/cml-explorer.c:166 +#: plug-ins/common/cml-explorer.c:167 msgctxt "cml-composition" msgid "None" msgstr "Нічога" -#: ../plug-ins/common/cml-explorer.c:167 +#: plug-ins/common/cml-explorer.c:168 msgid "Max (x, -)" msgstr "Max (x, -)" -#: ../plug-ins/common/cml-explorer.c:168 +#: plug-ins/common/cml-explorer.c:169 msgid "Max (x+d, -)" msgstr "Max (x+d, -)" -#: ../plug-ins/common/cml-explorer.c:169 +#: plug-ins/common/cml-explorer.c:170 msgid "Max (x-d, -)" msgstr "Max (x-d, -)" -#: ../plug-ins/common/cml-explorer.c:170 +#: plug-ins/common/cml-explorer.c:171 msgid "Min (x, -)" msgstr "Min (x, -)" -#: ../plug-ins/common/cml-explorer.c:171 +#: plug-ins/common/cml-explorer.c:172 msgid "Min (x+d, -)" msgstr "Min (x+d, -)" -#: ../plug-ins/common/cml-explorer.c:172 +#: plug-ins/common/cml-explorer.c:173 msgid "Min (x-d, -)" msgstr "Min (x-d, -)" -#: ../plug-ins/common/cml-explorer.c:173 +#: plug-ins/common/cml-explorer.c:174 msgid "Max (x+d, -), (x < 0.5)" msgstr "Max (x+d, -), (x < 0.5)" -#: ../plug-ins/common/cml-explorer.c:174 +#: plug-ins/common/cml-explorer.c:175 msgid "Max (x+d, -), (0.5 < x)" msgstr "Max (x+d, -), (0.5 < x)" -#: ../plug-ins/common/cml-explorer.c:175 +#: plug-ins/common/cml-explorer.c:176 msgid "Max (x-d, -), (x < 0.5)" msgstr "Max (x-d, -), (x < 0.5)" -#: ../plug-ins/common/cml-explorer.c:176 +#: plug-ins/common/cml-explorer.c:177 msgid "Max (x-d, -), (0.5 < x)" msgstr "Max (x-d, -), (0.5 < x)" -#: ../plug-ins/common/cml-explorer.c:177 +#: plug-ins/common/cml-explorer.c:178 msgid "Min (x+d, -), (x < 0.5)" msgstr "Min (x+d, -), (x < 0.5)" -#: ../plug-ins/common/cml-explorer.c:178 +#: plug-ins/common/cml-explorer.c:179 msgid "Min (x+d, -), (0.5 < x)" msgstr "Min (x+d, -), (0.5 < x)" -#: ../plug-ins/common/cml-explorer.c:179 +#: plug-ins/common/cml-explorer.c:180 msgid "Min (x-d, -), (x < 0.5)" msgstr "Min (x-d, -), (x < 0.5)" -#: ../plug-ins/common/cml-explorer.c:180 +#: plug-ins/common/cml-explorer.c:181 msgid "Min (x-d, -), (0.5 < x)" msgstr "Min (x-d, -), (0.5 < x)" -#: ../plug-ins/common/cml-explorer.c:200 ../plug-ins/common/file-sunras.c:1635 +#: plug-ins/common/cml-explorer.c:201 msgid "Standard" msgstr "Стандартны" -#: ../plug-ins/common/cml-explorer.c:201 +#: plug-ins/common/cml-explorer.c:202 msgid "Use average value" -msgstr "Ужыць сярэдняе значэньне" +msgstr "Выкарыстоўваць сярэдняе значэнне" -#: ../plug-ins/common/cml-explorer.c:202 +#: plug-ins/common/cml-explorer.c:203 msgid "Use reverse value" -msgstr "Ужыць адваротнае значэньне" +msgstr "Ужыць адваротнае значэнне" -#: ../plug-ins/common/cml-explorer.c:203 +#: plug-ins/common/cml-explorer.c:204 msgid "With random power (0,10)" msgstr "Выпадковая ступень (0,10)" -#: ../plug-ins/common/cml-explorer.c:204 +#: plug-ins/common/cml-explorer.c:205 msgid "With random power (0,1)" -msgstr "З выпадковай ступеньню (0,10)" +msgstr "З выпадковай ступенню (0,10)" -#: ../plug-ins/common/cml-explorer.c:205 +#: plug-ins/common/cml-explorer.c:206 msgid "With gradient power (0,1)" -msgstr "З ґрадыентнай ступеньню (0,10)" +msgstr "З градыентнай ступенню (0,10)" -#: ../plug-ins/common/cml-explorer.c:206 +#: plug-ins/common/cml-explorer.c:207 msgid "Multiply rand. value (0,1)" msgstr "Здабытак адвольных (0,1)" -#: ../plug-ins/common/cml-explorer.c:207 +#: plug-ins/common/cml-explorer.c:208 msgid "Multiply rand. value (0,2)" msgstr "Здабытак адвольных (0,2)" -#: ../plug-ins/common/cml-explorer.c:208 +#: plug-ins/common/cml-explorer.c:209 msgid "Multiply gradient (0,1)" -msgstr "Здабытак ґрадыентаў (0,1)" +msgstr "Здабытак градыентаў (0,1)" -#: ../plug-ins/common/cml-explorer.c:209 +#: plug-ins/common/cml-explorer.c:210 msgid "With p and random (0,1)" msgstr "З p і адвольным (0,10)" -#: ../plug-ins/common/cml-explorer.c:223 +#: plug-ins/common/cml-explorer.c:224 msgid "All black" msgstr "Усе чорныя" -#: ../plug-ins/common/cml-explorer.c:224 +#: plug-ins/common/cml-explorer.c:225 msgid "All gray" msgstr "Усе шэрыя" -#: ../plug-ins/common/cml-explorer.c:225 +#: plug-ins/common/cml-explorer.c:226 msgid "All white" msgstr "Усе белыя" -#: ../plug-ins/common/cml-explorer.c:226 +#: plug-ins/common/cml-explorer.c:227 msgid "The first row of the image" msgstr "Першы радок відарыса" -#: ../plug-ins/common/cml-explorer.c:227 +#: plug-ins/common/cml-explorer.c:228 msgid "Continuous gradient" -msgstr "Безупынны ґрадыент" +msgstr "Безупынны градыент" -#: ../plug-ins/common/cml-explorer.c:228 +#: plug-ins/common/cml-explorer.c:229 msgid "Continuous grad. w/o gap" -msgstr "Безупынны, без прагалаў" +msgstr "Безупынны, без прабелаў" -#: ../plug-ins/common/cml-explorer.c:229 +#: plug-ins/common/cml-explorer.c:230 msgid "Random, ch. independent" msgstr "Адвольны, незал. ад каналу" -#: ../plug-ins/common/cml-explorer.c:230 +#: plug-ins/common/cml-explorer.c:231 msgid "Random shared" msgstr "Адвольнае (супольнае)" -#: ../plug-ins/common/cml-explorer.c:231 +#: plug-ins/common/cml-explorer.c:232 msgid "Randoms from seed" -msgstr "Адвольнае зь ліку" +msgstr "Адвольнае з ліку" -#: ../plug-ins/common/cml-explorer.c:232 +#: plug-ins/common/cml-explorer.c:233 msgid "Randoms from seed (shared)" -msgstr "Адвольнае зь ліку (супольнае)" +msgstr "Адвольнае з ліку (супольнае)" -#: ../plug-ins/common/cml-explorer.c:300 ../plug-ins/common/cml-explorer.c:308 -#: ../plug-ins/common/decompose.c:188 -#: ../plug-ins/pikaressionist/orientation.c:179 -#: ../plug-ins/pikaressionist/size.c:182 +#: 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 msgid "Hue" -msgstr "Адценьне" +msgstr "Адценне" -#: ../plug-ins/common/cml-explorer.c:301 ../plug-ins/common/cml-explorer.c:309 -#: ../plug-ins/common/decompose.c:189 +#: plug-ins/common/cml-explorer.c:302 plug-ins/common/cml-explorer.c:310 +#: plug-ins/common/decompose.c:203 msgid "Saturation" -msgstr "Насычанасьць" +msgstr "Насычанасць" -#: ../plug-ins/common/cml-explorer.c:302 ../plug-ins/common/cml-explorer.c:310 -#: ../plug-ins/common/decompose.c:190 -#: ../plug-ins/pikaressionist/orientation.c:155 -#: ../plug-ins/pikaressionist/size.c:158 +#: plug-ins/common/cml-explorer.c:303 plug-ins/common/cml-explorer.c:311 +#: 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 msgid "Value" -msgstr "Яркасьць" +msgstr "Яркасць" -#: ../plug-ins/common/cml-explorer.c:307 +#: plug-ins/common/cml-explorer.c:308 msgid "(None)" msgstr "(Няма)" -#: ../plug-ins/common/cml-explorer.c:460 +#: plug-ins/common/cml-explorer.c:508 +msgid "CML _Explorer..." +msgstr "_Даследнік ППС…" + +#: plug-ins/common/cml-explorer.c:513 msgid "Create abstract Coupled-Map Lattice patterns" msgstr "Стварыць абстрактныя Парна-Пераўтваральныя Сеткавыя ўзоры" -#: ../plug-ins/common/cml-explorer.c:471 -msgid "CML _Explorer..." -msgstr "_Дасьледнік ППС…" - -#: ../plug-ins/common/cml-explorer.c:761 +#: plug-ins/common/cml-explorer.c:877 msgid "CML Explorer: evoluting" -msgstr "Дасьледнік ППС: праца" +msgstr "Даследнік ППС: праца" -#: ../plug-ins/common/cml-explorer.c:1182 +#: plug-ins/common/cml-explorer.c:1344 msgid "Coupled-Map-Lattice Explorer" -msgstr "Дасьледнік Парна-пераўтваральных сетак" +msgstr "Даследнік Парна-пераўтваральных сетак" -#: ../plug-ins/common/cml-explorer.c:1229 +#: plug-ins/common/cml-explorer.c:1388 msgid "New Seed" msgstr "Новы лік" -#: ../plug-ins/common/cml-explorer.c:1240 +#: plug-ins/common/cml-explorer.c:1399 msgid "Fix Seed" msgstr "Фіксаваны лік" -#: ../plug-ins/common/cml-explorer.c:1251 +#: plug-ins/common/cml-explorer.c:1410 msgid "Random Seed" msgstr "Адвольны лік" -#: ../plug-ins/common/cml-explorer.c:1293 ../plug-ins/common/filter-pack.c:702 -#: ../plug-ins/common/van-gogh-lic.c:675 +#. The Load button +#: plug-ins/common/cml-explorer.c:1425 plug-ins/common/cml-explorer.c:2248 +#: plug-ins/common/curve-bend.c:1463 plug-ins/common/curve-bend.c:1978 +#: plug-ins/common/file-cel.c:1002 plug-ins/common/qbist.c:849 +#: plug-ins/common/qbist.c:1032 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/fractal-explorer/fractal-explorer-dialogs.c:801 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1632 +#: 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/imagemap/imap_file.c:74 plug-ins/lighting/lighting-ui.c:608 +#: plug-ins/lighting/lighting-ui.c:1308 +msgid "_Open" +msgstr "_Адкрыць" + +#. The Save button +#: plug-ins/common/cml-explorer.c:1433 plug-ins/common/cml-explorer.c:2115 +#: plug-ins/common/curve-bend.c:1475 plug-ins/common/curve-bend.c:2013 +#: plug-ins/common/file-pdf-save.c:1112 plug-ins/common/qbist.c:891 +#: plug-ins/common/qbist.c:1040 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/fractal-explorer/fractal-explorer-dialogs.c:818 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1670 +#: 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/lighting/lighting-ui.c:601 plug-ins/lighting/lighting-ui.c:1164 +msgid "_Save" +msgstr "_Захаваць" + +#: plug-ins/common/cml-explorer.c:1452 plug-ins/common/van-gogh-lic.c:736 msgid "_Hue" -msgstr "_Адценьне" +msgstr "_Адценне" -#: ../plug-ins/common/cml-explorer.c:1297 +#: plug-ins/common/cml-explorer.c:1456 msgid "Sat_uration" -msgstr "_Насычанасьць" +msgstr "_Насычанасць" -#: ../plug-ins/common/cml-explorer.c:1301 ../plug-ins/common/filter-pack.c:710 +#: plug-ins/common/cml-explorer.c:1460 msgid "_Value" -msgstr "_Яркасьць" +msgstr "_Яркасць" -#: ../plug-ins/common/cml-explorer.c:1305 +#: plug-ins/common/cml-explorer.c:1464 msgid "_Advanced" msgstr "_Дадаткова" -#: ../plug-ins/common/cml-explorer.c:1320 +#: plug-ins/common/cml-explorer.c:1479 msgid "Channel Independent Parameters" -msgstr "Незалежныя парамэтры каналаў" +msgstr "Незалежныя параметры каналаў" -#: ../plug-ins/common/cml-explorer.c:1342 +#: plug-ins/common/cml-explorer.c:1501 msgid "Initial value:" -msgstr "Пачатковае значэньне:" +msgstr "Пачатковае значэнне:" -#: ../plug-ins/common/cml-explorer.c:1348 +#: plug-ins/common/cml-explorer.c:1506 msgid "Zoom scale:" msgstr "Маштаб:" -#: ../plug-ins/common/cml-explorer.c:1357 +#: plug-ins/common/cml-explorer.c:1513 msgid "Start offset:" msgstr "Пачатковы зрух:" -#: ../plug-ins/common/cml-explorer.c:1366 +#: plug-ins/common/cml-explorer.c:1521 msgid "Seed of Random (only for \"From Seed\" Modes)" -msgstr "Лік адвольнасьці (толькі для рэжымаў «Зь ліку»)" +msgstr "Лік адвольнасці (толькі для рэжымаў «З ліку»)" -#: ../plug-ins/common/cml-explorer.c:1377 ../plug-ins/maze/maze-dialog.c:251 +#: plug-ins/common/cml-explorer.c:1531 msgid "Seed:" msgstr "Лік:" -#: ../plug-ins/common/cml-explorer.c:1390 +#: plug-ins/common/cml-explorer.c:1543 msgid "Switch to \"From seed\" With the Last Seed" msgstr "Пераключыцца на «Фіксаваны лік» з апошнім лікам" -#: ../plug-ins/common/cml-explorer.c:1402 +#: plug-ins/common/cml-explorer.c:1555 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 " @@ -1401,2464 +1095,3094 @@ msgid "" "(2) all mutation rates equal to zero." msgstr "" "Кнопка «Фіксаваны лік» робіць тое ж самае.\n" -"З аднаго й таго ж ліку атрымоўваюцца аднолькавыя відарысы, пры ўмове, што " +"З аднаго і таго ж ліку атрымоўваюцца аднолькавыя відарысы, пры ўмове, што " "(1) шырыні відарысаў аднолькавыя (вось чаму выніковы відарыс не такі, як на " -"аглядзе) і (2) усе часьціні зьмяненьняў роўныя нулю." +"прадпраглядзе) і (2) усе частаты змяненняў роўныя нулю." -#: ../plug-ins/common/cml-explorer.c:1410 +#: plug-ins/common/cml-explorer.c:1563 msgid "O_thers" msgstr "_Іншыя" -#: ../plug-ins/common/cml-explorer.c:1425 +#: plug-ins/common/cml-explorer.c:1578 msgid "Copy Settings" -msgstr "Капіяваць настройкі" +msgstr "Капіяваць налады" -#: ../plug-ins/common/cml-explorer.c:1444 +#: plug-ins/common/cml-explorer.c:1597 msgid "Source channel:" msgstr "Выточны канал:" -#: ../plug-ins/common/cml-explorer.c:1459 -#: ../plug-ins/common/cml-explorer.c:1507 +#: plug-ins/common/cml-explorer.c:1612 plug-ins/common/cml-explorer.c:1659 msgid "Destination channel:" msgstr "Мэтавы канал:" -#: ../plug-ins/common/cml-explorer.c:1463 +#: plug-ins/common/cml-explorer.c:1616 msgid "Copy Parameters" msgstr "Капіяваць параметры" -#: ../plug-ins/common/cml-explorer.c:1472 +#: plug-ins/common/cml-explorer.c:1624 msgid "Selective Load Settings" -msgstr "Сэлекцыйная загрузіка наладак" +msgstr "Выбарачная загрузка налад" -#: ../plug-ins/common/cml-explorer.c:1492 +#: plug-ins/common/cml-explorer.c:1644 msgid "Source channel in file:" msgstr "Канал-крыніца ў файле:" -#: ../plug-ins/common/cml-explorer.c:1513 -msgid "_Misc Ops." -msgstr "_Рознае" +#: plug-ins/common/cml-explorer.c:1665 +msgid "_Misc" +msgstr "Рознае" -#: ../plug-ins/common/cml-explorer.c:1572 +#: plug-ins/common/cml-explorer.c:1724 msgid "Function type:" msgstr "Тып функцыі:" -#: ../plug-ins/common/cml-explorer.c:1588 +#: plug-ins/common/cml-explorer.c:1740 msgid "Composition:" -msgstr "Складаньне:" +msgstr "Складанне:" -#: ../plug-ins/common/cml-explorer.c:1602 +#: plug-ins/common/cml-explorer.c:1754 msgid "Misc arrange:" msgstr "Парадак:" -#: ../plug-ins/common/cml-explorer.c:1606 +#: plug-ins/common/cml-explorer.c:1758 msgid "Use cyclic range" msgstr "Выкарыстоўваць цыклічны дыяпазон" -#: ../plug-ins/common/cml-explorer.c:1616 +#: plug-ins/common/cml-explorer.c:1767 msgid "Mod. rate:" -msgstr "Часьціня зьмяненьняў:" +msgstr "Частата змяненняў:" -#: ../plug-ins/common/cml-explorer.c:1625 +#: plug-ins/common/cml-explorer.c:1774 msgid "Env. sensitivity:" msgstr "Успрым. агінальнай:" -#: ../plug-ins/common/cml-explorer.c:1634 +#: plug-ins/common/cml-explorer.c:1781 msgid "Diffusion dist.:" -msgstr "Разьм. расьсейваньня:" +msgstr "Разм. рассейвання:" -#: ../plug-ins/common/cml-explorer.c:1643 +#: plug-ins/common/cml-explorer.c:1788 msgid "# of subranges:" msgstr "# паддыяпазонаў:" -#: ../plug-ins/common/cml-explorer.c:1652 +#: plug-ins/common/cml-explorer.c:1795 msgid "P(ower factor):" msgstr "Множнік P:" -#: ../plug-ins/common/cml-explorer.c:1661 +#: plug-ins/common/cml-explorer.c:1803 msgid "Parameter k:" -msgstr "Парамэтар k:" +msgstr "Параметр k:" -#: ../plug-ins/common/cml-explorer.c:1670 +#: plug-ins/common/cml-explorer.c:1811 msgid "Range low:" msgstr "Пачатак дыяпазону:" -#: ../plug-ins/common/cml-explorer.c:1679 +#: plug-ins/common/cml-explorer.c:1818 msgid "Range high:" msgstr "Канец дыяпазону:" -#: ../plug-ins/common/cml-explorer.c:1691 +#: plug-ins/common/cml-explorer.c:1829 msgid "Plot a Graph of the Settings" -msgstr "Пабудаваць ґрафік наладак" +msgstr "Пабудаваць графік налад" -#: ../plug-ins/common/cml-explorer.c:1736 +#: plug-ins/common/cml-explorer.c:1871 msgid "Ch. sensitivity:" msgstr "Успрым. канала:" -#: ../plug-ins/common/cml-explorer.c:1746 +#: plug-ins/common/cml-explorer.c:1879 msgid "Mutation rate:" -msgstr "Часьціня зьмяненьняў:" +msgstr "Частата змяненняў:" -#: ../plug-ins/common/cml-explorer.c:1756 +#: plug-ins/common/cml-explorer.c:1887 msgid "Mutation dist.:" -msgstr "Разьм. зьмяненьня:" +msgstr "Разм. змянення:" -#: ../plug-ins/common/cml-explorer.c:1849 +#: plug-ins/common/cml-explorer.c:1979 msgid "Graph of the Current Settings" -msgstr "Ґрафік бягучых наладак" +msgstr "Графік бягучых налад" -#: ../plug-ins/common/cml-explorer.c:1920 +#: plug-ins/common/cml-explorer.c:1983 plug-ins/common/plugin-browser.c:560 +#: plug-ins/common/procedure-browser.c:168 +#: plug-ins/common/sample-colorize.c:1415 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 +msgid "_Close" +msgstr "_Закрыць" + +#: plug-ins/common/cml-explorer.c:2051 msgid "Warning: the source and the destination are the same channel." -msgstr "Перасьцярога: крыніца й мэта — адзін і той жа канал." +msgstr "Увага. Крыніца і мэта — адзін і той жа канал." -#: ../plug-ins/common/cml-explorer.c:1979 +#: plug-ins/common/cml-explorer.c:2110 msgid "Save CML Explorer Parameters" -msgstr "Захаваць парамэтры ППС" +msgstr "Захаваць параметры ППС" -#: ../plug-ins/common/cml-explorer.c:2112 +#: plug-ins/common/cml-explorer.c:2166 plug-ins/common/curve-bend.c:822 +#: plug-ins/common/file-dicom.c:1558 plug-ins/common/file-farbfeld.c:381 +#: plug-ins/common/file-mng.c:876 plug-ins/common/file-mng.c:1223 +#: plug-ins/common/file-pcx.c:1230 plug-ins/common/file-pdf-save.c:720 +#: plug-ins/common/file-png.c:1502 plug-ins/common/file-raw-data.c:1345 +#: plug-ins/common/file-raw-data.c:1374 plug-ins/common/file-sunras.c:638 +#: plug-ins/common/file-tga.c:1238 plug-ins/common/file-xmc.c:1383 +#: plug-ins/common/sphere-designer.c:2201 plug-ins/file-bmp/bmp-save.c:341 +#: plug-ins/file-fli/fli-pika.c:817 plug-ins/file-icns/file-icns-save.c:428 +#: plug-ins/file-ico/ico-save.c:1341 plug-ins/file-ico/ico-save.c:1558 +#: 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/fractal-explorer/fractal-explorer-dialogs.c:1538 +#: plug-ins/gfig/gfig.c:897 plug-ins/ifs-compose/ifs-compose.c:2414 +#: plug-ins/lighting/lighting-ui.c:1233 +#, c-format +msgid "Could not open '%s' for writing: %s" +msgstr "Не ўдалося адкрыць «%s» на запіс: %s" + +#: plug-ins/common/cml-explorer.c:2221 +#, c-format +msgid "Parameters were saved to '%s'" +msgstr "Параметры былі захаваныя ў «%s»" + +#: plug-ins/common/cml-explorer.c:2243 msgid "Load CML Explorer Parameters" -msgstr "Загрузіць парамэтры дасьледніка ППС" +msgstr "Загрузіць параметры даследніка ППС" -#: ../plug-ins/common/cml-explorer.c:2230 +#: plug-ins/common/cml-explorer.c:2339 plug-ins/common/curve-bend.c:875 +#: plug-ins/common/file-cel.c:352 plug-ins/common/file-cel.c:403 +#: plug-ins/common/file-cel.c:641 plug-ins/common/file-dicom.c:377 +#: plug-ins/common/file-farbfeld.c:299 plug-ins/common/file-gif-load.c:410 +#: plug-ins/common/file-iff.c:227 plug-ins/common/file-mng.c:1407 +#: plug-ins/common/file-pcx.c:523 plug-ins/common/file-pcx.c:566 +#: plug-ins/common/file-png.c:673 plug-ins/common/file-ps.c:1126 +#: plug-ins/common/file-ps.c:3636 plug-ins/common/file-psp.c:2445 +#: plug-ins/common/file-psp.c:2495 plug-ins/common/file-qoi.c:300 +#: plug-ins/common/file-raw-data.c:514 plug-ins/common/file-raw-data.c:1673 +#: plug-ins/common/file-sunras.c:458 plug-ins/common/file-svg.c:365 +#: plug-ins/common/file-svg.c:825 plug-ins/common/file-tga.c:448 +#: plug-ins/common/file-wbmp.c:184 plug-ins/common/file-xbm.c:750 +#: plug-ins/common/file-xmc.c:658 plug-ins/common/file-xmc.c:897 +#: plug-ins/common/file-xwd.c:486 plug-ins/common/sphere-designer.c:2090 +#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:155 +#: plug-ins/file-faxg3/faxg3.c:256 plug-ins/file-fits/fits.c:396 +#: plug-ins/file-fli/fli-pika.c:459 plug-ins/file-fli/fli-pika.c:510 +#: plug-ins/file-icns/file-icns-load.c:515 +#: plug-ins/file-icns/file-icns-load.c:566 plug-ins/file-ico/ico-load.c:681 +#: plug-ins/file-ico/ico-load.c:819 plug-ins/file-ico/ico-load.c:1019 +#: plug-ins/file-jpeg/jpeg-load.c:99 plug-ins/file-jpeg/jpeg-load.c:614 +#: 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:1855 +#: plug-ins/fractal-explorer/fractal-explorer.c:1038 plug-ins/gfig/gfig.c:527 +#: plug-ins/help/pikahelplocale.c:255 plug-ins/help/pikahelplocale.c:271 +#: plug-ins/lighting/lighting-ui.c:1377 +#, c-format +msgid "Could not open '%s' for reading: %s" +msgstr "Не ўдалося адкрыць «%s» для чытання: %s" + +#: plug-ins/common/cml-explorer.c:2361 msgid "Error: it's not CML parameter file." -msgstr "Памылка: не зьяўляецца файлам парамэтраў ППС." +msgstr "Памылка: не з'яўляецца файлам параметраў ППС." -#: ../plug-ins/common/cml-explorer.c:2237 +#: plug-ins/common/cml-explorer.c:2368 #, c-format msgid "Warning: '%s' is an old format file." -msgstr "Перасьцярога: састарэлы фармат файла «%s»." +msgstr "Увага. Састарэлы фармат файла «%s»." -#: ../plug-ins/common/cml-explorer.c:2241 +#: plug-ins/common/cml-explorer.c:2372 #, c-format msgid "Warning: '%s' is a parameter file for a newer version of CML Explorer." msgstr "" -"Перасьцярога: «%s» зьяўляецца файлам парамэтраў для навейшай вэрсіі " -"Дасьледніка ППС." +"Увага. «%s» з'яўляецца файлам параметраў для больш новай версіі Даследніка " +"ППС." -#: ../plug-ins/common/cml-explorer.c:2304 +#: plug-ins/common/cml-explorer.c:2435 msgid "Error: failed to load parameters" -msgstr "Памылка: не ўдалося загрузіць парамэтры" +msgstr "Памылка: не ўдалося загрузіць параметры" -#: ../plug-ins/common/color-cube-analyze.c:106 -msgid "Analyze the set of colors in the image" -msgstr "Аналізаваць набор колераў відарыса" - -#: ../plug-ins/common/color-cube-analyze.c:112 -msgid "Colorcube A_nalysis..." -msgstr "_Аналіз кубу колераў…" - -#: ../plug-ins/common/color-cube-analyze.c:200 -#: ../plug-ins/common/color-cube-analyze.c:356 -msgid "Colorcube Analysis" -msgstr "Аналіз кубу колераў" - -#. output results -#: ../plug-ins/common/color-cube-analyze.c:384 -#: ../plug-ins/imagemap/imap_cmd_guides.c:230 -#, c-format -msgid "Image dimensions: %d × %d" -msgstr "Вымеры відарыса: %d × %d" - -#: ../plug-ins/common/color-cube-analyze.c:387 -msgid "No colors" -msgstr "Няма колераў" - -#: ../plug-ins/common/color-cube-analyze.c:389 -msgid "Only one unique color" -msgstr "Толькі адзін унікальны колер" - -#: ../plug-ins/common/color-cube-analyze.c:391 -#, c-format -msgid "Number of unique colors: %d" -msgstr "Колькасьць унікальных колераў: %d" - -#: ../plug-ins/common/color-enhance.c:68 -msgid "Stretch color saturation to cover maximum possible range" -msgstr "" -"Расьцягнуць насычанаць колера, каб яна распрасьціралася на максымальна " -"магчымы дыяпазон" - -#: ../plug-ins/common/color-enhance.c:80 -msgid "_Color Enhance" -msgstr "_Палепшыць колеры" - -#: ../plug-ins/common/color-enhance.c:114 -msgid "Color Enhance" -msgstr "Паляпшэньне колераў" - -#: ../plug-ins/common/color-exchange.c:122 -msgid "Swap one color with another" -msgstr "Абменьвае пэўны колер зь іншым" - -#: ../plug-ins/common/color-exchange.c:128 -msgid "_Color Exchange..." -msgstr "_Абмен колераў…" - -#: ../plug-ins/common/color-exchange.c:213 -#: ../plug-ins/common/color-exchange.c:287 -msgid "Color Exchange" -msgstr "Абмен колераў" - -#: ../plug-ins/common/color-exchange.c:310 -msgid "Middle-Click Inside Preview to Pick \"From Color\"" -msgstr "" -"Пстрыкні сярэдняй кнопкай унутры агляду,\n" -"каб выбраць «З колеру»" - -#: ../plug-ins/common/color-exchange.c:355 -msgid "To Color" -msgstr "У колер" - -#: ../plug-ins/common/color-exchange.c:355 -msgid "From Color" -msgstr "З колеру" - -#: ../plug-ins/common/color-exchange.c:379 -msgid "Color Exchange: To Color" -msgstr "Абмен колераў: з колера" - -#: ../plug-ins/common/color-exchange.c:380 -msgid "Color Exchange: From Color" -msgstr "Абмен колераў: у колер" - -#: ../plug-ins/common/color-exchange.c:436 -msgid "R_ed threshold:" -msgstr "Парог чырвонага:" - -#: ../plug-ins/common/color-exchange.c:492 -msgid "G_reen threshold:" -msgstr "Парог _зялёнага:" - -#: ../plug-ins/common/color-exchange.c:548 -msgid "B_lue threshold:" -msgstr "Парог _сіняга:" - -#: ../plug-ins/common/color-exchange.c:574 -msgid "Lock _thresholds" -msgstr "_Замкнуць парогі" - -#: ../plug-ins/common/color-to-alpha.c:94 -msgid "Convert a specified color to transparency" -msgstr "Ператварыць вызначаны колер у празрыстасьць" - -#: ../plug-ins/common/color-to-alpha.c:101 -msgid "Color to _Alpha..." -msgstr "Колер у _альфу…" - -#: ../plug-ins/common/color-to-alpha.c:184 -msgid "Removing color" -msgstr "Выдаленьне колеру" - -#: ../plug-ins/common/color-to-alpha.c:377 -msgid "Color to Alpha" -msgstr "Колер у альфу" - -#: ../plug-ins/common/color-to-alpha.c:411 -msgctxt "color-to-alpha" -msgid "From:" -msgstr "З:" - -#: ../plug-ins/common/color-to-alpha.c:415 -msgid "Color to Alpha Color Picker" -msgstr "Выбар колера, які стане празрыстым" - -#: ../plug-ins/common/color-to-alpha.c:430 -msgid "to alpha" -msgstr "у альфу" - -#: ../plug-ins/common/colorify.c:102 -msgid "Replace all colors with shades of a specified color" -msgstr "Замена ўсіх колераў на адценьні вызначанага колера" - -#: ../plug-ins/common/colorify.c:108 -msgid "Colorif_y..." -msgstr "_Калярызаваць…" - -#: ../plug-ins/common/colorify.c:169 -msgid "Colorifying" -msgstr "Калярызаваньне" - -#: ../plug-ins/common/colorify.c:255 -msgid "Colorify" -msgstr "Калярызаваньне" - -#: ../plug-ins/common/colorify.c:290 -msgid "Custom color:" -msgstr "Свой колер:" - -#: ../plug-ins/common/colorify.c:295 -msgid "Colorify Custom Color" -msgstr "Калярызаваць сваім колерам" - -#: ../plug-ins/common/colormap-remap.c:97 -msgid "Rearrange the colormap" -msgstr "Пераўпарадкаваньне мапы колераў" - -#: ../plug-ins/common/colormap-remap.c:104 +#: plug-ins/common/colormap-remap.c:186 msgid "R_earrange Colormap..." -msgstr "_Упарадкаваць мапу колераў…" +msgstr "_Упарадкаваць карту колераў…" -#: ../plug-ins/common/colormap-remap.c:116 -msgid "Swap two colors in the colormap" -msgstr "Абмяняць два колеры ў мапе" +#: plug-ins/common/colormap-remap.c:192 +msgid "Rearrange the colormap" +msgstr "Пераўпарадкаванне карты колераў" -#: ../plug-ins/common/colormap-remap.c:123 +#: plug-ins/common/colormap-remap.c:220 msgid "_Swap Colors" msgstr "_Абмяняць колеры" -#: ../plug-ins/common/colormap-remap.c:286 -#: ../plug-ins/common/colormap-remap.c:297 -#: ../plug-ins/common/colormap-remap.c:308 -msgid "Invalid remap array was passed to remap function" -msgstr "Функцыі ператварэньня перададзены недапушчальны масыў ператварэньня" +#: plug-ins/common/colormap-remap.c:224 +msgid "Swap two colors in the colormap" +msgstr "Абмяняць два колеры ў карце" -#: ../plug-ins/common/colormap-remap.c:332 -msgid "Rearranging the colormap" -msgstr "Пераўпарадкаваньне мапы колераў" - -#: ../plug-ins/common/colormap-remap.c:481 +#: plug-ins/common/colormap-remap.c:277 msgid "Sort on Hue" -msgstr "Упарадкаваць паводле адценьня" +msgstr "Упарадкаваць паводле адцення" -#: ../plug-ins/common/colormap-remap.c:485 +#: plug-ins/common/colormap-remap.c:278 msgid "Sort on Saturation" -msgstr "Упарадкаваць паводле насычанасьці" +msgstr "Упарадкаваць паводле насычанасці" -#: ../plug-ins/common/colormap-remap.c:489 +#: plug-ins/common/colormap-remap.c:279 msgid "Sort on Value" -msgstr "Упарадкаваць паводле яркасьці" +msgstr "Упарадкаваць паводле яркасці" -#: ../plug-ins/common/colormap-remap.c:493 +#: plug-ins/common/colormap-remap.c:284 msgid "Reverse Order" msgstr "Адваротны парадак" -#: ../plug-ins/common/colormap-remap.c:497 +#: plug-ins/common/colormap-remap.c:285 msgid "Reset Order" -msgstr "Вернуць парадак" +msgstr "Вярнуць парадак" -#: ../plug-ins/common/colormap-remap.c:596 +#: plug-ins/common/colormap-remap.c:408 plug-ins/common/colormap-remap.c:419 +#: plug-ins/common/colormap-remap.c:430 +msgid "Invalid remap array was passed to remap function" +msgstr "Функцыі пераўтварэння перададзены недапушчальны масыў пераўтварэння" + +#: plug-ins/common/colormap-remap.c:454 +msgid "Rearranging the colormap" +msgstr "Пераўпарадкаванне карты колераў" + +#: plug-ins/common/colormap-remap.c:682 msgid "Rearrange Colormap" -msgstr "Пераўпарадкаваць мапу колераў" +msgstr "Пераўпарадкаваць карту колераў" -#: ../plug-ins/common/colormap-remap.c:700 +#. The Reset button +#: plug-ins/common/colormap-remap.c:686 plug-ins/common/curve-bend.c:1446 +#: plug-ins/common/sample-colorize.c:1413 +#: plug-ins/common/sphere-designer.c:2631 plug-ins/common/tile-small.c:531 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:809 +#: plug-ins/pikaressionist/preview.c:182 plug-ins/ifs-compose/ifs-compose.c:907 +#: plug-ins/selection-to-path/selection-to-path.c:412 +msgid "_Reset" +msgstr "_Скінуць" + +#: plug-ins/common/colormap-remap.c:788 msgid "" "Drag and drop colors to rearrange the colormap. The numbers shown are the " "original indices. Right-click for a menu with sort options." msgstr "" -"Пстрыкні й цягні колеры, каб пераўпарадкаваць мапу колераў. Паказаныя лічбы " -"— спачатныя індэксы. Пстрыкні правай кнопкай, каб выклікаць мэню з выборамі " -"ўпарадкаваньня." +"Перацягвайце колеры, каб пераўпарадкаваць карту колераў. Паказаныя лічбы — " +"першапачатковыя індэксы. Націсніце правай кнопкай мышы, каб выклікаць меню " +"з параметрамі ўпарадкавання." -#: ../plug-ins/common/compose.c:189 ../plug-ins/common/decompose.c:170 -#: ../plug-ins/common/file-raw.c:1100 -msgid "RGB" -msgstr "RGB" +#: plug-ins/common/colormap-remap.c:826 +msgid "Rearrange Colors" +msgstr "Пераўпарадкаваць колеры" -#: ../plug-ins/common/compose.c:200 ../plug-ins/common/decompose.c:178 -msgid "RGBA" -msgstr "RGBA" +#. Decompositions availables. +#. * All the following values have to be kept in sync with those of decompose.c +#. +#: plug-ins/common/compose.c:204 +msgid "_Red:" +msgstr "_Чырвоны:" -#: ../plug-ins/common/compose.c:204 ../plug-ins/common/noise-rgb.c:528 -#: ../plug-ins/common/noise-rgb.c:543 +#: plug-ins/common/compose.c:205 +msgid "_Green:" +msgstr "_Зялёны:" + +#: plug-ins/common/compose.c:206 +msgid "_Blue:" +msgstr "_Сіні:" + +#: plug-ins/common/compose.c:207 msgid "_Alpha:" msgstr "_Альфа:" -#: ../plug-ins/common/compose.c:211 ../plug-ins/common/decompose.c:184 -msgid "HSV" -msgstr "HSV" - -#: ../plug-ins/common/compose.c:212 ../plug-ins/common/compose.c:220 +#: plug-ins/common/compose.c:209 plug-ins/common/compose.c:213 msgid "_Hue:" -msgstr "_Адценьне:" +msgstr "_Адценне:" -#: ../plug-ins/common/compose.c:213 ../plug-ins/common/compose.c:221 -#: ../plug-ins/common/noise-hsv.c:425 +#: plug-ins/common/compose.c:210 plug-ins/common/compose.c:214 msgid "_Saturation:" -msgstr "_Насычанасьць:" +msgstr "_Насычанасць:" -#: ../plug-ins/common/compose.c:214 ../plug-ins/common/noise-hsv.c:437 +#: plug-ins/common/compose.c:211 msgid "_Value:" -msgstr "_Яркасьць:" +msgstr "_Яркасць:" -#: ../plug-ins/common/compose.c:219 ../plug-ins/common/decompose.c:193 -msgid "HSL" -msgstr "HSL" - -#: ../plug-ins/common/compose.c:222 +#: plug-ins/common/compose.c:215 msgid "_Lightness:" -msgstr "_Сьветласьць:" +msgstr "_Cветласць:" -#: ../plug-ins/common/compose.c:227 ../plug-ins/common/decompose.c:202 -msgid "CMY" -msgstr "CMY" - -#: ../plug-ins/common/compose.c:228 ../plug-ins/common/compose.c:236 +#: plug-ins/common/compose.c:217 msgid "_Cyan:" -msgstr "_Блакітны:" +msgstr "_Цыянавы:" -#: ../plug-ins/common/compose.c:229 ../plug-ins/common/compose.c:237 +#: plug-ins/common/compose.c:218 msgid "_Magenta:" -msgstr "_Пурпуровы:" +msgstr "_Маджэнта:" -#: ../plug-ins/common/compose.c:230 ../plug-ins/common/compose.c:238 +#: plug-ins/common/compose.c:219 msgid "_Yellow:" msgstr "_Жоўты:" -#: ../plug-ins/common/compose.c:235 ../plug-ins/common/decompose.c:211 -msgid "CMYK" -msgstr "CMYK" - -#: ../plug-ins/common/compose.c:239 +#: plug-ins/common/compose.c:220 msgid "_Black:" msgstr "_Чорны:" -#: ../plug-ins/common/compose.c:243 ../plug-ins/common/decompose.c:224 +#: plug-ins/common/compose.c:222 +msgid "_L:" +msgstr "_L:" + +#: plug-ins/common/compose.c:223 +msgid "_A:" +msgstr "_A:" + +#: plug-ins/common/compose.c:224 +msgid "_B:" +msgstr "_B:" + +#: plug-ins/common/compose.c:226 +msgid "_L" +msgstr "_L" + +#: plug-ins/common/compose.c:227 +msgid "_C" +msgstr "_C" + +#: plug-ins/common/compose.c:228 +msgid "_H" +msgstr "_H" + +#: plug-ins/common/compose.c:230 +msgid "_Luma y470:" +msgstr "_Luma y470:" + +#: plug-ins/common/compose.c:231 +msgid "_Blueness cb470:" +msgstr "_Blueness cb470:" + +#: plug-ins/common/compose.c:232 +msgid "_Redness cr470:" +msgstr "_Redness cr470:" + +#: plug-ins/common/compose.c:234 +msgid "_Luma y709:" +msgstr "_Luma y709:" + +#: plug-ins/common/compose.c:235 +msgid "_Blueness cb709:" +msgstr "_Blueness cb709:" + +#: plug-ins/common/compose.c:236 +msgid "_Redness cr709:" +msgstr "_Redness cr709:" + +#: plug-ins/common/compose.c:242 plug-ins/common/decompose.c:193 +#: plug-ins/common/file-heif.c:2517 +msgid "RGB" +msgstr "RGB" + +#: plug-ins/common/compose.c:249 plug-ins/common/decompose.c:194 +msgid "RGBA" +msgstr "RGBA" + +#: plug-ins/common/compose.c:257 plug-ins/common/decompose.c:201 +msgid "HSV" +msgstr "HSV" + +#: plug-ins/common/compose.c:264 plug-ins/common/decompose.c:206 +msgid "HSL" +msgstr "HSL" + +#: plug-ins/common/compose.c:271 plug-ins/common/decompose.c:211 +#: plug-ins/common/file-jp2-load.c:1014 +msgid "CMYK" +msgstr "CMYK" + +#: plug-ins/common/compose.c:279 plug-ins/common/decompose.c:217 msgid "LAB" msgstr "LAB" -#: ../plug-ins/common/compose.c:252 -msgid "_Luma y470:" -msgstr "_Яркасьць y470:" +#: plug-ins/common/compose.c:286 plug-ins/common/decompose.c:219 +msgid "LCH" +msgstr "LCH" -#: ../plug-ins/common/compose.c:253 -msgid "_Blueness cb470:" -msgstr "_Сінь cb470:" +#: plug-ins/common/compose.c:293 plug-ins/common/decompose.c:221 +msgid "YCbCr_ITU_R470" +msgstr "YCbCr_ITU_R470" -#: ../plug-ins/common/compose.c:254 -msgid "_Redness cr470:" -msgstr "_Чырвань cr470:" +#: plug-ins/common/compose.c:300 plug-ins/common/decompose.c:224 +msgid "YCbCr_ITU_R709" +msgstr "YCbCr_ITU_R709" -#: ../plug-ins/common/compose.c:260 -msgid "_Luma y709:" -msgstr "_Яркасьць y709:" +#: plug-ins/common/compose.c:307 plug-ins/common/decompose.c:222 +msgid "YCbCr_ITU_R470_256" +msgstr "YCbCr_ITU_R470_256" -#: ../plug-ins/common/compose.c:261 -msgid "_Blueness cb709:" -msgstr "_Сінь cb709:" +#: plug-ins/common/compose.c:314 plug-ins/common/decompose.c:225 +msgid "YCbCr_ITU_R709_256" +msgstr "YCbCr_ITU_R709_256" -#: ../plug-ins/common/compose.c:262 -msgid "_Redness cr709:" -msgstr "_Чырвань cr709:" +#: plug-ins/common/compose.c:401 +msgid "C_ompose..." +msgstr "_Скласці…" -#: ../plug-ins/common/compose.c:268 -msgid "_Luma y470f:" -msgstr "_Яркасьць y470f:" - -#: ../plug-ins/common/compose.c:269 -msgid "_Blueness cb470f:" -msgstr "_Сінь cb470f:" - -#: ../plug-ins/common/compose.c:270 -msgid "_Redness cr470f:" -msgstr "_Чырвань cr470f:" - -#: ../plug-ins/common/compose.c:276 -msgid "_Luma y709f:" -msgstr "_Яркасьць y709f:" - -#: ../plug-ins/common/compose.c:277 -msgid "_Blueness cb709f:" -msgstr "_Сінь cb709f:" - -#: ../plug-ins/common/compose.c:278 -msgid "_Redness cr709f:" -msgstr "_Чырвань cr709f:" - -#: ../plug-ins/common/compose.c:404 +#: plug-ins/common/compose.c:405 msgid "Create an image using multiple gray images as color channels" msgstr "Стварыць відарыс, ужываючы розныя шэрыя відарысы як каналы колераў" -#: ../plug-ins/common/compose.c:410 -msgid "C_ompose..." -msgstr "_Скласьці…" - -#: ../plug-ins/common/compose.c:434 -msgid "Recompose an image that was previously decomposed" -msgstr "Скласьці відарыс, які раней быў раскладзены" - -#: ../plug-ins/common/compose.c:442 +#: plug-ins/common/compose.c:508 msgid "R_ecompose" -msgstr "_Скласьці раскладзенае" +msgstr "_Скласці раскладзенае" -#: ../plug-ins/common/compose.c:488 +#: plug-ins/common/compose.c:512 +msgid "Recompose an image that was previously decomposed" +msgstr "Скласці відарыс, які раней быў раскладзены" + +#: plug-ins/common/compose.c:577 msgid "" "You can only run 'Recompose' if the active image was originally produced by " "'Decompose'." msgstr "" -"Выконваць складаньне раскладзенага можна толькі тады, калі актыўны відарыс " -"быў атрыманы праз раскладаньне." +"Выконваць складанне раскладзенага можна толькі тады, калі актыўны відарыс " +"быў атрыманы праз раскладанне." -#: ../plug-ins/common/compose.c:512 +#: plug-ins/common/compose.c:608 msgid "Error scanning 'decompose-data' parasite: too few layers found" -msgstr "Памылка сканаваньня паразыту 'decompose-data': замала пластоў адшукана" +msgstr "" +"Памылка сканавання паразіта 'decompose-data': знойдзена занадта мала слаёў" -#: ../plug-ins/common/compose.c:545 +#: plug-ins/common/compose.c:623 +#, fuzzy, c-format +#| msgid "Unable to recompose, source layer not found" +msgid "Cannot recompose: Specified source layer ID %d not found" +msgstr "Немагчыма скласці, зыходны слой не адшуканы" + +#: plug-ins/common/compose.c:643 +#, fuzzy, c-format +#| msgid "Specified layer %d not found" +msgid "Cannot recompose: Specified layer #%d ID %d not found" +msgstr "Пазначаны слой %d не адшуканы" + +#: plug-ins/common/compose.c:675 #, c-format msgid "Could not get layers for image %d" -msgstr "Немагчыма атрымаць пласты відарыса %d" +msgstr "Не ўдалося атрымаць слаі відарыса %d" -#: ../plug-ins/common/compose.c:612 +#: plug-ins/common/compose.c:739 msgid "Composing" -msgstr "Складаньне" +msgstr "Складанне" -#: ../plug-ins/common/compose.c:697 ../plug-ins/common/compose.c:1731 +#: plug-ins/common/compose.c:974 plug-ins/common/compose.c:1419 msgid "At least one image is needed to compose" -msgstr "Прынамсі адзін відарыс патрэбны для складаньня" +msgstr "Прынамсі адзін відарыс патрэбны для складання" -#: ../plug-ins/common/compose.c:708 ../plug-ins/common/compose.c:722 -#, c-format -msgid "Specified layer %d not found" -msgstr "Пазначаны пласт %d не адшуканы" - -#: ../plug-ins/common/compose.c:730 +#: plug-ins/common/compose.c:995 msgid "Drawables have different size" -msgstr "Абшары рысаваньня маюць розныя памеры" +msgstr "Вобласці малявання маюць розныя памеры" -#: ../plug-ins/common/compose.c:755 +#: plug-ins/common/compose.c:1023 msgid "Images have different size" msgstr "Відарысы маюць розныя памеры" -#: ../plug-ins/common/compose.c:773 +#: plug-ins/common/compose.c:1041 msgid "Error in getting layer IDs" -msgstr "Памылка атрыманьня ID пласта" +msgstr "Памылка атрымання ID слоя" -#: ../plug-ins/common/compose.c:796 -#, c-format -msgid "Image is not a gray image (bpp=%d)" -msgstr "Відарыс не зьяўляецца шэрым (bpp=%d)" - -#: ../plug-ins/common/compose.c:824 -msgid "Unable to recompose, source layer not found" -msgstr "Немагчыма скласьці, выточны пласт не адшуканы" - -#: ../plug-ins/common/compose.c:1483 +#: plug-ins/common/compose.c:1179 msgid "Compose" -msgstr "Складаньне" +msgstr "Складанне" #. Compose type combo -#: ../plug-ins/common/compose.c:1511 +#: plug-ins/common/compose.c:1207 msgid "Compose Channels" -msgstr "Скласьці каналы" +msgstr "Скласці каналы" -#: ../plug-ins/common/compose.c:1521 ../plug-ins/common/decompose.c:1528 +#: plug-ins/common/compose.c:1217 plug-ins/common/decompose.c:896 msgid "Color _model:" msgstr "_Мадэль колераў:" -#. Channel representation table -#: ../plug-ins/common/compose.c:1553 +#. Channel representation grid +#: plug-ins/common/compose.c:1249 msgid "Channel Representations" -msgstr "Увасабленьні каналаў" +msgstr "Увасабленні каналаў" -#: ../plug-ins/common/compose.c:1616 +#: plug-ins/common/compose.c:1308 msgid "Mask value" -msgstr "Маскаваць яркасьць" - -#: ../plug-ins/common/contrast-normalize.c:79 -msgid "Stretch brightness values to cover the full range" msgstr "" -"Расьцягнуць значэньні яркасьці, каб яны распрасьціраліся на ўвесь дыяпазон" -#: ../plug-ins/common/contrast-normalize.c:91 -#: ../plug-ins/common/edge-dog.c:362 -msgid "_Normalize" -msgstr "_Нармалізаваць" - -#: ../plug-ins/common/contrast-normalize.c:125 -msgid "Normalizing" -msgstr "Нармалізаваньне" - -#: ../plug-ins/common/contrast-retinex.c:156 -msgid "Enhance contrast using the Retinex method" -msgstr "Паляпшэньне кантрасту мэтадам Retinex" - -#: ../plug-ins/common/contrast-retinex.c:166 +#: plug-ins/common/contrast-retinex.c:178 msgid "Retine_x..." msgstr "Retine_x…" -#: ../plug-ins/common/contrast-retinex.c:250 +#: plug-ins/common/contrast-retinex.c:182 +msgid "Enhance contrast using the Retinex method" +msgstr "Паляпшэнне кантрасту метадам Retinex" + +#: plug-ins/common/contrast-retinex.c:184 +msgid "" +"The Retinex Image Enhancement Algorithm is an automatic image enhancement " +"method that enhances a digital image in terms of dynamic range compression, " +"color independence from the spectral distribution of the scene illuminant, " +"and color/lightness rendition." +msgstr "" + +#: plug-ins/common/contrast-retinex.c:199 +msgid "Scal_e" +msgstr "" + +#: plug-ins/common/contrast-retinex.c:200 +#, fuzzy +#| msgid "Initial value:" +msgid "Biggest scale value" +msgstr "Пачатковае значэнне:" + +#: plug-ins/common/contrast-retinex.c:205 +#, fuzzy +#| msgid "Scale _division:" +msgid "Scale _division" +msgstr "_Дзяленне шкалы:" + +#: plug-ins/common/contrast-retinex.c:206 +#: plug-ins/common/wavelet-decompose.c:132 +#, fuzzy +#| msgid "Number of Tiles" +msgid "Number of scales" +msgstr "Колькасць плітак" + +#: plug-ins/common/contrast-retinex.c:211 +msgid "Le_vel" +msgstr "_Узровень" + +#: plug-ins/common/contrast-retinex.c:212 +msgid "Retinex distribution through scales { Uniform (0), Low (1), High (2) }" +msgstr "" + +#: plug-ins/common/contrast-retinex.c:218 +#, fuzzy +#| msgid "Dy_namic:" +msgid "Dy_namic" +msgstr "Д_ынаміка:" + +#: plug-ins/common/contrast-retinex.c:219 +#, fuzzy +#| msgid "Use average value" +msgid "Variance value" +msgstr "Ужыць сярэдняе значэнне" + +#: plug-ins/common/contrast-retinex.c:297 msgid "Retinex" msgstr "Retinex" -#: ../plug-ins/common/contrast-retinex.c:285 +#: plug-ins/common/contrast-retinex.c:337 msgid "Retinex Image Enhancement" -msgstr "Паляпшэньне паводле Retinex" +msgstr "Паляпшэнне паводле Retinex" -#: ../plug-ins/common/contrast-retinex.c:321 +#: plug-ins/common/contrast-retinex.c:352 msgid "Uniform" msgstr "Аднолькавы" -#: ../plug-ins/common/contrast-retinex.c:322 +#: plug-ins/common/contrast-retinex.c:353 plug-ins/metadata/metadata-tags.c:254 msgid "Low" msgstr "Нізкі" -#: ../plug-ins/common/contrast-retinex.c:323 +#: plug-ins/common/contrast-retinex.c:354 plug-ins/metadata/metadata-tags.c:254 msgid "High" msgstr "Высокі" -#: ../plug-ins/common/contrast-retinex.c:334 -msgid "_Level:" -msgstr "_Узровень:" - -#: ../plug-ins/common/contrast-retinex.c:339 -msgid "_Scale:" -msgstr "_Шкала:" - -#: ../plug-ins/common/contrast-retinex.c:352 -msgid "Scale _division:" -msgstr "_Дзяленьне шкалы:" - -#: ../plug-ins/common/contrast-retinex.c:365 -msgid "Dy_namic:" -msgstr "Д_ынаміка:" - -#: ../plug-ins/common/contrast-retinex.c:633 +#: plug-ins/common/contrast-retinex.c:688 msgid "Retinex: filtering" -msgstr "Retinex: фільтраваньне" +msgstr "Retinex: фільтраванне" -#: ../plug-ins/common/contrast-stretch-hsv.c:67 -msgid "Stretch image contrast to cover the maximum possible range" -msgstr "" -"Расьцягнуць кантраст відарыса, каб ён распрасьціраўся на максымальна магчымы " -"дыяпазон" - -#: ../plug-ins/common/contrast-stretch-hsv.c:80 -msgid "Stretch _HSV" -msgstr "_Расьцягнуць HSV" - -#: ../plug-ins/common/contrast-stretch-hsv.c:115 -msgid "Auto-Stretching HSV" -msgstr "Аўтарасьцягваньне HSV" - -#: ../plug-ins/common/contrast-stretch-hsv.c:191 -msgid "autostretch_hsv: cmap was NULL! Quitting...\n" -msgstr "autostretch_hsv: cmap быў NULL! Выхад…\n" - -#: ../plug-ins/common/contrast-stretch.c:67 -msgid "Stretch contrast to cover the maximum possible range" -msgstr "" -"Расьцягнуць кантраст, каб ён распрасьціраўся на максымальна магчымы дыяпазон" - -#: ../plug-ins/common/contrast-stretch.c:78 -msgid "_Stretch Contrast" -msgstr "_Расьцягнуць кантраст" - -#: ../plug-ins/common/contrast-stretch.c:112 -msgid "Auto-stretching contrast" -msgstr "Аўтапарасьцягваньне кантрасту" - -#: ../plug-ins/common/contrast-stretch.c:151 -msgid "c_astretch: cmap was NULL! Quitting...\n" -msgstr "c_astretch: cmap быў NULL! Выхад…\n" - -#: ../plug-ins/common/convolution-matrix.c:64 -msgid "Gr_ey" -msgstr "_Шэры" - -#: ../plug-ins/common/convolution-matrix.c:65 -msgid "Re_d" -msgstr "_Чырвоны" - -#: ../plug-ins/common/convolution-matrix.c:66 -#: ../plug-ins/common/newsprint.c:344 -msgid "_Green" -msgstr "_Зялёны" - -#: ../plug-ins/common/convolution-matrix.c:67 -#: ../plug-ins/common/newsprint.c:352 -msgid "_Blue" -msgstr "_Сіні" - -#: ../plug-ins/common/convolution-matrix.c:68 -msgid "_Alpha" -msgstr "_Альфа" - -#: ../plug-ins/common/convolution-matrix.c:73 -msgid "E_xtend" -msgstr "_Пашырыць" - -#: ../plug-ins/common/convolution-matrix.c:74 -#: ../plug-ins/common/displace.c:477 ../plug-ins/common/edge.c:700 -#: ../plug-ins/common/fractal-trace.c:737 ../plug-ins/common/ripple.c:585 -msgid "_Wrap" -msgstr "_Загарнуць" - -#: ../plug-ins/common/convolution-matrix.c:75 -msgid "Cro_p" -msgstr "_Абрэзаць" - -#: ../plug-ins/common/convolution-matrix.c:201 -msgid "Apply a generic 5x5 convolution matrix" -msgstr "Ужыць агульную матрыцу згортваньня 5×5" - -#: ../plug-ins/common/convolution-matrix.c:206 -msgid "_Convolution Matrix..." -msgstr "_Матрыца згортаваньня…" - -#: ../plug-ins/common/convolution-matrix.c:241 -msgid "Convolution does not work on layers smaller than 3x3 pixels." -msgstr "Згортваньне не працуе на пластах, меншых за 3×3 піксэлі." - -#: ../plug-ins/common/convolution-matrix.c:314 -msgid "Applying convolution" -msgstr "Выкарыстаньне згортаваньня" - -#: ../plug-ins/common/convolution-matrix.c:898 -msgid "Convolution Matrix" -msgstr "Матрыца згортаваньня" - -#: ../plug-ins/common/convolution-matrix.c:937 -msgid "Matrix" -msgstr "Матрыца" - -#: ../plug-ins/common/convolution-matrix.c:975 -msgid "D_ivisor:" -msgstr "_Дзельнік:" - -#: ../plug-ins/common/convolution-matrix.c:1001 -#: ../plug-ins/common/depth-merge.c:775 ../plug-ins/common/file-raw.c:1121 -msgid "O_ffset:" -msgstr "Зрушэньне:" - -#: ../plug-ins/common/convolution-matrix.c:1030 -msgid "N_ormalise" -msgstr "_Нармалізаваць" - -#: ../plug-ins/common/convolution-matrix.c:1042 -msgid "A_lpha-weighting" -msgstr "_Узважваць празрыстасьць" - -#: ../plug-ins/common/convolution-matrix.c:1061 -msgid "Border" -msgstr "Мяжа" - -#: ../plug-ins/common/convolution-matrix.c:1088 -msgid "Channels" -msgstr "Каналы" - -#: ../plug-ins/common/crop-auto.c:84 -msgid "Remove empty borders from the image" -msgstr "Выдаліць пустыя межы зь відарыса" - -#: ../plug-ins/common/crop-auto.c:89 -msgid "Autocrop Imag_e" -msgstr "Аўтаабрэзаць _відарыс" - -#: ../plug-ins/common/crop-auto.c:98 -msgid "Remove empty borders from the layer" -msgstr "Выдаліць пустыя межы з пласта" - -#: ../plug-ins/common/crop-auto.c:103 -msgid "Autocrop Lay_er" -msgstr "Аўтаабрэзаць _пласт" - -#: ../plug-ins/common/crop-auto.c:150 -msgid "Cropping" -msgstr "Абразаньне" - -#: ../plug-ins/common/crop-zealous.c:84 -msgid "Autocrop unused space from edges and middle" -msgstr "Аўтаматычна адрэзаць нявыкарыстаную прастору зь сярэдзіны й бакоў" - -#: ../plug-ins/common/crop-zealous.c:89 +#: plug-ins/common/crop-zealous.c:114 msgid "_Zealous Crop" -msgstr "_Стараннае абразаньне" +msgstr "_Стараннае абразанне" -#: ../plug-ins/common/crop-zealous.c:137 +#: plug-ins/common/crop-zealous.c:118 +msgid "Autocrop unused space from edges and middle" +msgstr "Аўтаматычна адрэзаць нявыкарыстаную прастору з сярэдзіны і бакоў" + +#: plug-ins/common/crop-zealous.c:144 msgid "Zealous cropping" -msgstr "Стараннае адразаньне" +msgstr "Стараннае адразанне" -#: ../plug-ins/common/crop-zealous.c:238 +#: plug-ins/common/crop-zealous.c:284 msgid "Nothing to crop." msgstr "Няма чаго абразаць." -#: ../plug-ins/common/cubism.c:150 -msgid "Convert the image into randomly rotated square blobs" -msgstr "Ператварае відарыс у павернутыя выпадковым чынам квадратныя плямы" - -#: ../plug-ins/common/cubism.c:155 -msgid "_Cubism..." -msgstr "_Кубізм…" - -#: ../plug-ins/common/cubism.c:268 -msgid "Cubism" -msgstr "Кубізм" - -#: ../plug-ins/common/cubism.c:306 -msgid "_Tile size:" -msgstr "_Памер пліткі:" - -#: ../plug-ins/common/cubism.c:319 -msgid "T_ile saturation:" -msgstr "_Насычанасьць пліткі:" - -#: ../plug-ins/common/cubism.c:330 -msgid "_Use background color" -msgstr "Ужываць колер _асноведзі" - -#: ../plug-ins/common/cubism.c:422 -msgid "Cubistic transformation" -msgstr "Кубістычнае ператварэньне" - -#: ../plug-ins/common/curve-bend.c:527 -msgid "Bend the image using two control curves" -msgstr "Сагнуць відарыс з дапамогай дзьвюх кіроўных крывых" - -#: ../plug-ins/common/curve-bend.c:548 +#: plug-ins/common/curve-bend.c:430 msgid "_Curve Bend..." -msgstr "_Скрыўленьне крывымі…" +msgstr "_Скрыўленне крывымі…" -#: ../plug-ins/common/curve-bend.c:684 ../plug-ins/common/edge-dog.c:178 +#: plug-ins/common/curve-bend.c:435 +msgid "Bend the image using two control curves" +msgstr "Сагнуць відарыс з дапамогай дзвюх кіроўных крывых" + +#: plug-ins/common/curve-bend.c:684 msgid "Can operate on layers only (but was called on channel or mask)." -msgstr "Працуе толькі з пластамі (але выкліканы з каналам ці маскай)" +msgstr "Працуе толькі са слаямі (але выкліканы з каналам ці маскай)" -#: ../plug-ins/common/curve-bend.c:694 +#: plug-ins/common/curve-bend.c:698 msgid "Cannot operate on layers with masks." -msgstr "Немагчыма працаваць з пластамі з маскамі." +msgstr "Немагчыма працаваць са слаямі з маскамі." -#: ../plug-ins/common/curve-bend.c:706 +#: plug-ins/common/curve-bend.c:713 msgid "Cannot operate on empty selections." -msgstr "Немагчыма працаваць з пустымі вылучэньнямі." +msgstr "Немагчыма працаваць з пустымі вылучэннямі." -#: ../plug-ins/common/curve-bend.c:902 +#: plug-ins/common/curve-bend.c:885 #, c-format msgid "Error while reading '%s': %s" -msgstr "Памылка падчас чытаньня «%s»: %s." +msgstr "Памылка падчас чытання «%s»: %s" #. Possibly retrieve data from a previous run #. The shell and main vbox -#: ../plug-ins/common/curve-bend.c:1225 ../plug-ins/common/curve-bend.c:2956 +#: plug-ins/common/curve-bend.c:1199 plug-ins/common/curve-bend.c:2941 msgid "Curve Bend" -msgstr "Скрыўленьне крывымі" +msgstr "Скрыўленне крывымі" #. Preview area, top of column #. preview -#: ../plug-ins/common/curve-bend.c:1262 -#: ../plug-ins/pikaressionist/orientmap.c:590 -#: ../plug-ins/pikaressionist/sizemap.c:459 -#: ../plug-ins/print/print-page-layout.c:175 +#: plug-ins/common/curve-bend.c:1236 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:1291 +#: plug-ins/common/curve-bend.c:1263 msgid "_Preview Once" msgstr "_Агляд адзін раз" #. The preview toggle -#: ../plug-ins/common/curve-bend.c:1300 +#: plug-ins/common/curve-bend.c:1272 msgid "Automatic pre_view" msgstr "_Аўтаматычны агляд" #. Options area, bottom of column -#. Options section -#: ../plug-ins/common/curve-bend.c:1310 ../plug-ins/common/ripple.c:523 -#: ../plug-ins/gfig/gfig-dialog.c:1243 +#: plug-ins/common/curve-bend.c:1282 plug-ins/gfig/gfig-dialog.c:1215 msgid "Options" -msgstr "Выборы" +msgstr "Параметры" #. Rotate spinbutton -#: ../plug-ins/common/curve-bend.c:1324 +#: plug-ins/common/curve-bend.c:1296 msgid "Rotat_e:" msgstr "_Паварот:" #. The smoothing toggle -#: ../plug-ins/common/curve-bend.c:1343 +#: plug-ins/common/curve-bend.c:1315 msgid "Smoo_thing" -msgstr "З_мазваньне" +msgstr "З_мазванне" #. The antialiasing toggle -#: ../plug-ins/common/curve-bend.c:1353 ../plug-ins/common/mosaic.c:729 -#: ../plug-ins/common/qbist.c:858 ../plug-ins/common/ripple.c:532 +#: plug-ins/common/curve-bend.c:1325 plug-ins/common/qbist.c:1009 msgid "_Antialiasing" -msgstr "_Згладжваньне" +msgstr "_Згладжванне" #. The work_on_copy toggle -#: ../plug-ins/common/curve-bend.c:1363 +#: plug-ins/common/curve-bend.c:1335 msgid "Work on cop_y" msgstr "Працаваць з _копіяй" #. The curves graph -#: ../plug-ins/common/curve-bend.c:1373 +#: plug-ins/common/curve-bend.c:1345 msgid "Modify Curves" -msgstr "Зьмяненьне крывых" +msgstr "Змяненне крывых" -#: ../plug-ins/common/curve-bend.c:1401 +#: plug-ins/common/curve-bend.c:1374 msgid "Curve for Border" msgstr "Крывая для мяжы" -#: ../plug-ins/common/curve-bend.c:1405 +#: plug-ins/common/curve-bend.c:1378 +msgctxt "curve-border" msgid "_Upper" msgstr "_Верхняй" -#: ../plug-ins/common/curve-bend.c:1406 +#: plug-ins/common/curve-bend.c:1379 +msgctxt "curve-border" msgid "_Lower" msgstr "_Ніжняй" -#: ../plug-ins/common/curve-bend.c:1416 +#: plug-ins/common/curve-bend.c:1389 msgid "Curve Type" msgstr "Тып крывой" -#: ../plug-ins/common/curve-bend.c:1420 +#: plug-ins/common/curve-bend.c:1393 msgid "Smoot_h" msgstr "Змазана_я" -#: ../plug-ins/common/curve-bend.c:1421 +#: plug-ins/common/curve-bend.c:1394 msgid "_Free" msgstr "_Свабодная" #. The Copy button -#: ../plug-ins/common/curve-bend.c:1436 +#: plug-ins/common/curve-bend.c:1409 +#: plug-ins/gradient-flare/gradient-flare.c:3083 msgid "_Copy" msgstr "_Капіяваць" -#: ../plug-ins/common/curve-bend.c:1441 +#: plug-ins/common/curve-bend.c:1414 msgid "Copy the active curve to the other border" msgstr "Зрабіць крывую іншай мяжы копіяй актыўнай крывой" #. The CopyInv button -#: ../plug-ins/common/curve-bend.c:1448 +#: plug-ins/common/curve-bend.c:1421 msgid "_Mirror" msgstr "_Люстэрка" -#: ../plug-ins/common/curve-bend.c:1453 +#: plug-ins/common/curve-bend.c:1426 msgid "Mirror the active curve to the other border" msgstr "Зрабіць крывую іншай мяжы люстэркавай копіяй актыўнай крывой" #. The Swap button -#: ../plug-ins/common/curve-bend.c:1461 +#: plug-ins/common/curve-bend.c:1434 msgid "S_wap" msgstr "_Абмяняць" -#: ../plug-ins/common/curve-bend.c:1466 +#: plug-ins/common/curve-bend.c:1439 msgid "Swap the two curves" -msgstr "Абмяняць дзьве крывыя" +msgstr "Абмяняць дзве крывыя" -#: ../plug-ins/common/curve-bend.c:1478 +#: plug-ins/common/curve-bend.c:1451 msgid "Reset the active curve" -msgstr "Вернуць актыўную крывую" +msgstr "Вярнуць актыўную крывую" -#: ../plug-ins/common/curve-bend.c:1495 +#: plug-ins/common/curve-bend.c:1468 msgid "Load the curves from a file" msgstr "Загрузіць крывыя з файла" -#: ../plug-ins/common/curve-bend.c:1507 +#: plug-ins/common/curve-bend.c:1480 msgid "Save the curves to a file" msgstr "Захаваць крывыя ў файл" -#: ../plug-ins/common/curve-bend.c:2063 +#: plug-ins/common/curve-bend.c:1973 msgid "Load Curve Points from File" msgstr "Загрузіць пункты крывых з файла" -#: ../plug-ins/common/curve-bend.c:2098 +#: plug-ins/common/curve-bend.c:2008 msgid "Save Curve Points to File" msgstr "Захаваць пункты крывых у файл" -#: ../plug-ins/common/decompose.c:170 ../plug-ins/common/decompose.c:174 -#: ../plug-ins/common/decompose.c:178 +#: plug-ins/common/decompose.c:156 msgid "red" msgstr "чырвоны" -#: ../plug-ins/common/decompose.c:171 ../plug-ins/common/decompose.c:175 -#: ../plug-ins/common/decompose.c:179 +#: plug-ins/common/decompose.c:157 msgid "green" msgstr "зялёны" -#: ../plug-ins/common/decompose.c:172 ../plug-ins/common/decompose.c:176 -#: ../plug-ins/common/decompose.c:180 +#: plug-ins/common/decompose.c:158 msgid "blue" msgstr "сіні" -#: ../plug-ins/common/decompose.c:181 ../plug-ins/common/decompose.c:221 +#: plug-ins/common/decompose.c:159 msgid "alpha" -msgstr "альфа" +msgstr "альфа-канал" -#: ../plug-ins/common/decompose.c:184 ../plug-ins/common/decompose.c:188 +#: plug-ins/common/decompose.c:161 plug-ins/common/decompose.c:165 msgid "hue" -msgstr "адценьне" +msgstr "адценне" -#: ../plug-ins/common/decompose.c:185 ../plug-ins/common/decompose.c:189 +#: plug-ins/common/decompose.c:162 plug-ins/common/decompose.c:166 msgid "saturation" -msgstr "насычанасьць" +msgstr "насычанасць" -#: ../plug-ins/common/decompose.c:186 ../plug-ins/common/decompose.c:190 +#: plug-ins/common/decompose.c:163 msgid "value" -msgstr "яркасьць" +msgstr "яркасць" -#: ../plug-ins/common/decompose.c:193 ../plug-ins/common/decompose.c:197 -msgid "hue_l" -msgstr "адценьне-я" - -#: ../plug-ins/common/decompose.c:194 ../plug-ins/common/decompose.c:198 -msgid "saturation_l" -msgstr "насычанасьць-я" - -#: ../plug-ins/common/decompose.c:195 ../plug-ins/common/decompose.c:199 +#: plug-ins/common/decompose.c:167 msgid "lightness" -msgstr "сьветласьць" +msgstr "светласць" -#: ../plug-ins/common/decompose.c:197 -msgid "Hue (HSL)" -msgstr "Адценьне (HSL)" - -#: ../plug-ins/common/decompose.c:198 -msgid "Saturation (HSL)" -msgstr "Насычанасьць (HSL)" - -#: ../plug-ins/common/decompose.c:199 -msgid "Lightness" -msgstr "Сьветласьць" - -#: ../plug-ins/common/decompose.c:202 ../plug-ins/common/decompose.c:206 +#: plug-ins/common/decompose.c:169 msgid "cyan" -msgstr "блакітны" +msgstr "цыянавы" -#: ../plug-ins/common/decompose.c:203 ../plug-ins/common/decompose.c:207 +#: plug-ins/common/decompose.c:170 msgid "magenta" -msgstr "пурпуровы" +msgstr "маджэнта" -#: ../plug-ins/common/decompose.c:204 ../plug-ins/common/decompose.c:208 +#: plug-ins/common/decompose.c:171 msgid "yellow" msgstr "жоўты" -#: ../plug-ins/common/decompose.c:206 -msgid "Cyan" -msgstr "Блакітны" - -#: ../plug-ins/common/decompose.c:207 -msgid "Magenta" -msgstr "Пурпуровы" - -#: ../plug-ins/common/decompose.c:208 -msgid "Yellow" -msgstr "Жоўты" - -#: ../plug-ins/common/decompose.c:211 ../plug-ins/common/decompose.c:216 -msgid "cyan-k" -msgstr "блакітны-ч" - -#: ../plug-ins/common/decompose.c:212 ../plug-ins/common/decompose.c:217 -msgid "magenta-k" -msgstr "пурпуровы-ч" - -#: ../plug-ins/common/decompose.c:213 ../plug-ins/common/decompose.c:218 -msgid "yellow-k" -msgstr "жоўты-ч" - -#: ../plug-ins/common/decompose.c:214 +#: plug-ins/common/decompose.c:172 msgid "black" msgstr "чорны" -#: ../plug-ins/common/decompose.c:216 -msgid "Cyan_K" -msgstr "Блакітны_Ч" +#: plug-ins/common/decompose.c:174 plug-ins/common/decompose.c:178 +msgid "L" +msgstr "L" -#: ../plug-ins/common/decompose.c:217 -msgid "Magenta_K" -msgstr "Пурпуровы_Ч" +#: plug-ins/common/decompose.c:175 +msgid "A" +msgstr "A" -#: ../plug-ins/common/decompose.c:218 -msgid "Yellow_K" -msgstr "Жоўты_Ч" +#: plug-ins/common/decompose.c:176 +msgid "B" +msgstr "B" -#: ../plug-ins/common/decompose.c:221 -msgid "Alpha" -msgstr "Альфа" +#: plug-ins/common/decompose.c:179 +msgid "C" +msgstr "C" -#: ../plug-ins/common/decompose.c:229 +#: plug-ins/common/decompose.c:180 +msgid "H" +msgstr "H" + +#: plug-ins/common/decompose.c:182 msgid "luma-y470" -msgstr "яркасьць-y470" +msgstr "luma-y470" -#: ../plug-ins/common/decompose.c:230 +#: plug-ins/common/decompose.c:183 msgid "blueness-cb470" -msgstr "cінь-cb470" +msgstr "blueness-cb470" -#: ../plug-ins/common/decompose.c:231 +#: plug-ins/common/decompose.c:184 msgid "redness-cr470" -msgstr "чырвань-cr470" +msgstr "redness-cr470" -#: ../plug-ins/common/decompose.c:233 +#: plug-ins/common/decompose.c:186 msgid "luma-y709" -msgstr "яркасьць-y709" +msgstr "luma-y709" -#: ../plug-ins/common/decompose.c:234 +#: plug-ins/common/decompose.c:187 msgid "blueness-cb709" -msgstr "сінь-cb709" +msgstr "blueness-cb709" -#: ../plug-ins/common/decompose.c:235 +#: plug-ins/common/decompose.c:188 msgid "redness-cr709" -msgstr "чырвань-cr709" +msgstr "redness-cr709" -#: ../plug-ins/common/decompose.c:237 -msgid "luma-y470f" -msgstr "яркасьць-y470f" +#. Redmode radio frame +#: plug-ins/common/decompose.c:196 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:985 +msgid "Red" +msgstr "Чырвоны" -#: ../plug-ins/common/decompose.c:238 -msgid "blueness-cb470f" -msgstr "сінь-cb470f" +#. Greenmode radio frame +#: plug-ins/common/decompose.c:197 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1026 +msgid "Green" +msgstr "Зялёны" -#: ../plug-ins/common/decompose.c:239 -msgid "redness-cr470f" -msgstr "чырвань-cr470f" +#. Bluemode radio frame +#: plug-ins/common/decompose.c:198 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1067 +msgid "Blue" +msgstr "Сіні" -#: ../plug-ins/common/decompose.c:241 -msgid "luma-y709f" -msgstr "яркасьць-y709f" +#: plug-ins/common/decompose.c:199 +msgid "Alpha" +msgstr "Альфа-канал" -#: ../plug-ins/common/decompose.c:242 -msgid "blueness-cb709f" -msgstr "сінь-cb709f" +#: plug-ins/common/decompose.c:207 +msgid "Hue (HSL)" +msgstr "Адценне (HSL)" -#: ../plug-ins/common/decompose.c:243 -msgid "redness-cr709f" -msgstr "чырвань-cr709f" +#: plug-ins/common/decompose.c:208 +msgid "Saturation (HSL)" +msgstr "Насычанасць (HSL)" -#: ../plug-ins/common/decompose.c:312 ../plug-ins/common/decompose.c:326 -msgid "Decompose an image into separate colorspace components" -msgstr "Раскласьці відарыс на асобныя складнікі прасторы колераў" +#: plug-ins/common/decompose.c:209 +msgid "Lightness" +msgstr "Cветласць" -#: ../plug-ins/common/decompose.c:318 ../plug-ins/common/decompose.c:336 +#: plug-ins/common/decompose.c:212 +msgid "Cyan" +msgstr "Цыянавы" + +#: plug-ins/common/decompose.c:213 +msgid "Magenta" +msgstr "Маджэнта" + +#: plug-ins/common/decompose.c:214 +msgid "Yellow" +msgstr "Жоўты" + +#: plug-ins/common/decompose.c:215 plug-ins/common/warp.c:617 +#: plug-ins/file-fits/fits.c:1028 plug-ins/flame/flame.c:1223 +#: plug-ins/gfig/gfig-dialog.c:1459 +msgid "Black" +msgstr "Чорны" + +#: plug-ins/common/decompose.c:282 msgid "_Decompose..." -msgstr "_Раскласьці…" +msgstr "_Раскласці…" -#: ../plug-ins/common/decompose.c:429 +#: plug-ins/common/decompose.c:286 +msgid "Decompose an image into separate colorspace components" +msgstr "Раскласці відарыс на асобныя складнікі прасторы колераў" + +#: plug-ins/common/decompose.c:414 msgid "Decomposing" -msgstr "Раскладаньне" +msgstr "Раскладанне" -#: ../plug-ins/common/decompose.c:1493 +#: plug-ins/common/decompose.c:549 +msgid "Image not suitable for this decomposition" +msgstr "" + +#: plug-ins/common/decompose.c:874 msgid "Decompose" -msgstr "Раскладаньне" +msgstr "Раскладанне" -#: ../plug-ins/common/decompose.c:1516 +#: plug-ins/common/decompose.c:884 msgid "Extract Channels" msgstr "Выняць каналы" -#: ../plug-ins/common/decompose.c:1563 +#: plug-ins/common/decompose.c:933 msgid "_Decompose to layers" -msgstr "_Раскласьці на пласты" +msgstr "_Раскласці на слаі" -#: ../plug-ins/common/decompose.c:1574 +#: plug-ins/common/decompose.c:937 msgid "_Foreground as registration color" -msgstr "_Колер рысаваньня — колер прывядзеньня" +msgstr "_Колер малявання — колер прывядзення" -#: ../plug-ins/common/decompose.c:1575 +#: plug-ins/common/decompose.c:938 msgid "" "Pixels in the foreground color will appear black in all output images. This " "can be used for things like crop marks that have to show up on all channels." msgstr "" -"Піксэлі, якія маюць колер рысаваньня, будуць адлюстроўвацца чорным на ўсіх " +"Пікселі, якія маюць колер малявання, будуць адлюстроўвацца чорным на ўсіх " "выніковых відарысах. Гэта можа быць карысным для рэчаў кшталту пазнак " -"абразаньня, якія мусяць вылучацца на ўсіх каналах." +"абразання, якія мусяць вылучацца на ўсіх каналах." -#: ../plug-ins/common/deinterlace.c:91 -msgid "Fix images where every other row is missing" -msgstr "Папраўляе відарысы, ў якіх адсутнічае кожны іншы радок" - -#: ../plug-ins/common/deinterlace.c:100 -msgid "_Deinterlace..." -msgstr "_Дэінтэрлэйс.." - -#: ../plug-ins/common/deinterlace.c:157 ../plug-ins/common/deinterlace.c:323 -msgid "Deinterlace" -msgstr "Дэінтэрлэйс" - -#: ../plug-ins/common/deinterlace.c:356 -msgid "Keep o_dd fields" -msgstr "Пакінуць _няцотныя палі" - -#: ../plug-ins/common/deinterlace.c:357 -msgid "Keep _even fields" -msgstr "Пакінуць _цотныя палі" - -#: ../plug-ins/common/depth-merge.c:183 -msgid "Combine two images using depth maps (z-buffers)" -msgstr "Аб'яднаць два відарысы, ужываючы мапы глыбіні (z-буфэры)" - -#: ../plug-ins/common/depth-merge.c:192 +#: plug-ins/common/depth-merge.c:218 msgid "_Depth Merge..." msgstr "Аб'яднаць _глыбіні…" -#: ../plug-ins/common/depth-merge.c:393 +#: plug-ins/common/depth-merge.c:222 +msgid "Combine two images using depth maps (z-buffers)" +msgstr "Аб'яднаць два відарысы, ужываючы карты глыбіні (z-буферы)" + +#: plug-ins/common/depth-merge.c:470 msgid "Depth-merging" -msgstr "Аб'яднаньне глыбіняў" +msgstr "Аб'яднанне глыбінь" -#: ../plug-ins/common/depth-merge.c:651 +#: plug-ins/common/depth-merge.c:730 msgid "Depth Merge" -msgstr "Аб'яднаньне глыбіняў" +msgstr "Аб'яднанне глыбінь" -#: ../plug-ins/common/depth-merge.c:703 +#: plug-ins/common/depth-merge.c:780 msgid "Source 1:" msgstr "Крыніца 1:" -#: ../plug-ins/common/depth-merge.c:718 ../plug-ins/common/depth-merge.c:748 +#: plug-ins/common/depth-merge.c:793 plug-ins/common/depth-merge.c:821 msgid "Depth map:" -msgstr "Мапа глыбіні:" +msgstr "Карта глыбіні:" -#: ../plug-ins/common/depth-merge.c:733 +#: plug-ins/common/depth-merge.c:808 msgid "Source 2:" msgstr "Крыніца 2:" -#: ../plug-ins/common/depth-merge.c:765 +#. Numeric parameters +#: plug-ins/common/depth-merge.c:837 msgid "O_verlap:" -msgstr "_Накладаньне:" +msgstr "_Накладанне:" -#: ../plug-ins/common/depth-merge.c:785 +#: plug-ins/common/depth-merge.c:846 +msgid "O_ffset:" +msgstr "Зрушэнне:" + +#: plug-ins/common/depth-merge.c:855 msgid "Sc_ale 1:" msgstr "_Шкала 1:" -#: ../plug-ins/common/depth-merge.c:795 +#: plug-ins/common/depth-merge.c:864 msgid "Sca_le 2:" msgstr "Ш_кала 2:" -#: ../plug-ins/common/despeckle.c:160 -msgid "Remove speckle noise from the image" -msgstr "Прыбраць крапінкі зь відарыса" - -#: ../plug-ins/common/despeckle.c:166 +#: plug-ins/common/despeckle.c:169 msgid "Des_peckle..." -msgstr "Ад _сьмецьця…" +msgstr "Ад _смецця…" -#: ../plug-ins/common/despeckle.c:441 ../plug-ins/common/despeckle.c:872 -msgid "Despeckle" -msgstr "Ачышчэньне ад сьмецьця" +#: plug-ins/common/despeckle.c:173 +msgid "Remove speckle noise from the image" +msgstr "Прыбраць крапінкі з відарыса" -#: ../plug-ins/common/despeckle.c:471 -msgid "Median" -msgstr "Мэдыяна" +#: plug-ins/common/despeckle.c:175 +msgid "" +"This plug-in selectively performs a median or adaptive box filter on an " +"image." +msgstr "" -#: ../plug-ins/common/despeckle.c:479 -msgid "_Adaptive" -msgstr "_Адаптыўная" +#: plug-ins/common/despeckle.c:185 +msgid "R_adius" +msgstr "_Радыус" -#: ../plug-ins/common/despeckle.c:489 -msgid "R_ecursive" -msgstr "_Рэкурсыўная" +#: plug-ins/common/despeckle.c:186 +msgid "Filter box radius" +msgstr "Радыус цыліндра" -#: ../plug-ins/common/despeckle.c:510 ../plug-ins/common/edge-neon.c:734 -#: ../plug-ins/common/nl-filter.c:1091 ../plug-ins/common/nova.c:362 -#: ../plug-ins/common/unsharp-mask.c:865 ../plug-ins/common/whirl-pinch.c:591 -#: ../plug-ins/gradient-flare/gradient-flare.c:2757 -#: ../plug-ins/imagemap/imap_circle.c:277 -msgid "_Radius:" -msgstr "_Радыюс:" +#: plug-ins/common/despeckle.c:191 +msgid "_Filter Type" +msgstr "_Тып фільтра" -#: ../plug-ins/common/despeckle.c:526 -msgid "_Black level:" +#: plug-ins/common/despeckle.c:192 +msgid "" +"Filter type { MEDIAN (0), ADAPTIVE (1), RECURSIVE-MEDIAN (2), RECURSIVE-" +"ADAPTIVE (3) }" +msgstr "" + +#: plug-ins/common/despeckle.c:198 +msgid "_Black level" msgstr "Узровень _чорнага" -#: ../plug-ins/common/despeckle.c:542 -msgid "_White level:" +#: plug-ins/common/despeckle.c:199 +msgid "Black level" +msgstr "Узровень чорнага" + +#: plug-ins/common/despeckle.c:204 +msgid "_White level" msgstr "Узровень _белага" -#: ../plug-ins/common/destripe.c:103 -msgid "Remove vertical stripe artifacts from the image" -msgstr "Прыбірае артэфакты тыпу вэртыкальных палосаў зь відарыса" +#: plug-ins/common/despeckle.c:205 +msgid "White level" +msgstr "Узровень белага" -#: ../plug-ins/common/destripe.c:109 +#: plug-ins/common/despeckle.c:408 plug-ins/common/despeckle.c:784 +msgid "Despeckle" +msgstr "Ачышчэнне ад смецця" + +#: plug-ins/common/despeckle.c:418 +msgid "Median" +msgstr "Медыяльнае" + +#: plug-ins/common/despeckle.c:419 plug-ins/pikaressionist/orientation.c:176 +#: plug-ins/pikaressionist/size.c:183 +msgid "Adaptive" +msgstr "Адаптыўнае" + +#: plug-ins/common/despeckle.c:420 +msgid "Recursive-Median" +msgstr "Рэкурсіўна-медыяльнае" + +#: plug-ins/common/despeckle.c:421 +msgid "Recursive-Adaptive" +msgstr "Рэкурсіўна-адаптыўнае" + +#: plug-ins/common/destripe.c:126 msgid "Des_tripe..." msgstr "_Прыбраць палосы…" -#: ../plug-ins/common/destripe.c:270 -msgid "Destriping" -msgstr "Прыбіраньне палосаў" +#: plug-ins/common/destripe.c:130 +msgid "Remove vertical stripe artifacts from the image" +msgstr "Прыбірае артэфакты тыпу вертыкальных палос з відарыса" -#: ../plug-ins/common/destripe.c:440 -msgid "Destripe" -msgstr "Прыбіраньне палосаў" +#: plug-ins/common/destripe.c:132 +msgid "This plug-in tries to remove vertical stripes from an image." +msgstr "Убудова спрабуе выдаліць вертыкальныя палосы з відарыса" -#: ../plug-ins/common/destripe.c:476 ../plug-ins/common/file-html-table.c:584 -#: ../plug-ins/common/file-ps.c:3034 ../plug-ins/common/file-ps.c:3232 -#: ../plug-ins/common/file-raw.c:1134 ../plug-ins/common/smooth-palette.c:437 -#: ../plug-ins/common/tile-paper.c:303 ../plug-ins/common/tile.c:428 -#: ../plug-ins/imagemap/imap_cmd_guides.c:164 -#: ../plug-ins/imagemap/imap_rectangle.c:401 -#: ../plug-ins/print/print-page-layout.c:280 -msgid "_Width:" -msgstr "_Шырыня:" +#: plug-ins/common/destripe.c:141 plug-ins/common/file-html-table.c:194 +#: plug-ins/common/file-ps.c:383 plug-ins/common/file-ps.c:497 +#: plug-ins/common/file-raw-data.c:352 plug-ins/imagemap/imap_grid.c:255 +msgid "_Width" +msgstr "_Шырыня" -#: ../plug-ins/common/destripe.c:487 +#: plug-ins/common/destripe.c:142 +msgid "Averaging filter width" +msgstr "" + +#: plug-ins/common/destripe.c:148 msgid "Create _histogram" -msgstr "_Стварыць гістаграмы" +msgstr "_Стварыць гістаграму" -#: ../plug-ins/common/diffraction.c:167 -msgid "Generate diffraction patterns" -msgstr "Стварае ўзоры пераламленьня" +#: plug-ins/common/destripe.c:149 +msgid "Output a histogram" +msgstr "Вывад гістаграмы" -#: ../plug-ins/common/diffraction.c:172 -msgid "_Diffraction Patterns..." -msgstr "_Узоры пераламленьня…" +#: plug-ins/common/destripe.c:270 +msgid "Destriping" +msgstr "Прыбіранне палос" -#: ../plug-ins/common/diffraction.c:335 -msgid "Creating diffraction pattern" -msgstr "Стварэньне ўзораў пераламленьня" +#: plug-ins/common/destripe.c:492 +msgid "Destripe" +msgstr "Прыбіранне палос" -#: ../plug-ins/common/diffraction.c:439 -msgid "Diffraction Patterns" -msgstr "Узоры пераламленьня" - -#: ../plug-ins/common/diffraction.c:482 -#: ../plug-ins/map-object/map-object-ui.c:1348 -msgid "_Preview!" -msgstr "_Агляд!" - -#: ../plug-ins/common/diffraction.c:532 -msgid "Frequencies" -msgstr "Частоты" - -#: ../plug-ins/common/diffraction.c:570 -msgid "Contours" -msgstr "Абрысы" - -#: ../plug-ins/common/diffraction.c:608 -msgid "Sharp Edges" -msgstr "Рэзкія краі" - -#: ../plug-ins/common/diffraction.c:620 ../plug-ins/common/softglow.c:685 -#: ../plug-ins/flame/flame.c:1080 -msgid "_Brightness:" -msgstr "_Яркасьць:" - -#: ../plug-ins/common/diffraction.c:629 -msgid "Sc_attering:" -msgstr "_Раскіданьне:" - -#: ../plug-ins/common/diffraction.c:638 -msgid "Po_larization:" -msgstr "_Палярызацыя:" - -#: ../plug-ins/common/diffraction.c:646 -msgid "Other Options" -msgstr "Іншыя выборы" - -#: ../plug-ins/common/displace.c:142 -msgid "_X displacement" -msgstr "Зрух па _X:" - -#: ../plug-ins/common/displace.c:142 -msgid "_Pinch" -msgstr "_Шчыпок" - -#: ../plug-ins/common/displace.c:143 -msgid "_Y displacement" -msgstr "Зрух па _Y:" - -#: ../plug-ins/common/displace.c:143 -msgid "_Whirl" -msgstr "_Вір" - -#: ../plug-ins/common/displace.c:169 -msgid "Displace pixels as indicated by displacement maps" -msgstr "Зрушыць піксэлі ў адпаведнасьцю з мапамі зрушэньня" - -#: ../plug-ins/common/displace.c:179 -msgid "_Displace..." -msgstr "_Зрушыць…" - -#: ../plug-ins/common/displace.c:290 -msgid "Displacing" -msgstr "Зрушэньне" - -#: ../plug-ins/common/displace.c:326 -msgid "Displace" -msgstr "Зрушэньне" - -#. X options -#: ../plug-ins/common/displace.c:363 -msgid "_X displacement:" -msgstr "Зрушэньне па _X:" - -#. Y Options -#: ../plug-ins/common/displace.c:412 -msgid "_Y displacement:" -msgstr "Зрух па _X:" - -#: ../plug-ins/common/displace.c:464 -msgid "Displacement Mode" -msgstr "Рэжым зрушэньня" - -#: ../plug-ins/common/displace.c:467 -msgid "_Cartesian" -msgstr "_Дэкартаў" - -#: ../plug-ins/common/displace.c:468 -msgid "_Polar" -msgstr "_Палярны" - -#: ../plug-ins/common/displace.c:473 -msgid "Edge Behavior" -msgstr "Паводзіны краю" - -#: ../plug-ins/common/displace.c:479 ../plug-ins/common/edge.c:713 -#: ../plug-ins/common/ripple.c:586 ../plug-ins/common/waves.c:283 -msgid "_Smear" -msgstr "_Размазаць" - -#: ../plug-ins/common/displace.c:481 ../plug-ins/common/edge.c:726 -#: ../plug-ins/common/fractal-trace.c:741 ../plug-ins/common/newsprint.c:389 -msgid "_Black" -msgstr "_Чорны колер" - -#: ../plug-ins/common/edge-dog.c:135 -msgid "Edge detection with control of edge thickness" -msgstr "Вызначэньне краёў з кантролем таўшчыні краёў" - -#: ../plug-ins/common/edge-dog.c:142 -msgid "_Difference of Gaussians..." -msgstr "_Рознасьць ґаўсаўскіх…" - -#: ../plug-ins/common/edge-dog.c:245 ../plug-ins/common/edge-dog.c:302 -msgid "DoG Edge Detect" -msgstr "Вызначэньне краёў рознасьцю ґаўсаўскіх" - -#: ../plug-ins/common/edge-dog.c:332 -msgid "Smoothing Parameters" -msgstr "Параметры змазваньня" - -#: ../plug-ins/common/edge-dog.c:346 -msgid "_Radius 1:" -msgstr "Радыюс _1:" - -#: ../plug-ins/common/edge-dog.c:350 -msgid "R_adius 2:" -msgstr "Радыюс _2:" - -#: ../plug-ins/common/edge-dog.c:373 ../plug-ins/pikaressionist/paper.c:166 -msgid "_Invert" -msgstr "_Інвэртаваць" - -#: ../plug-ins/common/edge-laplace.c:75 -msgid "High-resolution edge detection" -msgstr "Вызначэньне края з высокім разрозьненьнем" - -#: ../plug-ins/common/edge-laplace.c:85 -msgid "_Laplace" -msgstr "_Ляпляс" - -#: ../plug-ins/common/edge-laplace.c:243 ../plug-ins/common/edge.c:664 -msgid "Laplace" -msgstr "Ляплясаў" - -#: ../plug-ins/common/edge-laplace.c:321 -msgid "Cleanup" -msgstr "Ачысьціць" - -#: ../plug-ins/common/edge-neon.c:134 -msgid "Simulate the glowing boundary of a neon light" -msgstr "Удаць сьвячэньне нэону" - -#: ../plug-ins/common/edge-neon.c:139 -msgid "_Neon..." -msgstr "_Нэон…" - -#: ../plug-ins/common/edge-neon.c:211 -msgid "Neon" -msgstr "Нэон" - -#: ../plug-ins/common/edge-neon.c:696 -msgid "Neon Detection" -msgstr "Вызначэньне нэону" - -#: ../plug-ins/common/edge-neon.c:749 ../plug-ins/common/unsharp-mask.c:878 -msgid "_Amount:" -msgstr "_Узровень:" - -#: ../plug-ins/common/edge-sobel.c:108 -msgid "Specialized direction-dependent edge detection" -msgstr "Спэцыялізаванае, залежнае ад напрамку вызначэньне краёў" - -#: ../plug-ins/common/edge-sobel.c:121 -msgid "_Sobel..." -msgstr "_Собэль…" - -#: ../plug-ins/common/edge-sobel.c:231 -msgid "Sobel Edge Detection" -msgstr "Вызначэньне краёў апэратарам Собэля" - -#: ../plug-ins/common/edge-sobel.c:261 -msgid "Sobel _horizontally" -msgstr "Собэль па _гарызанталі" - -#: ../plug-ins/common/edge-sobel.c:273 -msgid "Sobel _vertically" -msgstr "Собэль па _вэртыкалі" - -#: ../plug-ins/common/edge-sobel.c:285 -msgid "_Keep sign of result (one direction only)" -msgstr "_Пакінуць знак выніку (толькі адзін напрамак)" - -#: ../plug-ins/common/edge-sobel.c:371 -msgid "Sobel edge detecting" -msgstr "Вызначэньне краёў апэратарам Собэля" - -#: ../plug-ins/common/edge.c:148 -msgid "Several simple methods for detecting edges" -msgstr "Некалькі простых мэтадаў вызначэньня краёў" - -#: ../plug-ins/common/edge.c:153 -msgid "_Edge..." -msgstr "_Край…" - -#: ../plug-ins/common/edge.c:225 -msgid "Edge detection" -msgstr "Вызначэньне краю" - -#: ../plug-ins/common/edge.c:623 -msgid "Edge Detection" -msgstr "Вызначэньне краю" - -#: ../plug-ins/common/edge.c:659 -msgid "Sobel" -msgstr "Собэля" - -#: ../plug-ins/common/edge.c:660 -msgid "Prewitt compass" -msgstr "Компас Прэвіта" - -#: ../plug-ins/common/edge.c:661 ../plug-ins/common/sinus.c:905 -msgid "Gradient" -msgstr "Ґрадыентны" - -#: ../plug-ins/common/edge.c:662 -msgid "Roberts" -msgstr "Робэртса" - -#: ../plug-ins/common/edge.c:663 -msgid "Differential" -msgstr "Дыфэрэнцыйны" - -#: ../plug-ins/common/edge.c:673 -msgid "_Algorithm:" -msgstr "_Альґарытм:" - -#: ../plug-ins/common/edge.c:681 -msgid "A_mount:" -msgstr "_Узровень:" - -#: ../plug-ins/common/emboss.c:125 -msgid "Simulate an image created by embossing" -msgstr "Удаць выгляд барэльефа" - -#: ../plug-ins/common/emboss.c:131 -msgid "_Emboss..." -msgstr "_Рэльеф…" - -#: ../plug-ins/common/emboss.c:385 ../plug-ins/common/emboss.c:447 -msgid "Emboss" -msgstr "Рэльеф" - -#: ../plug-ins/common/emboss.c:476 -msgid "Function" -msgstr "Функцыя" - -#: ../plug-ins/common/emboss.c:480 -msgid "_Bumpmap" -msgstr "_Мапа паверхні" - -#: ../plug-ins/common/emboss.c:481 -msgid "_Emboss" -msgstr "_Рэльеф" - -#: ../plug-ins/common/emboss.c:513 -msgid "E_levation:" -msgstr "_Вышыня:" - -#: ../plug-ins/common/engrave.c:101 -msgid "Simulate an antique engraving" -msgstr "Удаць антыкварную ґравюру" - -#: ../plug-ins/common/engrave.c:106 -msgid "En_grave..." -msgstr "_Ґравюра…" - -#: ../plug-ins/common/engrave.c:180 -msgid "Engraving" -msgstr "Ґравіраваньне" - -#: ../plug-ins/common/engrave.c:209 -msgid "Engrave" -msgstr "Ґравюра" - -#: ../plug-ins/common/engrave.c:245 ../plug-ins/common/file-html-table.c:600 -#: ../plug-ins/common/file-ps.c:3044 ../plug-ins/common/file-ps.c:3241 -#: ../plug-ins/common/file-raw.c:1147 ../plug-ins/common/film.c:1002 -#: ../plug-ins/common/smooth-palette.c:442 ../plug-ins/common/tile-paper.c:314 -#: ../plug-ins/common/tile.c:432 ../plug-ins/imagemap/imap_cmd_guides.c:174 -#: ../plug-ins/imagemap/imap_rectangle.c:408 -#: ../plug-ins/print/print-page-layout.c:282 -msgid "_Height:" -msgstr "_Вышыня:" - -#: ../plug-ins/common/engrave.c:256 -msgid "_Limit line width" -msgstr "_Абмежаваць шырыню лініі" - -#: ../plug-ins/common/file-aa.c:98 +#: plug-ins/common/file-aa.c:131 plug-ins/common/file-aa.c:133 msgid "ASCII art" -msgstr "ASCII мастацтва" +msgstr "Псеўдаграфіка ASCII" -#. Create the actual window. -#: ../plug-ins/common/file-aa.c:349 -msgid "Text" -msgstr "Тэкст" +#: plug-ins/common/file-aa.c:136 +msgid "Saves grayscale image in various text formats" +msgstr "" -#: ../plug-ins/common/file-aa.c:357 -msgid "_Format:" -msgstr "_Фармат:" +#: plug-ins/common/file-aa.c:138 +msgid "" +"This plug-in uses aalib to save grayscale image as ascii art into a variety " +"of text formats" +msgstr "" -#: ../plug-ins/common/file-cel.c:111 ../plug-ins/common/file-cel.c:129 +#: plug-ins/common/file-aa.c:155 +msgid "_Format" +msgstr "_Фармат" + +#: plug-ins/common/file-aa.c:156 +msgid "File type to use" +msgstr "" + +#: plug-ins/common/file-aa.c:209 +msgid "ASCII art does not support multiple layers." +msgstr "Псеўдаграфіка ASCII не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-cel.c:140 plug-ins/common/file-cel.c:172 msgid "KISS CEL" msgstr "KISS CEL" -#: ../plug-ins/common/file-cel.c:191 +#: plug-ins/common/file-cel.c:245 msgid "Load KISS Palette" msgstr "Загрузіць палітру KISS" +#: plug-ins/common/file-cel.c:310 +msgid "CEL format does not support multiple layers." +msgstr "Фармат CEL не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-cel.c:364 plug-ins/common/file-cel.c:415 +#: plug-ins/common/file-cel.c:436 +#, fuzzy +#| msgid "Error while reading '%s': %s" +msgid "EOF or error while reading image header" +msgstr "Памылка падчас чытання «%s»: %s." + +#. Read file pointer +#. File header +#. KiSS file type +#. Bits per pixel +#. Dimensions of image +#. Layer offsets +#. Number of colors +#. Image +#. Layer +#. Temporary buffer +#. Pixel data +#. Buffer for layer +#. Counters +#. Number of items read from file #. max. rows allocated #. column, highest column ever used -#. -1 assume fsel is not available (and not attached to any drawable) -#. -1 assume there is no floating selection -#: ../plug-ins/common/file-cel.c:317 ../plug-ins/common/file-dicom.c:345 -#: ../plug-ins/common/file-gbr.c:373 ../plug-ins/common/file-gif-load.c:360 -#: ../plug-ins/common/file-gih.c:645 ../plug-ins/common/file-jp2-load.c:187 -#: ../plug-ins/common/file-pat.c:342 ../plug-ins/common/file-pcx.c:366 -#: ../plug-ins/common/file-pdf-load.c:861 ../plug-ins/common/file-pix.c:348 -#: ../plug-ins/common/file-png.c:763 ../plug-ins/common/file-pnm.c:499 -#: ../plug-ins/common/file-ps.c:1020 ../plug-ins/common/file-raw.c:716 -#: ../plug-ins/common/file-sunras.c:487 ../plug-ins/common/file-tga.c:447 -#: ../plug-ins/common/file-tiff-load.c:603 ../plug-ins/common/file-wmf.c:994 -#: ../plug-ins/common/file-xbm.c:742 ../plug-ins/common/file-xmc.c:675 -#: ../plug-ins/common/file-xpm.c:352 ../plug-ins/common/file-xwd.c:524 -#: ../plug-ins/file-bmp/bmp-read.c:158 ../plug-ins/file-faxg3/faxg3.c:213 -#: ../plug-ins/file-fli/fli-pika.c:501 ../plug-ins/file-ico/ico-load.c:644 -#: ../plug-ins/file-jpeg/jpeg-load.c:123 ../plug-ins/file-psd/psd-load.c:135 -#: ../plug-ins/file-sgi/sgi.c:330 ../plug-ins/file-xjt/xjt.c:3333 +#. +#. * Open the file for reading... +#. +#: plug-ins/common/file-cel.c:394 plug-ins/common/file-dicom.c:369 +#: plug-ins/common/file-gegl.c:352 plug-ins/common/file-gif-load.c:402 +#: plug-ins/common/file-heif.c:877 plug-ins/common/file-jp2-load.c:1091 +#: plug-ins/common/file-pcx.c:515 plug-ins/common/file-pcx.c:558 +#: plug-ins/common/file-pdf-load.c:879 plug-ins/common/file-pix.c:387 +#: plug-ins/common/file-png.c:665 plug-ins/common/file-pnm.c:714 +#: plug-ins/common/file-ps.c:1116 plug-ins/common/file-raw-data.c:1665 +#: plug-ins/common/file-sunras.c:450 plug-ins/common/file-tga.c:440 +#: plug-ins/common/file-wbmp.c:176 plug-ins/common/file-wmf.c:1026 +#: plug-ins/common/file-xbm.c:742 plug-ins/common/file-xmc.c:648 +#: plug-ins/common/file-xpm.c:385 plug-ins/common/file-xwd.c:478 +#: plug-ins/file-bmp/bmp-load.c:218 plug-ins/file-exr/file-exr.c:190 +#: plug-ins/file-faxg3/faxg3.c:240 plug-ins/file-fli/fli-pika.c:502 +#: plug-ins/file-icns/file-icns-load.c:507 plug-ins/file-ico/ico-load.c:673 +#: 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:413 +#: plug-ins/file-raw/file-rawtherapee.c:341 plug-ins/file-sgi/sgi.c:334 +#: plug-ins/file-tiff/file-tiff-load.c:290 #, c-format msgid "Opening '%s'" -msgstr "Адкрыцьцё «%s»" +msgstr "Адкрыццё «%s»" -#: ../plug-ins/common/file-cel.c:354 +#: plug-ins/common/file-cel.c:445 +msgid "is not a CEL image file" +msgstr "не з'яўляецца файлам CEL" + +#: plug-ins/common/file-cel.c:460 +#, c-format +msgid "illegal bpp value in image: %hhu" +msgstr "" + +#: plug-ins/common/file-cel.c:475 +#, c-format +msgid "" +"illegal image dimensions: width: %d, horizontal offset: %d, height: %d, " +"vertical offset: %d" +msgstr "" + +#: plug-ins/common/file-cel.c:489 msgid "Can't create a new image" msgstr "Немагчыма стварыць новы відарыс" -#: ../plug-ins/common/file-cel.c:444 +#: plug-ins/common/file-cel.c:526 plug-ins/common/file-cel.c:563 +#: plug-ins/common/file-cel.c:589 +#, fuzzy +#| msgid "Error while reading '%s': %s" +msgid "EOF or error while reading image data" +msgstr "Памылка падчас чытання «%s»: %s." + +#: plug-ins/common/file-cel.c:607 #, c-format msgid "Unsupported bit depth (%d)!" -msgstr "Глыбіня бітаў (%d) не падтрымліваецца!" +msgstr "Глыбіня колеру (%d) не падтрымліваецца!" + +#: plug-ins/common/file-cel.c:692 plug-ins/common/file-cel.c:704 +#, c-format +msgid "'%s': EOF or error while reading palette header" +msgstr "" + +#: plug-ins/common/file-cel.c:713 +#, c-format +msgid "'%s': is not a KCF palette file" +msgstr "«%s» не з'яўляецца файлам палітры KCF" + +#: plug-ins/common/file-cel.c:722 +#, c-format +msgid "'%s': illegal bpp value in palette: %hhu" +msgstr "" + +#: plug-ins/common/file-cel.c:731 +#, fuzzy, c-format +#| msgid "Number of colors:" +msgid "'%s': illegal number of colors: %u" +msgstr "Колькасць колераў:" + +#: plug-ins/common/file-cel.c:746 plug-ins/common/file-cel.c:763 +#: plug-ins/common/file-cel.c:783 +#, c-format +msgid "'%s': EOF or error while reading palette data" +msgstr "" #. init the progress meter -#. And let's begin the progress -#: ../plug-ins/common/file-cel.c:590 ../plug-ins/common/file-gbr.c:668 -#: ../plug-ins/common/file-gif-save.c:789 ../plug-ins/common/file-gih.c:1263 -#: ../plug-ins/common/file-html-table.c:257 ../plug-ins/common/file-pat.c:491 -#: ../plug-ins/common/file-pcx.c:644 ../plug-ins/common/file-pix.c:531 -#: ../plug-ins/common/file-png.c:1365 ../plug-ins/common/file-pnm.c:1015 -#: ../plug-ins/common/file-ps.c:1195 ../plug-ins/common/file-sunras.c:570 -#: ../plug-ins/common/file-tga.c:1176 ../plug-ins/common/file-tiff-save.c:694 -#: ../plug-ins/common/file-xbm.c:1041 ../plug-ins/common/file-xmc.c:1460 -#: ../plug-ins/common/file-xpm.c:638 ../plug-ins/common/file-xwd.c:624 -#: ../plug-ins/file-bmp/bmp-write.c:317 ../plug-ins/file-fits/fits.c:481 -#: ../plug-ins/file-fli/fli-pika.c:718 ../plug-ins/file-ico/ico-save.c:1001 -#: ../plug-ins/file-jpeg/jpeg-save.c:289 ../plug-ins/file-psd/psd-save.c:1657 -#: ../plug-ins/file-sgi/sgi.c:576 ../plug-ins/file-xjt/xjt.c:1696 +#. +#. * Open the file for writing... +#. +#: plug-ins/common/file-cel.c:840 plug-ins/common/file-farbfeld.c:373 +#: plug-ins/common/file-gif-save.c:917 plug-ins/common/file-html-table.c:364 +#: plug-ins/common/file-jpegxl.c:1383 plug-ins/common/file-pcx.c:1114 +#: plug-ins/common/file-pix.c:655 plug-ins/common/file-png.c:1494 +#: plug-ins/common/file-pnm.c:1635 plug-ins/common/file-ps.c:1338 +#: plug-ins/common/file-qoi.c:375 plug-ins/common/file-sunras.c:629 +#: plug-ins/common/file-tga.c:1230 plug-ins/common/file-xbm.c:1051 +#: plug-ins/common/file-xpm.c:705 plug-ins/common/file-xwd.c:714 +#: plug-ins/file-bmp/bmp-save.c:333 plug-ins/file-fits/fits.c:674 +#: plug-ins/file-fli/fli-pika.c:784 plug-ins/file-icns/file-icns-save.c:612 +#: plug-ins/file-ico/ico-save.c:1333 plug-ins/file-ico/ico-save.c:1542 +#: plug-ins/file-jpeg/jpeg-save.c:272 plug-ins/file-psd/psd-save.c:2160 +#: plug-ins/file-sgi/sgi.c:646 plug-ins/file-tiff/file-tiff-save.c:1074 #, c-format -msgid "Saving '%s'" -msgstr "Захоўваньне «%s»" +msgid "Exporting '%s'" +msgstr "Экспартаванне «%s»" -#: ../plug-ins/common/file-csource.c:113 +#: plug-ins/common/file-csource.c:122 msgid "C source code" -msgstr "Крынічны код C" +msgstr "Зыходны код C" -#: ../plug-ins/common/file-csource.c:701 +#: plug-ins/common/file-csource.c:125 +msgid "Dump image data in RGB(A) format for C source" +msgstr "" + +#: plug-ins/common/file-csource.c:127 +#, fuzzy +#| msgid "FP can only be run interactively." +msgid "CSource cannot be run non-interactively." +msgstr "Набор фільтраў выконваецца толькі інтэрактыўна." + +#: plug-ins/common/file-csource.c:135 msgid "C-Source" -msgstr "Крыніца C" +msgstr "Зыходны код C" -#: ../plug-ins/common/file-csource.c:719 -msgid "_Prefixed name:" +#: plug-ins/common/file-csource.c:144 +#, fuzzy +#| msgid "_Prefixed name:" +msgid "_Prefixed name" msgstr "_Прэфіксаваная назва:" -#: ../plug-ins/common/file-csource.c:728 -msgid "Co_mment:" -msgstr "_Камэнтар:" +#: plug-ins/common/file-csource.c:145 +#, fuzzy +#| msgid "_Prefixed name:" +msgid "Prefixed name" +msgstr "_Прэфіксаваная назва:" -#. Use Comment -#. -#: ../plug-ins/common/file-csource.c:735 -msgid "_Save comment to file" -msgstr "_Захаваць камэнтар у файл" +#: plug-ins/common/file-csource.c:150 +msgid "Comme_nt" +msgstr "_Каментарый" -#. GLib types -#. -#: ../plug-ins/common/file-csource.c:747 -msgid "_Use GLib types (guint8*)" -msgstr "_Ужываць тыпы GLib (guint8*)" +#: plug-ins/common/file-csource.c:151 +msgid "Comment" +msgstr "Каментарый" -#: ../plug-ins/common/file-csource.c:760 -msgid "Us_e macros instead of struct" -msgstr "_Ужываць макрас замест структуры" +#: plug-ins/common/file-csource.c:159 +msgid "Save comment to _file" +msgstr "Захаваць каментарый у _файл" -#: ../plug-ins/common/file-csource.c:773 -msgid "Use _1 byte Run-Length-Encoding" -msgstr "_1-байтавае кадаваньне RLE" +#: plug-ins/common/file-csource.c:160 +msgid "Save comment" +msgstr "Захаваць каментарый" -#: ../plug-ins/common/file-csource.c:786 -msgid "Sa_ve alpha channel (RGBA/RGB)" -msgstr "_Захаваць альфаканал (RGBA/RGB)" +#: plug-ins/common/file-csource.c:165 +msgid "Use GLib types (guint_8*)" +msgstr "_Выкарыстоўваць тыпы GLib (guint8*)" -#. RGB-565 -#. -#: ../plug-ins/common/file-csource.c:798 -msgid "Save as _RGB565 (16-bit)" -msgstr "Захаваць як _RGB565 (16-бітавы)" +#: plug-ins/common/file-csource.c:166 +msgid "Use GLib types" +msgstr "_Выкарыстоўваць тыпы GLib" -#: ../plug-ins/common/file-csource.c:821 -msgid "Op_acity:" -msgstr "_Непразрыстасьць:" +#: plug-ins/common/file-csource.c:171 +msgid "Save alpha channel (RG_BA/RGB)" +msgstr "Захаваць альфа-канал (RGBA/RGB)" -#: ../plug-ins/common/file-desktop-link.c:83 +#: plug-ins/common/file-csource.c:172 +msgid "Save the alpha channel" +msgstr "Захаваць альфа-канал" + +#: plug-ins/common/file-csource.c:177 +msgid "Save as RGB565 (1_6-bit)" +msgstr "Захаваць як RGB565 (1_6-бітавы)" + +#: plug-ins/common/file-csource.c:178 +msgid "Use RGB565 encoding" +msgstr "Кадаванне RGB565" + +#: plug-ins/common/file-csource.c:183 +msgid "_Use macros instead of struct" +msgstr "_Выкарыстоўваць макрасы замест структур" + +#: plug-ins/common/file-csource.c:184 +msgid "Use C macros" +msgstr "Выкарыстоўваць макрас C" + +#: plug-ins/common/file-csource.c:189 +msgid "Use _1 bit Run-Length-Encoding" +msgstr "Выкарыстоўваць _1-байтавае кадаванне RLE" + +#: plug-ins/common/file-csource.c:190 +msgid "Use run-length-encoding" +msgstr "Выкарыстоўваць 1-байтавае кадаванне RLE" + +#: plug-ins/common/file-csource.c:195 +msgid "Opaci_ty" +msgstr "_Непразрыстасць" + +#: plug-ins/common/file-csource.c:196 +msgid "Opacity" +msgstr "Непразрыстасць" + +#: plug-ins/common/file-csource.c:240 +#, fuzzy +msgid "C source does not support multiple layers." +msgstr "Фармат XPM не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-compressor.c:213 +msgid "gzip archive" +msgstr "Архіў gzip" + +#: plug-ins/common/file-compressor.c:232 +msgid "bzip archive" +msgstr "Архіў bzip" + +#: plug-ins/common/file-compressor.c:251 +msgid "xz archive" +msgstr "Архіў xz" + +#: plug-ins/common/file-compressor.c:438 +msgid "No sensible file extension, saving as compressed XCF." +msgstr "Няма пэўнага пашырэння файла, захаваны як сціснуты XCF." + +#: plug-ins/common/file-compressor.c:462 +#, c-format +msgid "Compressing '%s'" +msgstr "Сцісканне «%s»" + +#: plug-ins/common/file-compressor.c:500 +msgid "No sensible file extension, attempting to load with file magic." +msgstr "Няма пэўнага пашырэння файла, спрабую ўгадаць ягоны тып." + +#: plug-ins/common/file-desktop-link.c:112 msgid "Desktop Link" -msgstr "Лучыва стальца" +msgstr "Спасылка .desktop" -#: ../plug-ins/common/file-desktop-link.c:175 +#: plug-ins/common/file-desktop-link.c:198 #, c-format msgid "Error loading desktop file '%s': %s" -msgstr "Памылка загрузкі файла стальца «%s»: %s." +msgstr "Памылка загрузкі файла .desktop «%s»: %s" -#: ../plug-ins/common/file-dicom.c:139 +#: plug-ins/common/file-dicom.c:173 msgid "DICOM image" msgstr "Відарыс DICOM" -#: ../plug-ins/common/file-dicom.c:164 +#: plug-ins/common/file-dicom.c:205 msgid "Digital Imaging and Communications in Medicine image" msgstr "Відарыс Digital Imaging and Communications in Medicine" -#: ../plug-ins/common/file-dicom.c:369 +#: plug-ins/common/file-dicom.c:301 +msgid "Dicom format does not support multiple layers." +msgstr "Фармат Dicom не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-dicom.c:403 #, c-format msgid "'%s' is not a DICOM file." -msgstr "«%s» не зьяўляецца файлам DICOM" +msgstr "«%s» не з'яўляецца файлам DICOM." -#: ../plug-ins/common/file-dicom.c:1319 ../plug-ins/common/file-pcx.c:676 -#: ../plug-ins/common/file-pnm.c:1000 +#: plug-ins/common/file-dicom.c:576 +#, fuzzy, c-format +#| msgid "" +#| "Aggressive RLE\n" +#| "(not supported by SGI)" +msgid "Transfer syntax %s is not supported by PIKA." +msgstr "" +"Агрэсіўны RLE\n" +"(не падтрымліваецца SGI)" + +#: plug-ins/common/file-dicom.c:631 +#, c-format +msgid "%s is not supported by PIKA in combination with samples per pixel: %d" +msgstr "" + +#: plug-ins/common/file-dicom.c:1523 msgid "Cannot save images with alpha channel." -msgstr "Немагчыма захаваць відарыс з альфаканалам." +msgstr "Немагчыма захаваць відарыс з альфа-каналам." -#: ../plug-ins/common/file-dicom.c:1334 ../plug-ins/common/file-ps.c:1180 -#: ../plug-ins/common/file-ps.c:1212 ../plug-ins/common/file-xwd.c:609 -#: ../plug-ins/file-fits/fits.c:466 ../plug-ins/file-xjt/xjt.c:1691 +#: plug-ins/common/file-dicom.c:1542 plug-ins/common/file-ps.c:1333 +#: plug-ins/common/file-xwd.c:709 plug-ins/file-fits/fits.c:669 msgid "Cannot operate on unknown image types." -msgstr "Немагчыма працаваць зь відарысам невядомага тыпу." +msgstr "Немагчыма працаваць з відарысам невядомага тыпу." -#: ../plug-ins/common/file-gbr.c:154 ../plug-ins/common/file-gbr.c:175 +#: plug-ins/common/file-farbfeld.c:135 plug-ins/common/file-farbfeld.c:161 +msgid "Farbfeld" +msgstr "Farbfeld" + +#: plug-ins/common/file-farbfeld.c:138 plug-ins/common/file-farbfeld.c:140 +msgid "Load file in the Farbfeld file format" +msgstr "" + +#: plug-ins/common/file-farbfeld.c:164 plug-ins/common/file-farbfeld.c:166 +msgid "Export image in the Farbfeld file format" +msgstr "" + +#: plug-ins/common/file-farbfeld.c:258 +msgid "Farbfeld format does not support multiple layers." +msgstr "Фармат Farbfeld не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-farbfeld.c:310 +msgid "Failed to read Farbfeld header" +msgstr "Не ўдалося прачытаць загаловак Farbfeld" + +#: plug-ins/common/file-farbfeld.c:336 +#, fuzzy +#| msgid "Premature end of file." +msgid "Premature end of Farbfeld pixel data" +msgstr "Заўчасны канец файла." + +#: plug-ins/common/file-gbr.c:125 msgid "PIKA brush" msgstr "Пэндзаль PIKA" -#: ../plug-ins/common/file-gbr.c:399 ../plug-ins/common/file-pat.c:418 -#, c-format -msgid "Invalid header data in '%s': width=%lu, height=%lu, bytes=%lu" -msgstr "" -"Недапушчальныя даньні ў загалоўку «%s»: шырыня=%lu, вышыня=%lu, байтаў=%lu" - -#: ../plug-ins/common/file-gbr.c:423 ../plug-ins/common/file-gbr.c:435 -msgid "Unsupported brush format" -msgstr "Фармат пэндзля не падтрымліваецца" - -#: ../plug-ins/common/file-gbr.c:447 -#, c-format -msgid "Error in PIKA brush file '%s'" -msgstr "Памылка ў файле з пэндзлем «%s»" - -#: ../plug-ins/common/file-gbr.c:455 -#, c-format -msgid "Invalid UTF-8 string in brush file '%s'." -msgstr "Недапушчальны радок UTF-8 у файле з пэндзлем «%s»." - -#: ../plug-ins/common/file-gbr.c:461 ../plug-ins/common/file-gih.c:487 -#: ../plug-ins/common/file-gih.c:1137 -#: ../plug-ins/gradient-flare/gradient-flare.c:3064 -msgid "Unnamed" -msgstr "Безназоўны" - -#: ../plug-ins/common/file-gbr.c:653 -msgid "PIKA brushes are either GRAYSCALE or RGBA" -msgstr "Пэндзлі PIKA або ШЭРЫЯ, або RGBA" - -#: ../plug-ins/common/file-gbr.c:770 +#: plug-ins/common/file-gbr.c:127 msgid "Brush" msgstr "Пэндзаль" -#. attach labels -#: ../plug-ins/common/file-gbr.c:784 ../plug-ins/common/grid.c:792 -msgid "Spacing:" -msgstr "Інтэрвал:" +#: plug-ins/common/file-gbr.c:131 plug-ins/common/file-gbr.c:133 +#, fuzzy +#| msgid "Error in PIKA brush file '%s'" +msgid "Exports files in the PIKA brush file format" +msgstr "Памылка ў файле з пэндзлем «%s»" -#: ../plug-ins/common/file-gbr.c:795 ../plug-ins/common/file-gih.c:888 -#: ../plug-ins/common/file-pat.c:568 ../plug-ins/pikaressionist/presets.c:666 -msgid "Description:" -msgstr "Апісаньне:" +#: plug-ins/common/file-gbr.c:151 +msgid "Sp_acing" +msgstr "І_нтэрвал" -#: ../plug-ins/common/file-gif-load.c:148 -#: ../plug-ins/common/file-gif-save.c:177 +#: plug-ins/common/file-gbr.c:152 +#, fuzzy +#| msgid "Specifies the aspect ratio of the brush" +msgid "Spacing of the brush" +msgstr "Вызначае суадносіны бакоў пэндзля" + +#: plug-ins/common/file-gbr.c:157 plug-ins/common/file-pat.c:136 +msgid "_Description" +msgstr "_Апісанне" + +#: plug-ins/common/file-gbr.c:158 +#, fuzzy +#| msgid "Specifies the aspect ratio of the brush" +msgid "Short description of the brush" +msgstr "Вызначае суадносіны бакоў пэндзля" + +#: plug-ins/common/file-gbr.c:159 +msgid "PIKA Brush" +msgstr "Пэндзаль PIKA" + +#: plug-ins/common/file-gbr.c:231 +msgid "GBR format does not support multiple layers." +msgstr "Фармат GBR не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-gegl.c:114 +#, fuzzy +#| msgid "Radians" +msgid "Radiance RGBE" +msgstr "Радыяны" + +#: plug-ins/common/file-gegl.c:130 plug-ins/file-exr/file-exr.c:108 +msgid "OpenEXR image" +msgstr "Відарыс OpenEXR" + +#: plug-ins/common/file-gegl.c:311 +msgid "GEGL export plug-in does not support multiple layers." +msgstr "" + +#: plug-ins/common/file-gegl.c:375 +#, c-format +msgid "Could not open '%s'" +msgstr "Не ўдалося адкрыць «%s»" + +#: plug-ins/common/file-gif-load.c:176 plug-ins/common/file-gif-save.c:149 msgid "GIF image" msgstr "Відарыс GIF" -#: ../plug-ins/common/file-gif-load.c:372 -msgid "This is not a GIF file" -msgstr "Гэты файл ня GIF" +#: plug-ins/common/file-gif-load.c:417 +#, fuzzy +#| msgid "GIF image" +msgid "GIF magic code" +msgstr "Відарыс GIF" -#: ../plug-ins/common/file-gif-load.c:411 +#: plug-ins/common/file-gif-load.c:425 +#, fuzzy +#| msgid "This is not a GIF file" +msgid "This is not a GIF file: incorrect magic code" +msgstr "Гэты файл не GIF" + +#: plug-ins/common/file-gif-load.c:433 +msgid "Incorrect GIF version: not '87a' or '89a'" +msgstr "" + +#: plug-ins/common/file-gif-load.c:440 +msgid "screen descriptor" +msgstr "" + +#: plug-ins/common/file-gif-load.c:458 +#, fuzzy +#| msgid "Bad colormap" +msgid "global colormap" +msgstr "агульная карта колераў" + +#: plug-ins/common/file-gif-load.c:466 msgid "Non-square pixels. Image might look squashed." -msgstr "Піксэлі не квадратныя. Відарыс можа выглядаць сьціснутым." +msgstr "Пікселі не квадратныя. Відарыс можа выглядаць сплюшчаным." -#: ../plug-ins/common/file-gif-load.c:945 +#: plug-ins/common/file-gif-load.c:475 plug-ins/common/file-gif-load.c:1060 +msgid "image data" +msgstr "даныя відарыса" + +#: plug-ins/common/file-gif-load.c:492 +msgid "extension data" +msgstr "" + +#: plug-ins/common/file-gif-load.c:512 +#, fuzzy +#| msgid "Frame (%i)" +msgid "frame info" +msgstr "Кадр (%i)" + +#: plug-ins/common/file-gif-load.c:525 +msgid "local colormap" +msgstr "лакальная карта колераў" + +#: plug-ins/common/file-gif-load.c:586 plug-ins/common/file-gif-load.c:591 +#, c-format +msgid "Error reading %s. %s" +msgstr "Памылка чытання %s. %s" + +#: plug-ins/common/file-gif-load.c:587 plug-ins/common/file-gif-load.c:592 +#: plug-ins/common/file-gif-load.c:743 plug-ins/common/file-gif-load.c:751 +#: plug-ins/common/file-gif-load.c:782 plug-ins/common/file-gif-load.c:836 +#: plug-ins/common/file-gif-load.c:926 plug-ins/common/file-gif-load.c:945 +#: plug-ins/common/file-gif-load.c:1046 plug-ins/common/file-gif-load.c:1050 +#: plug-ins/common/file-gif-load.c:1195 +msgid "Image may be corrupt!" +msgstr "" + +#: plug-ins/common/file-gif-load.c:743 +msgid "Error reading data size" +msgstr "Памылка чытання памеру даных" + +#: plug-ins/common/file-gif-load.c:751 +msgid "Error reading data" +msgstr "Памылка чытання даных" + +#: plug-ins/common/file-gif-load.c:782 +msgid "Not enough compressed data" +msgstr "" + +#: plug-ins/common/file-gif-load.c:836 +msgid "Value out of range for code size" +msgstr "" + +#: plug-ins/common/file-gif-load.c:925 +msgid "Invalid code, expecting end of data marker" +msgstr "" + +#: plug-ins/common/file-gif-load.c:945 +#, fuzzy +#| msgid "Unexpected end of file" +msgid "Unexpected extra data" +msgstr "Заўчасны канец файла" + +#: plug-ins/common/file-gif-load.c:964 +#, fuzzy +#| msgid "Invalid file." +msgid "Invalid table entry" +msgstr "Недапушчальны файл." + +#: plug-ins/common/file-gif-load.c:964 plug-ins/common/file-gif-load.c:970 +#, fuzzy +#| msgid "The file is corrupt!" +msgid "Image is corrupt!" +msgstr "Файл пашкоджаны!" + +#: plug-ins/common/file-gif-load.c:970 +msgid "Circular table entry" +msgstr "" + +#: plug-ins/common/file-gif-load.c:1045 +#, c-format +msgid "%s. %s" +msgstr "%s. %s" + +#: plug-ins/common/file-gif-load.c:1046 plug-ins/common/file-gif-load.c:1050 +msgid "Invalid frame dimensions" +msgstr "" + +#: plug-ins/common/file-gif-load.c:1066 +#, fuzzy +#| msgid "PIKA compressed XJT image" +msgid "compressed image data" +msgstr "Сціснуты відарыс XJT PIKA" + +#: plug-ins/common/file-gif-load.c:1099 #, c-format msgid "Background (%d%s)" -msgstr "Асноведзь (%d%s)" +msgstr "Фон (%d%s)" -#: ../plug-ins/common/file-gif-load.c:968 +#: plug-ins/common/file-gif-load.c:1126 #, c-format msgid "Opening '%s' (frame %d)" -msgstr "Адкрыцьцё «%s» (кадр %d)" +msgstr "Адкрыццё «%s» (кадр %d)" -#: ../plug-ins/common/file-gif-load.c:997 ../plug-ins/common/iwarp.c:792 -#: ../plug-ins/common/iwarp.c:827 +#: plug-ins/common/file-gif-load.c:1155 #, c-format msgid "Frame %d" msgstr "Кадр %d" -#: ../plug-ins/common/file-gif-load.c:999 +#: plug-ins/common/file-gif-load.c:1157 #, c-format msgid "Frame %d (%d%s)" msgstr "Кадр %d (%d%s)" -#: ../plug-ins/common/file-gif-load.c:1030 +#: plug-ins/common/file-gif-load.c:1188 #, c-format msgid "" "GIF: Undocumented GIF composite type %d is not handled. Animation might not " "play or re-save perfectly." msgstr "" -"GIF: недакумэнтаваны тып складаньня %d не падтрымліваецца. Магчыма, ня " -"ўдасца якасна прайграць або паўторна захаваць анімацыю." +"GIF: недакументаваны тып складання %d не падтрымліваецца. Магчыма, не ўдасца " +"якасна прайграць або паўторна захаваць анімацыю." -#: ../plug-ins/common/file-gif-save.c:468 -msgid "Couldn't simply reduce colors further. Saving as opaque." -msgstr "Немагчыма болей проста зьменшыць колеры. Захоўваньне непразрыстым." - -#: ../plug-ins/common/file-gif-save.c:583 +#: plug-ins/common/file-gif-load.c:1194 #, c-format +msgid "Unknown composite type %d. %s" +msgstr "" + +#: plug-ins/common/file-gif-load.c:1237 msgid "" -"Unable to save '%s'. The GIF file format does not support images that are " +"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:1360 +msgid "Too much compressed data, ignoring extra..." +msgstr "" + +#: plug-ins/common/file-gif-save.c:151 +msgid "GIF" +msgstr "GIF" + +#: plug-ins/common/file-gif-save.c:154 +msgid "exports files in GIF file format" +msgstr "" + +#: plug-ins/common/file-gif-save.c:157 +#, no-c-format +msgid "" +"Export a file in GIF format, with possible animation, transparency, and " +"comment. To export an animation, operate on a multi-layer file and give the " +"'as-animation' parameter as TRUE. The plug-in will interpret <50% alpha as " +"transparent. When run non-interactively, the value for the comment is taken " +"from the 'pika-comment' parasite." +msgstr "" + +#: plug-ins/common/file-gif-save.c:183 plug-ins/common/file-mng.c:277 +#, fuzzy +#| msgid "Interlace" +msgid "_Interlace" +msgstr "Празрадковы" + +#: plug-ins/common/file-gif-save.c:184 +msgid "Try to export as interlaced" +msgstr "" + +#: plug-ins/common/file-gif-save.c:189 +msgid "Loop _Forever" +msgstr "_Бясконцае паўтарэнне" + +#: plug-ins/common/file-gif-save.c:190 +msgid "(animated gif) Loop infinitely" +msgstr "" + +#: plug-ins/common/file-gif-save.c:195 +#, fuzzy +#| msgid "_Number of segments:" +msgid "_Number of repeats" +msgstr "_Колькасць сегментаў:" + +#: plug-ins/common/file-gif-save.c:196 +msgid "(animated gif) Number of repeats (Ignored if 'loop' is TRUE)" +msgstr "" + +#: plug-ins/common/file-gif-save.c:202 +#, fuzzy +#| msgid "_Delay between frames where unspecified:" +msgid "_Delay between frames when unspecified" +msgstr "_Затрымка між кадрамі, калі не вызначаная:" + +#: plug-ins/common/file-gif-save.c:203 +msgid "(animated gif) Default delay between frames in milliseconds" +msgstr "" + +#: plug-ins/common/file-gif-save.c:209 +#, fuzzy +#| msgid "_Frame disposal where unspecified:" +msgid "Frame disposal _when unspecified" +msgstr "_Размяшчэнне кадраў, калі не вызначанае:" + +#: plug-ins/common/file-gif-save.c:210 +msgid "" +"(animated gif) Default disposal type (0=`don't care`, 1=combine, 2=replace)" +msgstr "" + +#: plug-ins/common/file-gif-save.c:218 +#, fuzzy +#| msgid "As _animation" +msgid "_As animation" +msgstr "Як _анімацыю" + +#: plug-ins/common/file-gif-save.c:219 +msgid "Export GIF as animation?" +msgstr "" + +#: plug-ins/common/file-gif-save.c:224 +msgid "_Use delay entered above for all frames" +msgstr "Выкарыстоўваць уведзеную вышэй затрымку для _ўсіх кадраў" + +#: plug-ins/common/file-gif-save.c:225 +msgid "(animated gif) Use specified delay for all frames" +msgstr "" + +#: plug-ins/common/file-gif-save.c:230 +#, fuzzy +#| msgid "U_se disposal entered above for all frames" +msgid "Use dis_posal entered above for all frames" +msgstr "Выкарыстоўваць уведзенае вышэй размяшчэнне _для ўсіх кадраў" + +#: plug-ins/common/file-gif-save.c:232 +msgid "(animated gif) Use specified disposal for all frames" +msgstr "" + +#: plug-ins/common/file-gif-save.c:237 +msgid "Sa_ve comment" +msgstr "Захаваць камен_тарый" + +#: plug-ins/common/file-gif-save.c:238 +msgid "Save the image comment in the GIF file" +msgstr "_Захаваць каментарый відарыса ў файл GIF" + +#: plug-ins/common/file-gif-save.c:243 +msgid "Commen_t" +msgstr "Камен_тарый" + +#: plug-ins/common/file-gif-save.c:244 +msgid "Image comment" +msgstr "Каментарый відарыса" + +#: plug-ins/common/file-gif-save.c:350 +msgid "GIF format does not support multiple layers." +msgstr "Фармат GIF не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-gif-save.c:558 +#, fuzzy +#| msgid "Couldn't simply reduce colors further. Saving as opaque." +msgid "Couldn't simply reduce colors further. Exporting as opaque." +msgstr "Немагчыма болей проста зменшыць колеры. Захоўванне непразрыстым." + +#: plug-ins/common/file-gif-save.c:677 +#, fuzzy, c-format +#| msgid "" +#| "Unable to save '%s'. The GIF file format does not support images that " +#| "are more than %d pixels wide or tall." +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 піксэляў удоўжкі або ўшыркі." +"маюць больш за %d пікселяў удоўжкі або ўшыркі." -#: ../plug-ins/common/file-gif-save.c:694 +#: plug-ins/common/file-gif-save.c:803 msgid "" "The GIF format only supports comments in 7bit ASCII encoding. No comment is " "saved." msgstr "" -"Фармат GIF дапускае камэнтары толькі 7-бітавым кадаваньнем ASCII. Камэнтар " +"Фармат GIF дапускае каментарыі толькі 7-бітавым кадаваннем ASCII. Каментарый " "не захаваны." -#: ../plug-ins/common/file-gif-save.c:753 +#: plug-ins/common/file-gif-save.c:890 +#, fuzzy +#| msgid "" +#| "Cannot save RGB color images. Convert to indexed color or grayscale first." msgid "" -"Cannot save RGB color images. Convert to indexed color or grayscale first." +"Cannot export RGB color images. Convert to indexed color or grayscale first." msgstr "" -"Немагчыма захаваць відарыс у колерах RGB. Ператвары ў індэксаваныя колеры " -"або адценьні шэрага." +"Немагчыма захаваць відарыс у колерах RGB. Пераўтвары ў індэксаваныя колеры " +"або адценні шэрага." -#: ../plug-ins/common/file-gif-save.c:931 +#: plug-ins/common/file-gif-save.c:1110 msgid "Delay inserted to prevent evil CPU-sucking animation." msgstr "" -"Устаўленая затрымка, каб пазьбегнуць злоснага пажыраньня рэсурсаў працэсара." +"Устаўленая затрымка, каб пазбегнуць злоснага пажырання рэсурсаў працэсара." -#: ../plug-ins/common/file-gif-save.c:972 +#: plug-ins/common/file-gif-save.c:1159 +#, fuzzy +#| msgid "" +#| "The image you are trying to save as a GIF contains layers which extend " +#| "beyond the actual borders of the image." msgid "" -"The image you are trying to save as a GIF contains layers which extend " +"The image you are trying to export as a GIF contains layers which extend " "beyond the actual borders of the image." msgstr "" -"Відарыс, які ты спрабуеш захаваць як GIF, утрымлівае пласты, якія " -"прасьціраюцца за межы відарыса." +"Відарыс, які ты спрабуеш захаваць як GIF, утрымлівае слаі, якія прасціраюцца " +"за межы відарыса." -#: ../plug-ins/common/file-gif-save.c:989 +#: plug-ins/common/file-gif-save.c:1165 +msgid "Cr_op" +msgstr "" + +#: plug-ins/common/file-gif-save.c:1176 +#, fuzzy +#| 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 save." 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 save." +"of the layers to the image borders, or cancel this export." msgstr "" -"Фармат файла GIF не дазваляе такога. Можна або абрэзаць усе пласты да межаў " -"відарыса, або адмяніць захоўваньне." +"Фармат файла GIF не дазваляе такога. Можна або абрэзаць усе слаі да межаў " +"відарыса, або адмяніць захоўванне." -#: ../plug-ins/common/file-gif-save.c:1125 -msgid "GIF" -msgstr "GIF" +#: plug-ins/common/file-gif-save.c:1266 plug-ins/common/file-mng.c:1642 +msgid "milliseconds" +msgstr "мілісекунды" -#: ../plug-ins/common/file-gif-save.c:1133 -#, c-format -msgid "" -"Error loading UI file '%s':\n" -"%s" -msgstr "" -"Памылка загрузкі файла ІК «%s»:\n" -"%s" - -#: ../plug-ins/common/file-gif-save.c:1187 +#: plug-ins/common/file-gif-save.c:1271 msgid "I don't care" msgstr "Усё адно" -#: ../plug-ins/common/file-gif-save.c:1189 -msgid "Cumulative layers (combine)" -msgstr "Сабраныя пласты (злучыць)" +#: plug-ins/common/file-gif-save.c:1306 +#, fuzzy +#| msgid "Animated GIF Options" +msgid "Animated GIF" +msgstr "Параметры анімаванага GIF" -#: ../plug-ins/common/file-gif-save.c:1191 -msgid "One frame per layer (replace)" -msgstr "Адзін кадр на пласт (замяніць)" - -#: ../plug-ins/common/file-gif-save.c:1208 +#: plug-ins/common/file-gif-save.c:1312 +#, fuzzy +#| msgid "" +#| "You can only export as animation when the image has more than one layer. " +#| "The image you are trying to export only has one layer." msgid "" -"You can only export as animation when the image has more than one layer. The " -"image you are trying to export only has one layer." +"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." msgstr "" -"Экспартаваць як анімацыю можна толькі калі відарыс мае больш за адзін пласт. " -"Відарыс, які ты спрабуеш экспартаваць, мае толькі адзін пласт." +"Экспартаваць як анімацыю можна толькі калі відарыс мае больш за адзін слой. " +"Відарыс, які ты спрабуеш экспартаваць, мае толькі адзін слой." -#: ../plug-ins/common/file-gif-save.c:2312 -msgid "Error writing output file." -msgstr "Памылка запісу выходнага файла." - -#. translators: the %d is *always* 240 here -#: ../plug-ins/common/file-gif-save.c:2385 -#, c-format -msgid "The default comment is limited to %d characters." -msgstr "Прадвызначаны камэнтар абмежаваны %d знакамі." - -#: ../plug-ins/common/file-gih.c:209 ../plug-ins/common/file-gih.c:230 +#: plug-ins/common/file-gih.c:178 msgid "PIKA brush (animated)" msgstr "Анімаваны пэндзаль PIKA" -#: ../plug-ins/common/file-gih.c:480 -msgid "Error in PIKA brush pipe file." -msgstr "Памылка ў файле з пасьлядоўнасьцю пэндзляў PIKA." - -#: ../plug-ins/common/file-gih.c:546 -msgid "PIKA brush file appears to be corrupted." -msgstr "Файл з пэндзлем PIKA, падаецца пашкоджаным!" - -#: ../plug-ins/common/file-gih.c:696 -msgid "Couldn't load one brush in the pipe, giving up." -msgstr "Немагчыма загрузіць адзін пэндзаль у пасьлядоўнасьці, пакіданьне." - -#: ../plug-ins/common/file-gih.c:857 +#: plug-ins/common/file-gih.c:632 msgid "Brush Pipe" -msgstr "Пасьлядоўнасьць пэндзляў" +msgstr "Паслядоўнасць пэндзляў" -#: ../plug-ins/common/file-gih.c:874 -msgid "Spacing (percent):" -msgstr "Прагал (у адсотках):" +#: plug-ins/common/file-gih.c:650 plug-ins/imagemap/imap_settings.c:105 +msgid "_Description:" +msgstr "_Апісанне:" -#: ../plug-ins/common/file-gih.c:941 +#: plug-ins/common/file-gih.c:664 +#, fuzzy +#| msgid "Spacing (percent):" +msgid "_Spacing (percent):" +msgstr "Прабел (у працэнтах):" + +#: plug-ins/common/file-gih.c:718 msgid "Pixels" -msgstr "Піксэлі" +msgstr "Пікселі" -#: ../plug-ins/common/file-gih.c:946 -msgid "Cell size:" -msgstr "_Памер ячэі:" +#: plug-ins/common/file-gih.c:723 +msgid "Ce_ll size:" +msgstr "Памер _ячэйкі:" -#: ../plug-ins/common/file-gih.c:958 -msgid "Number of cells:" -msgstr "Колькасьць ячэй:" +#: plug-ins/common/file-gih.c:735 +msgid "_Number of cells:" +msgstr "_Колькасць ячэек:" -#: ../plug-ins/common/file-gih.c:983 +#: plug-ins/common/file-gih.c:760 msgid " Rows of " msgstr " радкоў з " -#: ../plug-ins/common/file-gih.c:995 +#: plug-ins/common/file-gih.c:772 msgid " Columns on each layer" -msgstr " слупкоў на кожным пласьце" +msgstr " слупкоў на кожным слое" -#: ../plug-ins/common/file-gih.c:999 +#: plug-ins/common/file-gih.c:776 msgid " (Width Mismatch!) " -msgstr "(Неадпаведнасьць шырыні!)" +msgstr " (Неадпаведнасць шырыні!) " -#: ../plug-ins/common/file-gih.c:1003 +#: plug-ins/common/file-gih.c:780 msgid " (Height Mismatch!) " -msgstr "(Неадпаведнасьць вышыні!)" +msgstr " (Неадпаведнасць вышыні!) " -#: ../plug-ins/common/file-gih.c:1008 +#: plug-ins/common/file-gih.c:785 msgid "Display as:" msgstr "Паказаць як:" -#: ../plug-ins/common/file-gih.c:1017 -msgid "Dimension:" -msgstr "Вымер:" +#: plug-ins/common/file-gih.c:796 +msgid "Di_mension:" +msgstr "_Памер:" -#: ../plug-ins/common/file-gih.c:1092 +#: plug-ins/common/file-gih.c:869 msgid "Ranks:" msgstr "Рады:" -#: ../plug-ins/common/file-header.c:77 +#: plug-ins/common/file-header.c:117 msgid "C source code header" -msgstr "Загаловак выточнага коду C" +msgstr "Загаловак зыходнага коду C" -#: ../plug-ins/common/file-html-table.c:156 -#: ../plug-ins/common/file-html-table.c:411 +#: plug-ins/common/file-header.c:179 +msgid "Header plug-in does not support multiple layers." +msgstr "" + +#: plug-ins/common/file-heif.c:190 plug-ins/common/file-heif.c:230 +msgid "HEIF/HEIC" +msgstr "HEIF/HEIC" + +#: plug-ins/common/file-heif.c:193 +msgid "Loads HEIF images" +msgstr "Загружае відарысы HEIF" + +#: plug-ins/common/file-heif.c:194 +msgid "" +"Load image stored in HEIF format (High Efficiency Image File Format). " +"Typical suffices for HEIF files are .heif, .heic." +msgstr "" + +#: plug-ins/common/file-heif.c:235 +msgid "Exports HEIF images" +msgstr "" + +#: plug-ins/common/file-heif.c:236 +msgid "Save image in HEIF format (High Efficiency Image File Format)." +msgstr "" + +#: plug-ins/common/file-heif.c:252 plug-ins/common/file-heif.c:362 +#: plug-ins/file-jpeg/jpeg.c:203 +msgid "_Quality" +msgstr "_Якасць" + +#: plug-ins/common/file-heif.c:253 plug-ins/common/file-heif.c:363 +msgid "Quality factor (0 = worst, 100 = best)" +msgstr "" + +#: plug-ins/common/file-heif.c:258 plug-ins/common/file-heif.c:368 +#: plug-ins/common/file-jpegxl.c:185 plug-ins/file-webp/file-webp.c:175 +msgid "L_ossless" +msgstr "" + +#: plug-ins/common/file-heif.c:259 plug-ins/common/file-heif.c:369 +#: plug-ins/common/file-jpegxl.c:186 +msgid "Use lossless compression" +msgstr "Сцісканне без страты якасці" + +#: plug-ins/common/file-heif.c:264 plug-ins/common/file-heif.c:374 +#, fuzzy +#| msgid "_Save comment to file" +msgid "Save color prof_ile" +msgstr "_Захаваць каментарый у файл" + +#: plug-ins/common/file-heif.c:265 plug-ins/common/file-heif.c:375 +#, fuzzy +#| msgid "Save the curves to a file" +msgid "Save the image's color profile" +msgstr "Захаваць крывыя ў файл" + +#: plug-ins/common/file-heif.c:270 plug-ins/common/file-heif.c:380 +#: plug-ins/common/file-jpegxl.c:197 +#, fuzzy +#| msgid "Ma_x depth:" +msgid "_Bit depth" +msgstr "_Макс. глыбіня:" + +#: plug-ins/common/file-heif.c:271 plug-ins/common/file-heif.c:381 +#: plug-ins/common/file-jpegxl.c:198 +msgid "Bit depth of exported image" +msgstr "" + +#: plug-ins/common/file-heif.c:276 plug-ins/common/file-heif.c:386 +#: plug-ins/common/file-png.c:283 +#, fuzzy +#| msgid "pixels from _top" +msgid "_Pixel format" +msgstr "пікселі з_верху" + +#: plug-ins/common/file-heif.c:277 plug-ins/common/file-heif.c:387 +msgid "Format of color sub-sampling" +msgstr "" + +#: plug-ins/common/file-heif.c:283 plug-ins/common/file-heif.c:393 +msgid "Enco_der speed" +msgstr "" + +#: plug-ins/common/file-heif.c:284 plug-ins/common/file-heif.c:394 +msgid "Tradeoff between speed and compression" +msgstr "" + +#: plug-ins/common/file-heif.c:290 plug-ins/common/file-heif.c:400 +#: plug-ins/common/file-jpegxl.c:222 +#, fuzzy +#| msgid "Save File" +msgid "Save Exi_f" +msgstr "Запісаць файл" + +#: plug-ins/common/file-heif.c:291 plug-ins/common/file-heif.c:401 +#: plug-ins/common/file-jpegxl.c:223 +msgid "Toggle saving Exif data" +msgstr "" + +#: plug-ins/common/file-heif.c:296 plug-ins/common/file-heif.c:406 +#: plug-ins/common/file-jpegxl.c:228 +#, fuzzy +#| msgid "Save _XMP data" +msgid "Save _XMP" +msgstr "Захаваць даныя _XMP" + +#: plug-ins/common/file-heif.c:297 plug-ins/common/file-heif.c:407 +#: plug-ins/common/file-jpegxl.c:229 +#, fuzzy +#| msgid "Save _XMP data" +msgid "Toggle saving XMP data" +msgstr "Захаваць даныя _XMP" + +#: plug-ins/common/file-heif.c:311 +msgid "Loads AVIF images" +msgstr "Загружае відарысы AVIF" + +#: plug-ins/common/file-heif.c:312 +msgid "Load image stored in AV1 Image File Format (AVIF)" +msgstr "" + +#: plug-ins/common/file-heif.c:344 +msgid "Exports AVIF images" +msgstr "" + +#: plug-ins/common/file-heif.c:345 +msgid "Save image in AV1 Image File Format (AVIF)" +msgstr "" + +#: plug-ins/common/file-heif.c:501 plug-ins/common/file-heif.c:597 +msgid "HEIF format does not support multiple layers." +msgstr "" + +#: plug-ins/common/file-heif.c:917 plug-ins/common/file-heif.c:950 +#: plug-ins/common/file-heif.c:991 plug-ins/common/file-heif.c:1057 +#, fuzzy, c-format +#| msgid "Uploading image (%s of %s)" +msgid "Loading HEIF image failed: %s" +msgstr "Дасыланне відарыса (%s з %s)" + +#: plug-ins/common/file-heif.c:939 +msgid "Loading HEIF image failed: Input file contains no readable images" +msgstr "" + +#: plug-ins/common/file-heif.c:1183 +#, fuzzy +#| msgid "C_ell content:" +msgid "image content" +msgstr "_Змесціва ячэйкі:" + +#: plug-ins/common/file-heif.c:1535 +#, c-format +msgid "Exporting '%s' using %s encoder" +msgstr "" + +#: plug-ins/common/file-heif.c:1585 plug-ins/common/file-heif.c:1992 +#, c-format +msgid "Encoding HEIF image failed: %s" +msgstr "" + +#: plug-ins/common/file-heif.c:2113 +#, fuzzy, c-format +#| msgid "Writing to file '%s' failed: %s" +msgid "Writing HEIF image failed: %s" +msgstr "Няўдалы запіс у файл «%s»: %s" + +#: plug-ins/common/file-heif.c:2202 +msgid "primary" +msgstr "асноўны" + +#: plug-ins/common/file-heif.c:2347 +msgid "Load HEIF Image" +msgstr "Загрузіць відарыс HEIF" + +#: plug-ins/common/file-heif.c:2361 +#, fuzzy +#| msgid "Select Image File" +msgid "Select Image" +msgstr "Выберы файл відарыса" + +#: plug-ins/common/file-heif.c:2518 +msgid "YUV444" +msgstr "YUV444" + +#: plug-ins/common/file-heif.c:2519 +msgid "YUV420" +msgstr "YUV420" + +#: plug-ins/common/file-heif.c:2527 plug-ins/common/file-jpegxl.c:2029 +msgid "8 bit/channel" +msgstr "" + +#: plug-ins/common/file-heif.c:2528 +msgid "10 bit/channel" +msgstr "" + +#: plug-ins/common/file-heif.c:2529 +msgid "12 bit/channel" +msgstr "" + +#: plug-ins/common/file-heif.c:2535 +msgid "Slow" +msgstr "Павольна" + +#: plug-ins/common/file-heif.c:2536 +msgid "Balanced" +msgstr "Збалансаваны" + +#: plug-ins/common/file-heif.c:2537 +msgid "Fast" +msgstr "Хутка" + +#: plug-ins/common/file-html-table.c:153 msgid "HTML table" msgstr "Табліца HTML" -#: ../plug-ins/common/file-html-table.c:424 -msgid "Warning" -msgstr "Перасьцярога" +#: plug-ins/common/file-html-table.c:155 +msgid "HTML Table" +msgstr "Табліца HTML" -#: ../plug-ins/common/file-html-table.c:435 +#: plug-ins/common/file-html-table.c:158 +msgid "PIKA Table Magic" +msgstr "" + +#: plug-ins/common/file-html-table.c:159 +msgid "Allows you to draw an HTML table in PIKA. See help for more info." +msgstr "" + +#: plug-ins/common/file-html-table.c:175 +msgid "Use c_aption" +msgstr "Выкарыстоўваць за_галовак" + +#: plug-ins/common/file-html-table.c:176 +msgid "Enable if you would like to have the table captioned." +msgstr "Уключыце, калі хочаце, каб табліца мела загаловак." + +#: plug-ins/common/file-html-table.c:182 +msgid "Capt_ion" +msgstr "_Загаловак" + +#: plug-ins/common/file-html-table.c:183 +msgid "The text for the table caption." +msgstr "Тэкст загалоўка табліцы." + +#: plug-ins/common/file-html-table.c:188 +msgid "Cell con_tent" +msgstr "Змесціва _ячэйкі" + +#: plug-ins/common/file-html-table.c:189 +msgid "The text to go into each cell." +msgstr "Тэкст, які пойдзе ў кожную ячэйку." + +#: plug-ins/common/file-html-table.c:195 +msgid "The width for each table cell. Can be a number or a percent." +msgstr "Шырыня ячэек табліцы. Можа быць лікам або працэнтам." + +#: plug-ins/common/file-html-table.c:201 plug-ins/common/file-ps.c:389 +#: plug-ins/common/file-ps.c:504 plug-ins/common/file-raw-data.c:357 +#: plug-ins/imagemap/imap_grid.c:261 +msgid "_Height" +msgstr "_Вышыня" + +#: plug-ins/common/file-html-table.c:202 +msgid "The height for each table cell. Can be a number or a percent." +msgstr "Вышыня ячэек табліцы. Можа быць лікам або працэнтам." + +#: plug-ins/common/file-html-table.c:208 +msgid "_Generate full HTML document" +msgstr "_Стварыць поўны дакумент HTML" + +#: plug-ins/common/file-html-table.c:209 +#, fuzzy +#| msgid "" +#| "If checked GTM will output a full HTML document with , , etc. " +#| "tags instead of just the table html." +msgid "" +"If enabled GTM will output a full HTML document with , , etc. " +"tags instead of just the table html." +msgstr "" +"Калі задзейнічана, КТГ будзе ствараць поўны дакумент HTML з , і " +"інш. тэгамі, замест адной табліцы." + +#: plug-ins/common/file-html-table.c:216 +#, fuzzy +#| msgid "_Border:" +msgid "_Border" +msgstr "_Мяжа:" + +#: plug-ins/common/file-html-table.c:217 +msgid "The number of pixels in the table border." +msgstr "Колькасць пікселяў у рамцы табліцы." + +#: plug-ins/common/file-html-table.c:222 +msgid "_Use cellspan" +msgstr "_Выкарыстоўваць cellspan" + +#: plug-ins/common/file-html-table.c:223 +#, fuzzy +#| msgid "" +#| "If checked GTM will replace any rectangular sections of identically " +#| "colored blocks with one large cell with ROWSPAN and COLSPAN values." +msgid "" +"If enabled GTM will replace any rectangular sections of identically colored " +"blocks with one large cell with ROWSPAN and COLSPAN values." +msgstr "" +"Калі задзейнічана, КТГ заменіць любы прастакутны ўчастак аднолькава " +"пафарбаваных блокаў на адну вялікую ячэйку са значэннямі ROWSPAN і COLSPAN." + +#: plug-ins/common/file-html-table.c:231 +msgid "Co_mpress TD tags" +msgstr "_Сціснуць тэгі TD" + +#: plug-ins/common/file-html-table.c:232 +#, fuzzy +#| msgid "" +#| "Checking this tag will cause GTM to leave no whitespace between the TD " +#| "tags and the cellcontent. This is only necessary for pixel level " +#| "positioning control." +msgid "" +"Enabling this will cause GTM to leave no whitespace between the TD tags and " +"the cell content. This is only necessary for pixel level positioning control." +msgstr "" +"Задзейнічанне гэтага тэгу прывядзе да таго, КТГ не будзе пакідаць прабелаў " +"між тэгамі TD і змесцівам ячэйкі. Гэта патрэбна толькі для кіравання " +"размяшчэннем на ўзроўні пікселяў." + +#: plug-ins/common/file-html-table.c:241 +#, fuzzy +#| msgid "Cell-_padding:" +msgid "Cell-pa_dding" +msgstr "_Водступ ячэйкі:" + +#: plug-ins/common/file-html-table.c:242 +msgid "The amount of cell padding." +msgstr "Велічыня водступаў ячэйкі." + +#: plug-ins/common/file-html-table.c:247 +msgid "Cell spaci_ng" +msgstr "_Інтэрвал паміж ячэйкамі" + +#: plug-ins/common/file-html-table.c:248 +msgid "The amount of cell spacing." +msgstr "Велічыня інтэрвалу паміж ячэйкамі." + +#: plug-ins/common/file-html-table.c:289 +msgid "HTML table plug-in does not support multiple layers." +msgstr "" + +#: plug-ins/common/file-html-table.c:614 msgid "" "You are about to create a huge\n" "HTML file which will most likely\n" "crash your browser." msgstr "" -"Зараз будзе створаны вялізны\n" -"файл HTML, які, найхутчэй,\n" -"абрыне твой гартач." +"Вы амаль стварылі празмерна\n" +"вялікі файл HTML, які, пэўна,\n" +"прывядзе да збою браўзера." -#. HTML Page Options -#: ../plug-ins/common/file-html-table.c:444 +#: plug-ins/common/file-html-table.c:631 +msgid "Warning" +msgstr "Увага" + +#: plug-ins/common/file-html-table.c:644 msgid "HTML Page Options" -msgstr "Выборы старонкі HTML" +msgstr "Параметры старонкі HTML" -#: ../plug-ins/common/file-html-table.c:451 -msgid "_Generate full HTML document" -msgstr "_Стварыць поўны дакумэнт HTML" - -#: ../plug-ins/common/file-html-table.c:457 -msgid "" -"If checked GTM will output a full HTML document with , , etc. " -"tags instead of just the table html." -msgstr "" -"Калі задзейнічана, КТГ будзе ствараць поўны дакумэнт HTML з , і " -"інш. тэгамі, замест адной табліцы." - -#. HTML Table Creation Options -#: ../plug-ins/common/file-html-table.c:470 +#: plug-ins/common/file-html-table.c:654 msgid "Table Creation Options" -msgstr "Выборы стварэньня табліцы" +msgstr "Параметры стварэння табліцы" -#: ../plug-ins/common/file-html-table.c:478 -msgid "_Use cellspan" -msgstr "_Ужываць cellspan" - -#: ../plug-ins/common/file-html-table.c:484 -msgid "" -"If checked GTM will replace any rectangular sections of identically colored " -"blocks with one large cell with ROWSPAN and COLSPAN values." -msgstr "" -"Калі задзейнічана, КТГ заменіць любы прастакутны ўчастак аднолькафа " -"пафарбаваных блёкаў на адну вялікую ячэю са значэньнямі ROWSPAN і COLSPAN." - -#: ../plug-ins/common/file-html-table.c:493 -msgid "Co_mpress TD tags" -msgstr "_Сьціснуць тэгі TD" - -#: ../plug-ins/common/file-html-table.c:499 -msgid "" -"Checking this tag will cause GTM to leave no whitespace between the TD tags " -"and the cellcontent. This is only necessary for pixel level positioning " -"control." -msgstr "" -"Задзейнічаньне гэтага тэгу прывядзе да таго, КТГ ня будзе пакідаць прабелаў " -"між тэгамі TD і зьмесьцівам ячэі. Гэта патрэбна толькі для кіраваньня " -"разьмяшчэньнем на ўзроўні піксэляў." - -#: ../plug-ins/common/file-html-table.c:509 -msgid "C_aption" -msgstr "_Загаловак" - -#: ../plug-ins/common/file-html-table.c:515 -msgid "Check if you would like to have the table captioned." -msgstr "Задзейнічай, калі хочаш мець загаловак у табліцы." - -#: ../plug-ins/common/file-html-table.c:530 -msgid "The text for the table caption." -msgstr "Тэкст загалоўку табліцы." - -#: ../plug-ins/common/file-html-table.c:544 -msgid "C_ell content:" -msgstr "_Зьмесьціва ячэі:" - -#: ../plug-ins/common/file-html-table.c:548 -msgid "The text to go into each cell." -msgstr "Тэкст, які пойдзе ў кожную ячэю." - -#. HTML Table Options -#: ../plug-ins/common/file-html-table.c:558 +#: plug-ins/common/file-html-table.c:673 msgid "Table Options" -msgstr "Выборы табліцы" +msgstr "Параметры табліцы" -#: ../plug-ins/common/file-html-table.c:569 -msgid "_Border:" -msgstr "_Мяжа:" +#: plug-ins/common/file-iff.c:145 +msgid "Amiga IFF" +msgstr "Amiga IFF" -#: ../plug-ins/common/file-html-table.c:573 -msgid "The number of pixels in the table border." -msgstr "Колькасьць піксэляў у рамцы табліцы." +#: plug-ins/common/file-iff.c:148 plug-ins/common/file-iff.c:149 +msgid "Load file in the IFF file format" +msgstr "Загружае файлы ў фармаце IFF" -#: ../plug-ins/common/file-html-table.c:588 -msgid "The width for each table cell. Can be a number or a percent." -msgstr "Шырыня ячэі табліцы. Можа быць лікам або адсоткам." +#: plug-ins/common/file-iff.c:260 +msgid "Invalid or missing ILBM image" +msgstr "" -#: ../plug-ins/common/file-html-table.c:604 -msgid "The height for each table cell. Can be a number or a percent." -msgstr "Вышыня ячэі табліцы. Можа быць лікам або адсоткам." +#: plug-ins/common/file-iff.c:265 +msgid "ILBM contains no image data - likely a palette file" +msgstr "" -#: ../plug-ins/common/file-html-table.c:615 -msgid "Cell-_padding:" -msgstr "_Водступ ячэі:" - -#: ../plug-ins/common/file-html-table.c:619 -msgid "The amount of cell padding." -msgstr "Велічыня водступаў ячэі." - -#: ../plug-ins/common/file-html-table.c:628 -msgid "Cell-_spacing:" -msgstr "_Інтэрвал між ячэямі:" - -#: ../plug-ins/common/file-html-table.c:632 -msgid "The amount of cell spacing." -msgstr "Велічыня інтэрвалу між ячэямі." - -#: ../plug-ins/common/file-jp2-load.c:96 +#: plug-ins/common/file-jp2-load.c:187 msgid "JPEG 2000 image" msgstr "Відарыс JPEG 2000" -#: ../plug-ins/common/file-jp2-load.c:212 -#, c-format -msgid "Couldn't decode '%s'." -msgstr "Немагчыма раскадаваць «%s»." +#: plug-ins/common/file-jp2-load.c:189 plug-ins/common/file-jp2-load.c:223 +msgid "JPEG 2000" +msgstr "JPEG 2000" -#: ../plug-ins/common/file-jp2-load.c:235 -#, c-format -msgid "The image '%s' is in grayscale but does not contain any gray component." -msgstr "" -"Відарыс «%s» зроблены ў шэрых колерах, але ня ўтрымлівае аніякага шэрага " -"складніку." +#: plug-ins/common/file-jp2-load.c:221 +msgid "JPEG 2000 codestream" +msgstr "JPEG 2000 codestream" -#: ../plug-ins/common/file-jp2-load.c:261 -#, c-format -msgid "The image '%s' is in RGB, but is missing some of the components." -msgstr "" -"Відарыс «%s» зроблены ў RGB, але ў ім адсутнічаюць некаторыя складнікі." +#: plug-ins/common/file-jp2-load.c:226 +msgid "Loads JPEG 2000 codestream." +msgstr "Загружае JPEG 2000 codestream." -#: ../plug-ins/common/file-jp2-load.c:287 -#, c-format +#: plug-ins/common/file-jp2-load.c:227 msgid "" -"The image '%s' is in the CIEXYZ color space, but there is no code in place " -"to convert it to RGB." +"Loads JPEG 2000 codestream. If the color space is set to UNKNOWN (0), we " +"will try to guess, which is only possible for few spaces (such as " +"grayscale). Most such calls will fail. You are rather expected to know the " +"color space of your data." msgstr "" -"Відарыс «%s» зроблены ў прасторы колераў CIEXYZ, але адсутнічае код, каб " -"ператварыць яго ў RGB." -#: ../plug-ins/common/file-jp2-load.c:294 -#, c-format +#: plug-ins/common/file-jp2-load.c:247 +msgid "Color s_pace" +msgstr "Колеравая п_растора" + +#: plug-ins/common/file-jp2-load.c:248 msgid "" -"The image '%s' is in the CIELAB color space, but there is no code in place " -"to convert it to RGB." +"Color space { UNKNOWN (0), GRAYSCALE (1), RGB (2), CMYK (3), YCbCr (4), " +"xvYCC (5) }" msgstr "" -"Відарыс «%s» зроблены ў прасторы колераў CIELAB, але адсутнічае код, каб " -"ператварыць яго ў RGB." +"Колеравая прастора { UNKNOWN (0), GRAYSCALE (1), RGB (2), CMYK (3), YCbCr " +"(4), xvYCC (5) }" -#: ../plug-ins/common/file-jp2-load.c:301 +#. Can be RGB, YUV and YCC. +#. Can be RGB, YUV and YCC with alpha or CMYK. +#: plug-ins/common/file-jp2-load.c:1003 plug-ins/common/file-jp2-load.c:1011 +msgid "sRGB" +msgstr "sRGB" + +#: plug-ins/common/file-jp2-load.c:1004 plug-ins/common/file-jp2-load.c:1012 +msgid "YCbCr" +msgstr "YCbCr" + +#: plug-ins/common/file-jp2-load.c:1005 plug-ins/common/file-jp2-load.c:1013 +msgid "xvYCC" +msgstr "xvYCC" + +#: plug-ins/common/file-jp2-load.c:1020 #, c-format +msgid "Unsupported JPEG 2000%s '%s' with %d components." +msgstr "JPEG 2000%s «%s» з %d кампанентамі не падтрымліваецца." + +#: plug-ins/common/file-jp2-load.c:1099 plug-ins/common/file-wmf.c:1007 +#, c-format +msgid "Could not open '%s' for reading" +msgstr "Не ўдалося адкрыць '%s' для чытання" + +#: plug-ins/common/file-jp2-load.c:1108 +#, c-format +msgid "Failed to initialize decoder for '%s', out of memory?" +msgstr "Не ўдалося ініцыяваць дэкодэр для «%s», недастаткова памяці?" + +#: plug-ins/common/file-jp2-load.c:1124 +#, fuzzy, c-format +#| msgid "Couldn't decode '%s'." +msgid "Couldn't set parameters on decoder for '%s'." +msgstr "Не ўдалося дэкадаваць «%s»." + +#: plug-ins/common/file-jp2-load.c:1132 +#, c-format +msgid "Couldn't read JP2 header from '%s'." +msgstr "Не ўдалося прачытаць загаловак JP2 з «%s»." + +#: plug-ins/common/file-jp2-load.c:1140 +#, c-format +msgid "Couldn't decode JP2 image in '%s'." +msgstr "Не ўдалося дэкадаваць відарыс JP2 у «%s»." + +#: plug-ins/common/file-jp2-load.c:1148 +#, c-format +msgid "Couldn't decompress JP2 image in '%s'." +msgstr "Не ўдалося распакаваць відарыс JP2 у «%s»." + +#: plug-ins/common/file-jp2-load.c:1179 +#, c-format +msgid "Couldn't decode CIELAB JP2 image in '%s'." +msgstr "Не ўдалося дэкадаваць відарыс CIELAB JP2 у «%s»." + +#: plug-ins/common/file-jp2-load.c:1236 +#, c-format +msgid "Unknown color space in JP2 codestream '%s'." +msgstr "Невядомая колеравая прастора у JP2 codestream «%s»." + +#: plug-ins/common/file-jp2-load.c:1247 +#, c-format +msgid "Couldn't convert YCbCr JP2 image '%s' to RGB." +msgstr "" + +#: plug-ins/common/file-jp2-load.c:1257 +#, c-format +msgid "Couldn't convert CMYK JP2 image in '%s' to RGB." +msgstr "" + +#: plug-ins/common/file-jp2-load.c:1267 +#, c-format +msgid "Couldn't convert xvYCC JP2 image in '%s' to RGB." +msgstr "" + +#: plug-ins/common/file-jp2-load.c:1294 +#, c-format +msgid "Unsupported color space in JP2 image '%s'." +msgstr "Колеравая прастора ў відарысе JP2 «%s» не падтрымліваецца." + +#: plug-ins/common/file-jpegxl.c:139 plug-ins/common/file-jpegxl.c:166 +msgid "JPEG XL image" +msgstr "Відарыс JPEG XL" + +#: plug-ins/common/file-jpegxl.c:142 plug-ins/common/file-jpegxl.c:143 +msgid "Loads files in the JPEG XL file format" +msgstr "Загружае файлы ў фармаце JPEG XL" + +#: plug-ins/common/file-jpegxl.c:169 plug-ins/common/file-jpegxl.c:170 +msgid "Saves files in the JPEG XL file format" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:191 +#, fuzzy +#| msgid "Compression" +msgid "Co_mpression/maxError" +msgstr "Сцісканне" + +#: plug-ins/common/file-jpegxl.c:192 msgid "" -"The image '%s' is in the YCbCr color space, but there is no code in place to " -"convert it to RGB." +"Max. butteraugli distance, lower = higher quality. Range: 0 .. 15. 1.0 = " +"visually lossless." msgstr "" -"Відарыс «%s» зроблены ў прасторы колераў YCbCr, але адсутнічае код, каб " -"ператварыць яго ў RGB." -#: ../plug-ins/common/file-jp2-load.c:309 -#, c-format -msgid "The image '%s' is in an unknown color space." -msgstr "Відарыс «%s» выкарыстоўвае невядомую прастору колераў." - -#: ../plug-ins/common/file-jp2-load.c:323 -#, c-format -msgid "" -"Image component %d of image '%s' does not have the same size as the image. " -"This is currently not supported." +#: plug-ins/common/file-jpegxl.c:203 +msgid "Effort/S_peed" msgstr "" -"Памер складніка %d відарыса «%s» ня роўны памеру відарыса, гэта пакуль не " -"падтрымліваецца. " -#: ../plug-ins/common/file-jp2-load.c:334 -#, c-format -msgid "Image component %d of image '%s' does not have both a hstep and vstep." -msgstr "Складнік %d відарыса «%s» ня мае адначасова hstep і vstep." - -#: ../plug-ins/common/file-jp2-load.c:343 -#, c-format -msgid "" -"Image component %d of image '%s' is signed. This is currently not supported." +#: plug-ins/common/file-jpegxl.c:204 +msgid "Encoder effort setting" msgstr "" -"Складнік %d відарыса «%s» мае знак, гэта пакуль не падтрымліваецца PIKA." -#. Inform the user that we couldn't losslessly save the -#. * transparency & just use the full palette -#: ../plug-ins/common/file-mng.c:534 ../plug-ins/common/file-png.c:1902 -msgid "Couldn't losslessly save transparency, saving opacity instead." +#: plug-ins/common/file-jpegxl.c:210 +#, fuzzy +#| msgid "_Save comment to file" +msgid "Save ori_ginal profile" +msgstr "_Захаваць каментарый у файл" + +#: plug-ins/common/file-jpegxl.c:211 +msgid "Store ICC profile to exported JXL file" msgstr "" -"Немагчыма захаваць празрыстасьць бяз страт, захоўваньне непразрыстасьці." -#: ../plug-ins/common/file-mng.c:1335 +#: plug-ins/common/file-jpegxl.c:216 plug-ins/file-tiff/file-tiff.c:233 +msgid "Export as CMY_K" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:217 +msgid "Create a CMYK JPEG XL image using the soft-proofing color profile" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2015 +#, fuzzy +#| msgid "Lighting Effects" +msgid "lightning (fastest)" +msgstr "Эфекты асвятлення" + +#: plug-ins/common/file-jpegxl.c:2016 +msgid "thunder" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2017 +msgid "falcon (faster)" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2018 +msgid "cheetah" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2019 +msgid "hare" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2020 +msgid "wombat" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2021 +msgid "squirrel" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2022 +msgid "kitten" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2023 +msgid "tortoise (slower)" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2030 +msgid "16 bit/channel" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2038 +msgid "CMYK profile required for export" +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2045 plug-ins/file-jpeg/jpeg-save.c:898 +#: plug-ins/file-psd/psd-save.c:2458 plug-ins/file-tiff/file-tiff-save.c:1369 +msgid "Name of the color profile used for CMYK export." +msgstr "" + +#: plug-ins/common/file-jpegxl.c:2064 plug-ins/file-jpeg/jpeg-save.c:909 +#: plug-ins/file-psd/psd-save.c:2469 plug-ins/file-tiff/file-tiff-save.c:1381 +#, c-format +msgid "Profile: %s" +msgstr "" + +#: plug-ins/common/file-mng.c:254 +msgid "MNG animation" +msgstr "Анімацыя MNG" + +#: plug-ins/common/file-mng.c:256 msgid "MNG" msgstr "MNG" -#: ../plug-ins/common/file-mng.c:1342 -msgid "MNG Options" -msgstr "Выборы MNG" +#: plug-ins/common/file-mng.c:259 +msgid "Saves images in the MNG file format" +msgstr "" -#: ../plug-ins/common/file-mng.c:1348 -msgid "Interlace" -msgstr "Празрадковы" +#: plug-ins/common/file-mng.c:260 +msgid "" +"This plug-in saves images in the Multiple-image Network Graphics (MNG) " +"format which can be used as a replacement for animated GIFs, and more." +msgstr "" -#: ../plug-ins/common/file-mng.c:1360 -msgid "Save background color" -msgstr "Захаваць колер асноведзі" +#: plug-ins/common/file-mng.c:278 +#, fuzzy +#| msgid "Deinterlace" +msgid "Use interlacing" +msgstr "Дэінтэрлэйс" -#: ../plug-ins/common/file-mng.c:1371 ../plug-ins/ui/plug-in-file-png.ui.h:3 -msgid "Save gamma" +#: plug-ins/common/file-mng.c:283 +msgid "_PNG compression level" +msgstr "_Узровень сціскання PNG" + +#: plug-ins/common/file-mng.c:284 +#, fuzzy +#| msgid "Choose a high compression level for small file size" +msgid "" +"PNG compression level, choose a high compression level for small file size" +msgstr "Выберы высокі ўзровень сціскання, каб атрымаць малы памер файла" + +#: plug-ins/common/file-mng.c:290 +msgid "JPEG compression _quality" +msgstr "_Якасць сціскання JPEG" + +#: plug-ins/common/file-mng.c:291 +msgid "JPEG quality factor" +msgstr "Каэфіцыент якасці JPEG" + +#: plug-ins/common/file-mng.c:296 +msgid "_JPEG smoothing factor" +msgstr "_Каэфіцыент згладжвання JPEG" + +#: plug-ins/common/file-mng.c:297 +msgid "JPEG smoothing factor" +msgstr "Каэфіцыент згладжвання JPEG" + +#: plug-ins/common/file-mng.c:302 +msgid "L_oop" +msgstr "" + +#: plug-ins/common/file-mng.c:303 +msgid "(ANIMATED MNG) Loop infinitely" +msgstr "" + +#: plug-ins/common/file-mng.c:308 +#, fuzzy +#| msgid "Default frame delay:" +msgid "Default fra_me delay" +msgstr "Прадвызначаная затрымка кадра:" + +#: plug-ins/common/file-mng.c:309 +msgid "(ANIMATED MNG) Default delay between frames in milliseconds" +msgstr "" + +#: plug-ins/common/file-mng.c:315 +#, fuzzy +#| msgid "Default chunks type:" +msgid "Default chunks t_ype" +msgstr "Прадвызначаныя тыпы кавалкаў:" + +#: plug-ins/common/file-mng.c:316 +msgid "" +"(ANIMATED MNG) Default chunks type (0 = PNG + Delta PNG; 1 = JNG + Delta " +"PNG; 2 = All PNG; 3 = All JNG)" +msgstr "" + +#: plug-ins/common/file-mng.c:323 +#, fuzzy +#| msgid "Default frame disposal:" +msgid "De_fault frame disposal" +msgstr "Прадвызначанае размяшчэнне кадра:" + +#: plug-ins/common/file-mng.c:324 +msgid "(ANIMATED MNG) Default dispose type (0 = combine; 1 = replace)" +msgstr "" + +#: plug-ins/common/file-mng.c:330 plug-ins/common/file-png.c:245 +msgid "Save _background color" +msgstr "Захаваць к_олер фону" + +#: plug-ins/common/file-mng.c:331 +#, fuzzy +#| msgid "Use the background color" +msgid "Write bKGd (background color) chunk" +msgstr "Ужываць колер фону" + +#: plug-ins/common/file-mng.c:336 +#, fuzzy +#| msgid "Save gamma" +msgid "Save _gamma" msgstr "Захаваць гаму" -#: ../plug-ins/common/file-mng.c:1381 -msgid "Save resolution" -msgstr "Захаваць разрозьненьне" +#: plug-ins/common/file-mng.c:337 +msgid "Write gAMA (gamma) chunk" +msgstr "" -#: ../plug-ins/common/file-mng.c:1392 -msgid "Save creation time" -msgstr "Захаваць час стварэньня" +#: plug-ins/common/file-mng.c:342 +msgid "Sa_ve resolution" +msgstr "Захаваць раздзяляльнасць" -#. Dialog init -#: ../plug-ins/common/file-mng.c:1411 ../plug-ins/common/file-png.c:1951 +#: plug-ins/common/file-mng.c:343 +msgid "Write pHYs (image resolution) chunk" +msgstr "" + +#: plug-ins/common/file-mng.c:348 plug-ins/common/file-png.c:263 +msgid "Save creation _time" +msgstr "Захаваць _час стварэння" + +#: plug-ins/common/file-mng.c:349 +#, fuzzy +#| msgid "Save creation time" +msgid "Write tIME (creation time) chunk" +msgstr "Захаваць час стварэння" + +#. Inform the user that we couldn't losslessly save the +#. * transparency & just use the full palette +#. +#: plug-ins/common/file-mng.c:729 plug-ins/common/file-png.c:2254 +msgid "Couldn't losslessly save transparency, saving opacity instead." +msgstr "Немагчыма захаваць празрыстасць без страт, захоўванне непразрыстасці." + +#: plug-ins/common/file-mng.c:1596 +msgid "MNG Options" +msgstr "Параметры MNG" + +#: plug-ins/common/file-mng.c:1604 plug-ins/common/file-png.c:226 msgid "PNG" msgstr "PNG" -#: ../plug-ins/common/file-mng.c:1412 +#: plug-ins/common/file-mng.c:1605 msgid "JNG" msgstr "JNG" -#: ../plug-ins/common/file-mng.c:1415 +#: plug-ins/common/file-mng.c:1608 +#, fuzzy msgid "PNG + delta PNG" msgstr "PNG + дэльта PNG" -#: ../plug-ins/common/file-mng.c:1416 +#: plug-ins/common/file-mng.c:1609 +#, fuzzy msgid "JNG + delta PNG" msgstr "JNG + дэльта PNG" -#: ../plug-ins/common/file-mng.c:1417 +#: plug-ins/common/file-mng.c:1610 msgid "All PNG" msgstr "Усе PNG" -#: ../plug-ins/common/file-mng.c:1418 +#: plug-ins/common/file-mng.c:1611 msgid "All JNG" msgstr "Усе JNG" -#: ../plug-ins/common/file-mng.c:1430 -msgid "Default chunks type:" -msgstr "Прадвызначаныя тыпы кавалкаў:" - -#: ../plug-ins/common/file-mng.c:1433 +#: plug-ins/common/file-mng.c:1619 msgid "Combine" msgstr "Спалучыць" -#: ../plug-ins/common/file-mng.c:1434 +#: plug-ins/common/file-mng.c:1620 msgid "Replace" msgstr "Замяніць" -#: ../plug-ins/common/file-mng.c:1445 -msgid "Default frame disposal:" -msgstr "Прадвызначанае разьмяшчэньне кадра:" - -#: ../plug-ins/common/file-mng.c:1457 -msgid "PNG compression level:" -msgstr "Узровень сьцісканьня PNG:" - -#: ../plug-ins/common/file-mng.c:1465 ../plug-ins/ui/plug-in-file-png.ui.h:10 -msgid "Choose a high compression level for small file size" -msgstr "Выберы высокі ўзровень сьцісканьня, каб атрымаць малы памер файла" - -#: ../plug-ins/common/file-mng.c:1479 -msgid "JPEG compression quality:" -msgstr "Якасьць сьцісканьня JPEG:" - -#: ../plug-ins/common/file-mng.c:1496 -msgid "JPEG smoothing factor:" -msgstr "Каэфіцыент згладжваньня JPEG:" - -#: ../plug-ins/common/file-mng.c:1506 +#: plug-ins/common/file-mng.c:1655 msgid "Animated MNG Options" -msgstr "Выборы анімаванага MNG" +msgstr "Параметры анімаванага MNG" -#: ../plug-ins/common/file-mng.c:1512 -msgid "Loop" -msgstr "Цыкль" - -#: ../plug-ins/common/file-mng.c:1526 -msgid "Default frame delay:" -msgstr "Прадвызначаная затрымка кадра:" - -#: ../plug-ins/common/file-mng.c:1542 ../plug-ins/ui/plug-in-file-gif.ui.h:7 -msgid "milliseconds" -msgstr "мілісэкунды" - -#: ../plug-ins/common/file-mng.c:1555 +#: plug-ins/common/file-mng.c:1665 msgid "" "These options are only available when the exported image has more than one " "layer. The image you are exporting only has one layer." msgstr "" -"Гэтыя выборы наяўныя толькі калі відарыс мае больш за адзін пласт. Відарыс, " -"які ты экспартуеш, мае толькі адзін пласт." +"Гэтыя параметры наяўныя толькі калі відарыс мае больш за адзін слой. " +"Відарыс, які ты экспартуеш, мае толькі адзін слой." -#: ../plug-ins/common/file-mng.c:1608 -msgid "MNG animation" -msgstr "Анімацыя MNG" - -#: ../plug-ins/common/file-pat.c:123 ../plug-ins/common/file-pat.c:145 +#: plug-ins/common/file-pat.c:112 msgid "PIKA pattern" msgstr "Узор PIKA" -#: ../plug-ins/common/file-pat.c:378 -#, c-format -msgid "Invalid UTF-8 string in pattern file '%s'." -msgstr "Недапушчальны радок UTF-8 у файле ўзору «%s»." +#: plug-ins/common/file-pat.c:116 +msgid "Exports PIKA pattern file (.PAT)" +msgstr "" -#: ../plug-ins/common/file-pat.c:553 +#: plug-ins/common/file-pat.c:117 +msgid "" +"New PIKA patterns can be created by exporting them in the appropriate place " +"with this plug-in." +msgstr "" + +#: plug-ins/common/file-pat.c:127 plug-ins/common/qbist.c:980 msgid "Pattern" msgstr "Узор" -#: ../plug-ins/common/file-pcx.c:133 ../plug-ins/common/file-pcx.c:152 +#: plug-ins/common/file-pat.c:137 +msgid "Short description of the pattern" +msgstr "" + +#: plug-ins/common/file-pat.c:138 +#, fuzzy +#| msgid "PIKA pattern" +msgid "PIKA Pattern" +msgstr "Узор PIKA" + +#: plug-ins/common/file-pcx.c:207 plug-ins/common/file-pcx.c:271 msgid "ZSoft PCX image" msgstr "Відарыс ZSoft PCX" -#: ../plug-ins/common/file-pcx.c:372 +#: plug-ins/common/file-pcx.c:210 +msgid "Loads files in Zsoft PCX file format" +msgstr "Загружае файлы ў фармаце Zsoft PCX" + +#: plug-ins/common/file-pcx.c:219 plug-ins/common/file-pcx.c:250 +#, fuzzy +#| msgid "Table Options" +msgid "Palette Options" +msgstr "Параметры табліцы" + +#: plug-ins/common/file-pcx.c:220 plug-ins/common/file-pcx.c:251 +msgid "Use built-in palette (0) or override with black/white (1)" +msgstr "" + +#: plug-ins/common/file-pcx.c:238 +#, fuzzy +#| msgid "ZSoft PCX image" +msgid "ZSoft DCX image" +msgstr "Відарыс ZSoft PCX" + +#: plug-ins/common/file-pcx.c:241 +msgid "Loads files in Zsoft DCX file format" +msgstr "Загружае файлы ў фармаце Zsoft DCX" + +#: plug-ins/common/file-pcx.c:413 +msgid "PCX format does not support multiple layers." +msgstr "" + +#: plug-ins/common/file-pcx.c:535 +#, fuzzy +#| msgid "Could not load '%s': %s" +msgid "Could not load PCX image" +msgstr "Не ўдалося загрузіць «%s»: %s" + +#: plug-ins/common/file-pcx.c:582 +msgid "DCX image offset exceeds the file size" +msgstr "" + +#: plug-ins/common/file-pcx.c:593 +#, fuzzy +#| msgid "Could not load '%s': %s" +msgid "Could not load DCX image" +msgstr "Не ўдалося загрузіць «%s»: %s" + +#: plug-ins/common/file-pcx.c:616 +#, c-format +msgid "%s: DCX image offset exceeds the file size: %s\n" +msgstr "" + +#: plug-ins/common/file-pcx.c:633 +msgid "Mixed-mode DCX image not loaded" +msgstr "" + +#: plug-ins/common/file-pcx.c:640 +#, fuzzy, c-format +#| msgid "Could not load '%s': %s" +msgid "%s: Could not load all DCX images: %s\n" +msgstr "Не ўдалося загрузіць «%s»: %s" + +#: plug-ins/common/file-pcx.c:680 #, c-format msgid "Could not read header from '%s'" -msgstr "Немагчыма прачытаць загаловак з «%s»" +msgstr "Не ўдалося прачытаць загаловак з «%s»" -#: ../plug-ins/common/file-pcx.c:383 +#: plug-ins/common/file-pcx.c:691 #, c-format msgid "'%s' is not a PCX file" -msgstr "«%s» не зьяўляецца файлам PCX" +msgstr "«%s» не з'яўляецца файлам PCX" -#: ../plug-ins/common/file-pcx.c:397 ../plug-ins/file-bmp/bmp-read.c:636 -#: ../plug-ins/file-psd/psd-load.c:301 +#: plug-ins/common/file-pcx.c:707 plug-ins/common/file-wbmp.c:259 +#: plug-ins/file-bmp/bmp-load.c:726 plug-ins/file-psd/psd-load.c:548 #, c-format msgid "Unsupported or invalid image width: %d" -msgstr "Шырыня %d не падтрымліваецца або не дапушчаецца." +msgstr "Шырыня %d не падтрымліваецца або недапушчальная" -#: ../plug-ins/common/file-pcx.c:403 ../plug-ins/file-bmp/bmp-read.c:642 -#: ../plug-ins/file-psd/psd-load.c:293 +#: plug-ins/common/file-pcx.c:713 plug-ins/common/file-wbmp.c:265 +#: plug-ins/file-bmp/bmp-load.c:732 plug-ins/file-psd/psd-load.c:540 #, c-format msgid "Unsupported or invalid image height: %d" -msgstr "Вышыня %d не падтрымліваецца або не дапушчаецца." +msgstr "Вышыня %d не падтрымліваецца або недапушчальная" -#: ../plug-ins/common/file-pcx.c:409 +#: plug-ins/common/file-pcx.c:719 msgid "Invalid number of bytes per line in PCX header" -msgstr "Недапушчальная колькасьць байтаў на радок у загалоўку PCX" +msgstr "Недапушчальная колькасць байтаў на радок у загалоўку PCX" -#: ../plug-ins/common/file-pcx.c:417 +#: plug-ins/common/file-pcx.c:726 +msgid "Resolution out of bounds in XCX header, using 72x72" +msgstr "" + +#: plug-ins/common/file-pcx.c:734 #, c-format msgid "Image dimensions too large: width %d x height %d" -msgstr "Завялікія вымеры відарыса: шырыня %d × вышыню %d" +msgstr "Завялікія памеры відарыса: шырыня %d × вышыню %d" -#: ../plug-ins/common/file-pcx.c:466 +#: plug-ins/common/file-pcx.c:861 msgid "Unusual PCX flavour, giving up" msgstr "Невядомы тып PCX, не апрацоўваецца" -#: ../plug-ins/common/file-pcx.c:685 +#: plug-ins/common/file-pcx.c:887 +#, fuzzy +#| msgid "Import from PDF" +msgid "Import from PCX" +msgstr "Імпартаваць з PDF" + +#: plug-ins/common/file-pcx.c:896 +msgid "Use PCX image's built-in palette" +msgstr "" + +#: plug-ins/common/file-pcx.c:897 +msgid "Use black and white palette" +msgstr "" + +#: plug-ins/common/file-pcx.c:1181 plug-ins/common/file-pnm.c:1631 +#, fuzzy +#| msgid "Cannot save images with alpha channel." +msgid "Cannot export images with alpha channel." +msgstr "Немагчыма захаваць відарыс з альфа-каналам." + +#: plug-ins/common/file-pcx.c:1201 #, c-format msgid "Invalid X offset: %d" msgstr "Недапушчальны зрух па X: %d" -#: ../plug-ins/common/file-pcx.c:691 +#: plug-ins/common/file-pcx.c:1207 #, c-format msgid "Invalid Y offset: %d" msgstr "Недапушчальны зрух па Y: %d" -#: ../plug-ins/common/file-pcx.c:697 +#: plug-ins/common/file-pcx.c:1213 #, c-format msgid "Right border out of bounds (must be < %d): %d" -msgstr "Правая мяжа не трапляе ў шэраг (мусіць быць < %d): %d" +msgstr "Правая мяжа не трапляе ў шэраг (павінен быць < %d): %d" -#: ../plug-ins/common/file-pcx.c:704 +#: plug-ins/common/file-pcx.c:1220 #, c-format msgid "Bottom border out of bounds (must be < %d): %d" -msgstr "Ніжняя мяжа не трапляе ў шэраг (мусіць быць < %d): %d" +msgstr "Ніжняя мяжа не трапляе ў шэраг (павінен быць < %d): %d" -#: ../plug-ins/common/file-pcx.c:769 +#: plug-ins/common/file-pcx.c:1296 plug-ins/common/file-qoi.c:394 #, c-format msgid "Writing to file '%s' failed: %s" msgstr "Няўдалы запіс у файл «%s»: %s" -#: ../plug-ins/common/file-pdf-load.c:300 -#: ../plug-ins/common/file-pdf-save.c:289 +#: plug-ins/common/file-pdf-load.c:317 plug-ins/common/file-pdf-save.c:314 msgid "Portable Document Format" -msgstr "Фармат пераносных дакумэнтаў" +msgstr "Фармат пераносных дакументаў" -#: ../plug-ins/common/file-pdf-load.c:548 -#: ../plug-ins/common/file-pdf-load.c:567 -#, c-format -msgid "Could not load '%s': %s" -msgstr "Немагчыма загрузіць «%s»: %s" +#: plug-ins/common/file-pdf-load.c:343 +msgid "PDF password" +msgstr "" -#: ../plug-ins/common/file-pdf-load.c:895 -#, c-format -msgid "%s-%s" -msgstr "%s-%s" +#: plug-ins/common/file-pdf-load.c:344 +msgid "The password to decrypt the encrypted PDF file" +msgstr "" -#: ../plug-ins/common/file-pdf-load.c:897 ../plug-ins/common/file-ps.c:1102 -#, c-format -msgid "%s-pages" +#: plug-ins/common/file-pdf-load.c:349 +#, fuzzy +#| msgid "Reverse Order" +msgid "Load in re_verse order" +msgstr "Адваротны парадак" + +#: plug-ins/common/file-pdf-load.c:350 +msgid "Load PDF pages in reverse order" +msgstr "" + +#: plug-ins/common/file-pdf-load.c:367 +#, fuzzy +#| msgid "Open as" +msgid "Open pages as" +msgstr "Адкрыць як" + +#: plug-ins/common/file-pdf-load.c:368 plug-ins/common/file-pdf-load.c:375 +#, fuzzy +#| msgid "Number of times to apply filter" +msgid "Number of pages to load (0 for all)" +msgstr "Колькі разоў ужыць фільтр" + +#: plug-ins/common/file-pdf-load.c:374 +#, fuzzy +#| msgid "%s-pages" +msgid "N pages" msgstr "%s-старонак" -#: ../plug-ins/common/file-pdf-load.c:1088 -msgid "Import from PDF" -msgstr "Імпартаваць з PDF" +#: plug-ins/common/file-pdf-load.c:387 +msgid "Pages" +msgstr "Старонкі" -#: ../plug-ins/common/file-pdf-load.c:1093 ../plug-ins/common/file-ps.c:2962 -#: ../plug-ins/common/file-tiff-load.c:483 -msgid "_Import" -msgstr "_Імпартаваць" +#: plug-ins/common/file-pdf-load.c:388 +#, fuzzy +#| msgid "The number of pixels in the table border." +msgid "The pages to load in the expected order" +msgstr "Колькасць пікселяў у рамцы табліцы." -#: ../plug-ins/common/file-pdf-load.c:1126 -msgid "Error getting number of pages from the given PDF file." -msgstr "Памылка падчас атрыманьня колькасьці старонак з дадзенага файла PDF." - -#: ../plug-ins/common/file-pdf-load.c:1168 -msgid "_Width (pixels):" -msgstr "_Шырыня (у піксэлях):" - -#: ../plug-ins/common/file-pdf-load.c:1169 -msgid "_Height (pixels):" -msgstr "_Вышыня (у піксэлях):" - -#: ../plug-ins/common/file-pdf-load.c:1171 -msgid "_Resolution:" -msgstr "_Разрозьненьне:" - -#. Antialiasing -#: ../plug-ins/common/file-pdf-load.c:1182 +#: plug-ins/common/file-pdf-load.c:392 msgid "Use _Anti-aliasing" msgstr "_Згладжваць" -#: ../plug-ins/common/file-pdf-load.c:1460 -#: ../plug-ins/common/file-pdf-load.c:1461 ../plug-ins/common/file-svg.c:917 -#: ../plug-ins/common/file-wmf.c:698 ../plug-ins/print/print-page-layout.c:301 +#: plug-ins/common/file-pdf-load.c:393 +#, fuzzy +#| msgid "Text antialiasing" +msgid "Render texts with anti-aliasing" +msgstr "Згладжванне тэксту" + +#: plug-ins/common/file-pdf-load.c:398 +msgid "_Fill transparent areas with white" +msgstr "" + +#: plug-ins/common/file-pdf-load.c:399 +msgid "Render all pages as opaque by filling the background in white" +msgstr "" + +#: plug-ins/common/file-pdf-load.c:407 plug-ins/common/file-pdf-load.c:408 +msgid "Resolution" +msgstr "Раздзяляльнасць" + +#. TRANSLATORS: first argument is file name, +#. * second is out-of-range page number, +#. * third is number of pages. +#. * Specify order as in English if needed. +#. +#: plug-ins/common/file-pdf-load.c:531 +#, c-format +msgid "PDF document '%1$s' has %3$d page. Page %2$d is out of range." +msgid_plural "PDF document '%1$s' has %3$d pages. Page %2$d is out of range." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: plug-ins/common/file-pdf-load.c:696 +msgid "PDF is password protected, please input the password:" +msgstr "" + +#: plug-ins/common/file-pdf-load.c:706 +msgid "Encrypted PDF" +msgstr "" + +#: plug-ins/common/file-pdf-load.c:733 +msgid "Wrong password! Please input the right one:" +msgstr "" + +#: plug-ins/common/file-pdf-load.c:751 +#, c-format +msgid "Could not load '%s': %s" +msgstr "Не ўдалося загрузіць «%s»: %s" + +#: plug-ins/common/file-pdf-load.c:1166 +msgid "Import from PDF" +msgstr "Імпартаваць з PDF" + +#: plug-ins/common/file-pdf-load.c:1195 +msgid "Error getting number of pages from the given PDF file." +msgstr "Памылка падчас атрымання колькасці старонак з файла PDF." + +#. Resolution +#: plug-ins/common/file-pdf-load.c:1244 +msgid "_Width (pixels):" +msgstr "_Шырыня (у пікселях):" + +#: plug-ins/common/file-pdf-load.c:1245 +msgid "_Height (pixels):" +msgstr "_Вышыня (у пікселях):" + +#: plug-ins/common/file-pdf-load.c:1247 +msgid "_Resolution:" +msgstr "_Раздзяляльнасць:" + +#: plug-ins/common/file-pdf-load.c:1538 plug-ins/common/file-pdf-load.c:1539 +#: plug-ins/common/file-svg.c:1017 plug-ins/common/file-wmf.c:722 +#: plug-ins/print/print-page-layout.c:307 #, c-format msgid "pixels/%a" -msgstr "піксэлі/%a" +msgstr "пікселі/%a" -#: ../plug-ins/common/file-pdf-save.c:304 +#: plug-ins/common/file-pdf-save.c:330 +msgid "PDF" +msgstr "PDF" + +#: plug-ins/common/file-pdf-save.c:380 plug-ins/common/file-pdf-save.c:452 +#: plug-ins/common/file-pdf-save.c:1165 +#, fuzzy +#| msgid "Replace partial transparency with the current background color" +msgid "_Fill transparent areas with background color" +msgstr "Замяніць частковую празрыстасць на бягучы колер фону" + +#: plug-ins/common/file-pdf-save.c:381 plug-ins/common/file-pdf-save.c:453 +msgid "" +"Fill transparent areas with background color if layer has an alpha channel" +msgstr "" + +#: plug-ins/common/file-pdf-save.c:394 msgid "_Create multipage PDF..." msgstr "_Стварыць шматстаронкавы PDF…" -#: ../plug-ins/common/file-pdf-save.c:401 -msgid "You must select a file to save!" -msgstr "Патрэбна выбраць файл для захоўваньня!" - -#: ../plug-ins/common/file-pdf-save.c:410 +#: plug-ins/common/file-pdf-save.c:731 #, c-format msgid "" "An error occurred while creating the PDF file:\n" @@ -3866,530 +4190,1383 @@ msgid "" "Make sure you entered a valid filename and that the selected location isn't " "read only!" msgstr "" -"Падчас стварэньня файла PDF здарылася памылка:\n" +"Падчас стварэння файла PDF адбылася памылка:\n" "%s\n" -"Пераканайся, што ўведзеная дапушчальная назва файла і ў выбранае для " -"захоўваньня месца можна запісваць файлы!" +"Пераканайцеся, што ўведзена дапушчальная назва файла і выбранае месца " +"захоўвання даступна для запісу!" -#: ../plug-ins/common/file-pdf-save.c:733 -#: ../plug-ins/common/file-pdf-save.c:850 -msgid "Omit hidden layers and layers with zero opacity" -msgstr "Прапушчаць схаваныя пласты й пласты з нулявой непразрыстасьцю" +#: plug-ins/common/file-pdf-save.c:1006 +#, c-format +msgid "" +"The following fonts cannot be found: %s.\n" +"It is recommended to convert your text layers to image or to install the " +"missing fonts before exporting, otherwise your design may not look right." +msgstr "" -#: ../plug-ins/common/file-pdf-save.c:737 -#: ../plug-ins/common/file-pdf-save.c:854 -msgid "Convert bitmaps to vector graphics where possible" -msgstr "Дзе магчыма ператвараць растры ў вэктарныя відарысы" - -#: ../plug-ins/common/file-pdf-save.c:741 -#: ../plug-ins/common/file-pdf-save.c:858 -msgid "Apply layer masks before saving" -msgstr "Ужыць маскі пластоў перад захоўваньнем" - -#: ../plug-ins/common/file-pdf-save.c:744 -#: ../plug-ins/common/file-pdf-save.c:861 -msgid "Keeping the masks will not change the output" -msgstr "Пакіданьне масак ня зьменіць выводжаньня" - -#: ../plug-ins/common/file-pdf-save.c:797 +#: plug-ins/common/file-pdf-save.c:1104 msgid "Save to:" msgstr "Захаваць у:" -#: ../plug-ins/common/file-pdf-save.c:801 +#: plug-ins/common/file-pdf-save.c:1108 msgid "Browse..." msgstr "Прагледзець…" -#: ../plug-ins/common/file-pdf-save.c:802 +#: plug-ins/common/file-pdf-save.c:1109 msgid "Multipage PDF export" -msgstr "Экспартаваньне шматстаронкавага PDF" +msgstr "Экспартаванне шматстаронкавага PDF" -#: ../plug-ins/common/file-pdf-save.c:835 +#: plug-ins/common/file-pdf-save.c:1145 msgid "Remove the selected pages" msgstr "Выдаліць вылучаныя старонкі" -#: ../plug-ins/common/file-pdf-save.c:845 +#: plug-ins/common/file-pdf-save.c:1155 msgid "Add this image" msgstr "Дадаць гэты відарыс" -#: ../plug-ins/common/file-pdf-save.c:958 +#: plug-ins/common/file-pdf-save.c:1160 +#, fuzzy +#| msgid "Omit hidden layers and layers with zero opacity" +msgid "_Omit hidden layers and layers with zero opacity" +msgstr "Прапускаць схаваныя слаі і слаі з нулявой непразрыстасцю" + +#: plug-ins/common/file-pdf-save.c:1170 +#, fuzzy +#| msgid "Convert bitmaps to vector graphics where possible" +msgid "Convert _bitmaps to vector graphics where possible" +msgstr "Дзе магчыма пераўтвараць растры ў вектарныя відарысы" + +#: plug-ins/common/file-pdf-save.c:1175 +msgid "_Apply layer masks before saving" +msgstr "_Ужыць маскі слаёў перад захоўваннем" + +#: plug-ins/common/file-pdf-save.c:1179 +msgid "Keeping the masks will not change the output" +msgstr "Захаванне масак не зменіць вывад" + +#: plug-ins/common/file-pdf-save.c:1268 plug-ins/common/file-pdf-save.c:1341 +#: plug-ins/common/file-pdf-save.c:1439 plug-ins/common/file-ps.c:2115 +#: plug-ins/file-tiff/file-tiff-load.c:1536 +#, c-format +msgid "Page %d" +msgstr "Старонка %d" + +#: plug-ins/common/file-pdf-save.c:1308 msgid "Error! In order to save the file, at least one image should be added!" msgstr "Памылка! Каб захаваць файл патрэбна дадаць хаця б адзін відарыс!" -#: ../plug-ins/common/file-pix.c:142 ../plug-ins/common/file-pix.c:159 +#: plug-ins/common/file-pdf-save.c:1486 plug-ins/print/print-draw-page.c:125 +msgid "Cannot handle the size (either width or height) of the image." +msgstr "" + +#: plug-ins/common/file-pix.c:171 plug-ins/common/file-pix.c:202 msgid "Alias Pix image" msgstr "Відарыс Alias Pix" -#: ../plug-ins/common/file-png.c:279 ../plug-ins/common/file-png.c:300 -#: ../plug-ins/common/file-png.c:320 ../plug-ins/common/file-png.c:337 +#: plug-ins/common/file-pix.c:291 +msgid "PIX format does not support multiple layers." +msgstr "" + +#: plug-ins/common/file-pix.c:584 +#, c-format +msgid "" +"Error trying to open temporary JPEG file '%s' for Esm Software pix loading: " +"%s" +msgstr "" + +#: plug-ins/common/file-pix.c:600 +msgid "Invalid Esm Software PIX file" +msgstr "" + +#: plug-ins/common/file-png.c:180 plug-ins/common/file-png.c:210 msgid "PNG image" msgstr "Відарыс PNG" -#: ../plug-ins/common/file-png.c:644 -#, c-format -msgid "Error loading PNG file: %s" -msgstr "Памылка загрузкі файла PNG: %s." +#: plug-ins/common/file-png.c:233 +msgid "_Interlacing (Adam7)" +msgstr "_Празрадковы (Adam7)" -#: ../plug-ins/common/file-png.c:732 -#, c-format -msgid "Error creating PNG read struct while saving '%s'." -msgstr "Памылка стварэньня структуры чытаньня PNG падчас захоўваньня «%s»." +#: plug-ins/common/file-png.c:234 +#, fuzzy +#| msgid "Use _Anti-aliasing" +msgid "Use Adam7 interlacing" +msgstr "_Згладжваць" -#: ../plug-ins/common/file-png.c:742 +#: plug-ins/common/file-png.c:239 +msgid "Co_mpression level" +msgstr "Узровень _сціскання" + +#: plug-ins/common/file-png.c:240 +#, fuzzy +#| msgid "Data Compression" +msgid "Deflate Compression factor (0..9)" +msgstr "Сцісканне даных" + +#: plug-ins/common/file-png.c:246 +msgid "Write bKGD chunk (PNG metadata)" +msgstr "" + +#: plug-ins/common/file-png.c:251 +msgid "Save layer o_ffset" +msgstr "Захаваць зрух _слоя" + +#: plug-ins/common/file-png.c:252 +msgid "Write oFFs chunk (PNG metadata)" +msgstr "" + +#: plug-ins/common/file-png.c:257 +msgid "Save resol_ution" +msgstr "Захаваць _раздзяляльнасць" + +#: plug-ins/common/file-png.c:258 +msgid "Write pHYs chunk (PNG metadata)" +msgstr "" + +#: plug-ins/common/file-png.c:264 +msgid "Write tIME chunk (PNG metadata)" +msgstr "" + +#: plug-ins/common/file-png.c:269 plug-ins/file-tiff/file-tiff.c:226 +msgid "Save color _values from transparent pixels" +msgstr "Захаваць значэнні _колераў празрыстых пікселяў" + +#: plug-ins/common/file-png.c:270 +#, fuzzy +#| msgid "Save color _values from transparent pixels" +msgid "Preserve color of completely transparent pixels" +msgstr "Захаваць значэнні _колераў празрыстых пікселяў" + +#: plug-ins/common/file-png.c:275 +msgid "_Optimize for smallest possible palette size" +msgstr "" + +#: plug-ins/common/file-png.c:276 +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:284 +msgid "PNG export format" +msgstr "" + +#: plug-ins/common/file-png.c:423 +msgid "PNG format does not support multiple layers." +msgstr "Фармат PNG не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-png.c:499 +#, c-format +msgid "Error loading PNG file: %s\n" +msgstr "Памылка загрузкі файла PNG: %s\n" + +#: plug-ins/common/file-png.c:630 +#, fuzzy, c-format +#| msgid "Error creating PNG read struct while saving '%s'." +msgid "Error creating PNG read struct while loading '%s'." +msgstr "Памылка стварэння структуры чытання PNG падчас захоўвання «%s»." + +#: plug-ins/common/file-png.c:639 +#, fuzzy, c-format +#| msgid "Error while saving '%s'. Could not save image." +msgid "Error while reading '%s'. Could not create PNG header info structure." +msgstr "Памылка падчас захоўвання «%s». Не ўдалося захаваць відарыс." + +#: plug-ins/common/file-png.c:647 #, c-format msgid "Error while reading '%s'. File corrupted?" -msgstr "Памылка падчас чытаньня «%s». Пашкоджаны файл?" +msgstr "Памылка падчас чытання «%s». Пашкоджаны файл?" -#: ../plug-ins/common/file-png.c:871 +#: plug-ins/common/file-png.c:902 #, c-format msgid "Unknown color model in PNG file '%s'." msgstr "Невядомая мадэль колераў у файле PNG «%s»." -#: ../plug-ins/common/file-png.c:882 +#: plug-ins/common/file-png.c:915 plug-ins/file-exr/file-exr.c:257 #, c-format msgid "Could not create new image for '%s': %s" -msgstr "Немагчыма стварыць новы відарыс для «%s»: %s" +msgstr "Не ўдалося стварыць новы відарыс для «%s»: %s" -#: ../plug-ins/common/file-png.c:936 +#: plug-ins/common/file-png.c:983 msgid "" "The PNG file specifies an offset that caused the layer to be positioned " "outside the image." msgstr "" -"Файл PNG вызначае такі зрух, што пласт будзе разьмешчаны па-за відарысам." +"Файл PNG вызначае такі зрух, што слой будзе размешчаны па-за відарысам." -#: ../plug-ins/common/file-png.c:1238 +#: plug-ins/common/file-png.c:1217 msgid "Apply PNG Offset" msgstr "Ужыць зрух PNG" -#: ../plug-ins/common/file-png.c:1242 +#: plug-ins/common/file-png.c:1221 msgid "Ignore PNG offset" -msgstr "Іґнараваць зрух PNG" +msgstr "Ігнараваць зрух PNG" -#: ../plug-ins/common/file-png.c:1243 +#: plug-ins/common/file-png.c:1222 msgid "Apply PNG offset to layer" -msgstr "Ужыць зрух PNG да пласта" +msgstr "Ужыць зрух PNG да слоя" -#: ../plug-ins/common/file-png.c:1267 +#: plug-ins/common/file-png.c:1247 #, 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:1335 -#, c-format -msgid "Error creating PNG write struct while saving '%s'." -msgstr "Памылка стварэньня структуры запісваньня PNG падчас захоўваньня «%s»." +#: plug-ins/common/file-png.c:1459 +#, fuzzy, c-format +#| msgid "Error creating PNG write struct while saving '%s'." +msgid "Error creating PNG write struct while exporting '%s'." +msgstr "Памылка стварэння структуры запісвання PNG падчас захоўвання «%s»." -#: ../plug-ins/common/file-png.c:1345 -#, c-format -msgid "Error while saving '%s'. Could not save image." -msgstr "Памылка падчас захоўваньня «%s». Немагчыма захаваць відарыс." +#: plug-ins/common/file-png.c:1468 +#, fuzzy, c-format +#| msgid "Error while saving '%s'. Could not save image." +msgid "Error while exporting '%s'. Could not create PNG header info structure." +msgstr "Памылка падчас захоўвання «%s». Не ўдалося захаваць відарыс." -#: ../plug-ins/common/file-png.c:1968 -#, c-format -msgid "Error loading UI file '%s': %s" -msgstr "Памылка загрузкі файла ІК «%s»: %s" +#: plug-ins/common/file-png.c:1476 +#, fuzzy, c-format +#| msgid "Error while saving '%s'. Could not save image." +msgid "Error while exporting '%s'. Could not export image." +msgstr "Памылка падчас захоўвання «%s». Не ўдалося захаваць відарыс." -#: ../plug-ins/common/file-png.c:1969 -msgid "Unknown error" -msgstr "Невядомая памылка" - -#: ../plug-ins/common/file-pnm.c:248 -msgid "PNM Image" -msgstr "Відарыс PNM" - -#: ../plug-ins/common/file-pnm.c:268 -msgid "PNM image" -msgstr "Відарыс PNM" - -#: ../plug-ins/common/file-pnm.c:280 -msgid "PBM image" -msgstr "Відарыс PBM" - -#: ../plug-ins/common/file-pnm.c:292 -msgid "PGM image" -msgstr "Відарыс PGM" - -#: ../plug-ins/common/file-pnm.c:304 -msgid "PPM image" -msgstr "Відарыс PPM" - -#: ../plug-ins/common/file-pnm.c:528 ../plug-ins/common/file-pnm.c:550 -#: ../plug-ins/common/file-pnm.c:559 ../plug-ins/common/file-pnm.c:570 -#: ../plug-ins/common/file-pnm.c:656 ../plug-ins/common/file-pnm.c:738 -msgid "Premature end of file." -msgstr "Заўчасны канец файла." - -#: ../plug-ins/common/file-pnm.c:530 -msgid "Invalid file." -msgstr "Недапушчальны файл." - -#: ../plug-ins/common/file-pnm.c:544 -msgid "File not in a supported format." -msgstr "Фармат файла не падтрымліваецца." - -#: ../plug-ins/common/file-pnm.c:553 -msgid "Invalid X resolution." -msgstr "Недапушчальнае разрозьненьне па X." - -#: ../plug-ins/common/file-pnm.c:555 -msgid "Image width is larger than PIKA can handle." -msgstr "Шырыня відарыса большая, чым PIKA можа апрацаваць." - -#: ../plug-ins/common/file-pnm.c:562 -msgid "Invalid Y resolution." -msgstr "Недапшчальнае разрозьненьне па Y." - -#: ../plug-ins/common/file-pnm.c:564 -msgid "Image height is larger than PIKA can handle." -msgstr "Вышыня відарыса большая, чым PIKA можа апрацаваць." - -#: ../plug-ins/common/file-pnm.c:574 -msgid "Unsupported maximum value." -msgstr "Найбольшае значэньне не падтрымліваецца." - -#: ../plug-ins/common/file-pnm.c:814 -msgid "Error reading file." -msgstr "Памылка чытаньня файла." - -#: ../plug-ins/common/file-pnm.c:1219 -msgid "PNM" -msgstr "PNM" - -#. file save type -#: ../plug-ins/common/file-pnm.c:1222 -msgid "Data formatting" -msgstr "Фарматаваньне даньняў" - -#: ../plug-ins/common/file-pnm.c:1226 -msgid "Raw" -msgstr "Сыры" - -#: ../plug-ins/common/file-pnm.c:1227 -msgid "ASCII" -msgstr "ASCII" - -#: ../plug-ins/common/file-ps.c:579 ../plug-ins/common/file-ps.c:671 -msgid "PostScript document" -msgstr "Дакумэнт PostScript" - -#: ../plug-ins/common/file-ps.c:598 ../plug-ins/common/file-ps.c:687 -msgid "Encapsulated PostScript image" -msgstr "Відарыс Encapsulated PostScript" - -#: ../plug-ins/common/file-ps.c:618 -msgid "PDF document" -msgstr "Дакумэнт PDF" - -#: ../plug-ins/common/file-ps.c:1027 -#, c-format -msgid "Could not interpret Postscript file '%s'" -msgstr "Немагчыма інтэртрэтаваць файл Postscript «%s»" - -#: ../plug-ins/common/file-ps.c:1169 -#, c-format -msgid "PostScript save cannot handle images with alpha channels" -msgstr "Захоўваньне PostScript ня можа апрацоўваць відарысы з альфаканаламі" - -#: ../plug-ins/common/file-ps.c:1804 ../plug-ins/common/file-tiff-load.c:999 -#, c-format -msgid "Page %d" -msgstr "Старонка %d" - -#: ../plug-ins/common/file-ps.c:2469 ../plug-ins/common/file-ps.c:2600 -#: ../plug-ins/common/file-ps.c:2749 ../plug-ins/common/file-ps.c:2873 -#: ../plug-ins/common/file-sunras.c:1504 ../plug-ins/common/file-sunras.c:1610 -#: ../plug-ins/file-fits/fits.c:850 ../plug-ins/file-fits/fits.c:973 -msgid "Write error occurred" -msgstr "Памылка запісу" - -#: ../plug-ins/common/file-ps.c:2957 -msgid "Import from PostScript" -msgstr "Імпартаваць з PostScript" - -#. Rendering -#: ../plug-ins/common/file-ps.c:3001 -msgid "Rendering" -msgstr "Апрацоўваньне" - -#. Resolution -#: ../plug-ins/common/file-ps.c:3017 ../plug-ins/common/file-svg.c:911 -#: ../plug-ins/common/file-wmf.c:692 -msgid "Resolution:" -msgstr "Разрозьненьне:" - -#: ../plug-ins/common/file-ps.c:3056 -msgid "Pages:" -msgstr "Старонак:" - -#: ../plug-ins/common/file-ps.c:3063 -msgid "Pages to load (e.g.: 1-4 or 1,3,5-7)" -msgstr "Загрузіць старонкі (напр.: 1-4 або 1,3,5-7)" - -#: ../plug-ins/common/file-ps.c:3068 ../plug-ins/common/sphere-designer.c:2657 -msgid "Layers" -msgstr "Пласты" - -#: ../plug-ins/common/file-ps.c:3071 -msgid "Images" -msgstr "Відарысы" - -#: ../plug-ins/common/file-ps.c:3074 -msgid "Open as" -msgstr "Адкрыць як" - -#: ../plug-ins/common/file-ps.c:3078 -msgid "Try Bounding Box" -msgstr "Абмежавальная рамка" - -#. Colouring -#: ../plug-ins/common/file-ps.c:3091 -msgid "Coloring" -msgstr "Колеры" - -#: ../plug-ins/common/file-ps.c:3095 -msgid "B/W" -msgstr "Ч/Б" - -#: ../plug-ins/common/file-ps.c:3097 ../plug-ins/common/file-xpm.c:479 -#: ../plug-ins/pikaressionist/color.c:65 -#: ../plug-ins/pikaressionist/general.c:169 -#: ../plug-ins/imagemap/imap_menu.c:212 -msgid "Color" -msgstr "Каляровы" - -#: ../plug-ins/common/file-ps.c:3098 ../plug-ins/file-fits/fits.c:1032 +#: plug-ins/common/file-png.c:2296 plug-ins/common/file-ps.c:3739 +#: plug-ins/file-fits/fits.c:1036 msgid "Automatic" msgstr "Аўтаматычна" -#: ../plug-ins/common/file-ps.c:3109 +#: plug-ins/common/file-png.c:2297 +msgid "8 bpc RGB" +msgstr "RGB, 8 біт на канал" + +#: plug-ins/common/file-png.c:2298 +msgid "8 bpc GRAY" +msgstr "GRAY, 8 біт на канал" + +#: plug-ins/common/file-png.c:2299 +msgid "8 bpc RGBA" +msgstr "RGBA, 8 біт на канал" + +#: plug-ins/common/file-png.c:2300 +msgid "8 bpc GRAYA" +msgstr "GRAYA, 8 біт на канал" + +#: plug-ins/common/file-png.c:2301 +msgid "16 bpc RGB" +msgstr "RGB, 16 біт на канал" + +#: plug-ins/common/file-png.c:2302 +msgid "16 bpc GRAY" +msgstr "GRAY, 16 біт на канал" + +#: plug-ins/common/file-png.c:2303 +msgid "16 bpc RGBA" +msgstr "RGBA, 16 біт на канал" + +#: plug-ins/common/file-png.c:2304 +msgid "16 bpc GRAYA" +msgstr "GRAYA, 16 біт на канал" + +#: plug-ins/common/file-pnm.c:315 +msgid "PNM Image" +msgstr "Відарыс PNM" + +#: plug-ins/common/file-pnm.c:318 +msgid "Loads files in the PNM file format" +msgstr "Загружае файлы ў фармаце PNM" + +#: plug-ins/common/file-pnm.c:319 +msgid "This plug-in loads files in the various Netpbm portable file formats." +msgstr "" + +#: plug-ins/common/file-pnm.c:348 +msgid "PNM image" +msgstr "Відарыс PNM" + +#: plug-ins/common/file-pnm.c:350 +msgid "PNM" +msgstr "PNM" + +#: plug-ins/common/file-pnm.c:353 +msgid "Exports files in the PNM file format" +msgstr "" + +#: plug-ins/common/file-pnm.c:354 +msgid "PNM export handles all image types without transparency." +msgstr "" + +#: plug-ins/common/file-pnm.c:370 plug-ins/common/file-pnm.c:406 +#: plug-ins/common/file-pnm.c:442 +msgid "Data formatting" +msgstr "Фарматаванне даных" + +#: plug-ins/common/file-pnm.c:371 plug-ins/common/file-pnm.c:407 +#: plug-ins/common/file-pnm.c:443 plug-ins/common/file-pnm.c:479 +msgid "TRUE for raw output, FALSE for ascii output" +msgstr "" + +#: plug-ins/common/file-pnm.c:385 +msgid "PBM" +msgstr "PBM" + +#: plug-ins/common/file-pnm.c:386 +msgid "PBM image" +msgstr "Відарыс PBM" + +#: plug-ins/common/file-pnm.c:389 +msgid "Exports files in the PBM file format" +msgstr "" + +#: plug-ins/common/file-pnm.c:390 +msgid "PBM exporting produces mono images without transparency." +msgstr "" + +#: plug-ins/common/file-pnm.c:421 +msgid "PGM image" +msgstr "Відарыс PGM" + +#: plug-ins/common/file-pnm.c:423 +msgid "PGM" +msgstr "PGM" + +#: plug-ins/common/file-pnm.c:425 +msgid "Exports files in the PGM file format" +msgstr "" + +#: plug-ins/common/file-pnm.c:426 +msgid "PGM exporting produces grayscale images without transparency." +msgstr "" + +#: plug-ins/common/file-pnm.c:457 +msgid "PPM image" +msgstr "Відарыс PPM" + +#: plug-ins/common/file-pnm.c:459 +msgid "PPM" +msgstr "PPM" + +#: plug-ins/common/file-pnm.c:461 +msgid "Exports files in the PPM file format" +msgstr "" + +#: plug-ins/common/file-pnm.c:462 +msgid "PPM export handles RGB images without transparency." +msgstr "" + +#: plug-ins/common/file-pnm.c:493 +msgid "PAM image" +msgstr "Відарыс PAM " + +#: plug-ins/common/file-pnm.c:496 +msgid "Exports files in the PAM file format" +msgstr "" + +#: plug-ins/common/file-pnm.c:497 +msgid "PAM export handles RGB images with or without transparency." +msgstr "" + +#: plug-ins/common/file-pnm.c:522 +msgid "PFM image" +msgstr "Відарыс PFM " + +#: plug-ins/common/file-pnm.c:525 +msgid "Exports files in the PFM file format" +msgstr "" + +#: plug-ins/common/file-pnm.c:526 +msgid "PFM export handles all images without transparency." +msgstr "" + +#: plug-ins/common/file-pnm.c:661 +#, c-format +msgid "%s format does not support multiple layers." +msgstr "" + +#: plug-ins/common/file-pnm.c:747 plug-ins/common/file-pnm.c:779 +#: plug-ins/common/file-pnm.c:788 plug-ins/common/file-pnm.c:803 +#: plug-ins/common/file-pnm.c:818 plug-ins/common/file-pnm.c:1016 +#: plug-ins/common/file-pnm.c:1111 plug-ins/common/file-pnm.c:1196 +#: plug-ins/common/file-pnm.c:1257 +msgid "Premature end of file." +msgstr "Заўчасны канец файла." + +#: plug-ins/common/file-pnm.c:749 +msgid "Invalid file." +msgstr "Няправільны файл." + +#: plug-ins/common/file-pnm.c:767 +msgid "File not in a supported format." +msgstr "Фармат файла не падтрымліваецца." + +#: plug-ins/common/file-pnm.c:782 +msgid "Invalid X resolution." +msgstr "Недапушчальная раздзяляльнасць па X." + +#: plug-ins/common/file-pnm.c:784 plug-ins/common/file-pnm.c:950 +msgid "Image width is larger than PIKA can handle." +msgstr "Шырыня відарыса большая, чым PIKA можа апрацаваць." + +#: plug-ins/common/file-pnm.c:791 +msgid "Invalid Y resolution." +msgstr "Недапушчальная раздзяляльнасць па Y." + +#: plug-ins/common/file-pnm.c:793 +msgid "Image height is larger than PIKA can handle." +msgstr "Вышыня відарыса большая, чым PIKA можа апрацаваць." + +#: plug-ins/common/file-pnm.c:807 +msgid "Bogus scale factor." +msgstr "" + +#: plug-ins/common/file-pnm.c:809 +#, fuzzy +#| msgid "Unsupported brush format" +msgid "Unsupported scale factor." +msgstr "Фармат пэндзля не падтрымліваецца" + +#: plug-ins/common/file-pnm.c:823 +msgid "Unsupported maximum value." +msgstr "Найбольшае значэнне не падтрымліваецца." + +#: plug-ins/common/file-pnm.c:944 +msgid "PAM: Unsupported inofficial PNM variant." +msgstr "" + +#: plug-ins/common/file-pnm.c:948 +#, fuzzy +#| msgid "Premature end of file." +msgid "PAM: Premature end of file." +msgstr "Заўчасны канец файла." + +#: plug-ins/common/file-pnm.c:952 +msgid "PAM: Invalid X resolution." +msgstr "PAM: недапушчальная раздзяляльнасць па X." + +#: plug-ins/common/file-pnm.c:954 +msgid "PAM: Invalid Y resolution." +msgstr "PAM: недапушчальная раздзяляльнасць па Y." + +#: plug-ins/common/file-pnm.c:956 +#, fuzzy +#| msgid "Unsupported maximum value." +msgid "PAM: Invalid maximum value." +msgstr "Найбольшае значэнне не падтрымліваецца." + +#: plug-ins/common/file-pnm.c:958 +#, fuzzy +#| msgid "Invalid file." +msgid "PAM: Invalid depth." +msgstr "Недапушчальны файл." + +#: plug-ins/common/file-pnm.c:960 +#, fuzzy +#| msgid "Unsupported maximum value." +msgid "PAM: Unsupported tupltype." +msgstr "Найбольшае значэнне не падтрымліваецца." + +#. file save type +#: plug-ins/common/file-pnm.c:2028 +msgid "_ASCII" +msgstr "_ASCII" + +#: plug-ins/common/file-pnm.c:2029 +msgid "_Raw" +msgstr "_Raw" + +#: plug-ins/common/file-ps.c:336 plug-ins/common/file-ps.c:449 +msgid "PostScript document" +msgstr "Дакумент PostScript" + +#: plug-ins/common/file-ps.c:353 +msgid "Encapsulated PostScript image" +msgstr "Відарыс Encapsulated PostScript" + +#: plug-ins/common/file-ps.c:377 +msgid "Resol_ution" +msgstr "_Раздзяляльнасць" + +#: plug-ins/common/file-ps.c:378 +msgid "Resolution to interpret image (dpi)" +msgstr "" + +#: plug-ins/common/file-ps.c:384 +#, fuzzy +#| msgid "Tile _width:" +msgid "Desired width" +msgstr "Шырыня _пліткі:" + +#: plug-ins/common/file-ps.c:390 +#, fuzzy +#| msgid "Tile _height:" +msgid "Desired height" +msgstr "_Вышыня пліткі:" + +#: plug-ins/common/file-ps.c:395 +#, fuzzy +#| msgid "Try Bounding Box" +msgid "Try _Bounding Box" +msgstr "Абмежавальная рамка" + +#: plug-ins/common/file-ps.c:396 +msgid "FALSE: Use width/height, TRUE: Use BoundingBox" +msgstr "" + +#: plug-ins/common/file-ps.c:401 +#, fuzzy +#| msgid "Pages:" +msgid "_Pages" +msgstr "Старонак:" + +#: plug-ins/common/file-ps.c:402 +#, fuzzy +#| msgid "Pages to load (e.g.: 1-4 or 1,3,5-7)" +msgid "Pages to load (e.g.: 1,3,5-7)" +msgstr "Загрузіць старонкі (напр.: 1-4 або 1,3,5-7)" + +#: plug-ins/common/file-ps.c:407 +msgid "Coloring" +msgstr "Колеры" + +#: plug-ins/common/file-ps.c:408 +msgid "4: b/w, 5: grey, 6: color image, 7: automatic" +msgstr "" + +#: plug-ins/common/file-ps.c:413 msgid "Text antialiasing" -msgstr "Згладжваньне тэксту" +msgstr "Згладжванне тэксту" -#: ../plug-ins/common/file-ps.c:3113 ../plug-ins/common/file-ps.c:3125 -msgctxt "antialiasing" -msgid "None" -msgstr "Няма" +#: plug-ins/common/file-ps.c:414 plug-ins/common/file-ps.c:420 +msgid "1, 2 or 4" +msgstr "1, 2 або 4" -#: ../plug-ins/common/file-ps.c:3114 ../plug-ins/common/file-ps.c:3126 -msgid "Weak" -msgstr "Слабое" - -#: ../plug-ins/common/file-ps.c:3115 ../plug-ins/common/file-ps.c:3127 -msgid "Strong" -msgstr "Моцнае" - -#: ../plug-ins/common/file-ps.c:3121 +#: plug-ins/common/file-ps.c:419 +#, fuzzy msgid "Graphic antialiasing" -msgstr "Згладжваньне графікі" +msgstr "Згладжванне графікі" -#: ../plug-ins/common/file-ps.c:3199 -msgid "PostScript" -msgstr "PostScript" +#: plug-ins/common/file-ps.c:459 +msgid "PS" +msgstr "PS" -#. Image Size -#: ../plug-ins/common/file-ps.c:3216 -msgid "Image Size" -msgstr "Памер відарыса" +#: plug-ins/common/file-ps.c:468 +#, fuzzy +#| msgid "_Encapsulated PostScript" +msgid "Encapsulated PostScript" +msgstr "_Encapsulated PostScript" -#: ../plug-ins/common/file-ps.c:3265 +#: plug-ins/common/file-ps.c:479 +msgid "EPS" +msgstr "EPS" + +#: plug-ins/common/file-ps.c:498 +msgid "Width of the image in PostScript file (0: use input image size)" +msgstr "" + +#: plug-ins/common/file-ps.c:505 +msgid "Height of the image in PostScript file (0: use input image size)" +msgstr "" + +#: plug-ins/common/file-ps.c:511 +#, fuzzy +#| msgid "_X offset:" +msgid "_X offset" +msgstr "_Зрух па X:" + +#: plug-ins/common/file-ps.c:512 +msgid "X-offset to image from lower left corner" +msgstr "" + +#: plug-ins/common/file-ps.c:517 +#, fuzzy +#| msgid "_Y offset:" +msgid "Y o_ffset" +msgstr "_Зрух па Y:" + +#: plug-ins/common/file-ps.c:518 +msgid "Y-offset to image from lower left corner" +msgstr "" + +#: plug-ins/common/file-ps.c:523 +msgid "Unit" +msgstr "Адзінка" + +#: plug-ins/common/file-ps.c:524 +msgid "Unit for width/height/offset. 0: inches, 1: millimeters" +msgstr "" + +#: plug-ins/common/file-ps.c:530 msgid "_Keep aspect ratio" msgstr "_Захоўваць суадносіны бакоў" -#: ../plug-ins/common/file-ps.c:3271 +#: plug-ins/common/file-ps.c:531 +msgid "FALSE: use width/height, TRUE: keep aspect ratio" +msgstr "" + +#: plug-ins/common/file-ps.c:536 plug-ins/map-object/map-object-ui.c:1013 +msgid "Rotation" +msgstr "Паварот" + +#: plug-ins/common/file-ps.c:542 +#, fuzzy +#| msgid "_PostScript level 2" +msgid "PostScript Level _2" +msgstr "_PostScript узроўню 2" + +#: plug-ins/common/file-ps.c:543 +msgid "FALSE: PostScript Level 1, TRUE: PostScript Level 2" +msgstr "" + +#: plug-ins/common/file-ps.c:548 +#, fuzzy +#| msgid "_Encapsulated PostScript" +msgid "Encapsula_ted PostScript" +msgstr "_Encapsulated PostScript" + +#: plug-ins/common/file-ps.c:549 +#, fuzzy +#| msgid "_Encapsulated PostScript" +msgid "FALSE: PostScript, TRUE: Encapsulated PostScript" +msgstr "_Encapsulated PostScript" + +#: plug-ins/common/file-ps.c:554 plug-ins/imagemap/imap_grid.c:298 +msgid "_Preview" +msgstr "_Агляд" + +#: plug-ins/common/file-ps.c:555 +#, fuzzy +#| msgid "Preview" +msgid "Show Preview" +msgstr "Агляд" + +#: plug-ins/common/file-ps.c:560 +#, fuzzy +#| msgid "Preview Size" +msgid "Preview Si_ze" +msgstr "Памер агляду" + +#: plug-ins/common/file-ps.c:561 +msgid "0: no preview, >0: max. size of preview" +msgstr "" + +#: plug-ins/common/file-ps.c:722 +msgid "PostScript plug-in does not support multiple layers." +msgstr "" + +#: plug-ins/common/file-ps.c:1136 +#, fuzzy, c-format +#| msgid "Could not interpret Postscript file '%s'" +msgid "Could not interpret PostScript file '%s'" +msgstr "Не ўдалося інтэртрэтаваць файл Postscript «%s»" + +#: plug-ins/common/file-ps.c:1220 +#, fuzzy +#| msgid "Rendered SVG" +msgid "Rendered EPS" +msgstr "Пабудаваны SVG" + +#: plug-ins/common/file-ps.c:1248 +#, c-format +msgid "%s-pages" +msgstr "%s-старонак" + +#: plug-ins/common/file-ps.c:1320 +#, fuzzy +#| msgid "PostScript save cannot handle images with alpha channels" +msgid "PostScript export cannot handle images with alpha channels" +msgstr "Захоўванне PostScript не можа апрацоўваць відарысы з альфа-каналамі" + +#: plug-ins/common/file-ps.c:3729 +msgid "Rendering" +msgstr "Апрацоўванне" + +#. Coloring +#: plug-ins/common/file-ps.c:3736 +msgid "B/W" +msgstr "Ч/Б" + +#: plug-ins/common/file-ps.c:3737 plug-ins/imagemap/imap-menu.ui:101 +msgid "Gray" +msgstr "Адценні шэрага" + +#: plug-ins/common/file-ps.c:3738 plug-ins/common/file-xpm.c:511 +#: plug-ins/pikaressionist/color.c:65 plug-ins/pikaressionist/general.c:169 +#: plug-ins/imagemap/imap-menu.ui:96 +msgid "Color" +msgstr "Каляровы" + +#: plug-ins/common/file-ps.c:3746 plug-ins/common/file-ps.c:3754 +msgid "Weak" +msgstr "Слабае" + +#: plug-ins/common/file-ps.c:3747 plug-ins/common/file-ps.c:3755 +msgid "Strong" +msgstr "Моцнае" + +#: plug-ins/common/file-ps.c:3781 +msgid "Pages:" +msgstr "Старонак:" + +#: plug-ins/common/file-ps.c:3785 +msgid "Pages to load (e.g.: 1-4 or 1,3,5-7)" +msgstr "Загрузіць старонкі (напр.: 1-4 або 1,3,5-7)" + +#: plug-ins/common/file-ps.c:3791 +msgid "Open as" +msgstr "Адкрыць як" + +#: plug-ins/common/file-ps.c:3884 msgid "" "When toggled, the resulting image will be scaled to fit into the given size " "without changing the aspect ratio." msgstr "" -"Калі задзейнічана, памер выніковага відарыса будзе зьменены так, каб ён " -"зьмяшчаўся ў зададзены памер, не зьмяняючы суадносін бакоў." +"Калі задзейнічана, памер выніковага відарыса будзе зменены так, каб ён " +"змяшчаўся ў зададзены памер, не змяняючы суадносін бакоў." + +#: plug-ins/common/file-ps.c:3890 +msgid "Image Size" +msgstr "Памер відарыса" #. Unit -#: ../plug-ins/common/file-ps.c:3281 -msgid "Unit" -msgstr "Адзінка" - -#: ../plug-ins/common/file-ps.c:3285 +#: plug-ins/common/file-ps.c:3901 msgid "_Inch" msgstr "_Цаля" -#: ../plug-ins/common/file-ps.c:3286 +#: plug-ins/common/file-ps.c:3902 msgid "_Millimeter" -msgstr "_Мілімэтар" +msgstr "_Міліметр" #. Rotation -#: ../plug-ins/common/file-ps.c:3297 -#: ../plug-ins/map-object/map-object-ui.c:989 -msgid "Rotation" -msgstr "Паварот" +#: plug-ins/common/file-ps.c:3915 +msgid "_0" +msgstr "_0" -#. Format -#: ../plug-ins/common/file-ps.c:3312 +#: plug-ins/common/file-ps.c:3916 +msgid "_90" +msgstr "_90" + +#: plug-ins/common/file-ps.c:3917 +msgid "_180" +msgstr "_180" + +#: plug-ins/common/file-ps.c:3918 +msgid "_270" +msgstr "_270" + +#: plug-ins/common/file-ps.c:3925 msgid "Output" msgstr "Выхад" -#: ../plug-ins/common/file-ps.c:3318 -msgid "_PostScript level 2" -msgstr "_PostScript узроўню 2" - -#: ../plug-ins/common/file-ps.c:3327 -msgid "_Encapsulated PostScript" -msgstr "_Encapsulated PostScript" - -#: ../plug-ins/common/file-ps.c:3336 -msgid "P_review" -msgstr "_Агляд" - -#: ../plug-ins/common/file-ps.c:3358 -msgid "Preview _size:" -msgstr "_Памер агляду:" - -#: ../plug-ins/common/file-psp.c:599 ../plug-ins/common/file-psp.c:623 +#: plug-ins/common/file-psp.c:664 plug-ins/common/file-psp.c:694 msgid "Paint Shop Pro image" msgstr "Відарыс Paint Shop Pro" -#: ../plug-ins/common/file-psp.c:640 -msgid "PSP" -msgstr "PSP" +#: plug-ins/common/file-psp.c:667 +msgid "Loads images from the Paint Shop Pro PSP file format" +msgstr "" -#. file save type -#: ../plug-ins/common/file-psp.c:643 -msgid "Data Compression" -msgstr "Сьцісканьне даньняў" +#: plug-ins/common/file-psp.c:669 +msgid "" +"This plug-in loads and exports images in Paint Shop Pro's native PSP format. " +"Vector layers aren't handled. Exporting isn't yet implemented." +msgstr "" -#: ../plug-ins/common/file-psp.c:647 -msgctxt "compression" -msgid "None" -msgstr "Няма" - -#: ../plug-ins/common/file-psp.c:648 +#: plug-ins/common/file-psp.c:841 msgid "RLE" msgstr "RLE" -#: ../plug-ins/common/file-psp.c:649 +#: plug-ins/common/file-psp.c:842 msgid "LZ77" msgstr "LZ77" -#: ../plug-ins/common/file-raw.c:187 ../plug-ins/common/file-raw.c:202 +#: plug-ins/common/file-psp.c:934 +msgid "Error reading block header" +msgstr "Памылка пры чытанні загалоўка блока" + +#: plug-ins/common/file-psp.c:941 +#, c-format +msgid "Invalid block header at %ld" +msgstr "Няправільны загаловак блока ў %ld" + +#: plug-ins/common/file-psp.c:944 +msgid "Invalid block header" +msgstr "Няправільны загаловак блока" + +#: plug-ins/common/file-psp.c:976 +#, c-format +msgid "Seek error: %s" +msgstr "" + +#: plug-ins/common/file-psp.c:999 +msgid "Invalid general image attribute chunk size." +msgstr "" + +#: plug-ins/common/file-psp.c:1021 +msgid "Error reading general image attribute block." +msgstr "" + +#: plug-ins/common/file-psp.c:1036 +#, fuzzy, c-format +#| msgid "Compression type" +msgid "Unknown compression type %d" +msgstr "Тып сціскання" + +#: plug-ins/common/file-psp.c:1072 plug-ins/common/file-psp.c:1079 +#, fuzzy, c-format +#| msgid "Unsupported bit depth: %d" +msgid "Unsupported bit depth %d" +msgstr "Глыбіня бітаў не падтрымліваецца: %d" + +#: plug-ins/common/file-psp.c:1126 +msgid "Error reading creator keyword chunk" +msgstr "" + +#: plug-ins/common/file-psp.c:1132 +msgid "Invalid keyword chunk header" +msgstr "" + +#: plug-ins/common/file-psp.c:1147 plug-ins/common/file-psp.c:1174 +msgid "Error reading creator keyword data" +msgstr "" + +#: plug-ins/common/file-psp.c:1258 plug-ins/common/file-psp.c:1267 +#: plug-ins/common/file-psp.c:1276 +#, fuzzy +#| msgid "Error reading file" +msgid "Error reading color block" +msgstr "Памылка чытання файла" + +#: plug-ins/common/file-psp.c:1287 +msgid "Error: Unsupported palette size" +msgstr "" + +#: plug-ins/common/file-psp.c:1298 +#, fuzzy +#| msgid "Error reading file" +msgid "Error reading color palette" +msgstr "Памылка чытання файла" + +#: plug-ins/common/file-psp.c:1724 plug-ins/common/file-psp.c:1738 +msgid "zlib error" +msgstr "памылка zlib" + +#: plug-ins/common/file-psp.c:1801 plug-ins/common/file-psp.c:1835 +#: plug-ins/common/file-psp.c:1845 +msgid "Error reading layer extension information" +msgstr "" + +#: plug-ins/common/file-psp.c:1822 +#, fuzzy +#| msgid "Error reading file" +msgid "Error reading block information" +msgstr "Памылка чытання файла" + +#: plug-ins/common/file-psp.c:1902 +#, c-format +msgid "Invalid layer sub-block %s, should be LAYER" +msgstr "" + +#: plug-ins/common/file-psp.c:1933 plug-ins/common/file-psp.c:1990 +#, fuzzy +#| msgid "Error reading BMP file header from '%s'" +msgid "Error reading layer information chunk" +msgstr "Памылка чытання загалоўку файла BMP з '%s'" + +#: plug-ins/common/file-psp.c:2032 +#, c-format +msgid "Invalid layer dimensions: %dx%d" +msgstr "Недапушчальныя памеры слоя: %d × %d" + +#: plug-ins/common/file-psp.c:2093 +msgid "Error creating layer" +msgstr "Памылка стварэння слоя" + +#: plug-ins/common/file-psp.c:2138 +#, c-format +msgid "Invalid layer sub-block %s, should be CHANNEL" +msgstr "" + +#: plug-ins/common/file-psp.c:2154 +msgid "Error reading channel information chunk" +msgstr "" + +#: plug-ins/common/file-psp.c:2177 +#, c-format +msgid "Invalid channel type %d in channel information chunk" +msgstr "" + +#: plug-ins/common/file-psp.c:2281 plug-ins/common/file-psp.c:2298 +#, fuzzy +#| msgid "Error reading file" +msgid "Error reading tube data chunk" +msgstr "Памылка чытання файла" + +#: plug-ins/common/file-psp.c:2380 plug-ins/common/file-psp.c:2392 +#: plug-ins/common/file-psp.c:2403 +#, fuzzy +#| msgid "Error reading file" +msgid "Error reading colorprofile chunk" +msgstr "Памылка чытання файла" + +#: plug-ins/common/file-psp.c:2456 +#, fuzzy +#| msgid "Error reading file." +msgid "Error reading file header." +msgstr "Памылка чытання файла." + +#: plug-ins/common/file-psp.c:2463 +msgid "Incorrect file signature." +msgstr "" + +#: plug-ins/common/file-psp.c:2477 +#, c-format +msgid "Unsupported PSP file format version %d.%d." +msgstr "Версія %d.%d фармату файла PSP не падтрымліваецца." + +#: plug-ins/common/file-psp.c:2497 +msgid "invalid block size" +msgstr "няправільны памер блока" + +#: plug-ins/common/file-psp.c:2506 +msgid "Duplicate General Image Attributes block." +msgstr "" + +#: plug-ins/common/file-psp.c:2534 +msgid "Missing General Image Attributes block." +msgstr "" + +#: plug-ins/common/file-psp.c:2653 +msgid "Exporting not implemented yet." +msgstr "" + +#: plug-ins/common/file-qoi.c:137 plug-ins/common/file-qoi.c:164 +msgid "Quite OK Image" +msgstr "" + +#: plug-ins/common/file-qoi.c:140 +msgid "Load file in the QOI file format" +msgstr "" + +#: plug-ins/common/file-qoi.c:141 +msgid "Load file in the QOI file format (Quite OK Image)" +msgstr "" + +#: plug-ins/common/file-qoi.c:167 +msgid "Export image in the QOI file format" +msgstr "" + +#: plug-ins/common/file-qoi.c:168 +msgid "Export image in the QOI file format (Quite OK Image)" +msgstr "" + +#: plug-ins/common/file-qoi.c:262 +msgid "QOI format does not support multiple layers." +msgstr "" + +#: plug-ins/common/file-qoi.c:312 +msgid "Failed to read QOI file" +msgstr "Не ўдалося прачытаць файл QOI" + +#: plug-ins/common/file-raw-data.c:333 plug-ins/common/file-raw-data.c:452 msgid "Raw image data" -msgstr "Неапрацаваныя даньні відарыса" +msgstr "Неапрацаваныя даныя відарыса" -#: ../plug-ins/common/file-raw.c:1056 +#: plug-ins/common/file-raw-data.c:353 +#, fuzzy +#| msgid "Adjust the number of spikes" +msgid "Image width in number of pixels" +msgstr "Вызначыць колькасць промняў" + +#: plug-ins/common/file-raw-data.c:358 +#, fuzzy +#| msgid "Adjust the number of spikes" +msgid "Image height in number of pixels" +msgstr "Вызначыць колькасць промняў" + +#: plug-ins/common/file-raw-data.c:362 +#, fuzzy +#| msgid "O_ffset:" +msgid "O_ffset" +msgstr "Зрушэнне:" + +#: plug-ins/common/file-raw-data.c:363 +msgid "Offset to beginning of image in raw data" +msgstr "" + +#: plug-ins/common/file-raw-data.c:368 +#, fuzzy +#| msgid "pixels from _top" +msgid "Pixel _format" +msgstr "пікселі з_верху" + +#: plug-ins/common/file-raw-data.c:369 +msgid "The layout of pixel data, such as components and their order" +msgstr "" + +#: plug-ins/common/file-raw-data.c:373 +msgid "Data t_ype" +msgstr "" + +#: plug-ins/common/file-raw-data.c:374 +msgid "" +"Data type used to represent pixel values { RAW_ENCODING_UNSIGNED (0), " +"RAW_ENCODING_SIGNED (1), RAW_ENCODING_FLOAT (2) }" +msgstr "" + +#: plug-ins/common/file-raw-data.c:378 +msgid "Endianness" +msgstr "" + +#: plug-ins/common/file-raw-data.c:379 +msgid "" +"Order of sequences of bytes { RAW_LITTLE_ENDIAN (0), RAW_BIG_ENDIAN (1) }" +msgstr "" + +#: plug-ins/common/file-raw-data.c:383 plug-ins/common/file-raw-data.c:467 +msgid "Planar configuration" +msgstr "" + +#: plug-ins/common/file-raw-data.c:384 plug-ins/common/file-raw-data.c:468 +msgid "" +"How color pixel data are stored { RAW_PLANAR_CONTIGUOUS (0), " +"RAW_PLANAR_SEPARATE (1) }" +msgstr "" + +#: plug-ins/common/file-raw-data.c:392 +#, fuzzy +#| msgid "Palette" +msgid "Palette Offse_t" +msgstr "Палітра" + +#: plug-ins/common/file-raw-data.c:393 +msgid "Offset to beginning of data in the palette file" +msgstr "" + +#: plug-ins/common/file-raw-data.c:397 +#, fuzzy +#| msgid "Palette Map" +msgid "Palette's la_yout" +msgstr "Палітравае пераўтварэнне" + +#: plug-ins/common/file-raw-data.c:398 plug-ins/common/file-raw-data.c:474 +msgid "" +"The layout for the palette's color channels{ RAW_PALETTE_RGB (0), " +"RAW_PALETTE_BGR (1) }" +msgstr "" + +#: plug-ins/common/file-raw-data.c:403 +#, fuzzy +#| msgid "Pal_ette File:" +msgid "_Palette File" +msgstr "_Файл з палітрай:" + +#: plug-ins/common/file-raw-data.c:404 +#, fuzzy +#| msgid "XJT file contains unknown pathtype %d" +msgid "The file containing palette data" +msgstr "Файл XJT утрымлівае невядомы тып шляха %d." + +#: plug-ins/common/file-raw-data.c:414 plug-ins/common/file-raw-data.c:2812 +msgid "Digital Elevation Model data" +msgstr "" + +#: plug-ins/common/file-raw-data.c:438 +#, fuzzy +#| msgid "Til_e spacing:" +msgid "_Sample spacing" +msgstr "П_рабелы між пліткамі:" + +#: plug-ins/common/file-raw-data.c:439 +msgid "" +"The sample spacing of the data. (0: auto-detect, 1: SRTM-1, 2: SRTM-3 data)" +msgstr "" + +#: plug-ins/common/file-raw-data.c:473 +#, fuzzy +#| msgid "Palette Map" +msgid "Palette's layout" +msgstr "Палітравае пераўтварэнне" + +#: plug-ins/common/file-raw-data.c:481 +#, fuzzy +#| msgid "Raw image data" +msgid "Raw Data" +msgstr "Неапрацаваныя даныя відарыса" + +#: plug-ins/common/file-raw-data.c:550 +#, c-format +msgid "" +"%d is not a valid sample spacing. Valid values are: 0 (auto-detect), 1 and 3." +msgstr "" + +#: plug-ins/common/file-raw-data.c:563 +#, c-format +msgid "" +"Auto-detection of sample spacing failed. \"%s\" does not appear to be a " +"valid HGT file or its variant is not supported yet. Supported HGT files are: " +"SRTM-1 and SRTM-3. If you know the variant, run with argument 1 or 3." +msgstr "" + +#: plug-ins/common/file-raw-data.c:654 +msgid "RAW export does not support multiple layers." +msgstr "" + +#: plug-ins/common/file-raw-data.c:1555 +#, fuzzy, c-format +#| msgid "Could not open '%s' for writing: %s" +msgid "Could not open '%s' for size verification: %s" +msgstr "Не ўдалося адкрыць «%s» на запіс: %s" + +#: plug-ins/common/file-raw-data.c:2641 msgid "Load Image from Raw Data" -msgstr "Загрузіць відарыс зь неапрацаваных даньняў" +msgstr "Загрузіць відарыс з неапрацаваных даных" -#: ../plug-ins/common/file-raw.c:1090 -msgid "Image" -msgstr "Відарыс" +#. 2 types of HGT files are possible: SRTM-1 and SRTM-3. +#. * From the documentation: https://dds.cr.usgs.gov/srtm/version1/Documentation/SRTM_Topo.txt +#. * "SRTM-1 data are sampled at one arc-second of latitude and longitude and +#. * each file contains 3601 lines and 3601 samples. +#. * [...] +#. * SRTM-3 data are sampled at three arc-seconds and contain 1201 lines and +#. * 1201 samples with similar overlapping rows and columns." +#. +#: plug-ins/common/file-raw-data.c:2700 +msgid "SRTM-1 (1 arc-second)" +msgstr "" -#: ../plug-ins/common/file-raw.c:1101 -msgid "RGB Alpha" -msgstr "RGB-альфа" +#: plug-ins/common/file-raw-data.c:2701 +msgid "SRTM-3 (3 arc-seconds)" +msgstr "" -#: ../plug-ins/common/file-raw.c:1102 +#. Generic case for any data. Let's leave choice to select the +#. * right type of raw data. +#. +#: plug-ins/common/file-raw-data.c:2712 +msgid "RGB 8-bit" +msgstr "RGB 8 біт" + +#: plug-ins/common/file-raw-data.c:2713 +msgid "RGB 16-bit" +msgstr "RGB 16 біт" + +#: plug-ins/common/file-raw-data.c:2714 +msgid "RGB 32-bit" +msgstr "RGB 32 біты" + +#: plug-ins/common/file-raw-data.c:2716 +msgid "RGBA 8-bit" +msgstr "RGBA 8 біт" + +#: plug-ins/common/file-raw-data.c:2717 +msgid "RGBA 16-bit" +msgstr "RGBA 16 біт" + +#: plug-ins/common/file-raw-data.c:2718 +msgid "RGBA 32-bit" +msgstr "RGBA 32 біты" + +#: plug-ins/common/file-raw-data.c:2720 msgid "RGB565" msgstr "RGB565" -#: ../plug-ins/common/file-raw.c:1103 -msgid "Planar RGB" -msgstr "Плоскі RGB" +#: plug-ins/common/file-raw-data.c:2721 +msgid "BGR565" +msgstr "BGR565" -#: ../plug-ins/common/file-raw.c:1104 +#: plug-ins/common/file-raw-data.c:2723 +msgid "B&W 1 bit" +msgstr "Чорна-белы 1 біт" + +#: plug-ins/common/file-raw-data.c:2724 +msgid "Grayscale 2-bit" +msgstr "Градацыі шэрага 2 біты" + +#: plug-ins/common/file-raw-data.c:2725 +msgid "Grayscale 4-bit" +msgstr "Градацыі шэрага 4 біты" + +#: plug-ins/common/file-raw-data.c:2726 +msgid "Grayscale 8-bit" +msgstr "Градацыі шэрага 8 біт" + +#: plug-ins/common/file-raw-data.c:2727 +msgid "Grayscale 16-bit" +msgstr "Градацыі шэрага 16 біт" + +#: plug-ins/common/file-raw-data.c:2728 +msgid "Grayscale 32-bit" +msgstr "Градацыі шэрага 32 біты" + +#: plug-ins/common/file-raw-data.c:2730 +msgid "Grayscale-Alpha 8-bit" +msgstr "Градацыі шэрага з альфа-каналам 8 біт" + +#: plug-ins/common/file-raw-data.c:2731 +msgid "Grayscale-Alpha 16-bit" +msgstr "Градацыі шэрага з альфа-каналам 16 біт" + +#: plug-ins/common/file-raw-data.c:2732 +msgid "Grayscale-Alpha 32-bit" +msgstr "Градацыі шэрага з альфа-каналам 32 біты" + +#: plug-ins/common/file-raw-data.c:2734 msgid "Indexed" msgstr "Індэксаваны" -#: ../plug-ins/common/file-raw.c:1105 +#: plug-ins/common/file-raw-data.c:2735 msgid "Indexed Alpha" -msgstr "Індэксаваная альфа" +msgstr "Індэксаваны, з альфа-каналам" -#: ../plug-ins/common/file-raw.c:1110 -msgid "Image _Type:" -msgstr "_Тып відарыса:" +#: plug-ins/common/file-raw-data.c:2741 +msgid "Unsigned Integer" +msgstr "Цэлы лік без знака" -#: ../plug-ins/common/file-raw.c:1160 -msgid "Palette" -msgstr "Палітра" +#: plug-ins/common/file-raw-data.c:2742 +msgid "Signed Integer" +msgstr "Цэлы лік са знакам" -#: ../plug-ins/common/file-raw.c:1170 ../plug-ins/common/file-raw.c:1255 +#: plug-ins/common/file-raw-data.c:2743 +#, fuzzy +#| msgid "Floating-Point" +msgid "Floating Point" +msgstr "З плыўной коскай" + +#: plug-ins/common/file-raw-data.c:2749 +msgid "Little Endian" +msgstr "Little Endian" + +#: plug-ins/common/file-raw-data.c:2750 +msgid "Big Endian" +msgstr "Big Endian" + +#: plug-ins/common/file-raw-data.c:2756 +#, fuzzy +#| msgid "Contours" +msgid "Contiguous" +msgstr "Абрысы" + +#: plug-ins/common/file-raw-data.c:2757 +#, fuzzy +#| msgid "Planar RGB" +msgid "Planar" +msgstr "Плоскі RGB" + +#. Translators: Digital Elevation Model (DEM) is a technical term +#. * used for 3D surface modeling or relief maps; so it must be +#. * translated by the proper technical term in your language. +#. +#: plug-ins/common/file-raw-data.c:2806 +msgid "Digital Elevation Model data (1 arc-second)" +msgstr "" + +#: plug-ins/common/file-raw-data.c:2809 +msgid "Digital Elevation Model data (3 arc-seconds)" +msgstr "" + +#: plug-ins/common/file-raw-data.c:2816 +msgid "Image" +msgstr "Відарыс" + +#: plug-ins/common/file-raw-data.c:2819 msgid "R, G, B (normal)" msgstr "R, G, B (нармальны)" -#: ../plug-ins/common/file-raw.c:1171 ../plug-ins/common/file-raw.c:1257 +#: plug-ins/common/file-raw-data.c:2820 msgid "B, G, R, X (BMP style)" msgstr "B, G, R, X (стыль BMP)" -#: ../plug-ins/common/file-raw.c:1176 -msgid "_Palette Type:" -msgstr "Тып палітры:" +#: plug-ins/common/file-raw-data.c:2835 +msgid "Palette" +msgstr "Палітра" -#: ../plug-ins/common/file-raw.c:1187 -msgid "Off_set:" -msgstr "_Зрух:" +#. TRANSLATORS: %s is a sample to describe the planar configuration +#. * (e.g. RGB,RGB,RGB vs RRR,GGG,BBB). +#. +#: plug-ins/common/file-raw-data.c:2906 +#, fuzzy, c-format +#| msgid "Co_ntiguous Region" +msgid "_Contiguous (%s)" +msgstr "_Прылеглая вобласць" -#: ../plug-ins/common/file-raw.c:1199 -msgid "Select Palette File" -msgstr "Выберы файл з палітрай" +#: plug-ins/common/file-raw-data.c:2908 +#, fuzzy +#| msgid "Contours" +msgid "_Contiguous" +msgstr "Абрысы" -#: ../plug-ins/common/file-raw.c:1205 -msgid "Pal_ette File:" -msgstr "_Файл з палітрай:" +#. TRANSLATORS: %s is a sample to describe the planar configuration +#. * (e.g. RGB,RGB,RGB vs RRR,GGG,BBB). +#. +#: plug-ins/common/file-raw-data.c:2914 +#, fuzzy, c-format +#| msgid "Planar RGB" +msgid "_Planar (%s)" +msgstr "Плоскі RGB" -#: ../plug-ins/common/file-raw.c:1233 -msgid "Raw Image" -msgstr "«Сыры» відарыс" +#: plug-ins/common/file-raw-data.c:2916 +#, fuzzy +#| msgid "Planar RGB" +msgid "_Planar" +msgstr "Плоскі RGB" -#: ../plug-ins/common/file-raw.c:1241 -msgid "RGB Save Type" -msgstr "Тып захаваньня RGB" +#. Palette type combo +#: plug-ins/common/file-raw-data.c:2938 +msgid "_R, G, B (normal)" +msgstr "R, G, B (_нармальны)" -#: ../plug-ins/common/file-raw.c:1245 -msgid "Standard (R,G,B)" -msgstr "Стандартны (R,G,B)" +#: plug-ins/common/file-raw-data.c:2939 +msgid "_B, G, R, X (BMP style)" +msgstr "B, G, R, X (_стыль BMP)" -#: ../plug-ins/common/file-raw.c:1246 -msgid "Planar (RRR,GGG,BBB)" -msgstr "Плоскі (RRR,GGG,BBB)" - -#: ../plug-ins/common/file-raw.c:1251 -msgid "Indexed Palette Type" -msgstr "Тып індэксаванай палітры" - -#: ../plug-ins/common/file-sunras.c:217 ../plug-ins/common/file-sunras.c:237 +#: plug-ins/common/file-sunras.c:274 plug-ins/common/file-sunras.c:300 msgid "SUN Rasterfile image" msgstr "Відарыс SUN Rasterfile" -#: ../plug-ins/common/file-sunras.c:402 +#: plug-ins/common/file-sunras.c:315 +msgid "SUNRAS" +msgstr "SUNRAS" + +#: plug-ins/common/file-sunras.c:322 +msgid "Data Formatting" +msgstr "Фарматаванне даных" + +#: plug-ins/common/file-sunras.c:323 +msgid "Use standard (0) or Run-Length Encoded (1) output" +msgstr "" + +#: plug-ins/common/file-sunras.c:407 +msgid "SUNRAS format does not support multiple layers." +msgstr "Фармат SUNRAS не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-sunras.c:469 #, c-format msgid "Could not open '%s' as SUN-raster-file" -msgstr "Немагчыма адкрыць «%s» як файл SUN-raster" +msgstr "Не ўдалося адкрыць «%s» як файл SUN-raster" -#: ../plug-ins/common/file-sunras.c:412 +#: plug-ins/common/file-sunras.c:479 msgid "The type of this SUN-rasterfile is not supported" msgstr "Тып гэткага файла SUN-raster не падтрымліваецца" -#: ../plug-ins/common/file-sunras.c:441 +#: plug-ins/common/file-sunras.c:508 #, c-format msgid "Could not read color entries from '%s'" -msgstr "Немагчыма прачытаць запісы аб колеры з «%s»." +msgstr "Не ўдалося прачытаць запісы аб колеры з «%s»." -#: ../plug-ins/common/file-sunras.c:450 +#: plug-ins/common/file-sunras.c:517 msgid "Type of colormap not supported" -msgstr "Тып мапы колераў не падтрымліваецца." +msgstr "Тып карты колераў не падтрымліваецца" -#: ../plug-ins/common/file-sunras.c:457 ../plug-ins/common/file-xbm.c:827 -#: ../plug-ins/common/file-xwd.c:489 +#: plug-ins/common/file-sunras.c:524 plug-ins/common/file-xbm.c:838 +#: plug-ins/common/file-xwd.c:590 #, c-format msgid "" "'%s':\n" "No image width specified" msgstr "" "'%s':\n" -"Шырыня відарыса ня вызначаная" +"Шырыня відарыса не вызначаная" -#: ../plug-ins/common/file-sunras.c:465 ../plug-ins/common/file-xbm.c:834 -#: ../plug-ins/common/file-xwd.c:499 +#: plug-ins/common/file-sunras.c:532 plug-ins/common/file-xbm.c:846 +#: plug-ins/common/file-xwd.c:599 #, c-format msgid "" "'%s':\n" @@ -4398,18 +5575,18 @@ msgstr "" "'%s':\n" "Шырыня відарыса большая, чым PIKA можа апрацаваць" -#: ../plug-ins/common/file-sunras.c:473 ../plug-ins/common/file-xbm.c:841 -#: ../plug-ins/common/file-xwd.c:508 +#: plug-ins/common/file-sunras.c:540 plug-ins/common/file-xbm.c:854 +#: plug-ins/common/file-xwd.c:607 #, c-format msgid "" "'%s':\n" "No image height specified" msgstr "" "'%s':\n" -"Вышыня відарыса ня вызначаная" +"Вышыня відарыса не вызначаная" -#: ../plug-ins/common/file-sunras.c:481 ../plug-ins/common/file-xbm.c:848 -#: ../plug-ins/common/file-xwd.c:517 +#: plug-ins/common/file-sunras.c:548 plug-ins/common/file-xbm.c:862 +#: plug-ins/common/file-xwd.c:615 #, c-format msgid "" "'%s':\n" @@ -4418,246 +5595,247 @@ msgstr "" "'%s':\n" "Вышыня відарыса большая, чым PIKA можа апрацаваць" -#: ../plug-ins/common/file-sunras.c:520 +#: plug-ins/common/file-sunras.c:584 msgid "This image depth is not supported" msgstr "Такая глыбіня відарыса не падтрымліваецца" -#: ../plug-ins/common/file-sunras.c:544 -#, c-format -msgid "SUNRAS save cannot handle images with alpha channels" -msgstr "Захоўваньне SUNRAS ня можа апрацоўваць відарысы з альфаканаламі" +#: plug-ins/common/file-sunras.c:613 +#, fuzzy +#| msgid "SUNRAS save cannot handle images with alpha channels" +msgid "SUNRAS export cannot handle images with alpha channels" +msgstr "Захоўванне SUNRAS не можа апрацоўваць відарысы з альфа-каналамі" -#: ../plug-ins/common/file-sunras.c:555 +#: plug-ins/common/file-sunras.c:624 msgid "Can't operate on unknown image types" -msgstr "Немагчыма працаваць зь відарысам невядомага тыпу" +msgstr "Немагчыма працаваць з відарысам невядомага тыпу" -#: ../plug-ins/common/file-sunras.c:1084 ../plug-ins/common/file-sunras.c:1175 -#: ../plug-ins/common/file-sunras.c:1256 ../plug-ins/common/file-sunras.c:1351 -#: ../plug-ins/common/file-xwd.c:1357 ../plug-ins/common/file-xwd.c:1458 -#: ../plug-ins/common/file-xwd.c:1616 ../plug-ins/common/file-xwd.c:1817 -#: ../plug-ins/common/file-xwd.c:2069 ../plug-ins/file-fits/fits.c:698 +#: plug-ins/common/file-sunras.c:1193 plug-ins/common/file-sunras.c:1288 +#: plug-ins/common/file-sunras.c:1372 plug-ins/common/file-sunras.c:1472 +#: plug-ins/common/file-xwd.c:1513 plug-ins/common/file-xwd.c:1627 +#: plug-ins/common/file-xwd.c:1798 plug-ins/common/file-xwd.c:2038 +#: plug-ins/common/file-xwd.c:2227 plug-ins/common/file-xwd.c:2503 msgid "EOF encountered on reading" -msgstr "Нечаканы канец файла пры чытаньні" +msgstr "Нечаканы канец файла пры чытанні" -#: ../plug-ins/common/file-sunras.c:1627 -msgid "SUNRAS" -msgstr "SUNRAS" +#: plug-ins/common/file-sunras.c:1651 plug-ins/common/file-sunras.c:1772 +msgid "Write error occurred" +msgstr "Адбылася памылка запісу" -#. file save type -#: ../plug-ins/common/file-sunras.c:1630 -msgid "Data Formatting" -msgstr "Фарматаваньне даньняў" +#: plug-ins/common/file-sunras.c:1795 +#, fuzzy +#| msgid "Standard" +msgid "S_tandard" +msgstr "Стандартны" -#: ../plug-ins/common/file-sunras.c:1634 -msgid "RunLength Encoded" -msgstr "Закадаваны ў RLE" +#: plug-ins/common/file-sunras.c:1796 +#, fuzzy +#| msgid "_Run-Length Encoded" +msgid "R_un-Length Encoded" +msgstr "_Закадаваны ў RLE" -#: ../plug-ins/common/file-svg.c:140 +#: plug-ins/common/file-svg.c:163 msgid "SVG image" msgstr "Відарыс SVG" -#: ../plug-ins/common/file-svg.c:335 ../plug-ins/common/file-svg.c:715 +#: plug-ins/common/file-svg.c:367 plug-ins/common/file-svg.c:827 msgid "Unknown reason" msgstr "Невядомая прычына" -#: ../plug-ins/common/file-svg.c:341 +#: plug-ins/common/file-svg.c:373 msgid "Rendering SVG" msgstr "Пабудова SVG" -#: ../plug-ins/common/file-svg.c:353 +#: plug-ins/common/file-svg.c:384 msgid "Rendered SVG" msgstr "Пабудаваны SVG" -#: ../plug-ins/common/file-svg.c:549 ../plug-ins/common/file-wmf.c:358 +#: plug-ins/common/file-svg.c:581 plug-ins/common/file-wmf.c:401 #, c-format msgid "%d × %d" msgstr "%d × %d" -#: ../plug-ins/common/file-svg.c:557 +#: plug-ins/common/file-svg.c:589 msgid "" "SVG file does not\n" "specify a size!" msgstr "" -"Файл SVG ня мае\n" +"Файл SVG не мае\n" "вызначаны памер!" +#. We need to ask explicitly before using the "unlimited" size +#. * option (XML_PARSE_HUGE in libxml) because it is considered +#. * unsafe, possibly consumming too much memory with malicious XML +#. * files. +#. +#: plug-ins/common/file-svg.c:753 +msgid "Disable safety size limits?" +msgstr "" + +#: plug-ins/common/file-svg.c:758 +#, fuzzy +#| msgid "_None" +msgid "_No" +msgstr "_Няма" + +#: plug-ins/common/file-svg.c:759 +msgid "_Yes" +msgstr "" + +#. Unfortunately the error returned by librsvg is unclear. While +#. * libxml explicitly returns a "parser error : internal error: +#. * Huge input lookup", librsvg does not seem to relay this error. +#. * It sends a further parsing error, false positive provoked by +#. * the huge input error. +#. * If we were able to single out the huge data error, we could +#. * just directly return from the plug-in as a failure run in other +#. * cases. Instead of this, we need to ask each and every time, in +#. * case it might be the huge data error. +#. +#: plug-ins/common/file-svg.c:783 +msgid "" +"A parsing error occurred.\n" +"Disabling safety limits may help. Malicious SVG files may use this to " +"consume too much memory." +msgstr "" + +#: plug-ins/common/file-svg.c:795 +msgid "For security reasons, this should only be used for trusted input!" +msgstr "" + +#: plug-ins/common/file-svg.c:802 +msgid "Retry without limits preventing to parse huge data?" +msgstr "" + #. Scalable Vector Graphics is SVG, should perhaps not be translated -#: ../plug-ins/common/file-svg.c:724 +#: plug-ins/common/file-svg.c:834 msgid "Render Scalable Vector Graphics" msgstr "Апрацаваць Scalable Vector Graphics" #. Width and Height -#: ../plug-ins/common/file-svg.c:790 ../plug-ins/common/file-wmf.c:571 -#: ../plug-ins/common/grid.c:726 +#: plug-ins/common/file-svg.c:893 plug-ins/common/file-wmf.c:606 +#: plug-ins/common/grid.c:844 msgid "Width:" msgstr "Шырыня:" -#: ../plug-ins/common/file-svg.c:796 ../plug-ins/common/file-wmf.c:577 +#: plug-ins/common/file-svg.c:899 plug-ins/common/file-wmf.c:611 msgid "Height:" msgstr "Вышыня:" -#: ../plug-ins/common/file-svg.c:870 ../plug-ins/common/file-wmf.c:651 +#: plug-ins/common/file-svg.c:971 plug-ins/common/file-wmf.c:679 msgid "_X ratio:" msgstr "Суадносіны па _X:" -#: ../plug-ins/common/file-svg.c:892 ../plug-ins/common/file-wmf.c:673 +#: plug-ins/common/file-svg.c:992 plug-ins/common/file-wmf.c:699 msgid "_Y ratio:" msgstr "Суадносіны па _Y:" -#: ../plug-ins/common/file-svg.c:906 ../plug-ins/common/file-wmf.c:687 +#: plug-ins/common/file-svg.c:1006 plug-ins/common/file-wmf.c:712 msgid "Constrain aspect ratio" msgstr "Замацаваць прапорцыі" +#. Resolution +#: plug-ins/common/file-svg.c:1011 plug-ins/common/file-wmf.c:717 +msgid "Resolution:" +msgstr "Раздзяляльнасць:" + #. Path Import -#: ../plug-ins/common/file-svg.c:937 +#: plug-ins/common/file-svg.c:1037 msgid "Import _paths" msgstr "Імпартаваць _шляхі" -#: ../plug-ins/common/file-svg.c:944 +#: plug-ins/common/file-svg.c:1044 msgid "" "Import path elements of the SVG so they can be used with the PIKA path tool" msgstr "" -"Імпартаваць элемэнты шляхоў SVG, каб зь імі могла працаваць прылада «Шлях»" +"Імпартаваць элементы шляхоў SVG, каб з імі мог працаваць інструмент «Шлях»" -#: ../plug-ins/common/file-svg.c:952 +#: plug-ins/common/file-svg.c:1052 msgid "Merge imported paths" msgstr "Аб'яднаць імпартаваныя шляхі" -#: ../plug-ins/common/file-tga.c:245 ../plug-ins/common/file-tga.c:264 +#: plug-ins/common/file-tga.c:260 plug-ins/common/file-tga.c:286 msgid "TarGA image" msgstr "Відарыс TarGA" -#: ../plug-ins/common/file-tga.c:455 +#: plug-ins/common/file-tga.c:298 +msgid "TGA" +msgstr "TGA" + +#: plug-ins/common/file-tga.c:305 +msgid "_Use RLE compression" +msgstr "Выкарыстоўваць с_цісканне RLE" + +#: plug-ins/common/file-tga.c:306 +msgid "Use RLE compression" +msgstr "Выкарыстоўваць сцісканне RLE" + +#: plug-ins/common/file-tga.c:311 +msgid "Ori_gin" +msgstr "" + +#: plug-ins/common/file-tga.c:312 +msgid "Image origin (0 = top-left, 1 = bottom-left)" +msgstr "" + +#: plug-ins/common/file-tga.c:394 plug-ins/common/file-xwd.c:447 +msgid "TGA format does not support multiple layers." +msgstr "Фармат TGA не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-tga.c:458 #, c-format msgid "Cannot read footer from '%s'" -msgstr "Памылка чытаньня канцавога загалоўку з «%s»" +msgstr "Памылка чытання канцавога загалоўку з «%s»" -#: ../plug-ins/common/file-tga.c:473 +#: plug-ins/common/file-tga.c:477 #, c-format msgid "Cannot read extension from '%s'" -msgstr "Памылка чытаньня пашыральніка з «%s»" +msgstr "Памылка чытання пашыральніка з «%s»" -#: ../plug-ins/common/file-tga.c:485 +#: plug-ins/common/file-tga.c:490 #, c-format msgid "Cannot read header from '%s'" msgstr "Немагчыма прачытаць загаловак з '%s'" -#: ../plug-ins/common/file-tga.c:1372 -msgid "TGA" -msgstr "TGA" - -#. rle -#: ../plug-ins/common/file-tga.c:1381 -msgid "_RLE compression" -msgstr "Сьцісканьне _RLE" - -#: ../plug-ins/common/file-tga.c:1395 -msgid "Or_igin:" -msgstr "_Пачатак:" - -#: ../plug-ins/common/file-tga.c:1399 +#: plug-ins/common/file-tga.c:1453 msgid "Bottom left" msgstr "Ніжні левы" -#: ../plug-ins/common/file-tga.c:1400 +#: plug-ins/common/file-tga.c:1454 msgid "Top left" msgstr "Верхні левы" -#: ../plug-ins/common/file-tiff-load.c:240 -#: ../plug-ins/common/file-tiff-save.c:183 -#: ../plug-ins/common/file-tiff-save.c:200 -msgid "TIFF image" -msgstr "Відарыс TIFF" +#: plug-ins/common/file-wbmp.c:116 +#, fuzzy +#| msgid "Windows BMP image" +msgid "Wireless BMP image" +msgstr "Відарыс Windows BMP" -#: ../plug-ins/common/file-tiff-load.c:310 +#: plug-ins/common/file-wbmp.c:119 plug-ins/common/file-wbmp.c:120 +msgid "Loads files of Wireless BMP file format" +msgstr "Загружае файлы ў фармаце Wireless BMP" + +#: plug-ins/common/file-wbmp.c:193 +#, fuzzy, c-format +#| msgid "'%s' is not a valid BMP file" +msgid "'%s': Invalid WBMP type value" +msgstr "'%s' не з'яўляецца файлам BMP" + +#: plug-ins/common/file-wbmp.c:202 #, c-format -msgid "TIFF '%s' does not contain any directories" -msgstr "TIFF «%s» ня ўтрымлівае аніякіх паказьнікаў" - -#: ../plug-ins/common/file-tiff-load.c:478 -msgid "Import from TIFF" -msgstr "Імпартаваць з TIFF" - -#: ../plug-ins/common/file-tiff-load.c:780 -#, c-format -msgid "%s-%d-of-%d-pages" -msgstr "%s-%d-з-%d-старонак" - -#: ../plug-ins/common/file-tiff-load.c:1015 -msgid "TIFF Channel" -msgstr "Канал TIFF" - -#: ../plug-ins/common/file-tiff-load.c:1024 -#: ../plug-ins/file-psd/psd-load.c:333 -msgid "" -"Warning:\n" -"The image you are loading has 16 bits per channel. PIKA can only handle 8 " -"bit, so it will be converted for you. Information will be lost because of " -"this conversion." +msgid "'%s': Unsupported WBMP fixed header value" msgstr "" -"Перасьцярога:\n" -"Відарыс, які ты загружаеш, мае 16 бітаў на канал. PIKA можа апрацоўваць 8 " -"біт, таму ён будзе ператвораны. З-за гэтага ператварэньня пэўныя зьвесткі " -"будуць страчаныя." -#: ../plug-ins/common/file-tiff-save.c:888 -msgid "" -"The TIFF format only supports comments in\n" -"7bit ASCII encoding. No comment is saved." -msgstr "" -"Фармат TIFF дапускае камэнтары толькі зь 7-бітавым кадаваньнем ASCII. " -"Камэнтар не захаваны." +#: plug-ins/common/file-wbmp.c:224 +#, fuzzy, c-format +#| msgid "'%s' is not a valid BMP file" +msgid "'%s' is not a valid WBMP file" +msgstr "'%s' не з'яўляецца файлам BMP" -#: ../plug-ins/common/file-tiff-save.c:1062 -msgid "TIFF" -msgstr "TIFF" - -#. compression -#: ../plug-ins/common/file-tiff-save.c:1070 -msgid "Compression" -msgstr "Сьцісканьне" - -#: ../plug-ins/common/file-tiff-save.c:1074 -msgid "_None" -msgstr "_Няма" - -#: ../plug-ins/common/file-tiff-save.c:1075 -msgid "_LZW" -msgstr "_LZW" - -#: ../plug-ins/common/file-tiff-save.c:1076 -msgid "_Pack Bits" -msgstr "_Пакаваныя біты" - -#: ../plug-ins/common/file-tiff-save.c:1077 -msgid "_Deflate" -msgstr "_Deflate" - -#: ../plug-ins/common/file-tiff-save.c:1078 -msgid "_JPEG" -msgstr "_JPEG" - -#: ../plug-ins/common/file-tiff-save.c:1079 -msgid "CCITT Group _3 fax" -msgstr "Факс МККТТ група 3" - -#: ../plug-ins/common/file-tiff-save.c:1080 -msgid "CCITT Group _4 fax" -msgstr "Факс МККТТ група 4" - -#: ../plug-ins/common/file-tiff-save.c:1102 -msgid "Save _color values from transparent pixels" -msgstr "Захаваць значэньні _колераў празрыстых піксэляў" - -#: ../plug-ins/common/file-tiff-save.c:1118 ../plug-ins/common/file-xbm.c:1235 -msgid "Comment:" -msgstr "Камэнтар:" - -#: ../plug-ins/common/file-wmf.c:129 +#: plug-ins/common/file-wmf.c:153 msgid "Microsoft WMF file" msgstr "Файл Microsoft WMF" -#: ../plug-ins/common/file-wmf.c:352 +#: plug-ins/common/file-wmf.c:395 msgid "" "WMF file does not\n" "specify a size!" @@ -4665,175 +5843,269 @@ msgstr "" "У файле WMF ня\n" "вызначаны памер!" -#: ../plug-ins/common/file-wmf.c:500 +#: plug-ins/common/file-wmf.c:542 msgid "Render Windows Metafile" msgstr "Пабудова Windows Metafile" -#: ../plug-ins/common/file-wmf.c:963 -#, c-format -msgid "Could not open '%s' for reading" -msgstr "Немагчыма адкрыць '%s' для чытаньня" - -#: ../plug-ins/common/file-wmf.c:1003 +#: plug-ins/common/file-wmf.c:1039 msgid "Rendered WMF" msgstr "Апрацаваны WMF" -#: ../plug-ins/common/file-xbm.c:177 ../plug-ins/common/file-xbm.c:195 +#: plug-ins/common/file-xbm.c:159 plug-ins/common/file-xbm.c:187 msgid "X BitMap image" msgstr "Відарыс X BitMap" -#: ../plug-ins/common/file-xbm.c:820 +#: plug-ins/common/file-xbm.c:162 +msgid "Load a file in X10 or X11 bitmap (XBM) file format" +msgstr "" + +#: plug-ins/common/file-xbm.c:164 +msgid "" +"Load a file in X10 or X11 bitmap (XBM) file format. XBM is a lossless format " +"for flat black-and-white (two color indexed) images." +msgstr "" + +#: plug-ins/common/file-xbm.c:190 +msgid "Export a file in X10 or X11 bitmap (XBM) file format" +msgstr "" + +#: plug-ins/common/file-xbm.c:192 +msgid "" +"X10 or X11 bitmap (XBM) file format. XBM is a lossless format for flat black-" +"and-white (two color indexed) images." +msgstr "" + +#: plug-ins/common/file-xbm.c:203 +msgid "XBM" +msgstr "XBM" + +#: plug-ins/common/file-xbm.c:212 +#, fuzzy +#| msgid "_GIF comment:" +msgid "_Write comment" +msgstr "_Каментарый GIF:" + +#: plug-ins/common/file-xbm.c:213 +msgid "Write a comment at the beginning of the file." +msgstr "" + +#: plug-ins/common/file-xbm.c:218 plug-ins/common/mail.c:235 +#, fuzzy +#| msgid "Co_mment:" +msgid "Co_mment" +msgstr "_Каментарый:" + +#: plug-ins/common/file-xbm.c:219 +msgid "Image description (maximum 72 bytes)" +msgstr "" + +#: plug-ins/common/file-xbm.c:227 +msgid "_X10 format bitmap" +msgstr "Бітмап фармату _X10" + +#: plug-ins/common/file-xbm.c:228 +msgid "Export in X10 format" +msgstr "" + +#: plug-ins/common/file-xbm.c:233 +#, fuzzy +#| msgid "_Write hot spot values" +msgid "Write hot spot _values" +msgstr "_Запісаць значэнні «гарачай плямы»" + +#: plug-ins/common/file-xbm.c:234 +#, fuzzy +#| msgid "Enter copyright information." +msgid "Write hotspot information" +msgstr "Увядзі звесткі пра аўтарскія правы." + +#: plug-ins/common/file-xbm.c:239 +#, fuzzy +#| msgid "Hot spot _X:" +msgid "Hot s_pot X" +msgstr "«Гарачая пляма» па _X:" + +#: plug-ins/common/file-xbm.c:240 +#, fuzzy +#| msgid "Polar coordinates" +msgid "X coordinate of hotspot" +msgstr "Палярныя каардынаты" + +#: plug-ins/common/file-xbm.c:245 +#, fuzzy +#| msgid "Hot spot _Y:" +msgid "Hot spot _Y" +msgstr "«Гарачая пляма» па _Y:" + +#: plug-ins/common/file-xbm.c:246 +#, fuzzy +#| msgid "Polar coordinates" +msgid "Y coordinate of hotspot" +msgstr "Палярныя каардынаты" + +#: plug-ins/common/file-xbm.c:251 +#, fuzzy +#| msgid "_Identifier prefix:" +msgid "I_dentifier prefix" +msgstr "_Прэфікс вызначніка:" + +#: plug-ins/common/file-xbm.c:252 +msgid "Identifier prefix [determined from filename]" +msgstr "" + +#: plug-ins/common/file-xbm.c:257 +#, fuzzy +#| msgid "W_rite extra mask file" +msgid "Write extra mask _file" +msgstr "_Запісаць дадатковы файл з маскай" + +#: plug-ins/common/file-xbm.c:258 +#, fuzzy +#| msgid "W_rite extra mask file" +msgid "Write extra mask file" +msgstr "_Запісаць дадатковы файл з маскай" + +#: plug-ins/common/file-xbm.c:263 +#, fuzzy +#| msgid "_Mask file extension:" +msgid "Mas_k file extensions" +msgstr "_Пашырэнне файла маскі:" + +#: plug-ins/common/file-xbm.c:264 +msgid "Suffix of the mask file" +msgstr "" + +#: plug-ins/common/file-xbm.c:376 +msgid "XBM format does not support multiple layers." +msgstr "Фармат XBM не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-xbm.c:830 #, c-format msgid "" "'%s':\n" "Could not read header (ftell == %ld)" msgstr "" "«%s»:\n" -"Немагчыма прачытаць загаловак (ftell == %ld)" +"Не ўдалося прачытаць загаловак (ftell == %ld)" -#: ../plug-ins/common/file-xbm.c:855 +#: plug-ins/common/file-xbm.c:870 #, c-format msgid "" "'%s':\n" "No image data type specified" msgstr "" "«%s»:\n" -"Тып даньняў відарыса ня вызначаны" +"Тып даных відарыса не вызначаны" #. The image is not black-and-white. -#: ../plug-ins/common/file-xbm.c:999 +#: plug-ins/common/file-xbm.c:1015 +#, fuzzy +#| msgid "" +#| "The image which you are trying to save as an XBM contains more than two " +#| "colors.\n" +#| "\n" +#| "Please convert it to a black and white (1-bit) indexed image and try " +#| "again." msgid "" -"The image which you are trying to save as an XBM contains more than two " +"The image which you are trying to export as an XBM contains more than two " "colors.\n" "\n" "Please convert it to a black and white (1-bit) indexed image and try again." msgstr "" "Відарыс, які ты спрабуеш захаваць як XBM, утрымлівае больш за два колеры.\n" "\n" -"Калі ласка, ператвары яго ў чорна-белы (1-бітавы) індэксаваны відарыс і " +"Калі ласка, пераўтвары яго ў чорна-белы (1-бітавы) індэксаваны відарыс і " "паспрабуй ізноў." -#: ../plug-ins/common/file-xbm.c:1010 +#: plug-ins/common/file-xbm.c:1027 msgid "" "You cannot save a cursor mask for an image\n" "which has no alpha channel." msgstr "" "Немагчыма захаваць маску курсора\n" -"для відарыса без альфаканала." +"для відарыса без альфа-канала." -#: ../plug-ins/common/file-xbm.c:1188 -msgid "XBM" -msgstr "XBM" +#: plug-ins/common/file-xbm.c:1259 +msgid "" +"Writing a comment will make the XBM file unreadable by some applications.\n" +"The comment will not affect embedding the XBM in C source code." +msgstr "" -#. parameter settings -#: ../plug-ins/common/file-xbm.c:1191 -msgid "XBM Options" -msgstr "Выборы XBM" - -#. X10 format -#: ../plug-ins/common/file-xbm.c:1201 -msgid "_X10 format bitmap" -msgstr "Бітмапа фармату _X10" - -#: ../plug-ins/common/file-xbm.c:1221 -msgid "_Identifier prefix:" -msgstr "_Прэфікс вызначніка:" - -#. hotspot toggle -#: ../plug-ins/common/file-xbm.c:1243 -msgid "_Write hot spot values" -msgstr "_Запісаць значэньні «гарачай плямы»" - -#: ../plug-ins/common/file-xbm.c:1266 ../plug-ins/common/file-xmc.c:1089 -msgid "Hot spot _X:" -msgstr "«Гарачая пляма» па _X:" - -#: ../plug-ins/common/file-xbm.c:1276 -msgid "Hot spot _Y:" -msgstr "«Гарачая пляма» па _Y:" - -#. mask file -#: ../plug-ins/common/file-xbm.c:1283 -msgid "Mask File" -msgstr "Файл маскі" - -#: ../plug-ins/common/file-xbm.c:1293 -msgid "W_rite extra mask file" -msgstr "_Запісаць дадатковы файл з маскай" - -#: ../plug-ins/common/file-xbm.c:1306 -msgid "_Mask file extension:" -msgstr "_Пашырэньне файла маскі:" - -#: ../plug-ins/common/file-xmc.c:333 ../plug-ins/common/file-xmc.c:373 -#: ../plug-ins/common/file-xmc.c:1052 +#: plug-ins/common/file-xmc.c:299 plug-ins/common/file-xmc.c:348 msgid "X11 Mouse Cursor" msgstr "Курсор мышы X11" -#: ../plug-ins/common/file-xmc.c:481 -#, c-format +#: plug-ins/common/file-xmc.c:537 msgid "" "Cannot set the hot spot!\n" "You must arrange layers so that all of them have an intersection." msgstr "" "Немагчыма задаць «гарачую пляму»!\n" -"Трэба ўпарадкаваць пласты гэтак, каб яны ўсе перасякаліся." +"Трэба ўпарадкаваць слаі гэтак, каб яны ўсе перасякаліся." -#: ../plug-ins/common/file-xmc.c:670 +#: plug-ins/common/file-xmc.c:665 #, c-format msgid "'%s' is not a valid X cursor." -msgstr "«%s» не зьяўляецца дапушчальным курсорам X." +msgstr "«%s» не з'яўляецца дапушчальным курсорам X." -#: ../plug-ins/common/file-xmc.c:686 +#: plug-ins/common/file-xmc.c:678 #, c-format msgid "Frame %d of '%s' is too wide for an X cursor." msgstr "Кадр %d у «%s» зашырокі як для курсора X." -#: ../plug-ins/common/file-xmc.c:693 +#: plug-ins/common/file-xmc.c:686 #, c-format msgid "Frame %d of '%s' is too high for an X cursor." msgstr "Кадр %d у «%s» завысокі як для курсора X." -#: ../plug-ins/common/file-xmc.c:896 +#: plug-ins/common/file-xmc.c:957 #, c-format msgid "there is no image chunk in \"%s\"." -msgstr "«%s» ня мае відарыснага кавалка." +msgstr "«%s» не мае відарыснага кавалка." -#: ../plug-ins/common/file-xmc.c:938 +#: plug-ins/common/file-xmc.c:998 #, c-format msgid "'%s' is too wide for an X cursor." msgstr "«%s» зашырокі як для курсора X." -#: ../plug-ins/common/file-xmc.c:945 +#: plug-ins/common/file-xmc.c:1007 #, c-format msgid "'%s' is too high for an X cursor." msgstr "«%s» завысокі як для курсора X." -#: ../plug-ins/common/file-xmc.c:1015 -#, c-format +#: plug-ins/common/file-xmc.c:1071 msgid "A read error occurred." -msgstr "Здарылася памылка чытаньня." +msgstr "Адбылася памылка чытання." -#. -#. * parameter settings -#. -#: ../plug-ins/common/file-xmc.c:1057 -msgid "XMC Options" -msgstr "Выборы XMC " +#: plug-ins/common/file-xmc.c:1111 +#, fuzzy +#| msgid "X11 Mouse Cursor" +msgid "Export Image as X11 Mouse Cursor" +msgstr "Курсор мышы X11" -#: ../plug-ins/common/file-xmc.c:1085 +#: plug-ins/common/file-xmc.c:1130 plug-ins/file-ico/ico-dialog.c:583 +msgid "Hot spot _X:" +msgstr "«Гарачая пляма» па _X:" + +#: plug-ins/common/file-xmc.c:1134 msgid "Enter the X coordinate of the hot spot. The origin is top left corner." msgstr "Увядзі каардынату X «гарачай плямы». Пачатак — верхні левы кут." -#: ../plug-ins/common/file-xmc.c:1103 +#: plug-ins/common/file-xmc.c:1144 plug-ins/file-ico/ico-dialog.c:596 +msgid "Hot spot _Y:" +msgstr "«Гарачая пляма» па _Y:" + +#: plug-ins/common/file-xmc.c:1148 msgid "Enter the Y coordinate of the hot spot. The origin is top left corner." msgstr "Увядзі каардынату X «гарачай плямы». Пачатак — верхні левы кут." -#: ../plug-ins/common/file-xmc.c:1114 -msgid "_Auto-Crop all frames." +#: plug-ins/common/file-xmc.c:1154 +#, fuzzy +#| msgid "_Auto-Crop all frames." +msgid "_Auto-Crop all frames" msgstr "_Аўтаабрэзаць усе кадры." -#: ../plug-ins/common/file-xmc.c:1127 +#: plug-ins/common/file-xmc.c:1158 msgid "" "Remove the empty borders of all frames.\n" "This reduces the file size and may fix the problem that some large cursors " @@ -4841,11 +6113,19 @@ msgid "" "Uncheck if you plan to edit the exported cursor using other programs." msgstr "" "Прыбраць пустыя межы вакол усіх кадраў.\n" -"Гэта зьменшыць памер файла йі можа вырашыць праблему, што некаторыя вялікія " -"курсоры зьнікаюць з экрана.\n" -"Абязьдзейні, калі плянуеш правіць экспартаваны курсор іншымі праґрамамі." +"Гэта зменшыць памер файла йі можа вырашыць праблему, што некаторыя вялікія " +"курсоры знікаюць з экрана.\n" +"Абяздзейні, калі плянуеш правіць экспартаваны курсор іншымі праграмамі." -#: ../plug-ins/common/file-xmc.c:1150 +#: plug-ins/common/file-xmc.c:1177 +#, fuzzy +#| msgid "_Frame disposal where unspecified:" +msgid "" +"_Size where\n" +"unspecified:" +msgstr "_Размяшчэнне кадраў, калі не вызначанае:" + +#: plug-ins/common/file-xmc.c:1181 msgid "" "Choose the nominal size of frames.\n" "If you don't have plans to make multi-sized cursor, or you have no idea, " @@ -4856,585 +6136,445 @@ msgid "" "theme-size\"." msgstr "" "Выберы ўмоўныны памер кадра.\n" -"Калі не плянуеш рабіць шматпамерны курсор, ці ня ведаеш, пакінь «32px».\n" -"Умоўны памер ня мае дачыненьня да сапраўднага (вышыні ці шырыні).\n" +"Калі не плянуеш рабіць шматпамерны курсор, ці не ведаеш, пакінь «32px».\n" +"Умоўны памер не мае дачынення да сапраўднага (вышыні ці шырыні).\n" "Ён патрэбны каб вызначыць які кадр залежыць ад якой анімацыйнай " -"пасьлядоўнасьці, і якая пасьлядоўнасьць выкарыстоўваецца, у адпаведнасьці са " -"значэньнем «gtk-cursor-theme-size»." +"паслядоўнасці, і якая паслядоўнасць выкарыстоўваецца, у адпаведнасці са " +"значэннем «gtk-cursor-theme-size»." -#: ../plug-ins/common/file-xmc.c:1167 -msgid "_Use this value only for a frame which size is not specified." -msgstr "_Ужываць гэтае значэньне толькі для кадраў, чый памер ня вызначаны." +#: plug-ins/common/file-xmc.c:1194 +#, fuzzy +#| msgid "_Use delay entered above for all frames" +msgid "Use size entered above for all frames" +msgstr "Выкарыстоўваць уведзеную вышэй затрымку для _ўсіх кадраў" -#: ../plug-ins/common/file-xmc.c:1170 -msgid "_Replace the size of all frames even if it is specified." -msgstr "_Замяніць памер усіх кадраў, нават калі ён вызначаны." - -#: ../plug-ins/common/file-xmc.c:1204 -msgid "Enter time span in milliseconds in which each frame is rendered." -msgstr "Увядзі адрэзак часу ў мілісэкундах, празь які рысуецца кожны кадр." - -#: ../plug-ins/common/file-xmc.c:1207 -msgid "_Delay:" -msgstr "_Затрымка:" - -#: ../plug-ins/common/file-xmc.c:1212 -msgid "_Use this value only for a frame which delay is not specified." -msgstr "" -"_Ужываць гэтае значэньне толькі для кадраў, чыя затрымка ня вызначаная." - -#: ../plug-ins/common/file-xmc.c:1215 -msgid "_Replace the delay of all frames even if it is specified." -msgstr "_Замяніць затрымку ўсіх кадраў, нават калі яна вызначаная." - -#: ../plug-ins/common/file-xmc.c:1240 +#: plug-ins/common/file-xmc.c:1201 +#, fuzzy +#| msgid "_Delay between frames where unspecified:" msgid "" -"The part of copyright information that exceeded 65535 characters was removed." -msgstr "" -"Частка зьвестак пра аўтарскія правы, якая выходзіла за межы 65535 знакаў, " -"была выдаленая." +"_Delay where\n" +"unspecified:" +msgstr "_Затрымка між кадрамі, калі не вызначаная:" -#: ../plug-ins/common/file-xmc.c:1250 -msgid "Enter copyright information." -msgstr "Увядзі зьвесткі пра аўтарскія правы." +#: plug-ins/common/file-xmc.c:1206 +msgid "Enter time span in milliseconds in which each frame is rendered." +msgstr "Увядзі адрэзак часу ў мілісекундах, праз які рысуецца кожны кадр." -#: ../plug-ins/common/file-xmc.c:1252 +#: plug-ins/common/file-xmc.c:1220 +#, fuzzy +#| msgid "_Use delay entered above for all frames" +msgid "Use delay entered above for all frames" +msgstr "Выкарыстоўваць уведзеную вышэй затрымку для _ўсіх кадраў" + +#: plug-ins/common/file-xmc.c:1227 msgid "_Copyright:" msgstr "_Аўтарскія правы:" -#: ../plug-ins/common/file-xmc.c:1268 -msgid "" -"The part of license information that exceeded 65535 characters was removed." -msgstr "" -"Частка зьвестак пра ліцэнзію, якая выходзіла за межы 65535 знакаў, была " -"выдаленая." +#: plug-ins/common/file-xmc.c:1231 +msgid "Enter copyright information." +msgstr "Увядзі звесткі пра аўтарскія правы." -#: ../plug-ins/common/file-xmc.c:1278 -msgid "Enter license information." -msgstr "Увядзі зьвескі пра ліцэнзію." - -#: ../plug-ins/common/file-xmc.c:1280 +#: plug-ins/common/file-xmc.c:1237 msgid "_License:" msgstr "_Ліцэнзія:" -#. -#. * Other -#. -#. We use gtk_text_view for "Other" while "Copyright" & "License" is entered -#. * in gtk_entry because We want allow '\n' for "Other". -#: ../plug-ins/common/file-xmc.c:1287 +#: plug-ins/common/file-xmc.c:1241 +msgid "Enter license information." +msgstr "Увядзі звескі пра ліцэнзію." + +#: plug-ins/common/file-xmc.c:1251 msgid "_Other:" msgstr "_Іншае:" -#: ../plug-ins/common/file-xmc.c:1321 +#: plug-ins/common/file-xmc.c:1265 msgid "Enter other comment if you want." -msgstr "Увядзі іншы камэнтар, калі жадаеш." +msgstr "Увядзі іншы каментарый, калі жадаеш." -#: ../plug-ins/common/file-xmc.c:1371 +#. Begin displaying export progress +#: plug-ins/common/file-xmc.c:1370 plug-ins/file-webp/file-webp-save.c:198 +#: plug-ins/file-webp/file-webp-save.c:597 #, c-format -msgid "Comment is limited to %d characters." -msgstr "Камэнтар абмежаваны %d знакамі." +msgid "Saving '%s'" +msgstr "Захоўванне «%s»" -#: ../plug-ins/common/file-xmc.c:1489 -#, c-format -msgid "This plug-in can only handle RGBA image files with 8bit color depth." -msgstr "" -"Гэты дадатак можа апрацоўваць відарысы толькі ў фармаце RGBA з 8-бітавай " -"глыбінёй колера. " - -#: ../plug-ins/common/file-xmc.c:1507 +#: plug-ins/common/file-xmc.c:1445 #, c-format msgid "Frame '%s' is too wide. Please reduce to no more than %dpx." -msgstr "Кадр «%s» зашырокі. Калі ласка, зьменшы яго прынамсі да %d пкс." +msgstr "Кадр «%s» зашырокі. Калі ласка, зменшы яго прынамсі да %d пкс." -#: ../plug-ins/common/file-xmc.c:1514 +#: plug-ins/common/file-xmc.c:1455 #, c-format msgid "Frame '%s' is too high. Please reduce to no more than %dpx." -msgstr "Кадр «%s» завысокі. Калі ласка, зьменшы яго прынамсі да %d пкс." +msgstr "Кадр «%s» завысокі. Калі ласка, зменшы яго прынамсі да %d пкс." -#: ../plug-ins/common/file-xmc.c:1521 +#: plug-ins/common/file-xmc.c:1465 #, c-format msgid "Width and/or height of frame '%s' is zero!" msgstr "Шырыня і/ці вышыня кадра «%s» роўная нулю!" -#: ../plug-ins/common/file-xmc.c:1561 -#, c-format +#: plug-ins/common/file-xmc.c:1507 +#, fuzzy, c-format +#| msgid "" +#| "Cannot save the cursor because the hot spot is not on frame '%s'.\n" +#| "Try to change the hot spot position, layer geometry or save without auto-" +#| "crop." msgid "" -"Cannot save the cursor because the hot spot is not on frame '%s'.\n" -"Try to change the hot spot position, layer geometry or save without auto-" +"Cannot export the cursor because the hot spot is not on frame '%s'.\n" +"Try to change the hot spot position, layer geometry or export without auto-" "crop." msgstr "" "Немагчыма захаваць курсор, бо «гарачая пляма» не на кадры «%s».\n" -"Паспрабуй зьмяніць ейнае становішча, ґеамэтрыю пласта ці захаваць без " -"аўтаабразаньня." +"Паспрабуй змяніць ейнае становішча, геаметрыю слоя ці захаваць без " +"аўтаабразання." -#: ../plug-ins/common/file-xmc.c:1718 -#, c-format +#: plug-ins/common/file-xmc.c:1681 +#, fuzzy, c-format +#| msgid "" +#| "Your cursor was successfully saved but it contains one or more frames " +#| "whose width or height is more than %ipx.\n" +#| "It will clutter the screen in some environments." msgid "" -"Your cursor was successfully saved but it contains one or more frames whose " -"width or height is more than %ipx.\n" -"It will clutter the screen in some environments." +"Your cursor was successfully exported but it contains one or more frames " +"whose width or height is more than %ipx, a historical max dimension value " +"for X bitmap cursors.\n" +"It might be unsupported by some environments." msgstr "" "Твой курсор быў удала захаваны, але ён утрымлівае адзін ці болей кадраў, чые " "вышыня ці шырыня большыя за %i пкс.\n" -"Ён будзе загрувашчваць экран у некаторых асяродзьдзях." +"Ён будзе загрувашчваць экран у некаторых асяродздзях." -#: ../plug-ins/common/file-xmc.c:1725 +#: plug-ins/common/file-xmc.c:1689 +#, fuzzy +#| msgid "" +#| "Your cursor was successfully saved but it contains one or more frames " +#| "whose nominal size is not supported by GNOME settings.\n" +#| "You can satisfy it by checking \"Replace the size of all frames...\" in " +#| "the save dialog, or your cursor may not appear in GNOME settings." msgid "" -"Your cursor was successfully saved but it contains one or more frames whose " -"nominal size is not supported by GNOME settings.\n" +"Your cursor was successfully exported but it contains one or more frames " +"whose nominal size is not supported by GNOME settings.\n" "You can satisfy it by checking \"Replace the size of all frames...\" in the " -"save dialog, or your cursor may not appear in GNOME settings." +"export dialog, or your cursor may not appear in GNOME settings." msgstr "" "Твой курсор быў удала захаваны, але ён утрымлівае адзін ці болей кадраў, чый " -"умоўны памер не падтрымліваецца настройкамі GNOME.\n" -"Каб задаволіць іх задзейнічай «Замяніць памер усіх кадраў…» у дыялёґу " -"захоўваньня, а іначай курсор можа не зьявіцца у настройках GNOME." +"умоўны памер не падтрымліваецца наладкамі GNOME.\n" +"Каб задаволіць іх задзейнічай «Замяніць памер усіх кадраў…» у дыялогу " +"захоўвання, а іначай курсор можа не зявіцца у наладках GNOME." -#: ../plug-ins/common/file-xmc.c:1962 -#, c-format +#: plug-ins/common/file-xmc.c:1971 +#, fuzzy, c-format +#| msgid "" +#| "Your cursor was successfully saved but it contains one or more frames " +#| "whose width or height is more than %ipx.\n" +#| "It will clutter the screen in some environments." msgid "" -"The parasite \"%s\" is too long for an X cursor comment. It was cut off to " -"fit." -msgstr "Паразыт «%s» задоўгі як для камэнтара курсора X. Ён быў абрэзаны." +"Your cursor was successfully exported but it contains one or more frames " +"whose size is over 8 digits.\n" +"We clamped it to %dpx. You should check the exported cursor." +msgstr "" +"Твой курсор быў удала захаваны, але ён утрымлівае адзін ці болей кадраў, чые " +"вышыня ці шырыня большыя за %i пкс.\n" +"Ён будзе загрувашчваць экран у некаторых асяродздзях." #. translators: the %i is *always* 8 here -#: ../plug-ins/common/file-xmc.c:2165 +#: plug-ins/common/file-xmc.c:2068 #, c-format msgid "" "Sorry, this plug-in cannot handle a cursor which contains over %i different " "nominal sizes." msgstr "" -"Нажаль гэты дадатак ня можа апрацаваць курсор, які мае больш за %i розных " +"На жаль гэты дадатак не можа апрацаваць курсор, які мае больш за %i розных " "умоўных памераў." -#: ../plug-ins/common/file-xpm.c:174 ../plug-ins/common/file-xpm.c:199 +#: plug-ins/common/file-xpm.c:196 plug-ins/common/file-xpm.c:231 msgid "X PixMap image" msgstr "Відарыс X PixMap" -#: ../plug-ins/common/file-xpm.c:363 ../plug-ins/common/file-xpm.c:775 -#, c-format -msgid "Error opening file '%s'" -msgstr "Памылка адкрыцьця файла «%s»" - -#: ../plug-ins/common/file-xpm.c:369 ../plug-ins/common/file-xpm.c:781 -msgid "XPM file invalid" -msgstr "Недапушчальны файл XPM" - -#: ../plug-ins/common/file-xpm.c:807 +#: plug-ins/common/file-xpm.c:252 msgid "XPM" msgstr "XPM" -#: ../plug-ins/common/file-xpm.c:817 -msgid "_Alpha threshold:" -msgstr "_Парог празрыстасьці:" +#: plug-ins/common/file-xpm.c:259 plug-ins/gradient-flare/gradient-flare.c:3014 +msgid "_Threshold" +msgstr "_Парог" -#: ../plug-ins/common/file-xwd.c:278 ../plug-ins/common/file-xwd.c:298 +#: plug-ins/common/file-xpm.c:260 +#, fuzzy +#| msgid "_Alpha threshold:" +msgid "Alpha threshold" +msgstr "_Парог празрыстасці:" + +#: plug-ins/common/file-xpm.c:342 +msgid "XPM format does not support multiple layers." +msgstr "Фармат XPM не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/common/file-xpm.c:396 plug-ins/common/file-xpm.c:854 +#, c-format +msgid "Error opening file '%s'" +msgstr "Памылка адкрыцця файла «%s»" + +#: plug-ins/common/file-xpm.c:402 plug-ins/common/file-xpm.c:860 +msgid "XPM file invalid" +msgstr "Недапушчальны файл XPM" + +#: plug-ins/common/file-xpm.c:695 +#, fuzzy +#| msgid "Unsupported or invalid bitdepth." +msgid "Unsupported drawable type" +msgstr "Глыбіня бітаў не падтрымліваецца або недапушчальны." + +#: plug-ins/common/file-xwd.c:324 plug-ins/common/file-xwd.c:354 msgid "X window dump" -msgstr "Копія памяці вакна X" +msgstr "Копія памяці акна X" -#: ../plug-ins/common/file-xwd.c:442 +#: plug-ins/common/file-xwd.c:517 #, c-format msgid "Could not read XWD header from '%s'" -msgstr "Немагчыма прачытаць загаловак XWD з «%s»." +msgstr "Не ўдалося прачытаць загаловак XWD з «%s»." -#: ../plug-ins/common/file-xwd.c:480 +#: plug-ins/common/file-xwd.c:535 +#, c-format +msgid "" +"'%s':\n" +"Seek error" +msgstr "" + +#: plug-ins/common/file-xwd.c:545 +#, fuzzy, c-format +#| msgid "Invalid number of channels: %hu" +msgid "" +"'%s':\n" +"Illegal number of colormap entries: %u" +msgstr "Недапушчальная колькасць каналаў: %hu" + +#: plug-ins/common/file-xwd.c:556 +#, c-format +msgid "" +"'%s':\n" +"Number of colormap entries < number of colors" +msgstr "" + +#: plug-ins/common/file-xwd.c:582 msgid "Can't read color entries" msgstr "Немагчыма прачытаць запісу аб колеры" -#: ../plug-ins/common/file-xwd.c:575 +#: plug-ins/common/file-xwd.c:667 #, c-format msgid "" "XWD-file %s has format %d, depth %d and bits per pixel %d. Currently this is " "not supported." msgstr "" -"Файл XWD %s мае фармат %d, глыбіню %d і %d бітаў на піксэль. Такія пакуль не " +"Файл XWD %s мае фармат %d, глыбіню %d і %d бітаў на піксель. Такія пакуль не " "падтрымліваюцца." -#: ../plug-ins/common/file-xwd.c:598 -msgid "Cannot save images with alpha channels." -msgstr "Немагчыма захаваць відарыс з альфаканалам." +#: plug-ins/common/file-xwd.c:698 +#, fuzzy +#| msgid "Cannot save images with alpha channels." +msgid "Cannot export images with alpha channels." +msgstr "Немагчыма захаваць відарыс з альфа-каналам." -#: ../plug-ins/common/file-xwd.c:2198 -msgid "Error during writing indexed/gray image" -msgstr "Памылка падчас запісу індэксаванага/шэрага відарыса." +#: plug-ins/common/file-xwd.c:721 +#, fuzzy, c-format +#| msgid "Could not open '%s' for writing: %s" +msgid "Could not open '%s' for writing: " +msgstr "Не ўдалося адкрыць «%s» на запіс: %s" -#: ../plug-ins/common/file-xwd.c:2294 -msgid "Error during writing rgb image" -msgstr "Памылка падчас запісу RGB відарыса." +#: plug-ins/common/file-xwd.c:748 +#, c-format +msgid "Error exporting '%s': " +msgstr "Памылка падчас экспартавання «%s»: " -#: ../plug-ins/common/film.c:217 -msgid "Combine several images on a film strip" -msgstr "Спалучыць некалькі відарысаў на адрэзку кінастужкі" +#: plug-ins/common/file-xwd.c:955 plug-ins/common/file-xwd.c:989 +#: plug-ins/common/file-xwd.c:1026 +#, fuzzy +#| msgid "Unknown error" +msgid "Seek error" +msgstr "Невядомая памылка" -#: ../plug-ins/common/film.c:222 +#: plug-ins/common/file-xwd.c:1878 plug-ins/common/file-xwd.c:2129 +#: plug-ins/common/file-xwd.c:2324 +#, fuzzy, c-format +#| msgid "The file is corrupt!" +msgid "XWD-file %s is corrupt." +msgstr "Файл пашкоджаны!" + +#: plug-ins/common/file-xwd.c:2077 +#, fuzzy, c-format +#| msgid "Bad colormap" +msgid "" +"'%s':\n" +"Invalid color map" +msgstr "Кепская карта колераў" + +#: plug-ins/common/film.c:241 msgid "_Filmstrip..." msgstr "_Кінастужка…" -#: ../plug-ins/common/film.c:307 +#: plug-ins/common/film.c:245 +msgid "Combine several images on a film strip" +msgstr "Спалучыць некалькі відарысаў на адрэзку кінастужкі" + +#: plug-ins/common/film.c:384 msgid "Composing images" -msgstr "Складаньне відарысаў" +msgstr "Складанне відарысаў" -#: ../plug-ins/common/film.c:423 ../plug-ins/common/guillotine.c:215 -#: ../plug-ins/help-browser/dialog.c:1132 -msgid "Untitled" -msgstr "Безназоўны" - -#: ../plug-ins/common/film.c:878 +#: plug-ins/common/film.c:937 msgid "Available images:" msgstr "Наяўныя відарысы:" -#: ../plug-ins/common/film.c:879 +#: plug-ins/common/film.c:938 msgid "On film:" msgstr "На стужцы:" -#. Film height/colour -#: ../plug-ins/common/film.c:975 ../plug-ins/common/film.c:1251 +#: plug-ins/common/film.c:989 plug-ins/common/unit-editor.c:440 +msgid "_Add" +msgstr "_Дадаць" + +#: plug-ins/common/film.c:989 plug-ins/imagemap/imap_polygon.c:531 +msgid "_Remove" +msgstr "_Выдаліць" + +#. Create selection +#: plug-ins/common/film.c:1025 plug-ins/imagemap/imap_selection.c:339 +#: plug-ins/selection-to-path/selection-to-path.c:540 +msgid "Selection" +msgstr "Выбар" + +#. Film height/color +#: plug-ins/common/film.c:1036 plug-ins/common/film.c:1319 msgid "Filmstrip" msgstr "Кінастужка" #. Keep maximum image height -#: ../plug-ins/common/film.c:984 +#: plug-ins/common/film.c:1045 msgid "_Fit height to images" msgstr "_Падагнаць шырыню да відарысаў" -#. Film color -#: ../plug-ins/common/film.c:1023 -msgid "Select Film Color" -msgstr "Выберы свой стужки" +#: plug-ins/common/film.c:1066 plug-ins/common/smooth-palette.c:536 +#: plug-ins/common/tile.c:523 plug-ins/imagemap/imap_cmd_guides.c:173 +#: plug-ins/imagemap/imap_rectangle.c:405 +#: plug-ins/print/print-page-layout.c:288 +msgid "_Height:" +msgstr "_Вышыня:" -#: ../plug-ins/common/film.c:1028 ../plug-ins/common/film.c:1078 -#: ../plug-ins/common/nova.c:349 +#. Film color +#: plug-ins/common/film.c:1087 +msgid "Select Film Color" +msgstr "Выберыце колер стужкі" + +#: plug-ins/common/film.c:1092 plug-ins/common/film.c:1149 msgid "Co_lor:" msgstr "_Колер:" -#. Film numbering: Startindex/Font/colour -#: ../plug-ins/common/film.c:1037 +#. Film numbering: Startindex/Font/color +#: plug-ins/common/film.c:1104 msgid "Numbering" -msgstr "Нумараваньне" +msgstr "Нумараванне" -#: ../plug-ins/common/film.c:1055 +#: plug-ins/common/film.c:1125 msgid "Start _index:" msgstr "_Пачатак:" -#: ../plug-ins/common/film.c:1068 +#: plug-ins/common/film.c:1139 msgid "_Font:" msgstr "_Шрыфт:" #. Numbering color -#: ../plug-ins/common/film.c:1073 +#: plug-ins/common/film.c:1144 msgid "Select Number Color" msgstr "Выберы колер нумароў" -#: ../plug-ins/common/film.c:1088 +#: plug-ins/common/film.c:1162 msgid "At _bottom" msgstr "У_нізе" -#: ../plug-ins/common/film.c:1089 +#: plug-ins/common/film.c:1163 msgid "At _top" msgstr "У_версе" #. ** The right frame keeps the image selection ** -#: ../plug-ins/common/film.c:1102 +#: plug-ins/common/film.c:1176 msgid "Image Selection" msgstr "Выбар відарысаў" -#: ../plug-ins/common/film.c:1131 +#: plug-ins/common/film.c:1209 msgid "All Values are Fractions of the Strip Height" -msgstr "Усе значэньні — долі вышыні кінастужкі" +msgstr "Усе значэнні — долі вышыні кінастужкі" -#: ../plug-ins/common/film.c:1134 +#: plug-ins/common/film.c:1212 msgid "Ad_vanced" msgstr "_Дадаткова" -#: ../plug-ins/common/film.c:1153 +#: plug-ins/common/film.c:1228 msgid "Image _height:" msgstr "_Вышыня відарыса:" -#: ../plug-ins/common/film.c:1164 +#: plug-ins/common/film.c:1237 msgid "Image spac_ing:" -msgstr "_Прагал між відарысамі:" +msgstr "_Прабел між відарысамі:" -#: ../plug-ins/common/film.c:1175 +#: plug-ins/common/film.c:1249 msgid "_Hole offset:" msgstr "_Зрух адтуліны:" -#: ../plug-ins/common/film.c:1186 +#: plug-ins/common/film.c:1258 msgid "Ho_le width:" msgstr "_Шырыня адтуліны:" -#: ../plug-ins/common/film.c:1197 +#: plug-ins/common/film.c:1267 msgid "Hol_e height:" msgstr "_Вышыня адтуліны:" -#: ../plug-ins/common/film.c:1208 +#: plug-ins/common/film.c:1276 msgid "Hole sp_acing:" -msgstr "Прагал _між адтулінамі:" +msgstr "Прабел _між адтулінамі:" -#: ../plug-ins/common/film.c:1219 +#: plug-ins/common/film.c:1288 msgid "_Number height:" msgstr "_Вышыня нумара:" -#. These values are translated for the GUI but also used internally -#. to figure out which button the user pushed, etc. -#. Not my design, please don't blame me -- njl -#: ../plug-ins/common/filter-pack.c:220 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:955 -msgid "Red:" -msgstr "Чырвоны:" +#: plug-ins/common/film.c:1300 +msgid "Re_set" +msgstr "С_кінуць" -#: ../plug-ins/common/filter-pack.c:221 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:965 -msgid "Green:" -msgstr "Зялёны:" - -#: ../plug-ins/common/filter-pack.c:222 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:975 -msgid "Blue:" -msgstr "Сіні:" - -#: ../plug-ins/common/filter-pack.c:223 -msgid "Cyan:" -msgstr "Блакітны:" - -#: ../plug-ins/common/filter-pack.c:224 -msgid "Yellow:" -msgstr "Жоўты:" - -#: ../plug-ins/common/filter-pack.c:225 -msgid "Magenta:" -msgstr "Пурпуровы:" - -#: ../plug-ins/common/filter-pack.c:227 -msgid "Darker:" -msgstr "Цямней:" - -#: ../plug-ins/common/filter-pack.c:228 -msgid "Lighter:" -msgstr "Сьвятлей:" - -#: ../plug-ins/common/filter-pack.c:230 -msgid "More Sat:" -msgstr "Болей насыч.:" - -#: ../plug-ins/common/filter-pack.c:231 -msgid "Less Sat:" -msgstr "Меней насыч.:" - -#: ../plug-ins/common/filter-pack.c:233 ../plug-ins/common/filter-pack.c:532 -msgid "Current:" -msgstr "Бягучы:" - -#: ../plug-ins/common/filter-pack.c:317 -msgid "Interactively modify the image colors" -msgstr "Інтэрактыўна зьмяніць колеры відарыса" - -#: ../plug-ins/common/filter-pack.c:322 -msgid "_Filter Pack..." -msgstr "Набор _фільтраў" - -#: ../plug-ins/common/filter-pack.c:372 -msgid "FP can only be used on RGB images." -msgstr "Набор фільтраў працуе толькі зь відарысамі RGB." - -#: ../plug-ins/common/filter-pack.c:382 -msgid "FP can only be run interactively." -msgstr "Набор фільтраў выконваецца толькі інтэрактыўна." - -#: ../plug-ins/common/filter-pack.c:400 -msgid "Applying filter pack" -msgstr "Ужываньне набору фільтраў" - -#: ../plug-ins/common/filter-pack.c:524 -msgid "Original:" -msgstr "Спачатны:" - -#: ../plug-ins/common/filter-pack.c:576 -msgid "Hue Variations" -msgstr "Зьмяненьне адценьня" - -#: ../plug-ins/common/filter-pack.c:631 -msgid "Roughness" -msgstr "Рэзкасьць" - -#: ../plug-ins/common/filter-pack.c:676 ../plug-ins/common/filter-pack.c:1320 -msgid "Affected Range" -msgstr "Дыяпазон, на які ўзьдзейнічае" - -#: ../plug-ins/common/filter-pack.c:680 -msgid "Sha_dows" -msgstr "_Цені" - -#: ../plug-ins/common/filter-pack.c:681 -msgid "_Midtones" -msgstr "_Паўтоны" - -#: ../plug-ins/common/filter-pack.c:682 -msgid "H_ighlights" -msgstr "Сьветлыя ўчасткі" - -#: ../plug-ins/common/filter-pack.c:696 -msgid "Windows" -msgstr "Вокны" - -#: ../plug-ins/common/filter-pack.c:706 ../plug-ins/common/van-gogh-lic.c:676 -msgid "_Saturation" -msgstr "_Насычанасьць" - -#: ../plug-ins/common/filter-pack.c:714 -msgid "A_dvanced" -msgstr "_Пашыраныя" - -#: ../plug-ins/common/filter-pack.c:734 -msgid "Value Variations" -msgstr "Зьмяненьне яркасьці" - -#: ../plug-ins/common/filter-pack.c:779 -msgid "Saturation Variations" -msgstr "Зьмяненьне насычанасьці" - -#: ../plug-ins/common/filter-pack.c:832 -msgid "Select Pixels By" -msgstr "Крытэр выбару піксэляў" - -#: ../plug-ins/common/filter-pack.c:837 -msgid "H_ue" -msgstr "_Адценьне" - -#: ../plug-ins/common/filter-pack.c:838 -msgid "Satu_ration" -msgstr "_Насычанасьць" - -#: ../plug-ins/common/filter-pack.c:839 -msgid "V_alue" -msgstr "_Яркасьць" - -#: ../plug-ins/common/filter-pack.c:865 -msgid "Show" -msgstr "Паказаць" - -#: ../plug-ins/common/filter-pack.c:870 -msgid "_Entire image" -msgstr "_Увесь відарыс" - -#: ../plug-ins/common/filter-pack.c:871 -msgid "Se_lection only" -msgstr "Толькі _вылучэньне" - -#: ../plug-ins/common/filter-pack.c:872 -msgid "Selec_tion in context" -msgstr "_Вылучэньне ў кантэксьце" - -#: ../plug-ins/common/filter-pack.c:1203 -msgid "Filter Pack Simulation" -msgstr "Удаваньне набору фільтраў" - -#: ../plug-ins/common/filter-pack.c:1293 -msgid "Shadows:" -msgstr "Цені:" - -#: ../plug-ins/common/filter-pack.c:1294 -msgid "Midtones:" -msgstr "Паўтоны:" - -#: ../plug-ins/common/filter-pack.c:1295 -msgid "Highlights:" -msgstr "Сьветлыя ўчасткі:" - -#: ../plug-ins/common/filter-pack.c:1308 -msgid "Advanced Filter Pack Options" -msgstr "Пашыраныя выборы набору фільтраў" - -#. ****************** MISC OPTIONS ************************** -#: ../plug-ins/common/filter-pack.c:1420 -msgid "Preview Size" -msgstr "Памер агляду" - -#: ../plug-ins/common/fractal-trace.c:116 -msgid "Transform image with the Mandelbrot Fractal" -msgstr "Ператварыць відарыс фракталам Мандэльброта" - -#: ../plug-ins/common/fractal-trace.c:121 -msgid "_Fractal Trace..." -msgstr "_Сьлед фрактала…" - -#: ../plug-ins/common/fractal-trace.c:460 -#: ../plug-ins/common/fractal-trace.c:691 -msgid "Fractal Trace" -msgstr "Сьлед фрактала" - -#. Settings -#: ../plug-ins/common/fractal-trace.c:732 -msgid "Outside Type" -msgstr "Звонку" - -#: ../plug-ins/common/fractal-trace.c:743 -msgid "_White" -msgstr "_Белы" - -#: ../plug-ins/common/fractal-trace.c:750 -msgid "Mandelbrot Parameters" -msgstr "Параметры Мандэльброта" - -#: ../plug-ins/common/fractal-trace.c:761 -msgid "X_1:" -msgstr "X_1:" - -#: ../plug-ins/common/fractal-trace.c:770 -msgid "X_2:" -msgstr "X_2:" - -#: ../plug-ins/common/fractal-trace.c:779 -msgid "Y_1:" -msgstr "Y_1:" - -#: ../plug-ins/common/fractal-trace.c:788 -msgid "Y_2:" -msgstr "Y_2:" - -#: ../plug-ins/common/gradient-map.c:84 -msgid "Recolor the image using colors from the active gradient" -msgstr "Перафарбаваць відарыс, ужываючы колеры актыўнага ґрадыента" - -#: ../plug-ins/common/gradient-map.c:97 +#: plug-ins/common/gradient-map.c:132 msgid "_Gradient Map" -msgstr "_Ґрадыентнае" +msgstr "_Градыентнае" -#: ../plug-ins/common/gradient-map.c:106 -msgid "Recolor the image using colors from the active palette" -msgstr "Перафарбаваць відарыс, ужываючы колеры актыўнай палітры" +#: plug-ins/common/gradient-map.c:136 +msgid "Recolor the image using colors from the active gradient" +msgstr "Перафарбаваць відарыс, ужываючы колеры актыўнага градыента" -#: ../plug-ins/common/gradient-map.c:119 +#: plug-ins/common/gradient-map.c:168 msgid "_Palette Map" msgstr "_Палітравае" -#: ../plug-ins/common/gradient-map.c:162 +#: plug-ins/common/gradient-map.c:172 +msgid "Recolor the image using colors from the active palette" +msgstr "Перафарбаваць відарыс, ужываючы колеры актыўнай палітры" + +#: plug-ins/common/gradient-map.c:237 msgid "Gradient Map" -msgstr "Ґрадыентнае ператварэньне" +msgstr "Градыентнае пераўтварэнне" -#: ../plug-ins/common/gradient-map.c:167 +#: plug-ins/common/gradient-map.c:241 msgid "Palette Map" -msgstr "Палітравае ператварэньне" +msgstr "Палітравае пераўтварэнне" -#: ../plug-ins/common/grid.c:142 +#: plug-ins/common/grid.c:173 +msgid "_Grid (legacy)..." +msgstr "_Сетка (састарэлае)..." + +#: plug-ins/common/grid.c:178 msgid "Draw a grid on the image" msgstr "Нарысаваць сетку на відарысе" -#: ../plug-ins/common/grid.c:148 -msgid "_Grid..." -msgstr "_Сетка…" - -#: ../plug-ins/common/grid.c:241 +#: plug-ins/common/grid.c:330 msgid "Drawing grid" -msgstr "Рысаваньне сеткі" - -#: ../plug-ins/common/grid.c:636 ../plug-ins/gfig/gfig-dialog.c:1391 -#: ../plug-ins/imagemap/imap_menu.c:208 -msgid "Grid" -msgstr "Сетка" +msgstr "Маляванне сеткі" #. attach labels -#: ../plug-ins/common/grid.c:719 +#: plug-ins/common/grid.c:837 msgid "" "Horizontal\n" "Lines" @@ -5442,1167 +6582,360 @@ msgstr "" "Па гарызанталі\n" "ліній" -#: ../plug-ins/common/grid.c:721 +#: plug-ins/common/grid.c:839 msgid "" "Vertical\n" "Lines" msgstr "" -"Па вэртыкалі\n" +"Па вертыкалі\n" "ліній" -#: ../plug-ins/common/grid.c:723 +#: plug-ins/common/grid.c:841 msgid "Intersection" -msgstr "Перасячэньне" +msgstr "Перасячэнне" #. attach labels -#: ../plug-ins/common/grid.c:859 +#: plug-ins/common/grid.c:908 +msgid "Spacing:" +msgstr "Інтэрвал:" + +#. attach labels +#: plug-ins/common/grid.c:973 msgid "Offset:" msgstr "Зрух:" #. attach color selectors -#: ../plug-ins/common/grid.c:898 +#: plug-ins/common/grid.c:1006 msgid "Horizontal Color" msgstr "Гарызантальны колер" -#: ../plug-ins/common/grid.c:916 +#: plug-ins/common/grid.c:1028 msgid "Vertical Color" -msgstr "Вэртыкальны колер" +msgstr "Вертыкальны колер" -#: ../plug-ins/common/grid.c:934 +#: plug-ins/common/grid.c:1049 msgid "Intersection Color" -msgstr "Колер перасячэньня" +msgstr "Колер перасячэння" -#: ../plug-ins/common/guillotine.c:74 +#: plug-ins/common/guillotine.c:112 +msgid "Slice Using G_uides" +msgstr "" + +#: plug-ins/common/guillotine.c:116 msgid "Slice the image into subimages using guides" msgstr "Разразае відарыс на падвідарысы па накіроўных" -#: ../plug-ins/common/guillotine.c:81 -msgid "_Guillotine" -msgstr "_Ґільятына" - -#: ../plug-ins/common/guillotine.c:119 +#: plug-ins/common/guillotine.c:166 msgid "Guillotine" -msgstr "Ґільятына" +msgstr "Гільяціна" -#: ../plug-ins/common/hot.c:207 -msgid "Find and fix pixels that may be unsafely bright" -msgstr "Шукае й папраўляе небясьпечна яркія піксэлі" +#: plug-ins/common/guillotine.c:266 plug-ins/help-browser/dialog.c:821 +msgid "Untitled" +msgstr "Безназоўны" -#: ../plug-ins/common/hot.c:217 +#: plug-ins/common/hot.c:249 msgid "_Hot..." msgstr "_Гарачыя…" -#: ../plug-ins/common/hot.c:387 ../plug-ins/common/hot.c:587 +#: plug-ins/common/hot.c:253 +msgid "Find and fix pixels that may be unsafely bright" +msgstr "Шукае і папраўляе небяспечна яркія пікселі" + +#: plug-ins/common/hot.c:270 +msgid "Mode" +msgstr "Рэжым" + +#: plug-ins/common/hot.c:276 +msgid "Action" +msgstr "Дзеянне" + +#: plug-ins/common/hot.c:283 +msgid "Create _new layer" +msgstr "Стварыць _новы слой" + +#: plug-ins/common/hot.c:474 plug-ins/common/hot.c:681 msgid "Hot" msgstr "«Гарачыя» колеры" -#: ../plug-ins/common/hot.c:625 -msgid "Create _new layer" -msgstr "Стварыць _новы пласт" +#: plug-ins/common/hot.c:690 +msgid "N_TSC" +msgstr "N_TSC" -#: ../plug-ins/common/hot.c:634 -msgid "Action" -msgstr "Дзеяньне" +#: plug-ins/common/hot.c:691 +msgid "_PAL" +msgstr "_PAL" -#: ../plug-ins/common/hot.c:638 +#: plug-ins/common/hot.c:696 msgid "Reduce _Luminance" -msgstr "Зьменшыць _яркасьць" +msgstr "Зменшыць _яркасць" -#: ../plug-ins/common/hot.c:639 +#: plug-ins/common/hot.c:697 msgid "Reduce _Saturation" -msgstr "Зьменшыць _насычанасьць" +msgstr "Зменшыць _насычанасць" -#: ../plug-ins/common/hot.c:640 ../plug-ins/common/waves.c:284 +#: plug-ins/common/hot.c:698 msgid "_Blacken" msgstr "_Счарніць" -#: ../plug-ins/common/illusion.c:91 -msgid "Superimpose many altered copies of the image" -msgstr "Накласьці шмат зьмененых копій відарыса" - -#: ../plug-ins/common/illusion.c:96 -msgid "_Illusion..." -msgstr "_Міраж…" - -#: ../plug-ins/common/illusion.c:168 ../plug-ins/common/illusion.c:350 -msgid "Illusion" -msgstr "Міраж" - -#: ../plug-ins/common/illusion.c:389 -msgid "_Divisions:" -msgstr "_Частак:" - -#: ../plug-ins/common/illusion.c:399 -msgid "Mode _1" -msgstr "Рэжым _1" - -#: ../plug-ins/common/illusion.c:414 -msgid "Mode _2" -msgstr "Рэжым _2" - -#: ../plug-ins/common/iwarp.c:264 -msgid "Use mouse control to warp image areas" -msgstr "Выкарыстоўвай мыш, каб скрывіць вобласьці відарыса" - -#: ../plug-ins/common/iwarp.c:269 -msgid "_IWarp..." -msgstr "_І-Скрыўленьне…" - -#: ../plug-ins/common/iwarp.c:697 -msgid "Warping" -msgstr "Скрыўленьне" - -#: ../plug-ins/common/iwarp.c:803 -#, c-format -msgid "Warping Frame %d" -msgstr "Скрыўленьне кадра %d" - -#: ../plug-ins/common/iwarp.c:815 -msgid "Ping pong" -msgstr "Пінг-понг" - -#: ../plug-ins/common/iwarp.c:974 ../plug-ins/common/whirl-pinch.c:193 -msgid "Region affected by plug-in is empty" -msgstr "Вобласьць, якую апрацоўвае дадатак, пустая" - -#: ../plug-ins/common/iwarp.c:1030 -msgid "A_nimate" -msgstr "_Анімаваць" - -#: ../plug-ins/common/iwarp.c:1050 -msgid "Number of _frames:" -msgstr "_Колькасьць кадраў:" - -#: ../plug-ins/common/iwarp.c:1059 -msgid "R_everse" -msgstr "_Зваротны" - -#: ../plug-ins/common/iwarp.c:1068 -msgid "_Ping pong" -msgstr "_Пінг-понг" - -#: ../plug-ins/common/iwarp.c:1081 -msgid "_Animate" -msgstr "_Анімаваць" - -#: ../plug-ins/common/iwarp.c:1102 -msgid "Deform Mode" -msgstr "Рэжым скрыўленьня" - -#: ../plug-ins/common/iwarp.c:1116 -msgid "_Move" -msgstr "_Перасунуць" - -#: ../plug-ins/common/iwarp.c:1117 -msgid "_Grow" -msgstr "_Павялічыць" - -#: ../plug-ins/common/iwarp.c:1118 -msgid "S_wirl CCW" -msgstr "Сьпіральны (сс)" - -#: ../plug-ins/common/iwarp.c:1119 -msgid "Remo_ve" -msgstr "_Прыбраць" - -#: ../plug-ins/common/iwarp.c:1120 -msgid "S_hrink" -msgstr "_Зьменшыць" - -#: ../plug-ins/common/iwarp.c:1121 -msgid "Sw_irl CW" -msgstr "Сь_піральны (ЗC)" - -#: ../plug-ins/common/iwarp.c:1150 -msgid "_Deform radius:" -msgstr "Радыюс _дэфармацыі:" - -#: ../plug-ins/common/iwarp.c:1160 -msgid "D_eform amount:" -msgstr "_Ровень дэфармавацыі:" - -#: ../plug-ins/common/iwarp.c:1169 -msgid "_Bilinear" -msgstr "_Білінейны" - -#: ../plug-ins/common/iwarp.c:1183 -msgid "Adaptive s_upersample" -msgstr "Адаптыўная _інтэрпаляцыя" - -#: ../plug-ins/common/iwarp.c:1204 -msgid "Ma_x depth:" -msgstr "_Макс. глыбіня:" - -#: ../plug-ins/common/iwarp.c:1214 -msgid "Thresho_ld:" -msgstr "_Парог:" - -#: ../plug-ins/common/iwarp.c:1227 ../plug-ins/common/sinus.c:772 -#: ../plug-ins/gradient-flare/gradient-flare.c:2868 -msgid "_Settings" -msgstr "_Настройкі" - -#: ../plug-ins/common/iwarp.c:1286 -msgid "IWarp" -msgstr "І-Скрыўленьне" - -#: ../plug-ins/common/iwarp.c:1324 -msgid "" -"Click and drag in the preview to define the distortions to apply to the " -"image." -msgstr "Пстрыкні й пацягні ў вакне агляду, каб вызначыць скажэньні відарыса." - -#: ../plug-ins/common/jigsaw.c:356 -msgid "Add a jigsaw-puzzle pattern to the image" -msgstr "Дадаць узор карцінкі-загадкі да відарыса" - -#: ../plug-ins/common/jigsaw.c:361 +#: plug-ins/common/jigsaw.c:398 msgid "_Jigsaw..." msgstr "_Карцінка-загадка…" -#: ../plug-ins/common/jigsaw.c:414 -msgid "Assembling jigsaw" -msgstr "Зьбіраньне карцінкі-загадкі" +#: plug-ins/common/jigsaw.c:403 +msgid "Add a jigsaw-puzzle pattern to the image" +msgstr "Дадаць узор карцінкі-загадкі да відарыса" -#: ../plug-ins/common/jigsaw.c:2393 -msgid "Jigsaw" -msgstr "Карцінка-загадка" +#: plug-ins/common/jigsaw.c:405 +#, fuzzy +#| msgid "Jigsaw Style" +msgid "Jigsaw puzzle look" +msgstr "_Стыль карцінкі-загадкі" -#: ../plug-ins/common/jigsaw.c:2423 -msgid "Number of Tiles" -msgstr "Колькасьць плітак" +#: plug-ins/common/jigsaw.c:413 plug-ins/common/tile-small.c:511 +#: plug-ins/pagecurl/pagecurl.c:586 +msgid "_Horizontal" +msgstr "Па _гарызанталі" -#: ../plug-ins/common/jigsaw.c:2438 +#: plug-ins/common/jigsaw.c:414 msgid "Number of pieces going across" -msgstr "Колькасьць кавалкаў ад краю да краю" +msgstr "Колькасць кавалкаў ад краю да краю" -#: ../plug-ins/common/jigsaw.c:2455 +#: plug-ins/common/jigsaw.c:419 plug-ins/common/tile-small.c:521 +#: plug-ins/pagecurl/pagecurl.c:585 +msgid "_Vertical" +msgstr "Па _вертыкалі" + +#: plug-ins/common/jigsaw.c:420 msgid "Number of pieces going down" -msgstr "Колькасьць кавалкаў уніз" +msgstr "Колькасць кавалкаў уніз" -#: ../plug-ins/common/jigsaw.c:2469 -msgid "Bevel Edges" -msgstr "Скошаныя краі" - -#: ../plug-ins/common/jigsaw.c:2479 -msgid "_Bevel width:" -msgstr "_Шырыня скосу:" - -#: ../plug-ins/common/jigsaw.c:2483 -msgid "Degree of slope of each piece's edge" -msgstr "Ґрадус нахілу краёў кожнага кавалка" - -#: ../plug-ins/common/jigsaw.c:2496 -msgid "H_ighlight:" -msgstr "_Падсьвечваньне:" - -#: ../plug-ins/common/jigsaw.c:2500 -msgid "The amount of highlighting on the edges of each piece" -msgstr "Узровень падсьвечваньня краёў кожнага кавалка" - -#. frame for primitive radio buttons -#: ../plug-ins/common/jigsaw.c:2517 +#: plug-ins/common/jigsaw.c:425 msgid "Jigsaw Style" msgstr "_Стыль карцінкі-загадкі" -#: ../plug-ins/common/jigsaw.c:2521 -msgid "_Square" -msgstr "_Квадрат" +#: plug-ins/common/jigsaw.c:426 +msgid "The style/shape of the jigsaw puzzle { Square (0), Curved (1) }" +msgstr "" -#: ../plug-ins/common/jigsaw.c:2522 -msgid "C_urved" -msgstr "_Крывы" +#: plug-ins/common/jigsaw.c:432 +#, fuzzy +#| msgid "Ho_le width:" +msgid "_Blend width" +msgstr "_Шырыня адтуліны:" -#: ../plug-ins/common/jigsaw.c:2526 -msgid "Each piece has straight sides" -msgstr "Кожны кавалак мае роўныя бакі" +#: plug-ins/common/jigsaw.c:433 +msgid "Degree of slope of each piece's edge" +msgstr "Градус нахілу краёў кожнага кавалка" -#: ../plug-ins/common/jigsaw.c:2527 -msgid "Each piece has curved sides" -msgstr "Кожны кавалак мае крывыя бакі" +#: plug-ins/common/jigsaw.c:438 +#, fuzzy +#| msgid "Highlight:" +msgid "Hi_ghlight" +msgstr "Падсвечванне:" -#: ../plug-ins/common/lcms.c:218 -msgid "Set a color profile on the image" -msgstr "Усталяваць профіль колераў на відарыс" +#: plug-ins/common/jigsaw.c:439 +msgid "The amount of highlighting on the edges of each piece" +msgstr "Узровень падсвечвання краёў кожнага кавалка" -#: ../plug-ins/common/lcms.c:225 -msgid "_Assign Color Profile..." -msgstr "_Прызначыць профіль колераў…" +#: plug-ins/common/jigsaw.c:503 +msgid "Assembling jigsaw" +msgstr "Збіранне карцінкі-загадкі" -#: ../plug-ins/common/lcms.c:241 -msgid "Assign default RGB Profile" -msgstr "Прызначыць прадвызначаны профіль RGB" +#: plug-ins/common/jigsaw.c:730 +msgid "draw_jigsaw: bad style\n" +msgstr "" -#: ../plug-ins/common/lcms.c:248 -msgid "Apply a color profile on the image" -msgstr "Ужыць профіль колераў да відарыса" +#: plug-ins/common/jigsaw.c:2493 +msgid "Jigsaw" +msgstr "Карцінка-загадка" -#: ../plug-ins/common/lcms.c:258 -msgid "_Convert to Color Profile..." -msgstr "_Ператварыць у профіль колераў…" +#: plug-ins/common/jigsaw.c:2518 +msgid "Number of Tiles" +msgstr "Колькасць плітак" -#: ../plug-ins/common/lcms.c:276 -msgid "Convert to default RGB Profile" -msgstr "Ператварыць у прадвызначаны RGB-профіль" +#: plug-ins/common/jigsaw.c:2535 +msgid "Bevel Edges" +msgstr "Скошаныя краі" -#: ../plug-ins/common/lcms.c:290 -msgid "Image Color Profile Information" -msgstr "Зьвесткі аб профілі колераў відарыса" +#. frame for primitive radio buttons +#: plug-ins/common/jigsaw.c:2544 +msgid "Square" +msgstr "Квадрат" -#: ../plug-ins/common/lcms.c:304 -msgid "Color Profile Information" -msgstr "Зьвесткі аб профілі колераў" +#: plug-ins/common/jigsaw.c:2545 +msgid "Curved" +msgstr "Крывая" -#: ../plug-ins/common/lcms.c:572 -#, c-format -msgid "Color profile '%s' is not for RGB color space." -msgstr "Профіль колераў '%s' не ў прасторы RGB." - -#: ../plug-ins/common/lcms.c:679 -msgid "Default RGB working space" -msgstr "Прадвызначаная працоўная прастора RGB" - -#: ../plug-ins/common/lcms.c:775 -msgid "" -"Data attached as 'icc-profile' does not appear to be an ICC color profile" -msgstr "Даньні, далучаныя як профіль ICC, не зьяўляюцца ім" - -#: ../plug-ins/common/lcms.c:825 -#, c-format -msgid "'%s' does not appear to be an ICC color profile" -msgstr "'%s' не зьяўляецца профілем колераў ICC" - -#. ICC color profile conversion -#: ../plug-ins/common/lcms.c:885 -#, c-format -msgid "Converting from '%s' to '%s'" -msgstr "Ператварэньне '%s' у '%s'" - -#: ../plug-ins/common/lcms.c:1129 -#, c-format -msgid "Could not load ICC profile from '%s'" -msgstr "Немагчыма загрузіць профіль ICC з '%s'" - -#: ../plug-ins/common/lcms.c:1151 -#, c-format -msgid "The image '%s' has an embedded color profile:" -msgstr "Відарыс '%s' мае ўбудаваны профіль колераў:" - -#: ../plug-ins/common/lcms.c:1195 -#, c-format -msgid "Convert the image to the RGB working space (%s)?" -msgstr "Ці ператварыць відарыс у працоўную прастору RGB (%s)?" - -#: ../plug-ins/common/lcms.c:1226 -msgid "Convert to RGB working space?" -msgstr "Ці ператварыць у простору колераў RGB?" - -#: ../plug-ins/common/lcms.c:1231 -msgid "_Keep" -msgstr "_Пакінуць" - -#: ../plug-ins/common/lcms.c:1236 -msgid "_Convert" -msgstr "_Ператварыць" - -#: ../plug-ins/common/lcms.c:1264 ../plug-ins/file-jpeg/jpeg-exif.c:436 -msgid "_Don't ask me again" -msgstr "_Болей не пытаць" - -#: ../plug-ins/common/lcms.c:1328 -msgid "Select destination profile" -msgstr "Выберы канчатковы профіль" - -#: ../plug-ins/common/lcms.c:1355 -msgid "All files (*.*)" -msgstr "Усе файлы (*.*)" - -#: ../plug-ins/common/lcms.c:1360 -msgid "ICC color profile (*.icc, *.icm)" -msgstr "Профіль колераў ICC (*.icc, *.icm)" - -#: ../plug-ins/common/lcms.c:1403 -#, c-format -msgid "RGB workspace (%s)" -msgstr "Рабочая прастора RGB (%s)" - -#: ../plug-ins/common/lcms.c:1453 -msgid "Convert to ICC Color Profile" -msgstr "Ператварыць у профіль колераў ICC" - -#: ../plug-ins/common/lcms.c:1454 -msgid "Assign ICC Color Profile" -msgstr "Прызначыць профіль колераў ICC" - -#: ../plug-ins/common/lcms.c:1462 -msgid "_Assign" -msgstr "_Прызначыць" - -#: ../plug-ins/common/lcms.c:1480 -msgid "Current Color Profile" -msgstr "Бягучы профіль колераў" - -#: ../plug-ins/common/lcms.c:1495 -msgid "Convert to" -msgstr "Ператварыць у" - -#: ../plug-ins/common/lcms.c:1495 -msgid "Assign" -msgstr "Прызначыць" - -#: ../plug-ins/common/lcms.c:1519 -msgid "_Rendering Intent:" -msgstr "_Мэта перадачы колера: " - -#: ../plug-ins/common/lcms.c:1535 -msgid "_Black Point Compensation" -msgstr "_Кампэнсацыя чорнага пункту" - -#: ../plug-ins/common/lcms.c:1577 -msgid "Destination profile is not for RGB color space." -msgstr "Мэтавы профіль не прызначаны для прасторы RGB." - -#: ../plug-ins/common/lens-apply.c:108 -msgid "Simulate an elliptical lens over the image" -msgstr "Удаваць эліптычную лінзу над відарысам" - -#: ../plug-ins/common/lens-apply.c:114 -msgid "Apply _Lens..." -msgstr "Ужыць _лінзу…" - -#: ../plug-ins/common/lens-apply.c:181 -msgid "Applying lens" -msgstr "Ужываньне лінзы" - -#: ../plug-ins/common/lens-apply.c:394 -msgid "Lens Effect" -msgstr "Эфэкт лінзы" - -#: ../plug-ins/common/lens-apply.c:429 -msgid "_Keep original surroundings" -msgstr "_Пакінуць пачатковае акружэньне" - -#: ../plug-ins/common/lens-apply.c:444 -msgid "_Set surroundings to index 0" -msgstr "Устанавіць для акружэньня каэфіцыент 0" - -#: ../plug-ins/common/lens-apply.c:445 -msgid "_Set surroundings to background color" -msgstr "_Запоўніць акружэньне колерам асноведзі" - -#: ../plug-ins/common/lens-apply.c:460 -msgid "_Make surroundings transparent" -msgstr "_Зрабіць акружэньне празрыстым" - -#: ../plug-ins/common/lens-apply.c:477 -msgid "_Lens refraction index:" -msgstr "_Каэфіцыент пераламленьня лінзы:" - -#: ../plug-ins/common/lens-distortion.c:113 -msgid "Corrects lens distortion" -msgstr "Карэктуе скажэньні ад лінзы" - -#: ../plug-ins/common/lens-distortion.c:118 -msgid "Lens Distortion..." -msgstr "Скажэньне лінзай…" - -#: ../plug-ins/common/lens-distortion.c:379 -msgid "Lens distortion" -msgstr "Скажэньне лінзай" - -#: ../plug-ins/common/lens-distortion.c:479 -msgid "Lens Distortion" -msgstr "Скажэньне лінзай" - -#: ../plug-ins/common/lens-distortion.c:518 -msgid "_Main:" -msgstr "_Галоўнае:" - -#: ../plug-ins/common/lens-distortion.c:532 -msgid "_Edge:" -msgstr "_Край:" - -#: ../plug-ins/common/lens-distortion.c:546 ../plug-ins/flame/flame.c:1236 -msgid "_Zoom:" -msgstr "_Маштаб:" - -#: ../plug-ins/common/lens-distortion.c:560 -msgid "_Brighten:" -msgstr "_Асьветліць:" - -#: ../plug-ins/common/lens-distortion.c:574 -msgid "_X shift:" -msgstr "Зрух па _X:" - -#: ../plug-ins/common/lens-distortion.c:588 -msgid "_Y shift:" -msgstr "Зрух па _Y:" - -#: ../plug-ins/common/lens-flare.c:183 -msgid "Add a lens flare effect" -msgstr "Дадае эфэкт сьветларасьсеяньня ў аб'ектыве" - -#: ../plug-ins/common/lens-flare.c:190 -msgid "Lens _Flare..." -msgstr "_Сьветларасьсеяньне…" - -#: ../plug-ins/common/lens-flare.c:265 -msgid "Render lens flare" -msgstr "Стварэньне сьветларасьсеяньня" - -#: ../plug-ins/common/lens-flare.c:301 -msgid "Lens Flare" -msgstr "Сьветларасьсеяньне ў аб'ектыве" - -#: ../plug-ins/common/lens-flare.c:745 -msgid "Center of Flare Effect" -msgstr "Цэнтар эфэкта" - -#: ../plug-ins/common/lens-flare.c:785 ../plug-ins/common/nova.c:475 -msgid "Show _position" -msgstr "Паказаць _становішча" - -#: ../plug-ins/common/mail.c:188 -msgid "Send the image by email" -msgstr "Даслаць відарыс электроннай поштай" - -#: ../plug-ins/common/mail.c:194 +#: plug-ins/common/mail.c:188 msgid "Send by E_mail..." -msgstr "_Даслаць поштай…" +msgstr "_Адправіць поштай…" -#: ../plug-ins/common/mail.c:407 +#: plug-ins/common/mail.c:193 +msgid "Send the image by email" +msgstr "Адправіць відарыс электроннай поштай" + +#: plug-ins/common/mail.c:195 +msgid "Sendmail is used to send emails and must be properly configured." +msgstr "" + +#: plug-ins/common/mail.c:198 +msgid "" +"The preferred email composer is used to send emails and must be properly " +"configured." +msgstr "" + +#: plug-ins/common/mail.c:211 +msgid "File_name" +msgstr "_Назва файла" + +#: plug-ins/common/mail.c:212 +msgid "The name of the file to save the image in" +msgstr "Назва файла, у які трэба захаваць відарыс" + +#: plug-ins/common/mail.c:217 +msgid "_To" +msgstr "_Да" + +#: plug-ins/common/mail.c:218 +msgid "The email address to send to" +msgstr "Адрас атрымальніка электроннай пошты" + +#: plug-ins/common/mail.c:223 +msgid "_From" +msgstr "_Ад" + +#: plug-ins/common/mail.c:224 +msgid "The email address for the From: field" +msgstr "Адрас электроннай пошты для поля адпраўшчыка" + +#: plug-ins/common/mail.c:229 +msgid "Su_bject" +msgstr "_Тэма" + +#: plug-ins/common/mail.c:230 +msgid "The subject" +msgstr "Тэма" + +#: plug-ins/common/mail.c:236 +msgid "The comment" +msgstr "Каментарый" + +#: plug-ins/common/mail.c:563 msgid "Send by Email" -msgstr "Даслаць поштай" +msgstr "Адправіць поштай" -#: ../plug-ins/common/mail.c:412 -msgid "_Send" -msgstr "_Даслаць" +#: plug-ins/common/mail.c:567 +msgid "Send" +msgstr "Адправіць" -#: ../plug-ins/common/mail.c:444 -msgid "_Filename:" -msgstr "_Назва файла:" - -#: ../plug-ins/common/mail.c:456 -msgctxt "email-address" -msgid "_To:" -msgstr "_Да:" - -#: ../plug-ins/common/mail.c:470 -msgctxt "email-address" -msgid "_From:" -msgstr "_Ад:" - -#: ../plug-ins/common/mail.c:482 -msgid "S_ubject:" -msgstr "_Тэма:" - -#: ../plug-ins/common/mail.c:591 +#: plug-ins/common/mail.c:703 msgid "some sort of error with the file extension or lack thereof" -msgstr "нейкая памылка з пашырэньнем файла або адсутнасьцю яго" +msgstr "нейкая памылка з пашырэннем файла або адсутнасцю яго" -#: ../plug-ins/common/mail.c:727 +#: plug-ins/common/mail.c:888 #, c-format msgid "Could not start sendmail (%s)" -msgstr "Немагчыма выканаць sendmail (%s)" +msgstr "Не ўдалося выканаць sendmail (%s)" -#: ../plug-ins/common/max-rgb.c:90 -msgid "Reduce image to pure red, green, and blue" -msgstr "Зьменшыць відарыс да чыстых чырвонага, зялёнага й сіняга" - -#: ../plug-ins/common/max-rgb.c:95 -msgid "Maxim_um RGB..." -msgstr "_Найбольшы з RGB…" - -#: ../plug-ins/common/max-rgb.c:134 ../plug-ins/common/noise-hsv.c:158 -msgid "Can only operate on RGB drawables." -msgstr "Працуе толькі на аб'ектах рысаваньня ў RGB." - -#: ../plug-ins/common/max-rgb.c:234 -msgid "Max RGB" -msgstr "Найбольшы з RGB" - -#: ../plug-ins/common/max-rgb.c:259 -msgid "Maximum RGB Value" -msgstr "Найбольшае значэньне RGB" - -#: ../plug-ins/common/max-rgb.c:293 -msgid "_Hold the maximal channels" -msgstr "Пакінуць най_большы канал" - -#: ../plug-ins/common/max-rgb.c:296 -msgid "Ho_ld the minimal channels" -msgstr "Пакінуць най_меншы канал" - -#: ../plug-ins/common/mosaic.c:359 -msgid "Convert the image into irregular tiles" -msgstr "Ператварае відарыс у мазаіку, складзеную зь няроўных плітак" - -#: ../plug-ins/common/mosaic.c:364 -msgid "_Mosaic..." -msgstr "_Мазаіка…" - -#. progress bar for gradient finding -#: ../plug-ins/common/mosaic.c:505 -msgid "Finding edges" -msgstr "Пошук краёў" - -#. Progress bar for rendering tiles -#: ../plug-ins/common/mosaic.c:557 -msgid "Rendering tiles" -msgstr "Стварэньне плітак" - -#: ../plug-ins/common/mosaic.c:590 -msgid "Mosaic" -msgstr "Мазаіка" - -#: ../plug-ins/common/mosaic.c:631 -msgid "Squares" -msgstr "Квадраты" - -#: ../plug-ins/common/mosaic.c:632 -msgid "Hexagons" -msgstr "Шасьцікутнікі" - -#: ../plug-ins/common/mosaic.c:633 -msgid "Octagons & squares" -msgstr "Васьмікутнікі й квадраты" - -#: ../plug-ins/common/mosaic.c:634 -msgid "Triangles" -msgstr "Трохкутнікі" - -#: ../plug-ins/common/mosaic.c:642 -msgid "_Tiling primitives:" -msgstr "Прымітывы п_літак:" - -#: ../plug-ins/common/mosaic.c:650 -msgid "Tile _size:" -msgstr "_Памер плітак:" - -#: ../plug-ins/common/mosaic.c:662 ../plug-ins/common/tile-glass.c:304 -msgid "Tile _height:" -msgstr "_Вышыня пліткі:" - -#: ../plug-ins/common/mosaic.c:675 -msgid "Til_e spacing:" -msgstr "П_рагалы між пліткамі:" - -#: ../plug-ins/common/mosaic.c:687 -msgid "Tile _neatness:" -msgstr "_Акуратнасьць плітак:" - -#: ../plug-ins/common/mosaic.c:700 -msgid "Light _direction:" -msgstr "Напрамак сьвятла:" - -#: ../plug-ins/common/mosaic.c:712 -msgid "Color _variation:" -msgstr "_Варыяцыя колераў:" - -#: ../plug-ins/common/mosaic.c:741 -msgid "Co_lor averaging" -msgstr "_Спасярэджаныя колеры" - -#: ../plug-ins/common/mosaic.c:754 -msgid "Allo_w tile splitting" -msgstr "_Дазволіць падзел плітак" - -#: ../plug-ins/common/mosaic.c:767 -msgid "_Pitted surfaces" -msgstr "Рабінкі _на паверхні" - -#: ../plug-ins/common/mosaic.c:780 -msgid "_FG/BG lighting" -msgstr "Асьвятл_еньне ПП/Асн." - -#: ../plug-ins/common/newsprint.c:118 -msgid "Round" -msgstr "Акружнасьць" - -#: ../plug-ins/common/newsprint.c:127 -msgid "Line" -msgstr "Лінія" - -#: ../plug-ins/common/newsprint.c:136 ../plug-ins/flame/flame.c:759 -msgid "Diamond" -msgstr "Ромб" - -#: ../plug-ins/common/newsprint.c:144 -msgid "PS Square (Euclidean Dot)" -msgstr "PS квадрат (Эўклідава кропка)" - -#: ../plug-ins/common/newsprint.c:153 -msgid "PS Diamond" -msgstr "PS ромб" - -#: ../plug-ins/common/newsprint.c:323 -msgid "_Grey" -msgstr "_Шэры" - -#: ../plug-ins/common/newsprint.c:336 -msgid "R_ed" -msgstr "_Чырвоны" - -#: ../plug-ins/common/newsprint.c:365 -msgid "C_yan" -msgstr "_Блакітны" - -#: ../plug-ins/common/newsprint.c:373 -msgid "Magen_ta" -msgstr "Пурпуровы" - -#: ../plug-ins/common/newsprint.c:381 -msgid "_Yellow" -msgstr "_Жоўты" - -#: ../plug-ins/common/newsprint.c:402 -msgid "Luminance" -msgstr "Яркасьць" - -#: ../plug-ins/common/newsprint.c:508 -msgid "Halftone the image to give newspaper-like effect" -msgstr "Зрабіць паўтонавы відарыс, каб атрымаць эфэкт падабенства да ґазэты " - -#: ../plug-ins/common/newsprint.c:517 -msgid "Newsprin_t..." -msgstr "_Ґазэтная папера…" - -#: ../plug-ins/common/newsprint.c:618 ../plug-ins/common/newsprint.c:1179 -msgid "Newsprint" -msgstr "Ґазэтная папера" - -#: ../plug-ins/common/newsprint.c:1022 -msgid "_Spot function:" -msgstr "_Функцыя плямаў:" - -#. resolution settings -#: ../plug-ins/common/newsprint.c:1232 -msgid "Resolution" -msgstr "Разрозьненьне" - -#: ../plug-ins/common/newsprint.c:1251 -msgid "_Input SPI:" -msgstr "_В/Ц спачатку:" - -#: ../plug-ins/common/newsprint.c:1265 -msgid "O_utput LPI:" -msgstr "_Р/Ц вынікова:" - -#: ../plug-ins/common/newsprint.c:1278 -msgid "C_ell size:" -msgstr "_Памер ячэі:" - -#. screen settings -#: ../plug-ins/common/newsprint.c:1291 -#: ../plug-ins/gradient-flare/gradient-flare.c:554 -msgid "Screen" -msgstr "Экран" - -#: ../plug-ins/common/newsprint.c:1310 -msgid "B_lack pullout (%):" -msgstr "Выхад _чорнага (%):" - -#: ../plug-ins/common/newsprint.c:1332 -msgid "Separate to:" -msgstr "Падзяліць на:" - -#: ../plug-ins/common/newsprint.c:1336 -msgid "_RGB" -msgstr "_RGB" - -#: ../plug-ins/common/newsprint.c:1353 -msgid "C_MYK" -msgstr "C_MYK" - -#: ../plug-ins/common/newsprint.c:1370 -msgid "I_ntensity" -msgstr "_Інтэнсіўнасьць" - -#: ../plug-ins/common/newsprint.c:1395 -msgid "_Lock channels" -msgstr "_Замкнуць каналы" - -#: ../plug-ins/common/newsprint.c:1408 -msgid "_Factory Defaults" -msgstr "_Вернуць прадвызначаныя" - -#. anti-alias control -#: ../plug-ins/common/newsprint.c:1434 ../plug-ins/gfig/gfig-dialog.c:1293 -msgid "Antialiasing" -msgstr "Згладжваньне" - -#: ../plug-ins/common/newsprint.c:1442 -msgid "O_versample:" -msgstr "_Перадыскрэтызацыя:" - -#: ../plug-ins/common/nl-filter.c:119 -msgid "Nonlinear swiss army knife filter" -msgstr "Нелінейны фільтар на ўсе выпадкі жыцьця" - -#: ../plug-ins/common/nl-filter.c:125 +#: plug-ins/common/nl-filter.c:158 msgid "_NL Filter..." -msgstr "Нелінейны _фільтар…" +msgstr "Нелінейны _фільтр…" -#: ../plug-ins/common/nl-filter.c:952 ../plug-ins/common/nl-filter.c:1016 -msgid "NL Filter" -msgstr "Нелінейны фільтар" +#: plug-ins/common/nl-filter.c:162 +msgid "Nonlinear swiss army knife filter" +msgstr "Нелінейны фільтр на ўсе выпадкі жыцця" -#: ../plug-ins/common/nl-filter.c:1046 +#: plug-ins/common/nl-filter.c:163 +msgid "" +"This is the pnmnlfilt, in PIKA's clothing. See the pnmnlfilt manpage for " +"details." +msgstr "" + +#: plug-ins/common/nl-filter.c:174 +msgid "_Alpha" +msgstr "_Альфа-канал" + +#: plug-ins/common/nl-filter.c:175 +#, fuzzy +#| msgid "The angle span of the first brush to create" +msgid "The amount of the filter to apply" +msgstr "Дыяпазон вуглоў першага створанага пэндзля" + +#: plug-ins/common/nl-filter.c:180 +msgid "Ra_dius" +msgstr "Ра_дыус" + +#: plug-ins/common/nl-filter.c:181 +#, fuzzy +#| msgid "Spatial _filter radius:" +msgid "The filter radius" +msgstr "_Радыус прасторавага фільтра:" + +#: plug-ins/common/nl-filter.c:186 msgid "Filter" -msgstr "Фільтар" +msgstr "Фільтр" -#: ../plug-ins/common/nl-filter.c:1050 -msgid "_Alpha trimmed mean" +#: plug-ins/common/nl-filter.c:187 +msgid "" +"The Filter to Run, 0 - alpha trimmed mean; 1 - optimal estimation (alpha " +"controls noise variance); 2 - edge enhancement" +msgstr "" + +#: plug-ins/common/nl-filter.c:1031 plug-ins/common/nl-filter.c:1129 +msgid "NL Filter" +msgstr "Нелінейны фільтр" + +#: plug-ins/common/nl-filter.c:1144 +#, fuzzy +#| msgid "_Alpha trimmed mean" +msgid "Alpha trimmed mean" msgstr "_Усечанае сярэдняе альфы" -#: ../plug-ins/common/nl-filter.c:1052 -msgid "Op_timal estimation" -msgstr "Аптымальны разьлік" - -#: ../plug-ins/common/nl-filter.c:1054 -msgid "_Edge enhancement" -msgstr "_Паляпшэньне краю" - -#: ../plug-ins/common/nl-filter.c:1079 -msgid "A_lpha:" -msgstr "_Альфа:" - -#: ../plug-ins/common/noise-hsv.c:103 -msgid "Randomize hue/saturation/value independently" -msgstr "Перамяшаць адценьне/насычанасьць/яркасьць паасобку" - -#: ../plug-ins/common/noise-hsv.c:108 -msgid "HSV Noise..." -msgstr "Шум HSV…" - -#: ../plug-ins/common/noise-hsv.c:215 ../plug-ins/common/noise-hsv.c:364 -msgid "HSV Noise" -msgstr "Шум HSV" - -#: ../plug-ins/common/noise-hsv.c:401 -msgid "_Holdness:" -msgstr "_Стрымліваньне:" - -#: ../plug-ins/common/noise-hsv.c:413 -msgid "H_ue:" -msgstr "_Адценьне:" - -#: ../plug-ins/common/noise-randomize.c:102 -msgid "Random Hurl" -msgstr "Адвольны кідок" - -#: ../plug-ins/common/noise-randomize.c:103 -msgid "Random Pick" -msgstr "Адвольны выбар" - -#: ../plug-ins/common/noise-randomize.c:104 -msgid "Random Slur" -msgstr "Адвольнае раставаньне" - -#: ../plug-ins/common/noise-randomize.c:202 -msgid "Completely randomize a fraction of pixels" -msgstr "Цалкам адвольная доля піксэляў" - -#: ../plug-ins/common/noise-randomize.c:204 -msgid "Randomly interchange some pixels with neighbors" -msgstr "Адвольны абмяняць некаторыя піксэлі зь іхнымі суседзямі" - -#: ../plug-ins/common/noise-randomize.c:206 -msgid "Randomly slide some pixels downward (similar to melting)" -msgstr "Адвольна саслізгнуць крыху піксэляў уніз (падобна на раставаньне)" - -#: ../plug-ins/common/noise-randomize.c:233 -msgid "_Hurl..." -msgstr "_Кідок…" - -#: ../plug-ins/common/noise-randomize.c:245 -msgid "_Pick..." -msgstr "_Выбар…" - -#: ../plug-ins/common/noise-randomize.c:257 -msgid "_Slur..." -msgstr "_Неахайны…" - -#: ../plug-ins/common/noise-randomize.c:769 -#: ../plug-ins/common/noise-solid.c:603 -msgid "_Random seed:" -msgstr "_Адвольны лік:" - -#: ../plug-ins/common/noise-randomize.c:778 -msgid "R_andomization (%):" -msgstr "Адвольнасьць (%):" - -#: ../plug-ins/common/noise-randomize.c:781 -msgid "Percentage of pixels to be filtered" -msgstr "Адсотак піксэляў, якія трэба адфільтраваць" - -#: ../plug-ins/common/noise-randomize.c:793 -msgid "R_epeat:" -msgstr "_Паўтараць:" - -#: ../plug-ins/common/noise-randomize.c:796 -msgid "Number of times to apply filter" -msgstr "Колькі разоў ужыць фільтар" - -#: ../plug-ins/common/noise-rgb.c:145 -msgid "Distort colors by random amounts" -msgstr "Адвольна сказіць колеры" - -#: ../plug-ins/common/noise-rgb.c:155 -msgid "_RGB Noise..." -msgstr "Шум _RGB…" - -#: ../plug-ins/common/noise-rgb.c:283 -msgid "Adding noise" -msgstr "Дабаўленьне шуму" - -#: ../plug-ins/common/noise-rgb.c:450 -msgid "RGB Noise" -msgstr "Шум RGB" - -#: ../plug-ins/common/noise-rgb.c:484 -msgid "Co_rrelated noise" -msgstr "_Карэляцыйны шум" - -#: ../plug-ins/common/noise-rgb.c:499 -msgid "_Independent RGB" -msgstr "_Незалежныя RGB" - -#: ../plug-ins/common/noise-rgb.c:523 ../plug-ins/common/noise-rgb.c:527 -msgid "_Gray:" -msgstr "_Шэры:" - -#: ../plug-ins/common/noise-rgb.c:553 -#, c-format -msgid "Channel #%d:" -msgstr "Канал #%d:" - -#: ../plug-ins/common/noise-solid.c:176 -msgid "Create a random cloud-like texture" -msgstr "Стварыць выпадковую тэкстуру, падобную на воблака" - -#: ../plug-ins/common/noise-solid.c:182 -msgid "_Solid Noise..." -msgstr "_Суцэльны шум…" - -#. Dialog initialization -#: ../plug-ins/common/noise-solid.c:315 ../plug-ins/common/noise-solid.c:563 -msgid "Solid Noise" -msgstr "Суцэльны шум" - -#: ../plug-ins/common/noise-solid.c:616 -msgid "_Detail:" -msgstr "_Падрабязнасьці:" - -#. Turbulent -#: ../plug-ins/common/noise-solid.c:626 -msgid "T_urbulent" -msgstr "_Узбураны" - -#. Tilable -#: ../plug-ins/common/noise-solid.c:640 -msgid "T_ilable" -msgstr "_Прыдатны для замошчваньня" - -#: ../plug-ins/common/noise-solid.c:655 -msgid "_X size:" -msgstr "Памер па _X:" - -#: ../plug-ins/common/noise-solid.c:668 -msgid "_Y size:" -msgstr "Памер па _Y:" - -#: ../plug-ins/common/noise-spread.c:87 -msgid "Move pixels around randomly" -msgstr "Адвольна ва ўсе бакі пасунуць піксэлі" - -#: ../plug-ins/common/noise-spread.c:96 -msgid "Sp_read..." -msgstr "_Раскідаць…" - -#: ../plug-ins/common/noise-spread.c:179 -msgid "Spreading" -msgstr "Раскідваньне" - -#: ../plug-ins/common/noise-spread.c:344 -msgid "Spread" -msgstr "Раскідваньне" - -#: ../plug-ins/common/noise-spread.c:370 -msgid "Spread Amount" -msgstr "Узровень раскіданьня" - -#: ../plug-ins/common/nova.c:163 -msgid "Add a starburst to the image" -msgstr "Дадаць выбух зоркі да відарыса" - -#: ../plug-ins/common/nova.c:172 -msgid "Super_nova..." -msgstr "_Звышновая…" - -#: ../plug-ins/common/nova.c:256 -msgid "Rendering supernova" -msgstr "Стварэньне звышновай" - -#: ../plug-ins/common/nova.c:299 -msgid "Supernova" -msgstr "Звышновая" - -#: ../plug-ins/common/nova.c:345 -msgid "Supernova Color Picker" -msgstr "Выбар колеру звышновай" - -#: ../plug-ins/common/nova.c:374 -msgid "_Spokes:" -msgstr "_Промняў:" - -#: ../plug-ins/common/nova.c:389 -msgid "R_andom hue:" -msgstr "Выпадковае _адценьне:" - -#: ../plug-ins/common/nova.c:437 -msgid "Center of Nova" -msgstr "Цэнтар Новай" - -#: ../plug-ins/common/oilify.c:119 ../plug-ins/common/oilify.c:134 -msgid "Smear colors to simulate an oil painting" -msgstr "Размазаць колеры, каб удаць маляваньне алеем" - -#: ../plug-ins/common/oilify.c:125 -msgid "Oili_fy..." -msgstr "_Малюнак алеем…" - -#: ../plug-ins/common/oilify.c:247 -msgid "Oil painting" -msgstr "Маляваньне алеем" - -#: ../plug-ins/common/oilify.c:778 -msgid "Oilify" -msgstr "Малюнак алеем" - -#: ../plug-ins/common/oilify.c:817 -msgid "_Mask size:" -msgstr "Памер _маскі:" - -#. -#. * Mask-size map check button -#. -#: ../plug-ins/common/oilify.c:832 -msgid "Use m_ask-size map:" -msgstr "Ужываць мапу _памераў маскі:" - -#: ../plug-ins/common/oilify.c:870 ../plug-ins/common/sinus.c:923 -msgid "_Exponent:" -msgstr "_Паказьнік ступені:" - -#. -#. * Exponent map check button -#. -#: ../plug-ins/common/oilify.c:885 -msgid "Use e_xponent map:" -msgstr "Ужываць мапу _ступеняў:" - -#. -#. * Intensity algorithm check button -#. -#: ../plug-ins/common/oilify.c:922 -msgid "_Use intensity algorithm" -msgstr "_Ужываць альґарытм яркасьці" - -#: ../plug-ins/common/photocopy.c:153 -msgid "Simulate color distortion produced by a copy machine" -msgstr "Удаць скажэньне колераў, створанае капіявальнай машынай" - -#: ../plug-ins/common/photocopy.c:158 -msgid "_Photocopy..." -msgstr "_Фатакопія…" - -#: ../plug-ins/common/photocopy.c:840 -msgid "Photocopy" -msgstr "Фатакопія" - -#: ../plug-ins/common/photocopy.c:892 ../plug-ins/common/sharpen.c:509 -#: ../plug-ins/common/softglow.c:699 -msgid "_Sharpness:" -msgstr "_Рэзкасьць:" - -#: ../plug-ins/common/photocopy.c:906 -msgid "Percent _black:" -msgstr "Адсотак _чорнага:" - -#: ../plug-ins/common/photocopy.c:920 -msgid "Percent _white:" -msgstr "Адсотак _белага:" - -#: ../plug-ins/common/pixelize.c:164 -msgid "Simplify image into an array of solid-colored squares" -msgstr "Спросьціць відарыс да масыву суцэльна пафарбаваных квадратаў" - -#: ../plug-ins/common/pixelize.c:171 -msgid "_Pixelize..." -msgstr "_Піксэлізаваць…" - -#: ../plug-ins/common/pixelize.c:273 -msgid "Pixelizing" -msgstr "Піксэлізаваньне" - -#: ../plug-ins/common/pixelize.c:316 -msgid "Pixelize" -msgstr "Піксэлізаваць" - -#: ../plug-ins/common/pixelize.c:353 -msgid "Pixel _width:" -msgstr "_Шырыня піксэля:" - -#: ../plug-ins/common/pixelize.c:358 -msgid "Pixel _height:" -msgstr "_Вышыня піксэля:" - -#: ../plug-ins/common/plasma.c:176 -msgid "Create a random plasma texture" -msgstr "Стварыць адвольную тэкстуру плязмы" - -#: ../plug-ins/common/plasma.c:181 -msgid "_Plasma..." -msgstr "_Плязма…" - -#: ../plug-ins/common/plasma.c:263 ../plug-ins/common/plasma.c:300 -msgid "Plasma" -msgstr "Плязма" - -#: ../plug-ins/common/plasma.c:338 -msgid "Random _seed:" -msgstr "Адвольны _лік:" - -#: ../plug-ins/common/plasma.c:349 -msgid "T_urbulence:" -msgstr "_Узбуранасьць:" - -#: ../plug-ins/common/plugin-browser.c:134 -msgid "Display information about plug-ins" -msgstr "Паказаць зьвесткі пра дадаткі" - -#: ../plug-ins/common/plugin-browser.c:144 +#: plug-ins/common/nl-filter.c:1145 +#, fuzzy +#| msgid "Op_timal estimation" +msgid "Optimal estimation" +msgstr "Аптымальны разлік" + +#: plug-ins/common/nl-filter.c:1146 +#, fuzzy +#| msgid "_Edge enhancement" +msgid "Edge enhancement" +msgstr "_Паляпшэнне краю" + +#: plug-ins/common/plugin-browser.c:169 msgid "_Plug-In Browser" msgstr "_Аглядальнік дадаткаў" -#: ../plug-ins/common/plugin-browser.c:363 +#: plug-ins/common/plugin-browser.c:174 +msgid "Display information about plug-ins" +msgstr "Паказаць звесткі пра дадаткі" + +#: plug-ins/common/plugin-browser.c:175 +msgid "" +"Allows one to browse the plug-in menus system. You can search for plug-in " +"names, sort by name or menu location and you can view a tree representation " +"of the plug-in menus. Can also be of help to find where new plug-ins have " +"installed themselves in the menus." +msgstr "" + +#: plug-ins/common/plugin-browser.c:372 msgid "Searching by name" msgstr "Пошук паводле назвы" -#: ../plug-ins/common/plugin-browser.c:377 +#: plug-ins/common/plugin-browser.c:387 #, c-format msgid "%d plug-in" msgid_plural "%d plug-ins" -msgstr[0] "%d дадатак" -msgstr[1] "%d дадаткі" -msgstr[2] "%d дадаткаў" +msgstr[0] "%d плагін" +msgstr[1] "%d плагіны" +msgstr[2] "%d плагінаў" -#: ../plug-ins/common/plugin-browser.c:386 +#: plug-ins/common/plugin-browser.c:396 msgid "No matches for your query" msgstr "Няма адпаведнікаў запытанаму" -#: ../plug-ins/common/plugin-browser.c:389 +#: plug-ins/common/plugin-browser.c:399 #, c-format msgid "%d plug-in matches your query" msgid_plural "%d plug-ins match your query" @@ -6610,1196 +6943,707 @@ msgstr[0] "%d дадатак адпавядае запыту" msgstr[1] "%d дадаткі адпавядаюць запыту" msgstr[2] "%d дадаткаў адпавядаюць запыту" -#: ../plug-ins/common/plugin-browser.c:520 +#: plug-ins/common/plugin-browser.c:530 msgid "No matches" msgstr "Няма адпаведнікаў" -#: ../plug-ins/common/plugin-browser.c:546 -msgid "Plug-In Browser" -msgstr "Аглядальнік дадаткаў" +#: plug-ins/common/plugin-browser.c:556 +msgid "Plug-in Browser" +msgstr "Агляд убудоў" -#: ../plug-ins/common/plugin-browser.c:589 +#: plug-ins/common/plugin-browser.c:601 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 msgid "Name" msgstr "Назва" -#: ../plug-ins/common/plugin-browser.c:597 -#: ../plug-ins/common/plugin-browser.c:660 +#: plug-ins/common/plugin-browser.c:609 plug-ins/common/plugin-browser.c:672 msgid "Menu Path" -msgstr "Шлях мэню" +msgstr "Шлях меню" -#: ../plug-ins/common/plugin-browser.c:605 -#: ../plug-ins/common/plugin-browser.c:669 +#: plug-ins/common/plugin-browser.c:617 plug-ins/common/plugin-browser.c:681 msgid "Image Types" msgstr "Тыпы відарысаў" -#: ../plug-ins/common/plugin-browser.c:615 -#: ../plug-ins/common/plugin-browser.c:678 +#: plug-ins/common/plugin-browser.c:627 plug-ins/common/plugin-browser.c:690 msgid "Installation Date" -msgstr "Даты ўсталяваньня" +msgstr "Даты ўсталявання" -#: ../plug-ins/common/plugin-browser.c:639 +#: plug-ins/common/plugin-browser.c:651 msgid "List View" -msgstr "Сьпіс" +msgstr "Спіс" -#: ../plug-ins/common/plugin-browser.c:701 +#: plug-ins/common/plugin-browser.c:713 msgid "Tree View" msgstr "Дрэва" -#: ../plug-ins/common/polar-coords.c:156 -msgid "Convert image to or from polar coordinates" -msgstr "Ператварыць у палярныя каардынаты (або з п.к.)." - -#: ../plug-ins/common/polar-coords.c:163 -msgid "P_olar Coordinates..." -msgstr "_Палярныя каардынаты…" - -#: ../plug-ins/common/polar-coords.c:361 -msgid "Polar coordinates" -msgstr "Палярныя каардынаты" - -#: ../plug-ins/common/polar-coords.c:591 -msgid "Polar Coordinates" -msgstr "Палярныя каардынаты" - -#: ../plug-ins/common/polar-coords.c:631 -msgid "Circle _depth in percent:" -msgstr "_Глыбіня акружнасьці (%):" - -#: ../plug-ins/common/polar-coords.c:643 -msgid "Offset _angle:" -msgstr "_Вугал зруху:" - -#: ../plug-ins/common/polar-coords.c:659 -msgid "_Map backwards" -msgstr "_Задам наперад" - -#: ../plug-ins/common/polar-coords.c:665 -msgid "" -"If checked the mapping will begin at the right side, as opposed to beginning " -"at the left." -msgstr "" -"Калі задзейнічана, праектаваньне пачнецца з правага боку, калі не, то зь " -"левага" - -#: ../plug-ins/common/polar-coords.c:676 -msgid "Map from _top" -msgstr "_Пачаць зьверху" - -#: ../plug-ins/common/polar-coords.c:682 -msgid "" -"If unchecked the mapping will put the bottom row in the middle and the top " -"row on the outside. If checked it will be the opposite." -msgstr "" -"Калі не задзейнічана, праектаваньне перанясе ніжні радок у сярэдзіну, а " -"верхні вонкі. Калі задзейнічана, то наадварот." - -#: ../plug-ins/common/polar-coords.c:694 -msgid "To _polar" -msgstr "У _палярныя" - -#: ../plug-ins/common/polar-coords.c:700 -msgid "" -"If unchecked the image will be circularly mapped onto a rectangle. If " -"checked the image will be mapped onto a circle." -msgstr "" -"Калі не задзейнічана, відарыс будзе кругла спраектаваны на прастакутнік. " -"Калі задзейнічана, то на кола." - -#: ../plug-ins/common/procedure-browser.c:83 -msgid "List available procedures in the PDB" -msgstr "Адлюстроўвае ўсе наяўныя працэдуры ў PDB" - -#: ../plug-ins/common/procedure-browser.c:88 +#: plug-ins/common/procedure-browser.c:126 msgid "Procedure _Browser" msgstr "Аглядальнік _працэдур" -#: ../plug-ins/common/procedure-browser.c:126 +#: plug-ins/common/procedure-browser.c:130 +msgid "List available procedures in the PDB" +msgstr "Адлюстроўвае ўсе наяўныя працэдуры ў PDB" + +#: plug-ins/common/procedure-browser.c:165 msgid "Procedure Browser" msgstr "Аглядальнік працэдур" -#: ../plug-ins/common/qbist.c:408 -msgid "Generate a huge variety of abstract patterns" -msgstr "Стварыць вялізную колькасьць абстрактных узораў" - -#: ../plug-ins/common/qbist.c:416 +#: plug-ins/common/qbist.c:185 msgid "_Qbist..." msgstr "_Q-біст…" -#: ../plug-ins/common/qbist.c:515 +#: plug-ins/common/qbist.c:190 +msgid "Generate a huge variety of abstract patterns" +msgstr "Стварыць вялізную колькасць абстрактных узораў" + +#: plug-ins/common/qbist.c:217 +msgid "Any file which will be used as source for pattern generation" +msgstr "" + +#: plug-ins/common/qbist.c:369 msgid "Qbist" msgstr "Q-біст" -#: ../plug-ins/common/qbist.c:712 +#: plug-ins/common/qbist.c:844 msgid "Load QBE File" msgstr "Загрузіць файл QBE" -#: ../plug-ins/common/qbist.c:754 +#: plug-ins/common/qbist.c:886 msgid "Save as QBE File" msgstr "Захаваць як файл QBE" -#: ../plug-ins/common/qbist.c:808 +#: plug-ins/common/qbist.c:940 msgid "G-Qbist" msgstr "GQ-біст" -#: ../plug-ins/common/red-eye-removal.c:105 -msgid "Remove the red eye effect caused by camera flashes" -msgstr "Прыбірае эфэкт чырвоных вачэй з-за ўспышкі фотаапарата" +#: plug-ins/common/qbist.c:1024 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:683 +msgid "_Undo" +msgstr "_Адмяніць" -#: ../plug-ins/common/red-eye-removal.c:116 -msgid "_Red Eye Removal..." -msgstr "_Выдаліць чырвоныя вочы…" - -#: ../plug-ins/common/red-eye-removal.c:142 -msgid "Red Eye Removal" -msgstr "Выдаленьне чырвоных вачэй" - -#: ../plug-ins/common/red-eye-removal.c:171 -#: ../plug-ins/common/unsharp-mask.c:891 ../plug-ins/common/wind.c:1006 -#: ../plug-ins/imagemap/imap_preferences.c:455 -#: ../plug-ins/map-object/map-object-ui.c:539 -msgid "_Threshold:" -msgstr "_Парог:" - -#: ../plug-ins/common/red-eye-removal.c:177 -msgid "Threshold for the red eye color to remove." -msgstr "Парог для выдаленьня чырвоных вачэй." - -#: ../plug-ins/common/red-eye-removal.c:182 -msgid "Manually selecting the eyes may improve the results." -msgstr "Ручны выбар вачэй можа палепшыць вынік." - -#: ../plug-ins/common/red-eye-removal.c:302 -msgid "Removing red eye" -msgstr "Выдаленьне чырвоных вачэй" - -#: ../plug-ins/common/ripple.c:126 -msgid "Displace pixels in a ripple pattern" -msgstr "Зрушыць піксэлі, каб атрымаць эфэкт рабізны" - -#: ../plug-ins/common/ripple.c:133 -msgid "_Ripple..." -msgstr "_Рабізна…" - -#: ../plug-ins/common/ripple.c:223 -msgid "Rippling" -msgstr "Пакрываньне рабізной" - -#: ../plug-ins/common/ripple.c:485 -msgid "Ripple" -msgstr "Рабізна" - -#: ../plug-ins/common/ripple.c:544 -msgid "_Retain tilability" -msgstr "_Ёсьць пліткай мазайкі" - -#. Edges toggle box -#: ../plug-ins/common/ripple.c:581 -msgid "Edges" -msgstr "Краі" - -#: ../plug-ins/common/ripple.c:587 -msgid "_Blank" -msgstr "_Чысты" - -#. Wave toggle box -#: ../plug-ins/common/ripple.c:610 -msgid "Wave Type" -msgstr "Тып хвалі" - -#: ../plug-ins/common/ripple.c:614 -msgid "Saw_tooth" -msgstr "_Зуб пілы" - -#: ../plug-ins/common/ripple.c:615 -msgid "S_ine" -msgstr "_Сінусная" - -#: ../plug-ins/common/ripple.c:638 -msgid "_Period:" -msgstr "_Пэрыяд:" - -#: ../plug-ins/common/ripple.c:651 -msgid "A_mplitude:" -msgstr "_Амплітуда:" - -#: ../plug-ins/common/ripple.c:664 -msgid "Phase _shift:" -msgstr "Зрух _фазы:" - -#: ../plug-ins/common/rotate.c:408 -msgid "You can not rotate the whole image if there's a selection." -msgstr "Немагчыма павернуць увесь відарыс, які мае вылучаную вобласьць." - -#: ../plug-ins/common/rotate.c:415 -msgid "You can not rotate the whole image if there's a floating selection." -msgstr "Немагчыма павернуць увесь відарыс, які мае плаваючае вылучэньне." - -#: ../plug-ins/common/rotate.c:426 -msgid "Sorry, channels and masks can not be rotated." -msgstr "Нажаль каналы й маскі нельга паварочваць." - -#: ../plug-ins/common/rotate.c:432 -msgid "Rotating" -msgstr "Паварочваньне" - -#: ../plug-ins/common/sample-colorize.c:298 -msgid "Colorize image using a sample image as a guide" -msgstr "Расфарбаваць адзін відарыс, выкарыстоўваючы іншы як прыклад" - -#: ../plug-ins/common/sample-colorize.c:303 +#: plug-ins/common/sample-colorize.c:330 msgid "_Sample Colorize..." msgstr "_Расфарбаваць паводле прыкладу…" -#: ../plug-ins/common/sample-colorize.c:1325 +#: plug-ins/common/sample-colorize.c:334 +msgid "Colorize image using a sample image as a guide" +msgstr "Расфарбаваць адзін відарыс, выкарыстоўваючы іншы як прыклад" + +#: plug-ins/common/sample-colorize.c:1409 msgid "Sample Colorize" msgstr "Расфарбаваць паводле прыкладу" -#: ../plug-ins/common/sample-colorize.c:1330 +#: plug-ins/common/sample-colorize.c:1414 msgid "Get _Sample Colors" msgstr "Атрымаць _колеры-прыклады" +#: plug-ins/common/sample-colorize.c:1416 plug-ins/common/tile-small.c:635 +#: plug-ins/fractal-explorer/fractal-explorer.c:1225 +#: plug-ins/pikaressionist/orientmap.c:527 +#: plug-ins/pikaressionist/presets.c:1060 plug-ins/pikaressionist/sizemap.c:400 +#: plug-ins/imagemap/imap_default_dialog.c:103 +msgid "_Apply" +msgstr "_Ужыць" + #. layer combo_box (Dst) -#: ../plug-ins/common/sample-colorize.c:1359 +#: plug-ins/common/sample-colorize.c:1443 msgid "Destination:" -msgstr "Прызначэньне:" +msgstr "Прызначэнне:" #. layer combo_box (Sample) -#: ../plug-ins/common/sample-colorize.c:1375 +#: plug-ins/common/sample-colorize.c:1458 msgid "Sample:" msgstr "Прыклад:" -#: ../plug-ins/common/sample-colorize.c:1385 +#: plug-ins/common/sample-colorize.c:1467 msgid "From reverse gradient" -msgstr "Ґрадыент у зваротным парадку" +msgstr "Градыент у зваротным парадку" -#: ../plug-ins/common/sample-colorize.c:1390 +#: plug-ins/common/sample-colorize.c:1472 msgid "From gradient" -msgstr "З ґрадыенту" +msgstr "З градыенту" #. check button -#: ../plug-ins/common/sample-colorize.c:1411 -#: ../plug-ins/common/sample-colorize.c:1438 -msgid "Show selection" -msgstr "Паказваць вылучэньне" +#: plug-ins/common/sample-colorize.c:1491 +msgid "Sho_w selection" +msgstr "Паказаць _вылучэнне" #. check button -#: ../plug-ins/common/sample-colorize.c:1422 -#: ../plug-ins/common/sample-colorize.c:1449 -msgid "Show color" -msgstr "Паказваць колер" +#: plug-ins/common/sample-colorize.c:1502 +msgid "Show co_lor" +msgstr "Паказаць _колер" -#: ../plug-ins/common/sample-colorize.c:1563 +#. check button +#: plug-ins/common/sample-colorize.c:1517 +msgid "Show selec_tion" +msgstr "Паказаць _вы_лучэнне" + +#. check button +#: plug-ins/common/sample-colorize.c:1528 +msgid "Show c_olor" +msgstr "Паказаць к_олер" + +#: plug-ins/common/sample-colorize.c:1655 msgid "Input levels:" msgstr "Пачатковыя ўзроўні:" -#: ../plug-ins/common/sample-colorize.c:1614 +#: plug-ins/common/sample-colorize.c:1705 msgid "Output levels:" msgstr "Выніковыя ўзроўні:" #. check button -#: ../plug-ins/common/sample-colorize.c:1654 -msgid "Hold intensity" -msgstr "Захоўваць яркасьць" +#: plug-ins/common/sample-colorize.c:1744 +#, fuzzy +#| msgid "Hold intensity" +msgid "Hold _intensity" +msgstr "Захоўваць яркасць" #. check button -#: ../plug-ins/common/sample-colorize.c:1665 -msgid "Original intensity" -msgstr "Спачатная яркасьць" +#: plug-ins/common/sample-colorize.c:1755 +#, fuzzy +#| msgid "Original intensity" +msgid "Original i_ntensity" +msgstr "Першапачатковая яркасць" #. check button -#: ../plug-ins/common/sample-colorize.c:1683 -msgid "Use subcolors" -msgstr "Ужываць падколеры" +#: plug-ins/common/sample-colorize.c:1772 +#, fuzzy +msgid "Us_e subcolors" +msgstr "Выкарыстоўваць падколеры" #. check button -#: ../plug-ins/common/sample-colorize.c:1694 -msgid "Smooth samples" -msgstr "Плаўназьменныя прыклады" +#: plug-ins/common/sample-colorize.c:1783 +#, fuzzy +#| msgid "Smooth samples" +msgid "S_mooth samples" +msgstr "Плаўназменныя прыклады" -#: ../plug-ins/common/sample-colorize.c:2666 +#: plug-ins/common/sample-colorize.c:2661 msgid "Sample analyze" msgstr "Аналізаваць прыклады" -#: ../plug-ins/common/sample-colorize.c:3046 +#: plug-ins/common/sample-colorize.c:3061 msgid "Remap colorized" -msgstr "Расфарбоўваньне" +msgstr "Расфарбоўванне" -#: ../plug-ins/common/screenshot.c:240 -msgid "Create an image from an area of the screen" -msgstr "Стварыць відарыс з вобласьці экрана" - -#: ../plug-ins/common/screenshot.c:253 -msgid "_Screenshot..." -msgstr "_Здымак экрана…" - -#: ../plug-ins/common/screenshot.c:418 -msgid "Error selecting the window" -msgstr "Памылка падчас выбару вакна" - -#: ../plug-ins/common/screenshot.c:786 -msgid "Importing screenshot" -msgstr "Імпартаваньне здымку экрана" - -#: ../plug-ins/common/screenshot.c:812 ../plug-ins/common/screenshot.c:1085 -msgid "Screenshot" -msgstr "Здымак экрана" - -#: ../plug-ins/common/screenshot.c:853 -msgid "Mouse Pointer" -msgstr "Курсор мышы" - -#: ../plug-ins/common/screenshot.c:972 -msgid "Specified window not found" -msgstr "Пазначанае вакно не адшукана" - -#: ../plug-ins/common/screenshot.c:1094 -msgid "S_nap" -msgstr "_Зьняць" - -#: ../plug-ins/common/screenshot.c:1124 -msgid "After the delay, the screenshot is taken." -msgstr "Здымак будзе зроблены пасьля затрымкі." - -#: ../plug-ins/common/screenshot.c:1126 -msgid "" -"After the delay, drag your mouse to select the region for the screenshot." -msgstr "Пасьля затрымкі пацягні мыш, каб выбраць вобласьць для здымка." - -#: ../plug-ins/common/screenshot.c:1129 -msgid "At the end of the delay, click in a window to snap it." -msgstr "У канцы затрымкі пстрыкні па вакне, каб зьняць яго." - -#. Area -#: ../plug-ins/common/screenshot.c:1135 -msgid "Area" -msgstr "Вобласьць" - -#: ../plug-ins/common/screenshot.c:1146 -msgid "Take a screenshot of a single _window" -msgstr "Зрабіць здымак аднаго _вакна" - -#: ../plug-ins/common/screenshot.c:1165 -msgid "Include window _decoration" -msgstr "_Улучна з аздабленьнем вакна" - -#: ../plug-ins/common/screenshot.c:1185 -msgid "Take a screenshot of the entire _screen" -msgstr "Зрабіць здымак усяго _экрана" - -#: ../plug-ins/common/screenshot.c:1204 -msgid "Include _mouse pointer" -msgstr "Улучна з _курсорам мышы" - -#: ../plug-ins/common/screenshot.c:1225 -msgid "Select a _region to grab" -msgstr "_Выбраць вобласьць для захопу" - -#. Delay -#: ../plug-ins/common/screenshot.c:1240 -msgid "Delay" -msgstr "Затрымка" - -#. this is the unit label of a spinbutton -#: ../plug-ins/common/screenshot.c:1262 -msgid "seconds" -msgstr "сэкунды" - -#: ../plug-ins/common/semi-flatten.c:67 -msgid "Replace partial transparency with the current background color" -msgstr "Замяніць частковую празрыстасьць на бягучы колер асноведзі" - -#: ../plug-ins/common/semi-flatten.c:74 -msgid "_Semi-Flatten" -msgstr "_Псэўда-сплюшчыць" - -#: ../plug-ins/common/semi-flatten.c:112 -msgid "Semi-Flattening" -msgstr "Псэўда-сплюшчваньне" - -#: ../plug-ins/common/sharpen.c:111 -msgid "Make image sharper (less powerful than Unsharp Mask)" -msgstr "Зрабіць відарыс больш рэзкім (не такі моцны, як «Нярэзкая маска»)" - -#: ../plug-ins/common/sharpen.c:118 -msgid "_Sharpen..." -msgstr "_Рэзкасьць…" - -#. -#. * Let the user know what we're doing... -#. -#: ../plug-ins/common/sharpen.c:303 -msgid "Sharpening" -msgstr "Павелічэньне рэзкасьці" - -#: ../plug-ins/common/sharpen.c:473 -msgid "Sharpen" -msgstr "Рэзкасьць" - -#: ../plug-ins/common/shift.c:101 -msgid "Shift each row of pixels by a random amount" -msgstr "Адвольна зрушыць кожны радок піксэляў" - -#: ../plug-ins/common/shift.c:108 -msgid "_Shift..." -msgstr "_Зрушэньне…" - -#: ../plug-ins/common/shift.c:189 -msgid "Shifting" -msgstr "Зрушэньне" - -#: ../plug-ins/common/shift.c:356 -msgid "Shift" -msgstr "Зрушэньне" - -#: ../plug-ins/common/shift.c:390 -msgid "Shift _horizontally" -msgstr "Зрушыць па _гарызанталі" - -#: ../plug-ins/common/shift.c:393 -msgid "Shift _vertically" -msgstr "Зрушыць па _вэртыкалі" - -#: ../plug-ins/common/shift.c:424 -msgid "Shift _amount:" -msgstr "На колькі зрушыць:" - -#: ../plug-ins/common/sinus.c:186 -msgid "Generate complex sinusoidal textures" -msgstr "Зґенэраваць складаныя сінусныя тэкстуры" - -#: ../plug-ins/common/sinus.c:191 -msgid "_Sinus..." -msgstr "_Сінус…" - -#: ../plug-ins/common/sinus.c:284 -msgid "Sinus: rendering" -msgstr "Сінус: пабудова" - -#. Create Main window with a vbox -#. ============================== -#: ../plug-ins/common/sinus.c:649 -msgid "Sinus" -msgstr "Сінус" - -#: ../plug-ins/common/sinus.c:691 -msgid "Drawing Settings" -msgstr "Настройкі рысаваньня" - -#: ../plug-ins/common/sinus.c:701 -msgid "_X scale:" -msgstr "Памер па _X:" - -#: ../plug-ins/common/sinus.c:710 -msgid "_Y scale:" -msgstr "Памер па _Y:" - -#: ../plug-ins/common/sinus.c:719 -msgid "Co_mplexity:" -msgstr "С_кладанасьць:" - -#: ../plug-ins/common/sinus.c:729 -msgid "Calculation Settings" -msgstr "Настройкі разьліку" - -#: ../plug-ins/common/sinus.c:742 -msgid "R_andom seed:" -msgstr "_Адвольны лік" - -#: ../plug-ins/common/sinus.c:751 -msgid "_Force tiling?" -msgstr "_Мазаіка?" - -#: ../plug-ins/common/sinus.c:764 -msgid "_Ideal" -msgstr "_Ідэальны" - -#: ../plug-ins/common/sinus.c:765 -msgid "_Distorted" -msgstr "_Скажоны" - -#: ../plug-ins/common/sinus.c:783 ../plug-ins/common/sinus.c:799 -#: ../plug-ins/imagemap/imap_preferences.c:432 -msgid "Colors" -msgstr "Колеры " - -#. if in grey scale, the colors are necessarily black and white -#: ../plug-ins/common/sinus.c:792 -msgid "The colors are white and black." -msgstr "Колеры — чорны й белы" - -#: ../plug-ins/common/sinus.c:803 -msgid "Bl_ack & white" -msgstr "_Чорны й белы" - -#: ../plug-ins/common/sinus.c:805 -msgid "_Foreground & background" -msgstr "_Колеры рысаваньня й асноведзі" - -#: ../plug-ins/common/sinus.c:807 -msgid "C_hoose here:" -msgstr "_Выберы тут:" - -#: ../plug-ins/common/sinus.c:820 -msgid "First color" -msgstr "Першы колер" - -#: ../plug-ins/common/sinus.c:830 -msgid "Second color" -msgstr "Другі колер" - -#: ../plug-ins/common/sinus.c:843 -msgid "Alpha Channels" -msgstr "Альфаканалы" - -#: ../plug-ins/common/sinus.c:856 -msgid "F_irst color:" -msgstr "_Першы колер:" - -#: ../plug-ins/common/sinus.c:871 -msgid "S_econd color:" -msgstr "_Другі колер:" - -#: ../plug-ins/common/sinus.c:887 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:906 -msgid "Co_lors" -msgstr "_Колеры" - -#: ../plug-ins/common/sinus.c:896 -msgid "Blend Settings" -msgstr "Настройкі ґрадыенту" - -#: ../plug-ins/common/sinus.c:909 -msgid "L_inear" -msgstr "_Лінейны" - -#: ../plug-ins/common/sinus.c:910 -msgid "Bili_near" -msgstr "_Білінейны" - -#: ../plug-ins/common/sinus.c:911 -msgid "Sin_usoidal" -msgstr "_Сінусны" - -#: ../plug-ins/common/sinus.c:933 -msgid "_Blend" -msgstr "_Ґрадыент" - -#: ../plug-ins/common/sinus.c:1050 -msgid "Do _preview" -msgstr "_Агляд" - -#: ../plug-ins/common/smooth-palette.c:83 -msgid "Derive a smooth color palette from the image" -msgstr "Здабыць плаўназьменную палітру зь відарыса" - -#: ../plug-ins/common/smooth-palette.c:88 +#: plug-ins/common/smooth-palette.c:134 msgid "Smoo_th Palette..." msgstr "_Згладзіць палітру…" -#: ../plug-ins/common/smooth-palette.c:179 +#: plug-ins/common/smooth-palette.c:138 +msgid "Derive a smooth color palette from the image" +msgstr "Здабыць плаўназменную палітру з відарыса" + +#: plug-ins/common/smooth-palette.c:247 msgid "Deriving smooth palette" -msgstr "Стварэньне плаўназьменнай палітры" +msgstr "Стварэнне плаўназменнай палітры" -#: ../plug-ins/common/smooth-palette.c:413 +#: plug-ins/common/smooth-palette.c:507 msgid "Smooth Palette" -msgstr "Плаўназьменная палітра" +msgstr "Плаўназменная палітра" -#: ../plug-ins/common/smooth-palette.c:454 +#: plug-ins/common/smooth-palette.c:531 plug-ins/common/tile.c:519 +#: plug-ins/imagemap/imap_cmd_guides.c:163 +#: plug-ins/imagemap/imap_rectangle.c:398 +#: plug-ins/print/print-page-layout.c:286 +msgid "_Width:" +msgstr "_Шырыня:" + +#: plug-ins/common/smooth-palette.c:550 msgid "_Search depth:" msgstr "_Глыбіня пошуку:" -#: ../plug-ins/common/softglow.c:134 -msgid "Simulate glow by making highlights intense and fuzzy" -msgstr "Удаць зарава, зрабіўшы падсвечаныя месцы яркімі й зьмякчанымі" - -#: ../plug-ins/common/softglow.c:139 -msgid "_Softglow..." -msgstr "_Мяккае зарава…" - -#: ../plug-ins/common/softglow.c:633 -msgid "Softglow" -msgstr "Мяккае зарава" - -#: ../plug-ins/common/softglow.c:671 -msgid "_Glow radius:" -msgstr "_Радыюс зарава:" - -#: ../plug-ins/common/sparkle.c:178 -msgid "Turn bright spots into starry sparkles" -msgstr "Зрабіць яркія плямы зорнымі бліскаўкамі" - -#: ../plug-ins/common/sparkle.c:186 +#: plug-ins/common/sparkle.c:177 msgid "_Sparkle..." msgstr "_Бліскаўкі…" -#: ../plug-ins/common/sparkle.c:223 -msgid "Region selected for filter is empty" -msgstr "Вобласьць, вылучаная для фільтра, пустая." +#: plug-ins/common/sparkle.c:182 +msgid "Turn bright spots into starry sparkles" +msgstr "Зрабіць яркія плямы зорнымі бліскаўкамі" -#: ../plug-ins/common/sparkle.c:299 -msgid "Sparkling" -msgstr "Стварэньне бліскавак" +#: plug-ins/common/sparkle.c:184 +msgid "" +"Uses a percentage based luminosity threshold to find candidate pixels for " +"adding some sparkles (spikes)." +msgstr "" -#: ../plug-ins/common/sparkle.c:337 -msgid "Sparkle" -msgstr "Бліскаўкі" +#: plug-ins/common/sparkle.c:196 +#, fuzzy +#| msgid "Luminosity _threshold:" +msgid "Lu_minosity threshold" +msgstr "Парог _яркасці:" -#: ../plug-ins/common/sparkle.c:374 -msgid "Luminosity _threshold:" -msgstr "Парог _яркасьці:" - -#: ../plug-ins/common/sparkle.c:377 +#: plug-ins/common/sparkle.c:197 msgid "Adjust the luminosity threshold" -msgstr "Выпраўленьне парог яркасьці" +msgstr "Выпраўленне парог яркасці" -#: ../plug-ins/common/sparkle.c:387 -msgid "F_lare intensity:" -msgstr "_Яркасьць полымя:" +#: plug-ins/common/sparkle.c:202 +#, fuzzy +#| msgid "F_lare intensity:" +msgid "_Flare intensity" +msgstr "_Яркасць полымя:" -#: ../plug-ins/common/sparkle.c:390 +#: plug-ins/common/sparkle.c:203 msgid "Adjust the flare intensity" -msgstr "Адрэґуляваць яркасьць полымя" +msgstr "Адрэгуляваць яркасць полымя" -#: ../plug-ins/common/sparkle.c:400 -msgid "_Spike length:" +#: plug-ins/common/sparkle.c:208 +#, fuzzy +#| msgid "_Spike length:" +msgid "Spi_ke length" msgstr "_Даўжыня промняў:" -#: ../plug-ins/common/sparkle.c:403 -msgid "Adjust the spike length" +#: plug-ins/common/sparkle.c:209 +#, fuzzy +#| msgid "Adjust the spike length" +msgid "Adjust the spike length (in pixels)" msgstr "Вызначыць даўжыню промняў" -#: ../plug-ins/common/sparkle.c:413 -msgid "Sp_ike points:" +#: plug-ins/common/sparkle.c:214 +#, fuzzy +#| msgid "Sp_ike points:" +msgid "Spike _points" msgstr "_Кропак промняў:" -#: ../plug-ins/common/sparkle.c:416 +#: plug-ins/common/sparkle.c:215 msgid "Adjust the number of spikes" -msgstr "Вызначыць колькасьць промняў" +msgstr "Вызначыць колькасць промняў" -#: ../plug-ins/common/sparkle.c:426 -msgid "Spi_ke angle (-1: random):" +#: plug-ins/common/sparkle.c:220 +#, fuzzy +#| msgid "Spi_ke angle (-1: random):" +msgid "Spike angle (-_1: random)" msgstr "_Вугал промня (-1: адвольны)" -#: ../plug-ins/common/sparkle.c:429 +#: plug-ins/common/sparkle.c:221 msgid "Adjust the spike angle (-1 causes a random angle to be chosen)" msgstr "Вызначыць вугал промняў (пры -1 выбіраецца адвольны вугал)" -#: ../plug-ins/common/sparkle.c:440 -msgid "Spik_e density:" +#: plug-ins/common/sparkle.c:227 +#, fuzzy +#| msgid "Spik_e density:" +msgid "Spike _density" msgstr "_Гушчыня промняў:" -#: ../plug-ins/common/sparkle.c:443 +#: plug-ins/common/sparkle.c:228 msgid "Adjust the spike density" msgstr "Вызначыць гушчыню промняў" -#: ../plug-ins/common/sparkle.c:453 -msgid "Tr_ansparency:" -msgstr "_Празрыстасьць:" +#: plug-ins/common/sparkle.c:233 +msgid "_Transparency" +msgstr "_Празрыстасць" -#: ../plug-ins/common/sparkle.c:456 +#: plug-ins/common/sparkle.c:234 msgid "Adjust the opacity of the spikes" -msgstr "Вызначыць непразрыстасьць промняў" +msgstr "Вызначыць непразрыстасць промняў" -#: ../plug-ins/common/sparkle.c:466 -msgid "_Random hue:" -msgstr "Выпадковае _адценьне:" +#: plug-ins/common/sparkle.c:239 +#, fuzzy +#| msgid "_Random hue:" +msgid "Random _hue" +msgstr "Выпадковае _адценне:" -#: ../plug-ins/common/sparkle.c:469 +#: plug-ins/common/sparkle.c:240 msgid "Adjust how much the hue should be changed randomly" -msgstr "Вызначае, на колькі будзе адвольна зьмененае адценьне " +msgstr "" -#: ../plug-ins/common/sparkle.c:479 -msgid "Rando_m saturation:" -msgstr "Выпадковая _насычанасьць:" +#: plug-ins/common/sparkle.c:246 +#, fuzzy +#| msgid "Rando_m saturation:" +msgid "R_andom saturation" +msgstr "Выпадковая _насычанасць:" -#: ../plug-ins/common/sparkle.c:482 +#: plug-ins/common/sparkle.c:247 msgid "Adjust how much the saturation should be changed randomly" -msgstr "Вызначае, на колькі будзе адвольна зьмененая насычанасьць" +msgstr "Вызначае, на колькі будзе адвольна змененая насычанасць" -#: ../plug-ins/common/sparkle.c:499 -msgid "_Preserve luminosity" -msgstr "_Захоўваць яркасьць" +#: plug-ins/common/sparkle.c:253 +#, fuzzy +#| msgid "_Preserve luminosity" +msgid "Preserve l_uminosity" +msgstr "_Захоўваць яркасць" -#: ../plug-ins/common/sparkle.c:506 +#: plug-ins/common/sparkle.c:254 msgid "Should the luminosity be preserved?" -msgstr "Ці трэба захоўваць яркасьць?" +msgstr "Ці трэба захоўваць яркасць?" -#: ../plug-ins/common/sparkle.c:515 +#: plug-ins/common/sparkle.c:259 msgid "In_verse" -msgstr "_Інвэрсія" +msgstr "_Інверсія" -#: ../plug-ins/common/sparkle.c:521 +#: plug-ins/common/sparkle.c:260 msgid "Should the effect be inversed?" -msgstr "Ці трэба інвэртаваць эфэкт?" +msgstr "Ці трэба інвертаваць эфект?" -#: ../plug-ins/common/sparkle.c:530 -msgid "A_dd border" +#: plug-ins/common/sparkle.c:265 +#, fuzzy +#| msgid "A_dd border" +msgid "Add _border" msgstr "_Дадаць рамку" -#: ../plug-ins/common/sparkle.c:536 +#: plug-ins/common/sparkle.c:266 msgid "Draw a border of spikes around the image" msgstr "Нарысаваць рамку з промняў вакол відарыса" -#: ../plug-ins/common/sparkle.c:550 -msgid "_Natural color" -msgstr "_Натуральны колер" +#: plug-ins/common/sparkle.c:271 +#, fuzzy +#| msgid "Color Mode" +msgid "Color type" +msgstr "Рэжым колераў" -#: ../plug-ins/common/sparkle.c:551 -msgid "_Foreground color" -msgstr "Колер _рысаваньня" +#: plug-ins/common/sparkle.c:272 +msgid "Color of sparkles: { NATURAL (0), FOREGROUND (1), BACKGROUND (2) }" +msgstr "" -#: ../plug-ins/common/sparkle.c:552 -msgid "_Background color" -msgstr "Колер _асноведзі" +#: plug-ins/common/sparkle.c:321 +msgid "Region selected for filter is empty" +msgstr "Вобласць, вылучаная для фільтра, пустая." -#: ../plug-ins/common/sparkle.c:559 -msgid "Use the color of the image" -msgstr "Ужываць колер відарыса" +#: plug-ins/common/sparkle.c:353 +msgid "Sparkling" +msgstr "Стварэнне бліскавак" -#: ../plug-ins/common/sparkle.c:560 -msgid "Use the foreground color" -msgstr "Ужываць колер рысаваньня" +#: plug-ins/common/sparkle.c:392 +msgid "Sparkle" +msgstr "Бліскаўкі" -#: ../plug-ins/common/sparkle.c:561 -msgid "Use the background color" -msgstr "Ужываць колер асноведзі" +#: plug-ins/common/sparkle.c:447 +msgid "Additional Options" +msgstr "Дадатковыя параметры" -#: ../plug-ins/common/sphere-designer.c:293 -#: ../plug-ins/pikaressionist/general.c:165 +#. colortype +#: plug-ins/common/sparkle.c:453 +msgid "Natural color" +msgstr "Натуральны колер" + +#: plug-ins/common/sparkle.c:454 plug-ins/common/warp.c:632 +msgid "Foreground color" +msgstr "Колер малявання" + +#: plug-ins/common/sparkle.c:455 +msgid "Background color" +msgstr "Фонавы колер" + +#: plug-ins/common/sphere-designer.c:336 plug-ins/pikaressionist/general.c:165 msgid "Solid" msgstr "Суцэльны" -#: ../plug-ins/common/sphere-designer.c:294 +#: plug-ins/common/sphere-designer.c:337 msgid "Checker" msgstr "Шахматная дошка" -#: ../plug-ins/common/sphere-designer.c:295 +#: plug-ins/common/sphere-designer.c:338 msgid "Marble" msgstr "Мармур" -#: ../plug-ins/common/sphere-designer.c:296 +#: plug-ins/common/sphere-designer.c:339 msgid "Lizard" msgstr "Яшчарка" -#: ../plug-ins/common/sphere-designer.c:297 +#: plug-ins/common/sphere-designer.c:340 msgid "Phong" -msgstr "Фонґ" +msgstr "Фонг" -#: ../plug-ins/common/sphere-designer.c:298 ../plug-ins/flame/flame.c:773 +#: plug-ins/common/sphere-designer.c:341 plug-ins/flame/flame.c:836 msgid "Noise" msgstr "Шум" -#: ../plug-ins/common/sphere-designer.c:299 +#: plug-ins/common/sphere-designer.c:342 msgid "Wood" msgstr "Дрэва" -#: ../plug-ins/common/sphere-designer.c:300 ../plug-ins/flame/flame.c:757 +#: plug-ins/common/sphere-designer.c:343 plug-ins/flame/flame.c:820 +#: plug-ins/gfig/gfig-dialog.c:399 plug-ins/gfig/gfig-menu.ui:79 msgid "Spiral" -msgstr "Сьпіральная" +msgstr "Спіральная" -#: ../plug-ins/common/sphere-designer.c:301 +#: plug-ins/common/sphere-designer.c:344 msgid "Spots" msgstr "Плямы" -#: ../plug-ins/common/sphere-designer.c:1749 -#: ../plug-ins/common/sphere-designer.c:2705 +#: plug-ins/common/sphere-designer.c:410 +msgid "Sphere _Designer..." +msgstr "_Дызайнер сферы…" + +#: plug-ins/common/sphere-designer.c:414 +msgid "Create an image of a textured sphere" +msgstr "Стварыць відарыс тэкстураванай сферы" + +#: plug-ins/common/sphere-designer.c:1830 +#: plug-ins/common/sphere-designer.c:2775 msgid "Texture" msgstr "Тэкстура" -#: ../plug-ins/common/sphere-designer.c:1751 +#: plug-ins/common/sphere-designer.c:1832 msgid "Bumpmap" -msgstr "Мапа паверхні" +msgstr "Карта паверхні" -#: ../plug-ins/common/sphere-designer.c:1753 -#: ../plug-ins/common/sphere-designer.c:2707 +#: plug-ins/common/sphere-designer.c:1834 +#: plug-ins/common/sphere-designer.c:2777 msgid "Light" -msgstr "Сьвятло" +msgstr "Святло" -#: ../plug-ins/common/sphere-designer.c:2017 +#: plug-ins/common/sphere-designer.c:2097 #, c-format msgid "File '%s' is not a valid save file." -msgstr "Файл «%s» не зьяўляецца дапушчальным файлам захоўваньня." +msgstr "Файл «%s» не з'яўляецца дапушчальным файлам захоўвання." -#: ../plug-ins/common/sphere-designer.c:2197 +#: plug-ins/common/sphere-designer.c:2277 msgid "Open File" msgstr "Адкрыць файл" -#: ../plug-ins/common/sphere-designer.c:2197 +#: plug-ins/common/sphere-designer.c:2277 msgid "Save File" msgstr "Запісаць файл" -#: ../plug-ins/common/sphere-designer.c:2556 +#: plug-ins/common/sphere-designer.c:2627 msgid "Sphere Designer" -msgstr "Дызайнэр сфэры" +msgstr "Дызайнер сферы" -#: ../plug-ins/common/sphere-designer.c:2690 +#: plug-ins/common/sphere-designer.c:2728 +msgid "Layers" +msgstr "Слаі" + +#: plug-ins/common/sphere-designer.c:2739 +#: plug-ins/gradient-flare/gradient-flare.c:3081 +msgid "_New" +msgstr "_Новы" + +#: plug-ins/common/sphere-designer.c:2745 +msgid "D_uplicate" +msgstr "" + +#: plug-ins/common/sphere-designer.c:2751 +#: plug-ins/fractal-explorer/fractal-explorer.c:875 +#: plug-ins/fractal-explorer/fractal-explorer.c:1236 +#: plug-ins/pikaressionist/presets.c:1067 +#: plug-ins/gradient-flare/gradient-flare.c:3084 +#: plug-ins/gradient-flare/gradient-flare.c:3367 +msgid "_Delete" +msgstr "_Выдаліць" + +#: plug-ins/common/sphere-designer.c:2761 msgid "Properties" -msgstr "Уласьцівасьці" +msgstr "Уласцівасці" -#: ../plug-ins/common/sphere-designer.c:2706 +#: plug-ins/common/sphere-designer.c:2776 msgid "Bump" msgstr "Паверхня" #. row labels -#: ../plug-ins/common/sphere-designer.c:2714 -#: ../plug-ins/lighting/lighting-ui.c:407 +#: plug-ins/common/sphere-designer.c:2784 plug-ins/lighting/lighting-ui.c:414 msgid "Type:" msgstr "Тып:" -#: ../plug-ins/common/sphere-designer.c:2733 +#: plug-ins/common/sphere-designer.c:2803 msgid "Texture:" msgstr "Тэкстура:" -#: ../plug-ins/common/sphere-designer.c:2738 +#: plug-ins/common/sphere-designer.c:2808 msgid "Colors:" msgstr "Колеры:" -#: ../plug-ins/common/sphere-designer.c:2741 -#: ../plug-ins/common/sphere-designer.c:2752 +#: plug-ins/common/sphere-designer.c:2811 +#: plug-ins/common/sphere-designer.c:2822 msgid "Color Selection Dialog" -msgstr "Дыялёґ выбару колера" +msgstr "Акно выбару колеру" #. Scale -#: ../plug-ins/common/sphere-designer.c:2763 -#: ../plug-ins/pikaressionist/paper.c:193 -#: ../plug-ins/ifs-compose/ifs-compose.c:553 +#: plug-ins/common/sphere-designer.c:2833 plug-ins/pikaressionist/paper.c:191 +#: plug-ins/ifs-compose/ifs-compose.c:663 msgid "Scale:" msgstr "Памер:" -#: ../plug-ins/common/sphere-designer.c:2771 +#: plug-ins/common/sphere-designer.c:2841 msgid "Turbulence:" -msgstr "Узбуранасьць:" +msgstr "Узбуранасць:" -#: ../plug-ins/common/sphere-designer.c:2778 +#: plug-ins/common/sphere-designer.c:2849 msgid "Amount:" msgstr "Узровень:" -#: ../plug-ins/common/sphere-designer.c:2785 +#: plug-ins/common/sphere-designer.c:2856 msgid "Exp.:" msgstr "Ступень:" -#: ../plug-ins/common/sphere-designer.c:2792 +#: plug-ins/common/sphere-designer.c:2863 msgid "Transformations" -msgstr "Ператварэньні" +msgstr "Пераўтварэнні" -#: ../plug-ins/common/sphere-designer.c:2808 -#: ../plug-ins/map-object/map-object-ui.c:1097 +#: plug-ins/common/sphere-designer.c:2877 +#: plug-ins/map-object/map-object-ui.c:1121 msgid "Scale X:" msgstr "Памер па X:" -#: ../plug-ins/common/sphere-designer.c:2815 +#: plug-ins/common/sphere-designer.c:2885 msgid "Scale Y:" msgstr "Памер па Y:" -#: ../plug-ins/common/sphere-designer.c:2821 +#: plug-ins/common/sphere-designer.c:2893 msgid "Scale Z:" msgstr "Памер па Z:" -#: ../plug-ins/common/sphere-designer.c:2828 +#: plug-ins/common/sphere-designer.c:2904 msgid "Rotate X:" msgstr "Паварот па X:" -#: ../plug-ins/common/sphere-designer.c:2835 +#: plug-ins/common/sphere-designer.c:2911 msgid "Rotate Y:" msgstr "Паварот па Y:" -#: ../plug-ins/common/sphere-designer.c:2842 +#: plug-ins/common/sphere-designer.c:2918 msgid "Rotate Z:" msgstr "Паварот па Z:" -#: ../plug-ins/common/sphere-designer.c:2849 +#: plug-ins/common/sphere-designer.c:2928 msgid "Position X:" msgstr "Становішча па X:" -#: ../plug-ins/common/sphere-designer.c:2856 +#: plug-ins/common/sphere-designer.c:2936 msgid "Position Y:" msgstr "Становішча па Y:" -#: ../plug-ins/common/sphere-designer.c:2863 +#: plug-ins/common/sphere-designer.c:2944 msgid "Position Z:" msgstr "Становішча па Z:" -#: ../plug-ins/common/sphere-designer.c:2979 +#: plug-ins/common/sphere-designer.c:3074 msgid "Rendering sphere" -msgstr "Стварэньне сфэры" +msgstr "Стварэнне сферы" -#: ../plug-ins/common/sphere-designer.c:3030 -msgid "Create an image of a textured sphere" -msgstr "Стварыць відарыс тэкстураванай сфэры" - -#: ../plug-ins/common/sphere-designer.c:3037 -msgid "Sphere _Designer..." -msgstr "_Дызайнэр сфэры…" - -#: ../plug-ins/common/sphere-designer.c:3107 +#: plug-ins/common/sphere-designer.c:3193 msgid "Region selected for plug-in is empty" -msgstr "Выбраная для дадатка вобласьць пустая" +msgstr "Выбраная для дадатка вобласць пустая" -#: ../plug-ins/common/threshold-alpha.c:85 -msgid "Make transparency all-or-nothing" -msgstr "Зрабіць празрыстым або ўсё, або нічога" +#: plug-ins/common/tile.c:144 +msgid "_Tile..." +msgstr "_Мазаіка…" -#: ../plug-ins/common/threshold-alpha.c:90 -msgid "_Threshold Alpha..." -msgstr "_Парог празрыстасьці…" +#: plug-ins/common/tile.c:148 +msgid "Create an array of copies of the image" +msgstr "Стварыць масіў копій гэтага відарыса" -#: ../plug-ins/common/threshold-alpha.c:131 -msgid "The layer has its alpha channel locked." -msgstr "Альфаканал пласта заблякаваны." - -#: ../plug-ins/common/threshold-alpha.c:137 -msgid "RGBA/GRAYA drawable is not selected." -msgstr "Ня выбраны абшар рысаваньня RGBA/GRAYA." - -#: ../plug-ins/common/threshold-alpha.c:165 -msgid "Coloring transparency" -msgstr "Фарбаваньне празрыстасьці" - -#: ../plug-ins/common/threshold-alpha.c:248 -msgid "Threshold Alpha" -msgstr "Парог празрыстасьці" - -#: ../plug-ins/common/threshold-alpha.c:284 -msgid "Threshold:" -msgstr "Парог:" - -#: ../plug-ins/common/tile-glass.c:124 -msgid "Simulate distortion caused by square glass tiles" -msgstr "Удае скажэньне, выкліканае квадратнымі празрыстымі пліткамі" - -#: ../plug-ins/common/tile-glass.c:130 -msgid "_Glass Tile..." -msgstr "_Празрыстыя пліткі…" - -#: ../plug-ins/common/tile-glass.c:210 ../plug-ins/common/tile-glass.c:250 -msgid "Glass Tile" -msgstr "Празрыстыя пліткі" - -#: ../plug-ins/common/tile-glass.c:290 -msgid "Tile _width:" -msgstr "Шырыня _пліткі:" - -#: ../plug-ins/common/tile-paper.c:243 ../plug-ins/common/tile-paper.c:557 -msgid "Paper Tile" -msgstr "Папяровыя шматкі" - -#: ../plug-ins/common/tile-paper.c:270 -msgid "Division" -msgstr "Дзяленьне" - -#: ../plug-ins/common/tile-paper.c:320 -msgid "Fractional Pixels" -msgstr "Частковыя піксэлі" - -#: ../plug-ins/common/tile-paper.c:325 -msgid "_Background" -msgstr "_Асноведзь" - -#: ../plug-ins/common/tile-paper.c:327 -msgid "_Ignore" -msgstr "_Ігнараваць" - -#: ../plug-ins/common/tile-paper.c:329 -msgid "_Force" -msgstr "_Прымусова" - -#: ../plug-ins/common/tile-paper.c:336 -msgid "C_entering" -msgstr "_Цэнтраваньне" - -#: ../plug-ins/common/tile-paper.c:351 -msgid "Movement" -msgstr "Рух" - -#: ../plug-ins/common/tile-paper.c:364 -msgid "_Max (%):" -msgstr "_Макс. (%):" - -#: ../plug-ins/common/tile-paper.c:370 -msgid "_Wrap around" -msgstr "_Загарнуць" - -#: ../plug-ins/common/tile-paper.c:380 -msgid "Background Type" -msgstr "Тып асноведзі" - -#: ../plug-ins/common/tile-paper.c:387 -msgid "I_nverted image" -msgstr "_Інвэртаваны відарыс" - -#: ../plug-ins/common/tile-paper.c:389 -msgid "Im_age" -msgstr "_Відарыс" - -#: ../plug-ins/common/tile-paper.c:391 -msgid "Fo_reground color" -msgstr "_Колер рысаваньня" - -#: ../plug-ins/common/tile-paper.c:393 -msgid "Bac_kground color" -msgstr "_Колер асноведзі" - -#: ../plug-ins/common/tile-paper.c:395 -msgid "S_elect here:" -msgstr "_Выбраць тут:" - -#: ../plug-ins/common/tile-paper.c:402 -msgid "Background Color" -msgstr "Колер асноведзі" - -#: ../plug-ins/common/tile-paper.c:848 -msgid "Cut image into paper tiles, and slide them" -msgstr "Парэзаць відарыс на папяровыя шматкі й скласьці іх" - -#: ../plug-ins/common/tile-paper.c:853 -msgid "September 31, 1999" -msgstr "31 верасьня 1999" - -#: ../plug-ins/common/tile-paper.c:854 -msgid "_Paper Tile..." -msgstr "_Папяровыя шматкі…" - -#: ../plug-ins/common/tile-seamless.c:66 -msgid "Alters edges to make the image seamlessly tileable" -msgstr "" -"Зьмяніць краі, каб зрабіць відарыс, прыдатным для замошчваньня бяз швоў" - -#: ../plug-ins/common/tile-seamless.c:72 -msgid "_Make Seamless" -msgstr "_Сшыць бяз швоў" - -#: ../plug-ins/common/tile-seamless.c:335 -msgid "Tiler" -msgstr "Замошчвальнік" - -#: ../plug-ins/common/tile-small.c:222 -msgid "Tile image into smaller versions of the original" -msgstr "Стварыць відарыс, замошчаны меншымі вэрсіямі пачатковага" - -#: ../plug-ins/common/tile-small.c:227 -msgid "_Small Tiles..." -msgstr "_Малыя пліткі…" - -#: ../plug-ins/common/tile-small.c:270 -msgid "Region selected for filter is empty." -msgstr "Вобласьць, вылучаная для фільтра, пустая." - -#. Set the tile cache size -#: ../plug-ins/common/tile-small.c:328 ../plug-ins/common/tile.c:185 +#: plug-ins/common/tile.c:256 plug-ins/common/tile-small.c:377 msgid "Tiling" msgstr "Пабудова" +#: plug-ins/common/tile.c:488 +msgid "Tile" +msgstr "Мазаіка" + +#: plug-ins/common/tile.c:510 +msgid "Tile to New Size" +msgstr "Складаць да памеру" + +#: plug-ins/common/tile.c:531 +msgid "C_reate new image" +msgstr "_Стварыць новы відарыс" + +#: plug-ins/common/tile-small.c:265 +msgid "_Small Tiles..." +msgstr "_Малыя пліткі…" + +#: plug-ins/common/tile-small.c:269 +msgid "Tile image into smaller versions of the original" +msgstr "Стварыць відарыс, замошчаны меншымі версіямі пачатковага" + +#: plug-ins/common/tile-small.c:326 +msgid "Region selected for filter is empty." +msgstr "Вобласць, вылучаная для фільтра, пустая." + #. Get the preview image -#: ../plug-ins/common/tile-small.c:371 +#: plug-ins/common/tile-small.c:442 msgid "Small Tiles" msgstr "Малыя пліткі" #. Area for buttons etc #. Flip -#: ../plug-ins/common/tile-small.c:421 -#: ../plug-ins/ifs-compose/ifs-compose.c:609 +#: plug-ins/common/tile-small.c:498 plug-ins/ifs-compose/ifs-compose.c:719 msgid "Flip" msgstr "Пераварот" -#: ../plug-ins/common/tile-small.c:470 +#: plug-ins/common/tile-small.c:547 msgid "A_ll tiles" msgstr "_Усе пліткі" -#: ../plug-ins/common/tile-small.c:484 +#: plug-ins/common/tile-small.c:560 msgid "Al_ternate tiles" msgstr "_Праз адну" -#: ../plug-ins/common/tile-small.c:498 +#: plug-ins/common/tile-small.c:573 msgid "_Explicit tile" msgstr "_Пэўная плітка" -#: ../plug-ins/common/tile-small.c:504 +#: plug-ins/common/tile-small.c:578 msgid "Ro_w:" msgstr "_Радок:" -#: ../plug-ins/common/tile-small.c:530 +#: plug-ins/common/tile-small.c:603 msgid "Col_umn:" msgstr "_Слупок:" -#: ../plug-ins/common/tile-small.c:585 +#. Widget for selecting the Opacity +#: plug-ins/common/tile-small.c:651 msgid "O_pacity:" -msgstr "_Непразрыстасьць:" +msgstr "_Непразрыстасць:" -#. Lower frame saying howmany segments -#: ../plug-ins/common/tile-small.c:594 +#. Lower frame saying how many segments +#: plug-ins/common/tile-small.c:661 msgid "Number of Segments" -msgstr "Колькасьць кавалкаў" +msgstr "Колькасць кавалкаў" -#: ../plug-ins/common/tile.c:101 -msgid "Create an array of copies of the image" -msgstr "Стварыць масіў копій гэтага відарыса" - -#: ../plug-ins/common/tile.c:111 -msgid "_Tile..." -msgstr "_Мазаіка…" - -#: ../plug-ins/common/tile.c:397 -msgid "Tile" -msgstr "Мазаіка" - -#: ../plug-ins/common/tile.c:419 -msgid "Tile to New Size" -msgstr "Складаць да памера" - -#: ../plug-ins/common/tile.c:441 -msgid "C_reate new image" -msgstr "_Стварыць новы відарыс" - -#: ../plug-ins/common/unit-editor.c:94 +#: plug-ins/common/unit-editor.c:115 msgid "Saved" msgstr "Захаваны" -#: ../plug-ins/common/unit-editor.c:94 +#: plug-ins/common/unit-editor.c:115 msgid "" "A unit definition will only be saved before PIKA exits if this column is " "checked." msgstr "" -"Азначэньне адзінкі будзе захавана перад выхадам з PIKA, калі ў гэтай калёнцы " +"Азначэнне адзінкі будзе захавана перад выхадам з PIKA, калі ў гэтай калёнцы " "задзейнічана." -#: ../plug-ins/common/unit-editor.c:96 +#: plug-ins/common/unit-editor.c:117 msgid "ID" msgstr "ID" -#: ../plug-ins/common/unit-editor.c:96 +#: plug-ins/common/unit-editor.c:117 msgid "" "This string will be used to identify a unit in PIKA's configuration files." msgstr "" -"Гэты радок быдзе выкарыстоўвацца для вызначэньня адзінкі ў файле з " -"настаўленьнямі PIKA." +"Гэты радок будзе выкарыстоўвацца для вызначэння адзінкі ў файле з " +"настаўленнямі PIKA." -#: ../plug-ins/common/unit-editor.c:98 +#: plug-ins/common/unit-editor.c:119 msgid "Factor" msgstr "Множнік" -#: ../plug-ins/common/unit-editor.c:98 +#: plug-ins/common/unit-editor.c:119 msgid "How many units make up an inch." msgstr "Колькі адзінак складаюць цалю." -#: ../plug-ins/common/unit-editor.c:99 +#: plug-ins/common/unit-editor.c:120 msgid "Digits" msgstr "Лічбы" -#: ../plug-ins/common/unit-editor.c:99 +#: plug-ins/common/unit-editor.c:120 msgid "" "This field is a hint for numerical input fields. It specifies how many " "decimal digits the input field should provide to get approximately the same " "accuracy as an \"inch\" input field with two decimal digits." msgstr "" "Гэтае поле -- намінка для лічбавых палёў уводу. Яно вызначае колькі дробавых " -"лічбаў мусіць быць у полі ўводу, каб дакладнасьць была прыблізна такая ж, як " +"лічбаў павінен быць у полі ўводу, каб дакладнасць была прыблізна такая ж, як " "у цалі з двума дробавымі знакамі." -#: ../plug-ins/common/unit-editor.c:104 +#: plug-ins/common/unit-editor.c:125 msgid "Symbol" msgstr "Знак" -#: ../plug-ins/common/unit-editor.c:104 +#: plug-ins/common/unit-editor.c:125 msgid "" "The unit's symbol if it has one (e.g. \" for inches). The unit's " "abbreviation is used if doesn't have a symbol." @@ -7807,1676 +7651,2833 @@ msgstr "" "Знак адзінкі, калі існуе (напр. \" для цаляў). Калі няма, то " "выкарыстоўваецца скарот адзінкі." -#: ../plug-ins/common/unit-editor.c:107 +#: plug-ins/common/unit-editor.c:128 msgid "Abbreviation" msgstr "Скарот" -#: ../plug-ins/common/unit-editor.c:107 +#: plug-ins/common/unit-editor.c:128 msgid "The unit's abbreviation (e.g. \"cm\" for centimeters)." -msgstr "Скарот адзінкі (напр., «см» — сантымэтры)" +msgstr "Скарот адзінкі (напр., «см» — сантыметры)" -#: ../plug-ins/common/unit-editor.c:109 +#: plug-ins/common/unit-editor.c:130 msgid "Singular" msgstr "Адзіночны" -#: ../plug-ins/common/unit-editor.c:109 +#: plug-ins/common/unit-editor.c:130 msgid "The unit's singular form." msgstr "Адзіночны лік адзінкі." -#: ../plug-ins/common/unit-editor.c:110 +#: plug-ins/common/unit-editor.c:131 msgid "Plural" msgstr "Множны" -#: ../plug-ins/common/unit-editor.c:110 +#: plug-ins/common/unit-editor.c:131 msgid "The unit's plural form." msgstr "Множная форма адзінкі." -#: ../plug-ins/common/unit-editor.c:121 -msgid "Create a new unit from scratch" -msgstr "Стварыць новую адзінку з нуля." - -#: ../plug-ins/common/unit-editor.c:127 -msgid "Create a new unit using the currently selected unit as template" -msgstr "Стварыць новую адзінку, ужываючы вылучаную як шаблён" - -#: ../plug-ins/common/unit-editor.c:145 -msgid "Create or alter units used in PIKA" -msgstr "Стварыць або зьмяніць адзінкі, якія выкарыстоўваюцца ў PIKA" - -#: ../plug-ins/common/unit-editor.c:150 +#: plug-ins/common/unit-editor.c:175 msgid "U_nits" msgstr "_Адзінкі" -#: ../plug-ins/common/unit-editor.c:205 -msgid "Add a New Unit" -msgstr "Дадаць новую адзінку" +#: plug-ins/common/unit-editor.c:180 +msgid "Create or alter units used in PIKA" +msgstr "Стварыць або змяніць адзінкі, якія выкарыстоўваюцца ў PIKA" -#: ../plug-ins/common/unit-editor.c:234 -msgid "_ID:" -msgstr "_ID:" - -#: ../plug-ins/common/unit-editor.c:245 -msgid "_Factor:" -msgstr "_Множнік:" - -#: ../plug-ins/common/unit-editor.c:255 -msgid "_Digits:" -msgstr "_Лічбы:" - -#: ../plug-ins/common/unit-editor.c:267 -msgid "_Symbol:" -msgstr "_Знак:" - -#: ../plug-ins/common/unit-editor.c:279 -msgid "_Abbreviation:" -msgstr "_Скарот:" - -#: ../plug-ins/common/unit-editor.c:291 -msgid "Si_ngular:" -msgstr "_Адзіночны:" - -#: ../plug-ins/common/unit-editor.c:303 -msgid "_Plural:" -msgstr "_Множны:" - -#: ../plug-ins/common/unit-editor.c:346 -msgid "Incomplete input" -msgstr "Уведзена ня ўсё" - -#: ../plug-ins/common/unit-editor.c:349 -msgid "Please fill in all text fields." -msgstr "Запоўні, калі ласка, усе тэкставыя палі." - -#: ../plug-ins/common/unit-editor.c:408 +#: plug-ins/common/unit-editor.c:230 plug-ins/common/unit-editor.c:249 msgid "Unit Editor" msgstr "Рэдактар адзінак" -#: ../plug-ins/common/unsharp-mask.c:131 -msgid "The most widely useful method for sharpening an image" -msgstr "" -"Спосаб павелічэньня рэзкасьці відарыса, які найчасьцей выкарыстоўваецца" +#. destroy model automatically with view +#. Put buttons in +#: plug-ins/common/unit-editor.c:253 +#: plug-ins/fractal-explorer/fractal-explorer.c:1214 +#: plug-ins/pikaressionist/presets.c:1073 +msgid "_Refresh" +msgstr "_Абнавіць" -#: ../plug-ins/common/unsharp-mask.c:141 -msgid "_Unsharp Mask..." -msgstr "_Нярэзкая маска…" +#: plug-ins/common/unit-editor.c:260 +msgid "_Help" +msgstr "_Даведка" -#: ../plug-ins/common/unsharp-mask.c:684 -msgid "Merging" -msgstr "Аб'яднаньне" +#: plug-ins/common/unit-editor.c:291 +msgid "Create a new unit from scratch" +msgstr "Стварыць новую адзінку вымярэння з нуля" -#: ../plug-ins/common/unsharp-mask.c:828 -msgid "Unsharp Mask" -msgstr "Нярэзкая маска" +#: plug-ins/common/unit-editor.c:298 +msgid "Create a new unit using the currently selected unit as template" +msgstr "Стварыць новую адзінку, ужываючы вылучаную як шаблён" -#: ../plug-ins/common/value-invert.c:89 -msgid "Invert the brightness of each pixel" -msgstr "Інвэртавацб яркасьць кожнага піксэля" +#: plug-ins/common/unit-editor.c:435 +msgid "Add a New Unit" +msgstr "Дадаць новую адзінку" -#: ../plug-ins/common/value-invert.c:103 -msgid "_Value Invert" -msgstr "_Інвэртаваць яркасьць" +#: plug-ins/common/unit-editor.c:464 +msgid "_ID:" +msgstr "_ID:" -#: ../plug-ins/common/value-invert.c:190 -msgid "Value Invert" -msgstr "Інвэртаваньне яркасьці" +#: plug-ins/common/unit-editor.c:476 +msgid "_Factor:" +msgstr "_Множнік:" -#: ../plug-ins/common/value-propagate.c:189 -msgid "More _white (larger value)" -msgstr "Больш _белага (большае значэньне)" +#: plug-ins/common/unit-editor.c:487 +msgid "_Digits:" +msgstr "_Лічбы:" -#: ../plug-ins/common/value-propagate.c:192 -msgid "More blac_k (smaller value)" -msgstr "Больш _чорнага (меншае значэньне)" +#: plug-ins/common/unit-editor.c:499 +msgid "_Symbol:" +msgstr "_Знак:" -#: ../plug-ins/common/value-propagate.c:195 -msgid "_Middle value to peaks" -msgstr "_Сярэднія значэньні на пікі" +#: plug-ins/common/unit-editor.c:511 +msgid "_Abbreviation:" +msgstr "_Скарот:" -#: ../plug-ins/common/value-propagate.c:198 -msgid "_Foreground to peaks" -msgstr "_Колер рысаваньня на пікі" +#: plug-ins/common/unit-editor.c:523 +msgid "Si_ngular:" +msgstr "_Адзіночны:" -#: ../plug-ins/common/value-propagate.c:201 -msgid "O_nly foreground" -msgstr "Толькі колер _рысаваньня" +#: plug-ins/common/unit-editor.c:535 +msgid "_Plural:" +msgstr "_Множны:" -#: ../plug-ins/common/value-propagate.c:204 -msgid "Only b_ackground" -msgstr "Толькі колер _асноведзі" +#: plug-ins/common/unit-editor.c:578 +msgid "Incomplete input" +msgstr "Уведзена не ўсё" -#: ../plug-ins/common/value-propagate.c:207 -msgid "Mor_e opaque" -msgstr "Больш _непразрысты" +#: plug-ins/common/unit-editor.c:581 +msgid "Please fill in all text fields." +msgstr "Запоўні, калі ласка, усе тэкставыя палі." -#: ../plug-ins/common/value-propagate.c:210 -msgid "More t_ransparent" -msgstr "Больш _празрысты" - -#: ../plug-ins/common/value-propagate.c:233 -msgid "Propagate certain colors to neighboring pixels" -msgstr "Распаўсюдзіць пэўныя колеры на суседнія піксэлі" - -#: ../plug-ins/common/value-propagate.c:238 -msgid "_Value Propagate..." -msgstr "_Распаўсюдзіць значэньні…" - -#: ../plug-ins/common/value-propagate.c:245 -msgid "Shrink lighter areas of the image" -msgstr "Зьменшыць сьвятлейшыя вобласьці відарыса" - -#: ../plug-ins/common/value-propagate.c:250 -msgid "E_rode" -msgstr "_Разьесьці…" - -#: ../plug-ins/common/value-propagate.c:257 -msgid "Grow lighter areas of the image" -msgstr "Павялічыць сьвятлейшыя вобласьці відарыса" - -#: ../plug-ins/common/value-propagate.c:262 -msgid "_Dilate" -msgstr "_Пашырыць" - -#: ../plug-ins/common/value-propagate.c:476 -#: ../plug-ins/common/value-propagate.c:1086 -msgid "Value Propagate" -msgstr "Распаўсюд значэньняў" - -#. Parameter settings -#: ../plug-ins/common/value-propagate.c:1153 -msgid "Propagate" -msgstr "Распаўсюд" - -#: ../plug-ins/common/value-propagate.c:1166 -msgid "Lower t_hreshold:" -msgstr "_Ніжні парог:" - -#: ../plug-ins/common/value-propagate.c:1178 -msgid "_Upper threshold:" -msgstr "_Верхні парог:" - -#: ../plug-ins/common/value-propagate.c:1190 -msgid "_Propagating rate:" -msgstr "_Ступень:" - -#: ../plug-ins/common/value-propagate.c:1201 -msgid "To l_eft" -msgstr "У_лева" - -#: ../plug-ins/common/value-propagate.c:1204 -msgid "To _right" -msgstr "У_права" - -#: ../plug-ins/common/value-propagate.c:1207 -msgid "To _top" -msgstr "Ув_ерх" - -#: ../plug-ins/common/value-propagate.c:1210 -msgid "To _bottom" -msgstr "Ун_із" - -#: ../plug-ins/common/value-propagate.c:1219 -msgid "Propagating _alpha channel" -msgstr "Распаўсюд _альфаканалу" - -#: ../plug-ins/common/value-propagate.c:1230 -msgid "Propagating value channel" -msgstr "Распаўсюд каналу значэньня" - -#: ../plug-ins/common/van-gogh-lic.c:569 ../plug-ins/common/van-gogh-lic.c:644 +#: plug-ins/common/van-gogh-lic.c:632 plug-ins/common/van-gogh-lic.c:705 msgid "Van Gogh (LIC)" -msgstr "Ван Ґоґ (ЛІЗ)" +msgstr "Ван Гог (ЛІЗ)" -#: ../plug-ins/common/van-gogh-lic.c:670 +#: plug-ins/common/van-gogh-lic.c:731 msgid "Effect Channel" -msgstr "Канал эфэкта" +msgstr "Канал эфекту" -#: ../plug-ins/common/van-gogh-lic.c:677 +#: plug-ins/common/van-gogh-lic.c:737 +msgid "_Saturation" +msgstr "_Насычанасць" + +#: plug-ins/common/van-gogh-lic.c:738 msgid "_Brightness" -msgstr "_Яркасьць" +msgstr "_Яркасць" -#: ../plug-ins/common/van-gogh-lic.c:683 +#: plug-ins/common/van-gogh-lic.c:744 msgid "Effect Operator" -msgstr "Апэратар эфэкта" +msgstr "Аператар эфекту" -#: ../plug-ins/common/van-gogh-lic.c:688 +#: plug-ins/common/van-gogh-lic.c:749 msgid "_Derivative" msgstr "_Вытворны" -#: ../plug-ins/common/van-gogh-lic.c:689 +#: plug-ins/common/van-gogh-lic.c:750 msgid "_Gradient" -msgstr "_Ґрадыент" +msgstr "_Градыент" -#: ../plug-ins/common/van-gogh-lic.c:695 +#: plug-ins/common/van-gogh-lic.c:756 msgid "Convolve" msgstr "Згортваць" -#: ../plug-ins/common/van-gogh-lic.c:700 +#: plug-ins/common/van-gogh-lic.c:761 msgid "_With white noise" -msgstr "_Зь белым шумам" +msgstr "_З белым шумам" -#: ../plug-ins/common/van-gogh-lic.c:701 +#: plug-ins/common/van-gogh-lic.c:762 msgid "W_ith source image" msgstr "_З відарысам-крыніцай" -#: ../plug-ins/common/van-gogh-lic.c:720 +#: plug-ins/common/van-gogh-lic.c:781 msgid "_Effect image:" -msgstr "Відарыс _эфэкта:" +msgstr "Відарыс _эфекту:" -#: ../plug-ins/common/van-gogh-lic.c:731 +#: plug-ins/common/van-gogh-lic.c:791 msgid "_Filter length:" msgstr "_Даўжыня фільтра:" -#: ../plug-ins/common/van-gogh-lic.c:740 +#: plug-ins/common/van-gogh-lic.c:799 msgid "_Noise magnitude:" msgstr "Велічыня _шуму:" -#: ../plug-ins/common/van-gogh-lic.c:749 +#: plug-ins/common/van-gogh-lic.c:807 msgid "In_tegration steps:" -msgstr "Крокаў _інтэграваньня:" +msgstr "Крокаў _інтэгравання:" -#: ../plug-ins/common/van-gogh-lic.c:758 +#: plug-ins/common/van-gogh-lic.c:814 msgid "_Minimum value:" -msgstr "Най_меншае значэньне:" +msgstr "Най_меншае значэнне:" -#: ../plug-ins/common/van-gogh-lic.c:767 +#: plug-ins/common/van-gogh-lic.c:821 msgid "M_aximum value:" -msgstr "Най_большае значэньне:" +msgstr "Най_большае значэнне:" -#: ../plug-ins/common/van-gogh-lic.c:813 -msgid "Special effects that nobody understands" -msgstr "Адмысловыя эфэкты, якіх ніхто не разумее" - -#: ../plug-ins/common/van-gogh-lic.c:818 +#: plug-ins/common/van-gogh-lic.c:878 msgid "_Van Gogh (LIC)..." -msgstr "_Ван Ґоґ (ЛІЗ)…" +msgstr "_Ван Гог (ЛІЗ)…" -#: ../plug-ins/common/video.c:42 -msgid "_Staggered" -msgstr "У _шахматным парадку" +#: plug-ins/common/van-gogh-lic.c:882 +msgid "Special effects that nobody understands" +msgstr "Адмысловыя эфекты, якіх ніхто не разумее" -#: ../plug-ins/common/video.c:43 -msgid "_Large staggered" -msgstr "_Вялікі ў шахматным парадку" +#: plug-ins/common/warp.c:250 +msgid "_Warp..." +msgstr "_Скрыўленне…" -#: ../plug-ins/common/video.c:44 -msgid "S_triped" -msgstr "_Паласаты" - -#: ../plug-ins/common/video.c:45 -msgid "_Wide-striped" -msgstr "_Шырокапалосы" - -#: ../plug-ins/common/video.c:46 -msgid "Lo_ng-staggered" -msgstr "_Доўгі ў шахматным парадку" - -#: ../plug-ins/common/video.c:47 -msgid "_3x3" -msgstr "_3×3" - -#: ../plug-ins/common/video.c:48 -msgid "Larg_e 3x3" -msgstr "_Вялікі 3×3" - -#: ../plug-ins/common/video.c:49 -msgid "_Hex" -msgstr "Шасьцікутны" - -#: ../plug-ins/common/video.c:50 -msgid "_Dots" -msgstr "_Кропкі" - -#: ../plug-ins/common/video.c:1807 -msgid "Simulate distortion produced by a fuzzy or low-res monitor" -msgstr "" -"Удаць скажэньне, выкліканае ненастаўленым або нізкаразрозьневым маніторам" - -#: ../plug-ins/common/video.c:1814 -msgid "Vi_deo..." -msgstr "_Відэа…" - -#: ../plug-ins/common/video.c:1886 ../plug-ins/common/video.c:2017 -msgid "Video" -msgstr "Відэа" - -#. frame for the radio buttons -#: ../plug-ins/common/video.c:2040 -msgid "Video Pattern" -msgstr "Узор відэа" - -#: ../plug-ins/common/video.c:2084 -msgid "_Additive" -msgstr "_Дабаўленьне" - -#: ../plug-ins/common/video.c:2094 -msgid "_Rotated" -msgstr "_Павернуты" - -#: ../plug-ins/common/warp.c:233 +#: plug-ins/common/warp.c:254 msgid "Twist or smear image in many different ways" msgstr "Па ўсялякаму скрывіць ці запэцкаць відарыс" -#: ../plug-ins/common/warp.c:241 -msgid "_Warp..." -msgstr "_Скрыўленьне…" - -#: ../plug-ins/common/warp.c:376 +#: plug-ins/common/warp.c:486 msgid "Warp" -msgstr "Скрыўленьне" +msgstr "Скрыўленне" -#: ../plug-ins/common/warp.c:398 +#: plug-ins/common/warp.c:508 msgid "Basic Options" -msgstr "Асноўныя выборы" +msgstr "Асноўныя параметры" -#: ../plug-ins/common/warp.c:420 +#: plug-ins/common/warp.c:529 msgid "Step size:" msgstr "Памер кроку:" -#: ../plug-ins/common/warp.c:434 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:771 -#: ../plug-ins/ifs-compose/ifs-compose.c:1209 +#: plug-ins/common/warp.c:543 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:762 +#: plug-ins/ifs-compose/ifs-compose.c:1239 msgid "Iterations:" -msgstr "Паўтарэньняў:" +msgstr "Паўтарэнняў:" #. Displacement map menu -#: ../plug-ins/common/warp.c:443 +#: plug-ins/common/warp.c:552 msgid "Displacement map:" -msgstr "Мапа зрушэньня:" +msgstr "Карта зрушэння:" #. ======================================================================= #. Displacement Type -#: ../plug-ins/common/warp.c:461 +#: plug-ins/common/warp.c:576 msgid "On edges:" msgstr "На краях:" -#: ../plug-ins/common/warp.c:472 +#: plug-ins/common/warp.c:587 msgid "Wrap" msgstr "Загарнуць" -#: ../plug-ins/common/warp.c:487 +#: plug-ins/common/warp.c:602 msgid "Smear" msgstr "Пляма" -#: ../plug-ins/common/warp.c:502 ../plug-ins/file-fits/fits.c:1020 -#: ../plug-ins/flame/flame.c:1174 ../plug-ins/gfig/gfig-dialog.c:1497 -msgid "Black" -msgstr "Чорны" - -#: ../plug-ins/common/warp.c:517 -msgid "Foreground color" -msgstr "Колер рысаваньня" - #. -------------------------------------------------------------------- -#. --------- The secondary table -------------------------- -#: ../plug-ins/common/warp.c:537 +#. --------- The secondary grid -------------------------- +#: plug-ins/common/warp.c:652 plug-ins/file-jpeg/jpeg-save.c:968 +#: plug-ins/file-webp/file-webp-dialog.c:107 msgid "Advanced Options" -msgstr "Дадатковыя выборы" +msgstr "Дадатковыя параметры" -#: ../plug-ins/common/warp.c:553 +#: plug-ins/common/warp.c:667 msgid "Dither size:" -msgstr "Згладжваньне:" +msgstr "Згладжванне:" -#: ../plug-ins/common/warp.c:566 +#: plug-ins/common/warp.c:680 msgid "Rotation angle:" msgstr "Вугал павароту:" -#: ../plug-ins/common/warp.c:579 +#: plug-ins/common/warp.c:693 msgid "Substeps:" msgstr "Падкрокаў:" #. Magnitude map menu -#: ../plug-ins/common/warp.c:588 +#: plug-ins/common/warp.c:702 msgid "Magnitude map:" -msgstr "Мапа вышыняў:" +msgstr "Карта вышыняў:" -#: ../plug-ins/common/warp.c:610 +#: plug-ins/common/warp.c:730 msgid "Use magnitude map" -msgstr "Ужываць мапу вышынь" +msgstr "Выкарыстоўваць карту вышынь" #. -------------------------------------------------------------------- -#. --------- The "other" table -------------------------- -#: ../plug-ins/common/warp.c:623 +#. --------- The "other" grid -------------------------- +#: plug-ins/common/warp.c:744 msgid "More Advanced Options" -msgstr "Больш дадатковых выбораў" +msgstr "Больш дадатковых параметраў" -#: ../plug-ins/common/warp.c:640 +#: plug-ins/common/warp.c:760 msgid "Gradient scale:" -msgstr "Памер ґрадыента:" +msgstr "Памер градыента:" -#: ../plug-ins/common/warp.c:659 +#: plug-ins/common/warp.c:783 msgid "Gradient map selection menu" -msgstr "Мэню выбару мапы ґрадыента" +msgstr "Меню выбару карты градыента" -#: ../plug-ins/common/warp.c:669 +#: plug-ins/common/warp.c:793 msgid "Vector mag:" -msgstr "Вышыня вэктара:" +msgstr "Вышыня вектара:" #. Angle -#: ../plug-ins/common/warp.c:684 ../plug-ins/ifs-compose/ifs-compose.c:567 +#: plug-ins/common/warp.c:808 plug-ins/ifs-compose/ifs-compose.c:677 msgid "Angle:" msgstr "Вугал:" -#: ../plug-ins/common/warp.c:703 +#: plug-ins/common/warp.c:831 msgid "Fixed-direction-vector map selection menu" -msgstr "Мэню выбару мапы вэктара зь фіксаваным напрамкам" +msgstr "Меню выбару карты вектара з фіксаваным напрамкам" #. make sure layer is visible -#: ../plug-ins/common/warp.c:1178 +#: plug-ins/common/warp.c:1385 msgid "Smoothing X gradient" -msgstr "Згладжваньне ґрадыента па X" +msgstr "Згладжванне градыента па X" -#: ../plug-ins/common/warp.c:1181 +#: plug-ins/common/warp.c:1388 msgid "Smoothing Y gradient" -msgstr "Згладжваньне ґрадыента па Y" +msgstr "Згладжванне градыента па Y" #. calculate new X,Y Displacement image maps -#: ../plug-ins/common/warp.c:1228 +#: plug-ins/common/warp.c:1432 msgid "Finding XY gradient" -msgstr "Пошук XY ґрадыента" +msgstr "Пошук XY градыента" -#: ../plug-ins/common/warp.c:1249 +#: plug-ins/common/warp.c:1450 #, c-format msgid "Flow step %d" msgstr "Крок %d" -#: ../plug-ins/common/waves.c:121 -msgid "Distort the image with waves" -msgstr "Сказіць відарыс хвалямі" +#: plug-ins/common/wavelet-decompose.c:118 +#, fuzzy +#| msgid "_Decompose..." +msgid "_Wavelet-decompose..." +msgstr "_Раскласці…" -#: ../plug-ins/common/waves.c:126 -msgid "_Waves..." -msgstr "_Хвалі…" +#: plug-ins/common/wavelet-decompose.c:122 +#: plug-ins/common/wavelet-decompose.c:402 +#, fuzzy +#| msgid "Decompose" +msgid "Wavelet decompose" +msgstr "Раскладанне" -#: ../plug-ins/common/waves.c:249 ../plug-ins/flame/flame.c:762 -msgid "Waves" -msgstr "Хвалі" +#: plug-ins/common/wavelet-decompose.c:131 +#, fuzzy +#| msgid "Scale:" +msgid "Scal_es" +msgstr "Памер:" -#: ../plug-ins/common/waves.c:296 -msgid "_Reflective" -msgstr "_Адбітыя" +#: plug-ins/common/wavelet-decompose.c:137 +msgid "Create a layer group to store the _decomposition" +msgstr "" -#: ../plug-ins/common/waves.c:315 -msgid "_Amplitude:" -msgstr "_Амплітуда:" +#: plug-ins/common/wavelet-decompose.c:145 +msgid "_Add a layer mask to each scales layer" +msgstr "" -#: ../plug-ins/common/waves.c:327 -msgid "_Phase:" -msgstr "_Фаза:" +#: plug-ins/common/wavelet-decompose.c:225 +#, fuzzy +#| msgid "Decompose" +msgid "Wavelet-Decompose" +msgstr "Раскладанне" -#: ../plug-ins/common/waves.c:339 -msgid "_Wavelength:" -msgstr "_Даўжыня хвалі:" +#: plug-ins/common/wavelet-decompose.c:235 +#, fuzzy +#| msgid "Decomposing" +msgid "Decomposition" +msgstr "Раскладанне" -#: ../plug-ins/common/waves.c:449 -msgid "Waving" -msgstr "Стварэньне хваль" +#: plug-ins/common/wavelet-decompose.c:302 +#, fuzzy, c-format +#| msgid "Scale X:" +msgid "Scale %d" +msgstr "Памер па X:" -#: ../plug-ins/common/web-browser.c:135 +#: plug-ins/common/wavelet-decompose.c:326 +msgid "Residual" +msgstr "" + +#: plug-ins/common/web-browser.c:175 msgid "The operating system is out of memory or resources." -msgstr "Апэрацыйнай сыстэме не стае памяці ці рэсурсаў." +msgstr "Аперацыйнай сыстэме не стае памяці ці рэсурсаў." -#: ../plug-ins/common/web-browser.c:138 +#: plug-ins/common/web-browser.c:178 msgid "The specified file was not found." msgstr "Пазначаны файл не адшуканы." -#: ../plug-ins/common/web-browser.c:141 +#: plug-ins/common/web-browser.c:181 msgid "The specified path was not found." msgstr "Пазначаны шлях не адшуканы." -#: ../plug-ins/common/web-browser.c:144 +#: plug-ins/common/web-browser.c:184 msgid "" "The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image)." msgstr "" "Недапушчальны файл .exe (можа не Microsoft Win32 .exe, або памылка ў " "вобразе .exe)." -#: ../plug-ins/common/web-browser.c:147 +#: plug-ins/common/web-browser.c:187 msgid "The operating system denied access to the specified file." -msgstr "Апэрацыйная сыстэма адмовіла ў доступе да пазначанага файла." +msgstr "Аперацыйная сыстэма адмовіла ў доступе да пазначанага файла." -#: ../plug-ins/common/web-browser.c:150 +#: plug-ins/common/web-browser.c:190 msgid "The file name association is incomplete or invalid." -msgstr "Адпаведнасьць назьве файла няпоўная ці недапушчальная." +msgstr "Адпаведнасць назве файла няпоўная ці недапушчальная." -#: ../plug-ins/common/web-browser.c:153 +#: plug-ins/common/web-browser.c:193 msgid "DDE transaction busy" msgstr "Транзакцыя DDE занятая" -#: ../plug-ins/common/web-browser.c:156 +#: plug-ins/common/web-browser.c:196 msgid "The DDE transaction failed." msgstr "Транзакцыя DDE не ўдалася." -#: ../plug-ins/common/web-browser.c:159 +#: plug-ins/common/web-browser.c:199 msgid "The DDE transaction timed out." msgstr "Вычарпаны час транзакцыі DDE." -#: ../plug-ins/common/web-browser.c:162 +#: plug-ins/common/web-browser.c:202 msgid "The specified DLL was not found." msgstr "Пазначаная DLL не адшуканая." -#: ../plug-ins/common/web-browser.c:165 +#: plug-ins/common/web-browser.c:205 msgid "There is no application associated with the given file name extension." -msgstr "Няма аніякай праґрамы, прызначанай дадазенаму пашырэньню назвы файла." +msgstr "Няма аніякай праграмы, прызначанай дадазенаму пашырэнню назвы файла." -#: ../plug-ins/common/web-browser.c:168 +#: plug-ins/common/web-browser.c:208 msgid "There was not enough memory to complete the operation." -msgstr "Не стае памяці, каб скончыць дзеяньне." +msgstr "Не стае памяці, каб скончыць дзеянне." -#: ../plug-ins/common/web-browser.c:171 +#: plug-ins/common/web-browser.c:211 msgid "A sharing violation occurred." -msgstr "Парушэньне умоў агульнага доступу." +msgstr "Парушэнне умоў агульнага доступу." -#: ../plug-ins/common/web-browser.c:174 +#: plug-ins/common/web-browser.c:214 msgid "Unknown Microsoft Windows error." msgstr "Невядомая памылка Microsoft Windows." -#: ../plug-ins/common/web-browser.c:177 +#: plug-ins/common/web-browser.c:217 #, c-format msgid "Failed to open '%s': %s" -msgstr "Немагчыма адкрыць «%s»: %s" +msgstr "Не ўдалося адкрыць «%s»: %s" -#: ../plug-ins/common/web-page.c:98 +#: plug-ins/common/web-page.c:130 +msgid "From _Webpage..." +msgstr "З _сеціўнай старонкі…" + +#: plug-ins/common/web-page.c:134 msgid "Create an image of a webpage" msgstr "Стварыць відарыс сеціўнай старонкі" -#: ../plug-ins/common/web-page.c:104 -msgid "From _Webpage..." -msgstr "Зь _сеціўнай старонкі…" - -#: ../plug-ins/common/web-page.c:233 +#: plug-ins/common/web-page.c:274 msgid "Create from webpage" -msgstr "Стварыць зь сеціўнай старонкі" +msgstr "Стварыць з сеціўнай старонкі" -#: ../plug-ins/common/web-page.c:238 -msgid "_Create" +#: plug-ins/common/web-page.c:279 +msgid "Cre_ate" msgstr "_Стварыць" -#: ../plug-ins/common/web-page.c:266 +#: plug-ins/common/web-page.c:308 msgid "Enter location (URI):" msgstr "Увядзі адрас (URI):" -#. entscale == Entry and Scale pair function found in pixelize.c -#: ../plug-ins/common/web-page.c:289 ../plug-ins/maze/maze-dialog.c:198 +#: plug-ins/common/web-page.c:331 msgid "Width (pixels):" -msgstr "Шырыня (у піксэлях):" +msgstr "Шырыня (у пікселях):" -#: ../plug-ins/common/web-page.c:308 +#: plug-ins/common/web-page.c:351 msgid "Font size:" -msgstr "Кеґль:" +msgstr "Кегль:" -#: ../plug-ins/common/web-page.c:315 +#: plug-ins/common/web-page.c:358 msgid "Huge" msgstr "Вялізны" -#: ../plug-ins/common/web-page.c:316 +#: plug-ins/common/web-page.c:359 msgid "Large" msgstr "Вялікі" -#: ../plug-ins/common/web-page.c:317 +#: plug-ins/common/web-page.c:360 msgctxt "web-page" msgid "Default" msgstr "Прадвызначаны" -#: ../plug-ins/common/web-page.c:318 +#: plug-ins/common/web-page.c:361 msgid "Small" msgstr "Малы" -#: ../plug-ins/common/web-page.c:319 +#: plug-ins/common/web-page.c:362 msgid "Tiny" msgstr "Маленечкі" -#: ../plug-ins/common/web-page.c:443 -#, c-format -msgid "No URL was specified" -msgstr "URL ня быў пазначаны" +#: plug-ins/common/web-page.c:456 +msgid "Webpage" +msgstr "Сеціўная старонка" -#: ../plug-ins/common/web-page.c:510 +#: plug-ins/common/web-page.c:503 +#, c-format +msgid "Transferring webpage image for '%s'" +msgstr "Пераўтварэнне відарыса старонкі для «%s»" + +#: plug-ins/common/web-page.c:526 +msgid "No URL was specified" +msgstr "URL не быў пазначаны" + +#: plug-ins/common/web-page.c:588 #, c-format msgid "Downloading webpage '%s'" msgstr "Загрузка старонкі «%s»" -#: ../plug-ins/common/web-page.c:527 -#, c-format -msgid "Transferring webpage image for '%s'" -msgstr "Ператварэньне відарыса старонкі для «%s»" - -#: ../plug-ins/common/web-page.c:536 -msgid "Webpage" -msgstr "Сеціўная старонка" - -#: ../plug-ins/common/whirl-pinch.c:138 -msgid "Distort an image by whirling and pinching" -msgstr "Скрывіць відарыс віраваньнямі й шчыпаньнямі" - -#: ../plug-ins/common/whirl-pinch.c:149 -msgid "W_hirl and Pinch..." -msgstr "Вір і _шчыпок…" - -#: ../plug-ins/common/whirl-pinch.c:341 -msgid "Whirling and pinching" -msgstr "Віраваньне й шчыпаньне" - -#: ../plug-ins/common/whirl-pinch.c:529 -msgid "Whirl and Pinch" -msgstr "Вір і шчыпок" - -#: ../plug-ins/common/whirl-pinch.c:567 -msgid "_Whirl angle:" -msgstr "_Вугал віраваньня:" - -#: ../plug-ins/common/whirl-pinch.c:579 -msgid "_Pinch amount:" -msgstr "Моц шчыпаньня:" - -#: ../plug-ins/common/wind.c:175 -msgid "Smear image to give windblown effect" -msgstr "Змазвае відарыс, каб стварыць эфэкт ветру" - -#: ../plug-ins/common/wind.c:180 -msgid "Wi_nd..." -msgstr "_Вецер…" - -#: ../plug-ins/common/wind.c:314 -msgid "Rendering blast" -msgstr "Стварэньне парыву ветру" - -#: ../plug-ins/common/wind.c:444 -msgid "Rendering wind" -msgstr "Стварэньне ветру" - -#: ../plug-ins/common/wind.c:876 -msgid "Wind" -msgstr "Вецер" - -#. ******************************************************** -#. radio buttons for choosing wind rendering algorithm -#. ***************************************************** -#: ../plug-ins/common/wind.c:919 -msgid "Style" -msgstr "Стыль" - -#: ../plug-ins/common/wind.c:923 -msgid "_Wind" -msgstr "_Вецер" - -#: ../plug-ins/common/wind.c:924 -msgid "_Blast" -msgstr "_Парыў" - -#: ../plug-ins/common/wind.c:947 -msgid "_Left" -msgstr "_Левы" - -#: ../plug-ins/common/wind.c:948 -msgid "_Right" -msgstr "_Правы" - -#. **************************************************** -#. radio buttons for choosing BOTH, LEADING, TRAILING -#. ************************************************** -#: ../plug-ins/common/wind.c:967 -msgid "Edge Affected" -msgstr "Закрануты край" - -#: ../plug-ins/common/wind.c:971 -msgid "L_eading" -msgstr "_Пярэдні" - -#: ../plug-ins/common/wind.c:972 -msgid "Tr_ailing" -msgstr "_Задні" - -#: ../plug-ins/common/wind.c:973 -msgid "Bot_h" -msgstr "_Абодва" - -#: ../plug-ins/common/wind.c:1010 -msgid "Higher values restrict the effect to fewer areas of the image" -msgstr "Большыя значэньні абмяжоўваюць эфэкт да меншых абласьцей відарыса" - -#: ../plug-ins/common/wind.c:1025 ../plug-ins/pikaressionist/orientmap.c:693 -msgid "_Strength:" -msgstr "_Сіла:" - -#: ../plug-ins/common/wind.c:1029 -msgid "Higher values increase the magnitude of the effect" -msgstr "Большыя значэньні павялічваюць велічыню эфэкта" - -#: ../plug-ins/file-bmp/bmp-read.c:85 +#: plug-ins/file-bmp/bmp-load.c:146 msgid "Bad colormap" -msgstr "Кепская мапа колераў" +msgstr "Кепская карта колераў" -#: ../plug-ins/file-bmp/bmp-read.c:169 ../plug-ins/file-bmp/bmp-read.c:180 -#: ../plug-ins/file-bmp/bmp-read.c:187 ../plug-ins/file-bmp/bmp-read.c:196 -#: ../plug-ins/file-bmp/bmp-read.c:211 ../plug-ins/file-bmp/bmp-read.c:416 -#: ../plug-ins/file-bmp/bmp-read.c:437 ../plug-ins/file-bmp/bmp-read.c:448 -#: ../plug-ins/file-bmp/bmp-read.c:456 ../plug-ins/file-bmp/bmp-read.c:464 -#: ../plug-ins/file-bmp/bmp-read.c:476 +#: 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 #, c-format msgid "'%s' is not a valid BMP file" -msgstr "'%s' не зьяўляецца файлам BMP" +msgstr "'%s' не з'яўляецца файлам BMP" -#: ../plug-ins/file-bmp/bmp-read.c:225 ../plug-ins/file-bmp/bmp-read.c:252 -#: ../plug-ins/file-bmp/bmp-read.c:280 ../plug-ins/file-bmp/bmp-read.c:345 -#: ../plug-ins/file-bmp/bmp-read.c:395 +#: 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 #, c-format msgid "Error reading BMP file header from '%s'" -msgstr "Памылка чытаньня загалоўку файла BMP з '%s'" +msgstr "Памылка чытання загалоўку файла BMP з '%s'" -#: ../plug-ins/file-bmp/bmp-read.c:588 +#: plug-ins/file-bmp/bmp-load.c:381 +#, fuzzy, c-format +#| msgid "Unsupported compression mode: %d" +msgid "Unsupported compression (%u) in BMP file from '%s'" +msgstr "Рэжым сціскання не падтрымліваецца: %d" + +#: plug-ins/file-bmp/bmp-load.c:673 msgid "Unrecognized or invalid BMP compression format." -msgstr "Фармат сьцісканьня BMP не падтрымліваецца або не дапушчаецца." +msgstr "Фармат сціскання BMP не падтрымліваецца або недапушчальны." -#: ../plug-ins/file-bmp/bmp-read.c:630 +#: plug-ins/file-bmp/bmp-load.c:720 msgid "Unsupported or invalid bitdepth." -msgstr "Глыбіня бітаў не падтрымліваецца або не дапушчаецца." +msgstr "Глыбіня бітаў не падтрымліваецца або недапушчальная." -#: ../plug-ins/file-bmp/bmp-read.c:818 ../plug-ins/file-bmp/bmp-read.c:859 -#: ../plug-ins/file-bmp/bmp-read.c:909 +#: plug-ins/file-bmp/bmp-load.c:885 plug-ins/file-bmp/bmp-load.c:928 +#: plug-ins/file-bmp/bmp-load.c:982 msgid "The bitmap ends unexpectedly." -msgstr "Бітмапа скончылася заўчасна." +msgstr "БітКарта скончылася заўчасна." -#: ../plug-ins/file-bmp/bmp-write.c:191 ../plug-ins/file-bmp/bmp-write.c:217 -msgid "Cannot save indexed image with transparency in BMP file format." -msgstr "Немагчыма запісаць індэксаваны відарыс з празрыстасьцю ў фармат BMP." +#: plug-ins/file-bmp/bmp-save.c:199 plug-ins/file-bmp/bmp-save.c:232 +#, fuzzy +#| msgid "Cannot save indexed image with transparency in BMP file format." +msgid "Cannot export indexed image with transparency in BMP file format." +msgstr "Немагчыма запісаць індэксаваны відарыс з празрыстасцю ў фармат BMP." -#: ../plug-ins/file-bmp/bmp-write.c:193 ../plug-ins/file-bmp/bmp-write.c:219 +#: plug-ins/file-bmp/bmp-save.c:201 plug-ins/file-bmp/bmp-save.c:234 msgid "Alpha channel will be ignored." -msgstr "Альфаканал будзе праігнараваны." +msgstr "Альфа-канал будзе праігнараваны." -#. Run-Length Encoded -#: ../plug-ins/file-bmp/bmp-write.c:861 -msgid "_Run-Length Encoded" -msgstr "_Закадаваны ў RLE" +#: plug-ins/file-bmp/bmp-save.c:1009 +#, fuzzy +#| msgid "Co_mpatibility Options" +msgid "Compatibility" +msgstr "Параметры _сумяшчальнасці" -#. Compatibility Options -#: ../plug-ins/file-bmp/bmp-write.c:874 -msgid "Co_mpatibility Options" -msgstr "Выборы _сумяшчальнасьці" - -#: ../plug-ins/file-bmp/bmp-write.c:884 -msgid "_Do not write color space information" -msgstr "_Не запісваць зьвесткі аб прасторы колераў" - -#: ../plug-ins/file-bmp/bmp-write.c:886 +#: plug-ins/file-bmp/bmp-save.c:1014 +#, fuzzy +#| msgid "" +#| "Some applications can not read BMP images that include color space " +#| "information. PIKA writes color space information by default. Enabling " +#| "this option will cause PIKA to not write color space information to the " +#| "file." msgid "" "Some applications can not read BMP images that include color space " -"information. PIKA writes color space information by default. Enabling this " +"information. PIKA writes color space information by default. Disabling this " "option will cause PIKA to not write color space information to the file." msgstr "" -"Некаторыя праґрамы ня могуць чытаць відарысы BMP, якія ўтрымліваюць зьвесткі " -"аб прасторы колераў. PIKA зазвычай запісвае гэтыя зьвесткі. Калі " -"задзейнічаць гэты выбор, то PIKA ня будзе пісаць у файл зьвесткі аб прасторы " -"колераў." +"Некаторыя праграмы не могуць чытаць відарысы BMP, якія ўтрымліваюць звесткі " +"аб прасторы колераў. PIKA зазвычай запісвае гэтыя звесткі. Калі задзейнічаць " +"гэты параметр, то PIKA не будзе пісаць у файл звесткі аб прасторы колераў." -#. Advanced Options -#: ../plug-ins/file-bmp/bmp-write.c:902 ../plug-ins/file-jpeg/jpeg-save.c:901 -msgid "_Advanced Options" -msgstr "_Дадатковыя выборы" +#. RGB Encoding Options +#: plug-ins/file-bmp/bmp-save.c:1025 +msgid "16 bit (R5 G6 B5)" +msgstr "16 біт (R5 G6 B5)" -#: ../plug-ins/file-bmp/bmp-write.c:917 -msgid "16 bits" -msgstr "16 бітаў" +#: plug-ins/file-bmp/bmp-save.c:1026 +msgid "16 bit (A1 R5 G5 B5)" +msgstr "16 біт (A1 R5 G5 B5)" -#: ../plug-ins/file-bmp/bmp-write.c:953 -msgid "24 bits" -msgstr "24 біты" +#: plug-ins/file-bmp/bmp-save.c:1027 +msgid "16 bit (X1 R5 G5 B5)" +msgstr "16 біт (X1 R5 G5 B5)" -#: ../plug-ins/file-bmp/bmp-write.c:970 -msgid "32 bits" -msgstr "32 біты" +#: plug-ins/file-bmp/bmp-save.c:1028 +msgid "24 bit (R8 G8 B8)" +msgstr "24 біты (R8 G8 B8)" -#: ../plug-ins/file-bmp/bmp.c:123 ../plug-ins/file-bmp/bmp.c:142 +#: plug-ins/file-bmp/bmp-save.c:1029 +msgid "32 bit (A8 R8 G8 B8)" +msgstr "32 біты (A8 R8 G8 B8)" + +#: plug-ins/file-bmp/bmp-save.c:1030 +msgid "32 bit (X8 R8 G8 B8)" +msgstr "32 біты (X8 R8 G8 B8)" + +#: plug-ins/file-bmp/bmp.c:152 plug-ins/file-bmp/bmp.c:178 msgid "Windows BMP image" msgstr "Відарыс Windows BMP" -#: ../plug-ins/file-compressor/file-compressor.c:162 -msgid "gzip archive" -msgstr "Архіў gzip" +#: plug-ins/file-bmp/bmp.c:155 plug-ins/file-bmp/bmp.c:156 +msgid "Loads files of Windows BMP file format" +msgstr "Загружае файлы ў фармаце Windows BMP" -#: ../plug-ins/file-compressor/file-compressor.c:181 -msgid "bzip archive" -msgstr "Архіў bzip" +#: plug-ins/file-bmp/bmp.c:180 +msgid "BMP" +msgstr "BMP" -#: ../plug-ins/file-compressor/file-compressor.c:388 -msgid "No sensible file extension, saving as compressed XCF." -msgstr "Няма пэўнага пашырэньня файла, захаваны як сьціснуты XCF." +#: plug-ins/file-bmp/bmp.c:183 plug-ins/file-bmp/bmp.c:184 +msgid "Saves files in Windows BMP file format" +msgstr "" -#: ../plug-ins/file-compressor/file-compressor.c:444 -msgid "No sensible file extension, attempting to load with file magic." -msgstr "Няма пэўнага пашырэньня файла, спрабую ўгадаць ягоны тып." +#: plug-ins/file-bmp/bmp.c:197 +#, fuzzy +#| msgid "_Run-Length Encoded" +msgid "Ru_n-Length Encoded" +msgstr "_Закадаваны ў RLE" -#: ../plug-ins/file-faxg3/faxg3.c:102 +#: plug-ins/file-bmp/bmp.c:198 +msgid "" +"Use run-length-encoding compression (only valid for 4 and 8-bit indexed " +"images)" +msgstr "" + +#: plug-ins/file-bmp/bmp.c:204 +#, fuzzy +#| msgid "_Do not write color space information" +msgid "_Write color space information" +msgstr "_Не запісваць звесткі аб прасторы колераў" + +#: plug-ins/file-bmp/bmp.c:205 +msgid "Whether or not to write BITMAPV5HEADER color space data" +msgstr "" + +#: plug-ins/file-bmp/bmp.c:211 +msgid "R_GB format" +msgstr "Фа_рмат RGB" + +#: plug-ins/file-bmp/bmp.c:212 +msgid "" +"Export format for RGB images (0=RGB_565, 1=RGBA_5551, 2=RGB_555, 3=RGB_888, " +"4=RGBA_8888, 5=RGBX_8888)" +msgstr "" + +#: plug-ins/file-bmp/bmp.c:296 +msgid "BMP format does not support multiple layers." +msgstr "Фармат BMP не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/file-dds/dds.c:146 plug-ins/file-dds/dds.c:184 +#, fuzzy +#| msgid "SVG image" +msgid "DDS image" +msgstr "Відарыс SVG" + +#: plug-ins/file-dds/dds.c:149 plug-ins/file-dds/dds.c:150 +msgid "Loads files in DDS image format" +msgstr "Загружае файлы ў фармаце DDS" + +#: plug-ins/file-dds/dds.c:165 +msgid "Load _mipmaps" +msgstr "" + +#: plug-ins/file-dds/dds.c:166 +#, fuzzy +#| msgid "Load Lighting Preset" +msgid "Load mipmaps if present" +msgstr "Загрузіць набор асвятлення" + +#: plug-ins/file-dds/dds.c:171 +msgid "Automatically decode YCoCg/AE_xp images when detected" +msgstr "" + +#: plug-ins/file-dds/dds.c:172 +msgid "Decode YCoCg/AExp images when detected" +msgstr "" + +#: plug-ins/file-dds/dds.c:323 +msgid "Decode YCoCg" +msgstr "" + +#: plug-ins/file-dds/dds.c:327 plug-ins/file-dds/dds.c:328 +msgid "Converts YCoCg encoded pixels to RGB" +msgstr "" + +#: plug-ins/file-dds/dds.c:345 +msgid "Decode YCoCg (scaled)" +msgstr "" + +#: plug-ins/file-dds/dds.c:349 plug-ins/file-dds/dds.c:351 +msgid "Converts YCoCg (scaled) encoded pixels to RGB" +msgstr "" + +#: plug-ins/file-dds/dds.c:369 +msgid "Decode Alpha exponent" +msgstr "" + +#: plug-ins/file-dds/dds.c:375 plug-ins/file-dds/dds.c:373 +msgid "Converts alpha exponent encoded pixels to RGB" +msgstr "" + +#: plug-ins/file-dds/ddsread.c:366 +#, fuzzy +#| msgid "Can't create a new image" +msgid "Could not allocate a new image." +msgstr "Не ўдалося стварыць новы відарыс" + +#: plug-ins/file-dds/ddsread.c:377 +#, fuzzy +#| msgid "Error reading file." +msgid "Error reading palette." +msgstr "Памылка чытання файла." + +#: plug-ins/file-dds/ddsread.c:660 +msgid "Invalid DDS format magic number." +msgstr "" + +#: plug-ins/file-dds/ddsread.c:739 +#, c-format +msgid "Invalid bpp value for RGB data: %d" +msgstr "" + +#: plug-ins/file-dds/ddsread.c:750 +#, c-format +msgid "Invalid bpp value for luminance data: %d" +msgstr "" + +#: plug-ins/file-dds/ddsread.c:801 +#, fuzzy +#| msgid "Invalid file." +msgid "Invalid pixel format." +msgstr "Недапушчальны файл." + +#: plug-ins/file-dds/ddsread.c:970 +#, fuzzy, c-format +#| msgid "Unsupported brush format" +msgid "Unsupported DXGI format (%d)" +msgstr "Фармат пэндзля не падтрымліваецца" + +#: plug-ins/file-dds/ddsread.c:1135 plug-ins/file-dds/ddsread.c:1174 +msgid "Unexpected EOF.\n" +msgstr "" + +#: plug-ins/file-dds/ddsread.c:1514 +#, fuzzy +#| msgid "Open as" +msgid "Open DDS" +msgstr "Адкрыць як" + +#: plug-ins/file-dds/ddswrite.c:1984 +msgid "Export Image as DDS" +msgstr "" + +#: plug-ins/file-dds/ddswrite.c:2015 +#| msgid "Compression" +msgid "_Compression:" +msgstr "_Сцісканне:" + +#: plug-ins/file-dds/ddswrite.c:2020 +msgid "Use _perceptual error metric" +msgstr "" + +#: plug-ins/file-dds/ddswrite.c:2042 +msgid "_Format:" +msgstr "_Фармат:" + +#: plug-ins/file-dds/ddswrite.c:2046 +#, fuzzy +#| msgid "Selected:" +msgid "Selected layer" +msgstr "Выбраны: " + +#: plug-ins/file-dds/ddswrite.c:2047 +#, fuzzy +#| msgid "Align Visible Layers" +msgid "All visible layers" +msgstr "Раўнаваць бачныя слаі" + +#: plug-ins/file-dds/ddswrite.c:2048 +msgid "As cube map" +msgstr "" + +#: plug-ins/file-dds/ddswrite.c:2049 +msgid "As volume map" +msgstr "" + +#: plug-ins/file-dds/ddswrite.c:2050 +msgid "As texture array" +msgstr "" + +#: plug-ins/file-dds/ddswrite.c:2055 +#| msgid "Save" +msgid "_Save:" +msgstr "_Захаваць:" + +#: plug-ins/file-dds/ddswrite.c:2068 +msgid "Flip image _vertically on export" +msgstr "" + +#: plug-ins/file-dds/ddswrite.c:2071 +#, fuzzy +#| msgid "No matches" +msgid "No mipmaps" +msgstr "Няма адпаведнікаў" + +#: plug-ins/file-dds/ddswrite.c:2072 +#, fuzzy +#| msgid "I_nvert bumpmap" +msgid "Generate mipmaps" +msgstr "_Інвертаваць карту" + +#: plug-ins/file-dds/ddswrite.c:2073 +#, fuzzy +#| msgid "Select existing area" +msgid "Use existing mipmaps" +msgstr "Выбраць існоўную вобласць" + +#: plug-ins/file-dds/ddswrite.c:2078 +msgid "_Mipmaps:" +msgstr "" + +#: plug-ins/file-dds/ddswrite.c:2096 +#, fuzzy +#| msgid "Transparent" +msgid "Transparent index:" +msgstr "Празрыстая" + +#: plug-ins/file-dds/ddswrite.c:2104 +#, fuzzy +#| msgid "Main Options" +msgid "Mipmap Options" +msgstr "Асноўныя параметры" + +#: plug-ins/file-dds/ddswrite.c:2127 +#| msgid "Filter" +msgid "F_ilter:" +msgstr "Ф_ільтр:" + +#: plug-ins/file-dds/ddswrite.c:2139 +#, fuzzy +#| msgid "_Wrap around" +msgid "_Wrap mode:" +msgstr "_Загарнуць" + +#: plug-ins/file-dds/ddswrite.c:2144 +#, fuzzy +#| msgid "Applying convolution" +msgid "Appl_y gamma correction" +msgstr "Выкарыстанне згортвання" + +#: plug-ins/file-dds/ddswrite.c:2148 +#, fuzzy +msgid "Use s_RGB colorspace" +msgstr "Выкарыстоўваць падколеры" + +#: plug-ins/file-dds/ddswrite.c:2154 plug-ins/flame/flame.c:1161 +msgid "_Gamma:" +msgstr "_Гама:" + +#: plug-ins/file-dds/ddswrite.c:2159 +msgid "Preserve alpha _test coverage" +msgstr "" + +#: plug-ins/file-dds/ddswrite.c:2166 +#, fuzzy +#| msgid "_Alpha threshold:" +msgid "_Alpha test threshold:" +msgstr "_Парог празрыстасці:" + +#: plug-ins/file-exr/file-exr.c:111 +msgid "Loads files in the OpenEXR file format" +msgstr "Загружае файлы ў фармаце OpenEXR" + +#: plug-ins/file-exr/file-exr.c:198 +#, c-format +msgid "Error opening file '%s' for reading" +msgstr "Памылка адкрыцця файла «%s» для чытання" + +#: plug-ins/file-exr/file-exr.c:209 +#, fuzzy, c-format +#| msgid "Error reading BMP file header from '%s'" +msgid "Error querying image dimensions from '%s'" +msgstr "Памылка чытання загалоўку файла BMP з '%s'" + +#: plug-ins/file-exr/file-exr.c:229 +#, fuzzy, c-format +#| msgid "Error reading BMP file header from '%s'" +msgid "Error querying image precision from '%s'" +msgstr "Памылка чытання загалоўку файла BMP з '%s'" + +#: plug-ins/file-exr/file-exr.c:247 +#, fuzzy, c-format +#| msgid "Error reading BMP file header from '%s'" +msgid "Error querying image type from '%s'" +msgstr "Памылка чытання загалоўку файла BMP з '%s'" + +#: plug-ins/file-exr/file-exr.c:309 +#, fuzzy, c-format +#| msgid "Error reading BMP file header from '%s'" +msgid "Error reading pixel data from '%s'" +msgstr "Памылка чытання загалоўку файла BMP з '%s'" + +#: plug-ins/file-exr/file-exr.c:416 +msgid "Import OpenEXR" +msgstr "" + +#: plug-ins/file-exr/file-exr.c:430 +#, fuzzy +#| msgid "Unknown element <%s>" +msgid "Unknown Channel Name" +msgstr "Невядомы элемент <%s>" + +#: plug-ins/file-exr/file-exr.c:431 +msgid "" +"The image contains a single unknown channel.\n" +"It has been converted to grayscale." +msgstr "" + +#: plug-ins/file-faxg3/faxg3.c:134 msgid "G3 fax image" msgstr "Відарыс G3 fax" -#: ../plug-ins/file-fits/fits.c:168 ../plug-ins/file-fits/fits.c:188 +#: plug-ins/file-faxg3/faxg3.c:295 plug-ins/file-faxg3/faxg3.c:593 +#, fuzzy +#| msgid "Could not get layers for image %d" +msgid "Could not create buffer to process image data." +msgstr "Не ўдалося атрымаць слаі відарыса %d" + +#: plug-ins/file-faxg3/faxg3.c:560 +#, c-format +msgid "Invalid image dimensions (%d x %d). Image may be corrupt." +msgstr "" + +#: plug-ins/file-faxg3/faxg3.c:570 +#, fuzzy +#| msgid "Could not create new image for '%s': %s" +msgid "Could not create image." +msgstr "Не ўдалося стварыць новы відарыс для «%s»: %s" + +#: plug-ins/file-fits/fits.c:177 plug-ins/file-fits/fits.c:218 msgid "Flexible Image Transport System" msgstr "Зручная сыстэма перадачы відарысаў (FITS)" -#: ../plug-ins/file-fits/fits.c:368 -msgid "Error during open of FITS file" -msgstr "Памылка падчас адкрыцьця файла FITS" +#: plug-ins/file-fits/fits.c:180 +msgid "Load file of the FITS file format" +msgstr "Загрузіць файл ў фармаце FITS" -#: ../plug-ins/file-fits/fits.c:374 -msgid "FITS file keeps no displayable images" -msgstr "Файл FITS ня ўтрымлівае відарысаў, прыдатных да паказу" +#: plug-ins/file-fits/fits.c:181 +#| msgid "Flexible Image Transport System" +msgid "Load file of the FITS file format (Flexible Image Transport System)" +msgstr "Загрузіць файл ў фармаце FITS (Flexible Image Transport System)" -#: ../plug-ins/file-fits/fits.c:455 -msgid "FITS save cannot handle images with alpha channels" -msgstr "Захоўваньне АШЕЫ ня можа апрацоўваць відарысы з альфаканаламі" - -#: ../plug-ins/file-fits/fits.c:992 -msgid "Load FITS File" -msgstr "Загрузіць файла FITS" - -#: ../plug-ins/file-fits/fits.c:1016 +#: plug-ins/file-fits/fits.c:198 plug-ins/file-fits/fits.c:199 msgid "Replacement for undefined pixels" -msgstr "Замена для нявызначаных піксэляў" +msgstr "Замена для нявызначаных пікселяў" -#: ../plug-ins/file-fits/fits.c:1021 ../plug-ins/gfig/gfig-dialog.c:1323 -#: ../plug-ins/gfig/gfig-dialog.c:1498 +#: plug-ins/file-fits/fits.c:204 +msgid "Pixel value scaling" +msgstr "Маштабаванне значэння пікселя" + +#: plug-ins/file-fits/fits.c:205 +msgid "Use DATAMIN/DATAMAX-scaling if possible" +msgstr "" + +#: plug-ins/file-fits/fits.c:221 +msgid "Export file in the FITS file format" +msgstr "" + +#: plug-ins/file-fits/fits.c:222 +#, fuzzy +#| msgid "FITS save cannot handle images with alpha channels" +msgid "" +"FITS exporting handles all image types except those with alpha channels." +msgstr "Захоўванне АШЕЫ не можа апрацоўваць відарысы з альфа-каналамі" + +#: plug-ins/file-fits/fits.c:326 +msgid "FITS format does not support multiple layers." +msgstr "Фармат FITS не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/file-fits/fits.c:409 +msgid "Error during opening of FITS file" +msgstr "Памылка падчас адкрыцця файла FITS" + +#: plug-ins/file-fits/fits.c:422 plug-ins/file-fits/fits.c:634 +msgid "FITS file keeps no displayable images" +msgstr "Файл FITS не ўтрымлівае відарысаў, прыдатных да паказу" + +#: plug-ins/file-fits/fits.c:520 +msgid "FITS HDU" +msgstr "FITS HDU" + +#: plug-ins/file-fits/fits.c:658 +#, fuzzy +#| msgid "FITS save cannot handle images with alpha channels" +msgid "FITS export cannot handle images with alpha channels" +msgstr "Захоўванне АШЕЫ не можа апрацоўваць відарысы з альфа-каналамі" + +#: plug-ins/file-fits/fits.c:1024 +msgid "Open FITS File" +msgstr "Адкрыць файл FITS" + +#: plug-ins/file-fits/fits.c:1029 plug-ins/gfig/gfig-dialog.c:1292 +#: plug-ins/gfig/gfig-dialog.c:1460 msgid "White" msgstr "Белы" -#: ../plug-ins/file-fits/fits.c:1028 -msgid "Pixel value scaling" -msgstr "Маштабаваньне значэньня піксэля" - -#: ../plug-ins/file-fits/fits.c:1033 +#: plug-ins/file-fits/fits.c:1037 msgid "By DATAMIN/DATAMAX" msgstr "На DATAMIN/DATAMAX" -#: ../plug-ins/file-fits/fits.c:1040 -msgid "Image Composing" -msgstr "Складаньне відарыса" +#: plug-ins/file-fli/fli.c:45 plug-ins/file-fli/fli.c:59 +#: plug-ins/file-fli/fli.c:75 plug-ins/file-fli/fli.c:924 +#: plug-ins/file-fli/fli.c:1244 plug-ins/file-fli/fli.c:1524 +msgid "Error reading from file." +msgstr "Памылка чытання з файла." -#: ../plug-ins/file-fits/fits.c:1044 -msgctxt "composing" -msgid "None" -msgstr "Няма" +#: plug-ins/file-fli/fli.c:91 plug-ins/file-fli/fli.c:110 +#: plug-ins/file-fli/fli.c:131 +msgid "Error writing to file." +msgstr "Памылка запісу ў файл." -#: ../plug-ins/file-fli/fli-pika.c:166 ../plug-ins/file-fli/fli-pika.c:186 +#: plug-ins/file-fli/fli.c:157 plug-ins/file-fli/fli.c:167 +#: plug-ins/file-fli/fli.c:179 +msgid "Error reading header. " +msgstr "Памылка чытання загалоўка. " + +#: plug-ins/file-fli/fli.c:187 +msgid "Invalid header: not a FLI/FLC animation!" +msgstr "" + +#: plug-ins/file-fli/fli.c:205 +#, c-format +msgid "Incorrect file size in header: %u, should be: %u." +msgstr "" + +#: plug-ins/file-fli/fli.c:213 +msgid "Number of frames is 0. Setting to 2." +msgstr "" + +#: plug-ins/file-fli/fli.c:220 +#, c-format +msgid "Suspicious frame delay of %ums. Setting delay to 70ms." +msgstr "" + +#: plug-ins/file-fli/fli.c:249 plug-ins/file-fli/fli.c:258 +#: plug-ins/file-fli/fli.c:269 plug-ins/file-fli/fli.c:276 +msgid "Error writing header. " +msgstr "Памылка запісу загалоўка. " + +#: plug-ins/file-fli/fli.c:283 +msgid "Invalid header: unrecognized magic number!" +msgstr "" + +#: plug-ins/file-fli/fli.c:313 plug-ins/file-fli/fli.c:345 +msgid "Error reading frame. " +msgstr "Памылка чытання кадра. " + +#: plug-ins/file-fli/fli.c:323 +msgid "Invalid frame size points past end of file!" +msgstr "" + +#: plug-ins/file-fli/fli.c:353 +msgid "Invalid chunk size points past end of file!" +msgstr "" + +#: plug-ins/file-fli/fli.c:476 +msgid "Invalid header: magic number is wrong!" +msgstr "" + +#: plug-ins/file-fli/fli.c:513 +msgid "Error writing frame header. " +msgstr "Памылка запісу загалоўка кадра. " + +#: plug-ins/file-fli/fli.c:537 plug-ins/file-fli/fli.c:547 +#: plug-ins/file-fli/fli.c:556 plug-ins/file-fli/fli.c:575 +#: plug-ins/file-fli/fli.c:715 plug-ins/file-fli/fli.c:726 +#: plug-ins/file-fli/fli.c:735 plug-ins/file-fli/fli.c:756 +msgid "Error reading palette. " +msgstr "Памылка чытання палітры. " + +#: plug-ins/file-fli/fli.c:611 plug-ins/file-fli/fli.c:619 +#: plug-ins/file-fli/fli.c:657 plug-ins/file-fli/fli.c:666 +#: plug-ins/file-fli/fli.c:685 plug-ins/file-fli/fli.c:789 +#: plug-ins/file-fli/fli.c:797 plug-ins/file-fli/fli.c:832 +#: plug-ins/file-fli/fli.c:842 plug-ins/file-fli/fli.c:862 +#, fuzzy +#| msgid "Error writing output file." +msgid "Error writing color map. " +msgstr "Памылка запісу выходнага файла." + +#: plug-ins/file-fli/fli.c:905 +#, fuzzy +#| msgid "Error writing output file." +msgid "Error writing black. " +msgstr "Памылка запісу выходнага файла." + +#: plug-ins/file-fli/fli.c:944 plug-ins/file-fli/fli.c:955 +#: plug-ins/file-fli/fli.c:965 plug-ins/file-fli/fli.c:1085 +#: plug-ins/file-fli/fli.c:1094 plug-ins/file-fli/fli.c:1108 +#: plug-ins/file-fli/fli.c:1123 plug-ins/file-fli/fli.c:1132 +#: plug-ins/file-fli/fli.c:1146 plug-ins/file-fli/fli.c:1156 +#: plug-ins/file-fli/fli.c:1300 plug-ins/file-fli/fli.c:1327 +#: plug-ins/file-fli/fli.c:1343 plug-ins/file-fli/fli.c:1375 +#: plug-ins/file-fli/fli.c:1385 plug-ins/file-fli/fli.c:1399 +#: plug-ins/file-fli/fli.c:1409 +msgid "Error writing frame. " +msgstr "Памылка запісу кадра. " + +#: plug-ins/file-fli/fli.c:992 plug-ins/file-fli/fli.c:1004 +#: plug-ins/file-fli/fli.c:1015 plug-ins/file-fli/fli.c:1034 +#: plug-ins/file-fli/fli.c:1186 plug-ins/file-fli/fli.c:1200 +#: plug-ins/file-fli/fli.c:1213 plug-ins/file-fli/fli.c:1226 +#: plug-ins/file-fli/fli.c:1245 plug-ins/file-fli/fli.c:1440 +#: plug-ins/file-fli/fli.c:1456 plug-ins/file-fli/fli.c:1475 +#: plug-ins/file-fli/fli.c:1490 plug-ins/file-fli/fli.c:1503 +#: plug-ins/file-fli/fli.c:1525 +msgid "Error reading compressed data. " +msgstr "Памылка чытання сціснутых даных. " + +#: plug-ins/file-fli/fli.c:1022 +msgid "Overflow reading compressed data. Possibly corrupt file." +msgstr "" + +#: plug-ins/file-fli/fli-pika.c:181 plug-ins/file-fli/fli-pika.c:218 msgid "AutoDesk FLIC animation" msgstr "Анімацыя AutoDesk FLIC" -#: ../plug-ins/file-fli/fli-pika.c:561 +#: plug-ins/file-fli/fli-pika.c:184 +#, fuzzy +#| msgid "Load Flame" +msgid "Load FLI-movies" +msgstr "Загрузіць язык полымя" + +#: plug-ins/file-fli/fli-pika.c:185 plug-ins/file-fli/fli-pika.c:223 +msgid "This is an experimental plug-in to handle FLI movies" +msgstr "" + +#: plug-ins/file-fli/fli-pika.c:199 plug-ins/file-fli/fli-pika.c:237 +msgid "_From frame" +msgstr "_З кадра" + +#: plug-ins/file-fli/fli-pika.c:200 +msgid "Load beginning from this frame" +msgstr "" + +#: plug-ins/file-fli/fli-pika.c:205 plug-ins/file-fli/fli-pika.c:243 +msgid "_To frame" +msgstr "_У кадр" + +#: plug-ins/file-fli/fli-pika.c:206 +#, fuzzy +#| msgid "Stop loading this page" +msgid "End loading with this frame" +msgstr "Спыніць загрузку гэтай старонкі" + +#: plug-ins/file-fli/fli-pika.c:220 +#, fuzzy +#| msgid "MNG animation" +msgid "FLI Animation" +msgstr "Анімацыя MNG" + +#: plug-ins/file-fli/fli-pika.c:222 +#, fuzzy +#| msgid "Export Preview" +msgid "Export FLI-movies" +msgstr "Экспартаваць агляд" + +#: plug-ins/file-fli/fli-pika.c:238 +msgid "Export beginning from this frame" +msgstr "" + +#: plug-ins/file-fli/fli-pika.c:244 +msgid "End exporting with this frame (or -1 for all frames)" +msgstr "" + +#: plug-ins/file-fli/fli-pika.c:587 +#, fuzzy, c-format +#| msgid "Frame %d (%d%s)" +msgid "Frame %d (%ums)" +msgstr "Кадр %d (%d%s)" + +#: plug-ins/file-fli/fli-pika.c:614 #, c-format -msgid "Frame (%i)" -msgstr "Кадр (%i)" +msgid "Failed to read frame %d. Possibly corrupt animation.\n" +msgstr "Не ўдалося прачытаць кадр %d. Магчыма анімацыя пашкоджана.\n" -#: ../plug-ins/file-fli/fli-pika.c:714 -msgid "Sorry, I can save only INDEXED and GRAY images." -msgstr "Нажаль магчыма захоўваць толькі індэксаваныя й шэрыя відарысы." +#: plug-ins/file-fli/fli-pika.c:945 +#, fuzzy +#| msgid "AutoDesk FLIC animation" +msgid "Open FLIC Animation" +msgstr "Анімацыя AutoDesk FLIC" -#: ../plug-ins/file-fli/fli-pika.c:847 -msgid "GFLI 1.3 - Load framestack" -msgstr "GFLI 1.3 - Загрузка стосу кадраў" +#: plug-ins/file-icns/file-icns-load.c:431 +#, fuzzy, c-format +#| msgid "Error trying to open temporary file '%s' for parasite loading: %s" +msgid "Error trying to open temporary %s file '%s' for icns loading: %s" +msgstr "Памылка адкрыцця часовага файла «%s» для загрузкі паразіта: %s" -#: ../plug-ins/file-fli/fli-pika.c:876 ../plug-ins/file-fli/fli-pika.c:932 -msgctxt "frame-range" -msgid "From:" -msgstr "Ад:" +#. ----- Open PSD file ----- +#: plug-ins/file-icns/file-icns-load.c:558 plug-ins/file-ico/ico-load.c:1011 +#: plug-ins/file-jpeg/jpeg-load.c:600 plug-ins/file-psd/psd-thumb-load.c:72 +#: plug-ins/file-raw/file-darktable.c:513 +#: plug-ins/file-raw/file-rawtherapee.c:455 +#, c-format +msgid "Opening thumbnail for '%s'" +msgstr "Адкрыццё мініяцюры для %s" -#: ../plug-ins/file-fli/fli-pika.c:885 ../plug-ins/file-fli/fli-pika.c:941 -msgctxt "frame-range" -msgid "To:" -msgstr "Да:" +#: plug-ins/file-icns/file-icns-save.c:228 +msgid "" +"Invalid icon size. \n" +"It will not be exported" +msgstr "" -#: ../plug-ins/file-fli/fli-pika.c:915 -msgid "GFLI 1.3" -msgstr "GFLI 1.3" +#: plug-ins/file-icns/file-icns-save.c:231 +msgid "" +"Duplicate layer size. \n" +"It will not be exported" +msgstr "" -#: ../plug-ins/file-ico/ico-dialog.c:53 +#: plug-ins/file-icns/file-icns-save.c:292 plug-ins/file-icns/file-icns.c:175 +msgid "Apple Icon Image" +msgstr "" + +#: plug-ins/file-icns/file-icns-save.c:307 +msgid "" +"Valid ICNS icons sizes are:\n" +" 16x12, 16x16, 18x18, 24x24, 32x32, 36x36, 48x48,\n" +"64x64, 128x128, 256x256, 512x512, and 1024x1024.\n" +"Any other sized layers will be ignored on export." +msgstr "" + +#. Don't show warning by default +#: plug-ins/file-icns/file-icns-save.c:315 +msgid "Export Icons" +msgstr "Экспарт значкоў" + +#: plug-ins/file-icns/file-icns-save.c:524 +#, c-format +msgid "Error writing icns: %s" +msgstr "Памылка запісу icns: %s" + +#: plug-ins/file-icns/file-icns-save.c:586 +msgid "" +"No valid sized layers. Only valid layer sizes are 16x12, 16x16, 18x18, " +"24x24, 32x32, 36x36, 48x48, 64x64, 128x128, 256x256, 512x512, or 1024x1024." +msgstr "" +"Няма дапушчальных памераў слоя. Дапушчальныя памеры: 16x12, 16x16, 18x18, " +"24x24, 32x32, 36x36, 48x48, 64x64, 128x128, 256x256, 512x512, або 1024x1024." + +#: plug-ins/file-icns/file-icns-save.c:604 +msgid "" +"Invalid layer size(s). Only valid layer sizes are 16x12, 16x16, 18x18, " +"24x24, 32x32, 36x36, 48x48, 64x64, 128x128, 256x256, 512x512, or 1024x1024." +msgstr "" +"Недапушчальныя памеры слоя. Дапушчальныя памеры: 16x12, 16x16, 18x18, 24x24, " +"32x32, 36x36, 48x48, 64x64, 128x128, 256x256, 512x512, або 1024x1024." + +#: plug-ins/file-icns/file-icns.c:131 +msgid "Icns" +msgstr "Icns" + +#: plug-ins/file-ico/ico-dialog.c:61 +msgid "Windows Animated Cursor" +msgstr "Анімаваны курсор Windows" + +#: plug-ins/file-ico/ico-dialog.c:62 +msgid "Windows Cursor" +msgstr "Курсор Windows" + +#: plug-ins/file-ico/ico-dialog.c:62 msgid "Windows Icon" -msgstr "Значка Windows" +msgstr "Значок Windows" -#: ../plug-ins/file-ico/ico-dialog.c:73 +#: plug-ins/file-ico/ico-dialog.c:97 +#, fuzzy +#| msgid "Graph of the Current Settings" +msgid "Animated Cursor Settings" +msgstr "Графік бягучых налад" + +#: plug-ins/file-ico/ico-dialog.c:110 +msgid "_Cursor Name (Optional)" +msgstr "" + +#: plug-ins/file-ico/ico-dialog.c:127 +msgid "_Author Name (Optional)" +msgstr "" + +#: plug-ins/file-ico/ico-dialog.c:144 +#, fuzzy +#| msgid "_Delay between frames where unspecified:" +msgid "_Delay between frames:" +msgstr "_Затрымка між кадрамі, калі не вызначаная:" + +#: plug-ins/file-ico/ico-dialog.c:154 +msgid " jiffies (16.66 ms)" +msgstr "" + +#. Cursor +#: plug-ins/file-ico/ico-dialog.c:164 msgid "Icon Details" -msgstr "Падрабязнасьці значкі" +msgstr "Падрабязнасці значкі" -#: ../plug-ins/file-ico/ico-dialog.c:93 +#: plug-ins/file-ico/ico-dialog.c:187 msgid "" "Large icons and compression are not supported by all programs. Older " "applications may not open this file correctly." msgstr "" -"Вялікія значкі й сьцісканьне не падтрымліваюцца ўсімі праграмамі. Старэйшыя " +"Вялікія значкі і сцісканне не падтрымліваюцца ўсімі праграмамі. Старэйшыя " "праграмы могуць некарэктрна адкрыць гэты файл." -#: ../plug-ins/file-ico/ico-dialog.c:165 +#: plug-ins/file-ico/ico-dialog.c:267 msgid "1 bpp, 1-bit alpha, 2-slot palette" msgstr "1 bpp, 1-бітавая альфа, 2-месцавая палітра" -#: ../plug-ins/file-ico/ico-dialog.c:166 +#: plug-ins/file-ico/ico-dialog.c:268 msgid "4 bpp, 1-bit alpha, 16-slot palette" msgstr "4 bpp, 1-бітавая альфа, 16-месцавая палітра" -#: ../plug-ins/file-ico/ico-dialog.c:167 +#: plug-ins/file-ico/ico-dialog.c:269 msgid "8 bpp, 1-bit alpha, 256-slot palette" msgstr "8 bpp, 1-бітавая альфа, 256-месцавая палітра" -#: ../plug-ins/file-ico/ico-dialog.c:168 +#: plug-ins/file-ico/ico-dialog.c:270 msgid "24 bpp, 1-bit alpha, no palette" msgstr "24 bpp, 1-бітавая альфа, без палітры" -#: ../plug-ins/file-ico/ico-dialog.c:169 +#: plug-ins/file-ico/ico-dialog.c:271 msgid "32 bpp, 8-bit alpha, no palette" msgstr "32 bpp, 8-бітавая альфа, без палітры" -#: ../plug-ins/file-ico/ico-dialog.c:183 +#: plug-ins/file-ico/ico-dialog.c:286 msgid "Compressed (PNG)" -msgstr "Сьціснуты (PNG)" +msgstr "Сціснуты (PNG)" -#. read successfully. add to image -#: ../plug-ins/file-ico/ico-load.c:615 +#: plug-ins/file-ico/ico-load.c:224 +#, fuzzy, c-format +#| msgid "Could not load '%s': %s" +msgid "Could not read '%lu' bytes" +msgstr "Не ўдалося загрузіць «%s»: %s" + +#: plug-ins/file-ico/ico-load.c:252 #, c-format -msgid "Icon #%i" -msgstr "Значка #%i" +msgid "Icon #%d has zero width or height" +msgstr "" -#: ../plug-ins/file-ico/ico-load.c:722 ../plug-ins/file-jpeg/jpeg-load.c:691 -#: ../plug-ins/file-psd/psd-thumb-load.c:84 +#: plug-ins/file-ico/ico-load.c:868 plug-ins/file-ico/ico-load.c:899 +#, fuzzy +#| msgid "Invalid X offset: %d" +msgid "Invalid ANI metadata" +msgstr "Недапушчальны зрух па X: %d" + +#: plug-ins/file-ico/ico-save.c:213 #, c-format -msgid "Opening thumbnail for '%s'" -msgstr "Адкрыцьцё мініятуры для %s" +msgid "" +"Called non-interactively with %d and %d hotspot coordinates with an image of " +"%d icons." +msgstr "" -#: ../plug-ins/file-ico/ico.c:102 ../plug-ins/file-ico/ico.c:136 +#: plug-ins/file-ico/ico.c:168 plug-ins/file-ico/ico.c:291 msgid "Microsoft Windows icon" msgstr "Значка Microsoft Windows" -#: ../plug-ins/file-jpeg/jpeg-exif.c:352 -msgid "Rotate Image?" -msgstr "Павернуць відарыс?" +#: plug-ins/file-ico/ico.c:196 plug-ins/file-ico/ico.c:316 +msgid "Microsoft Windows cursor" +msgstr "Курсор Microsoft Windows" -#: ../plug-ins/file-jpeg/jpeg-exif.c:355 -msgid "_Keep Orientation" -msgstr "_Пакінуць напрамак" +#: plug-ins/file-ico/ico.c:226 plug-ins/file-ico/ico.c:363 +msgid "Microsoft Windows animated cursor" +msgstr "Анімаваны курсор Microsoft Windows" -#: ../plug-ins/file-jpeg/jpeg-exif.c:411 -msgid "According to the EXIF data, this image is rotated." -msgstr "У адпаведнасьці з даньнямі EXIF, відарыс павернуты" +#: plug-ins/file-ico/ico.c:230 +msgid "Loads files of Windows ANI file format" +msgstr "Загружае файлы ў фармаце Windows ANI" -#: ../plug-ins/file-jpeg/jpeg-exif.c:426 -msgid "Would you like PIKA to rotate it into the standard orientation?" -msgstr "Ці жадаеш каб PIKA павернуў яго да стандартнага напрамку?" +#: plug-ins/file-ico/ico.c:272 +msgid "Loads a preview from a Windows ANI files" +msgstr "Загружае папярэдні прагляд для файлаў у фармаце Windows ANI" -#: ../plug-ins/file-jpeg/jpeg-load.c:247 +#: plug-ins/file-ico/ico.c:367 plug-ins/file-ico/ico.c:368 +msgid "Saves files in Windows ANI file format" +msgstr "Захоўвае файлы ў фармаце Windows ANI" + +#: plug-ins/file-ico/ico.c:384 +msgid "Cursor Name (Optional)" +msgstr "Назва курсора (неабавязкова)" + +#: plug-ins/file-ico/ico.c:390 +msgid "Cursor Author (Optional)" +msgstr "Стваральнік курсора (неабавязкова)" + +#: plug-ins/file-jpeg/jpeg-load.c:221 msgid "JPEG preview" msgstr "Агляд JPEG" -#: ../plug-ins/file-jpeg/jpeg-save.c:206 +#: plug-ins/file-jpeg/jpeg-load.c:485 +#, fuzzy, c-format +#| msgid "Error trying to open temporary file '%s' for parasite loading: %s" +msgid "" +"Error trying to open temporary %s file '%s' for jpeg metadata loading: %s" +msgstr "Памылка адкрыцця часовага файла «%s» для загрузкі паразіта: %s" + +#: plug-ins/file-jpeg/jpeg-save.c:139 plug-ins/file-jpeg/jpeg-save.c:146 #, c-format msgid "File size: %s" msgstr "Памер файла: %s" -#: ../plug-ins/file-jpeg/jpeg-save.c:690 +#: plug-ins/file-jpeg/jpeg-save.c:717 msgid "Calculating file size..." -msgstr "Разьлік памеру файла…" +msgstr "Разлік памеру файла…" -#: ../plug-ins/file-jpeg/jpeg-save.c:782 ../plug-ins/file-jpeg/jpeg-save.c:877 +#: plug-ins/file-jpeg/jpeg-save.c:807 plug-ins/file-jpeg/jpeg-save.c:879 msgid "File size: unknown" msgstr "Памер файла: невядомы" -#: ../plug-ins/file-jpeg/jpeg-save.c:840 -msgid "JPEG" -msgstr "JPEG" - -#: ../plug-ins/file-jpeg/jpeg-save.c:863 -msgid "_Quality:" -msgstr "_Якасьць:" - -#: ../plug-ins/file-jpeg/jpeg-save.c:867 -msgid "JPEG quality parameter" -msgstr "Парамэтар якасьці JPEG" - -#: ../plug-ins/file-jpeg/jpeg-save.c:886 +#: plug-ins/file-jpeg/jpeg-save.c:886 msgid "Enable preview to obtain the file size." msgstr "Задзейнічай агляд, каб атрымаць памер файла." -#: ../plug-ins/file-jpeg/jpeg-save.c:889 -msgid "Sho_w preview in image window" -msgstr "Паказаць _агляд у вакне відарыса" +#: plug-ins/file-jpeg/jpeg-save.c:891 plug-ins/file-psd/psd-save.c:2451 +#: plug-ins/file-tiff/file-tiff-save.c:1362 +msgid "No soft-proofing profile" +msgstr "" -#: ../plug-ins/file-jpeg/jpeg-save.c:930 -msgid "S_moothing:" -msgstr "Змазваньне:" +#. Subsampling +#: plug-ins/file-jpeg/jpeg-save.c:940 +msgid "4:4:4 (best quality)" +msgstr "4:4:4 (найлепшая якасць)" -#: ../plug-ins/file-jpeg/jpeg-save.c:943 -msgid "Interval (MCU rows):" +#: plug-ins/file-jpeg/jpeg-save.c:942 +#, fuzzy +#| msgid "4:2:2 vertical (chroma halved)" +msgid "4:2:2 (chroma halved horizontally)" +msgstr "4:2:2 вертыкальны (палова насычанасці)" + +#: plug-ins/file-jpeg/jpeg-save.c:944 +#, fuzzy +#| msgid "4:2:2 vertical (chroma halved)" +msgid "4:4:0 (chroma halved vertically)" +msgstr "4:2:2 вертыкальны (палова насычанасці)" + +#: plug-ins/file-jpeg/jpeg-save.c:946 +msgid "4:2:0 (chroma quartered)" +msgstr "4:2:2 (чверць насычанасці)" + +#. DCT method +#: plug-ins/file-jpeg/jpeg-save.c:960 +msgid "Fast Integer" +msgstr "Хуткі цэлалікавы" + +#: plug-ins/file-jpeg/jpeg-save.c:961 +msgid "Integer" +msgstr "Цэлы лік" + +#: plug-ins/file-jpeg/jpeg-save.c:962 +msgid "Floating-Point" +msgstr "З плыўной коскай" + +#: plug-ins/file-jpeg/jpeg.c:133 plug-ins/file-jpeg/jpeg.c:180 +msgid "JPEG image" +msgstr "Відарыс JPEG" + +#: plug-ins/file-jpeg/jpeg.c:193 plug-ins/file-tiff/file-tiff-save.c:1326 +msgid "JPEG" +msgstr "JPEG" + +#: plug-ins/file-jpeg/jpeg.c:204 +msgid "Quality of exported image" +msgstr "" + +#: plug-ins/file-jpeg/jpeg.c:209 +#, fuzzy +#| msgid "S_moothing:" +msgid "S_moothing" +msgstr "Змазванне:" + +#: plug-ins/file-jpeg/jpeg.c:210 +msgid "Smoothing factor for exported image" +msgstr "" + +#: plug-ins/file-jpeg/jpeg.c:215 +#, fuzzy +#| msgid "Optimize" +msgid "Optimi_ze" +msgstr "Аптымізаваць" + +#: plug-ins/file-jpeg/jpeg.c:216 +msgid "Use optimized tables during Huffman coding" +msgstr "" + +#: plug-ins/file-jpeg/jpeg.c:221 +msgid "_Progressive" +msgstr "_Прагрэсіўны" + +#: plug-ins/file-jpeg/jpeg.c:222 +#, fuzzy +#| msgid "Create new image" +msgid "Create progressive JPEG images" +msgstr "Стварыць новы відарыс" + +#: plug-ins/file-jpeg/jpeg.c:227 +msgid "Export as CM_YK" +msgstr "" + +#: plug-ins/file-jpeg/jpeg.c:228 +msgid "Create a CMYK JPEG image using the soft-proofing color profile" +msgstr "" + +# 1) субдискретизация +# 2) тлв децимация, прореживание +#: plug-ins/file-jpeg/jpeg.c:233 +#, fuzzy +#| msgid "Su_bsampling:" +msgid "Su_bsampling" +msgstr "_Прарэджванне:" + +#: plug-ins/file-jpeg/jpeg.c:234 +msgid "" +"Sub-sampling type { 0 == 4:2:0 (chroma quartered), 1 == 4:2:2 (chroma halved " +"horizontally), 2 == 4:4:4 (best quality), 3 == 4:4:0 (chroma halved " +"vertically)" +msgstr "" + +#: plug-ins/file-jpeg/jpeg.c:244 +#, fuzzy +#| msgid "Create line" +msgid "Baseline" +msgstr "Стварыць лінію" + +#: plug-ins/file-jpeg/jpeg.c:245 +msgid "" +"Force creation of a baseline JPEG (non-baseline JPEGs can't be read by all " +"decoders)" +msgstr "" + +#: plug-ins/file-jpeg/jpeg.c:251 +#, fuzzy +#| msgid "Interval (MCU rows):" +msgid "Inter_val (MCU rows):" msgstr "Інтэрвал (радкі НЗА):" -#: ../plug-ins/file-jpeg/jpeg-save.c:960 -msgid "Use _restart markers" -msgstr "Ужываць маркеры _перазапуску" +#: plug-ins/file-jpeg/jpeg.c:252 +msgid "Interval of restart markers (in MCU rows, 0 = no restart markers)" +msgstr "" -#: ../plug-ins/file-jpeg/jpeg-save.c:976 -msgid "_Optimize" -msgstr "_Аптымізаваць" +#: plug-ins/file-jpeg/jpeg.c:258 +#, fuzzy +#| msgid "_DCT method:" +msgid "_DCT method" +msgstr "Спосаб _ДКП:" -#: ../plug-ins/file-jpeg/jpeg-save.c:990 -msgid "_Progressive" -msgstr "_Праґрэсіўны" +#: plug-ins/file-jpeg/jpeg.c:259 +msgid "DCT method to use { INTEGER (0), FIXED (1), FLOAT (2) }" +msgstr "" -#: ../plug-ins/file-jpeg/jpeg-save.c:1006 -msgid "Save _EXIF data" -msgstr "Захаваць даньні _EXIF" - -#: ../plug-ins/file-jpeg/jpeg-save.c:1023 -msgid "Save _thumbnail" -msgstr "Захаваць _мініятуру" - -#: ../plug-ins/file-jpeg/jpeg-save.c:1040 -msgid "Save _XMP data" -msgstr "Захаваць даньні _XMP" - -#: ../plug-ins/file-jpeg/jpeg-save.c:1055 +#: plug-ins/file-jpeg/jpeg.c:267 msgid "_Use quality settings from original image" -msgstr "Узяць настройкі _якасьці з пачатковага відарыса" +msgstr "Узяць налады _якасці з пачатковага відарыса" -#: ../plug-ins/file-jpeg/jpeg-save.c:1061 +#: plug-ins/file-jpeg/jpeg.c:268 msgid "" "If the original image was loaded from a JPEG file using non-standard quality " "settings (quantization tables), enable this option to get almost the same " "quality and file size." msgstr "" -"Калі спачатны відарыс быў загружаны з файла JPEG зь нестандартнымі выборамі " -"якасьці (табліцамі квантаваньня), задзейнічай гэты выбор, каб атрымаць амаль " -"такую ж якасьць і памер файла." +"Калі першапачатковы відарыс быў загружаны з файла JPEG з нестандартнымі " +"параметрамі якасці (табліцамі квантавання), задзейнічай гэты параметр, каб " +"атрымаць амаль такую ж якасць і памер файла." -# 1) субдискретизация -# 2) тлв децимация, прореживание -#. Subsampling -#: ../plug-ins/file-jpeg/jpeg-save.c:1085 -msgid "Su_bsampling:" -msgstr "_Прарэджваньне:" +#: plug-ins/file-jpeg/jpeg.c:290 +msgid "Sho_w preview in image window" +msgstr "Паказаць _агляд у акне відарыса" -#: ../plug-ins/file-jpeg/jpeg-save.c:1092 -msgid "4:4:4 (best quality)" -msgstr "4:4:4 (найлепшая якасьць)" +#: plug-ins/file-jpeg/jpeg.c:291 +msgid "Creates a temporary layer with an export preview" +msgstr "" -#: ../plug-ins/file-jpeg/jpeg-save.c:1094 -msgid "4:2:2 horizontal (chroma halved)" -msgstr "4:2:2 гарызантальны (палова насычанасьці)" +#: plug-ins/file-jpeg/jpeg.c:295 +msgid "Use _arithmetic coding" +msgstr "" -#: ../plug-ins/file-jpeg/jpeg-save.c:1096 -msgid "4:2:2 vertical (chroma halved)" -msgstr "4:2:2 вэртыкальны (палова насычанасьці)" +#: plug-ins/file-jpeg/jpeg.c:296 +msgid "Older software may have trouble opening arithmetic-coded images" +msgstr "" -#: ../plug-ins/file-jpeg/jpeg-save.c:1098 -msgid "4:2:0 (chroma quartered)" -msgstr "4:2:2 (чвэрць насычанасьці)" +#: plug-ins/file-jpeg/jpeg.c:301 +#, fuzzy +#| msgid "Use _restart markers" +msgid "Use restart mar_kers" +msgstr "Ужываць маркеры _перазапуску" -#. DCT method -#: ../plug-ins/file-jpeg/jpeg-save.c:1128 -msgid "_DCT method:" -msgstr "Спосаб _ДКП:" +#: plug-ins/file-jpeg/jpeg.c:490 +msgid "JPEG format does not support multiple layers." +msgstr "Фармат JPEG не падтрымлівае выкарыстанне некалькіх слаёў." -#: ../plug-ins/file-jpeg/jpeg-save.c:1134 -msgid "Fast Integer" -msgstr "Хуткі цэлалікавы" - -#: ../plug-ins/file-jpeg/jpeg-save.c:1135 -msgid "Integer" -msgstr "Цэлы лік" - -#: ../plug-ins/file-jpeg/jpeg-save.c:1136 -msgid "Floating-Point" -msgstr "З плыўной коскай" - -#: ../plug-ins/file-jpeg/jpeg-save.c:1152 -msgid "Comment" -msgstr "Камэнтар" - -#: ../plug-ins/file-jpeg/jpeg-save.c:1189 -#: ../plug-ins/ui/plug-in-file-png.ui.h:11 -msgid "_Load Defaults" -msgstr "За_грузіць прадвызначаныя" - -#: ../plug-ins/file-jpeg/jpeg-save.c:1198 -msgid "Sa_ve Defaults" -msgstr "За_хаваць прадвызначаныя" - -#: ../plug-ins/file-jpeg/jpeg.c:139 ../plug-ins/file-jpeg/jpeg.c:177 -msgid "JPEG image" -msgstr "Відарыс JPEG" - -#: ../plug-ins/file-jpeg/jpeg.c:303 -msgid "Export Preview" -msgstr "Экспартаваць агляд" - -#: ../plug-ins/file-psd/psd-load.c:214 -#: ../plug-ins/file-psd/psd-thumb-load.c:130 +#: plug-ins/file-psd/psd-load.c:292 plug-ins/file-psd/psd-thumb-load.c:138 #, c-format msgid "Error loading PSD file: %s" -msgstr "Памылка загрузкі файла PSD: %s." +msgstr "Памылка загрузкі файла PSD: %s" -#: ../plug-ins/file-psd/psd-load.c:269 -#, c-format +#: plug-ins/file-psd/psd-load.c:440 +msgid "Invalid PSD metadata layer format" +msgstr "" + +#: plug-ins/file-psd/psd-load.c:519 msgid "Not a valid Photoshop document file" -msgstr "Не зьяўляецца дапушчальным файлам photoshop" +msgstr "Не з'яўляецца дапушчальным файлам photoshop" -#: ../plug-ins/file-psd/psd-load.c:276 +#: plug-ins/file-psd/psd-load.c:526 #, c-format msgid "Unsupported file format version: %d" -msgstr "Вэрсія файла не падтрымліваецца: %d" +msgstr "Версія фармату файла не падтрымліваецца: %d" -#: ../plug-ins/file-psd/psd-load.c:283 +#: plug-ins/file-psd/psd-load.c:533 #, c-format msgid "Too many channels in file: %d" msgstr "Файл мае зашмат каналаў: %d" -#: ../plug-ins/file-psd/psd-load.c:310 +#: plug-ins/file-psd/psd-load.c:557 #, c-format msgid "Unsupported or invalid image size: %dx%d" -msgstr "Памер відарыса %d×%d не падтрымліваецца або не дапушчаецца" +msgstr "Памер відарыса %d×%d не падтрымліваецца або недапушчальны" -#: ../plug-ins/file-psd/psd-load.c:322 +#: plug-ins/file-psd/psd-load.c:572 plug-ins/file-psd/psd-load.c:583 #, c-format msgid "Unsupported color mode: %s" -msgstr "Рэжым колера ў не падтрымліваецца: %s" +msgstr "Рэжым колеру ў не падтрымліваецца: %s" -#: ../plug-ins/file-psd/psd-load.c:349 +#: plug-ins/file-psd/psd-load.c:610 #, c-format msgid "Unsupported bit depth: %d" msgstr "Глыбіня бітаў не падтрымліваецца: %d" -#: ../plug-ins/file-psd/psd-load.c:383 ../plug-ins/file-psd/psd-load.c:393 -#: ../plug-ins/file-psd/psd-load.c:625 ../plug-ins/file-psd/psd-load.c:834 -#, c-format +#: plug-ins/file-psd/psd-load.c:644 plug-ins/file-psd/psd-load.c:654 +#: plug-ins/file-psd/psd-load.c:894 plug-ins/file-psd/psd-load.c:1253 msgid "The file is corrupt!" msgstr "Файл пашкоджаны!" -#: ../plug-ins/file-psd/psd-load.c:554 +#: plug-ins/file-psd/psd-load.c:823 #, c-format msgid "Too many channels in layer: %d" -msgstr "Пласт мае зашмат каналаў: %d" +msgstr "Слой мае зашмат каналаў: %d" -#: ../plug-ins/file-psd/psd-load.c:562 +#: plug-ins/file-psd/psd-load.c:930 #, c-format msgid "Unsupported or invalid layer height: %d" -msgstr "Вышыня не падтрымліваецца або не дапушчаецца: %d" +msgstr "Вышыня не падтрымліваецца або недапушчальная: %d" -#: ../plug-ins/file-psd/psd-load.c:570 +#: plug-ins/file-psd/psd-load.c:939 #, c-format msgid "Unsupported or invalid layer width: %d" -msgstr "Шырыня не падтрымліваецца або не дапушчаецца: %d" +msgstr "Шырыня не падтрымліваецца або недапушчальная: %d" -#: ../plug-ins/file-psd/psd-load.c:579 +#: plug-ins/file-psd/psd-load.c:949 #, c-format msgid "Unsupported or invalid layer size: %dx%d" -msgstr "Памер пласта %d×%d не падтрымліваецца або не дапушчаецца" +msgstr "Памер слоя %d×%d не падтрымліваецца або недапушчальны" -#: ../plug-ins/file-psd/psd-load.c:763 +#: plug-ins/file-psd/psd-load.c:974 +#, fuzzy +#| msgid "Unsupported or invalid channel size" +msgid "Unsupported or invalid mask info size." +msgstr "Памер канала не падтрымліваецца або недапушчальны" + +#: plug-ins/file-psd/psd-load.c:1157 #, c-format msgid "Unsupported or invalid layer mask height: %d" -msgstr "Вышыня маскі пласта не падтрымліваецца або не дапушчаецца: %d" +msgstr "Вышыня маскі слоя не падтрымліваецца або недапушчальная: %d" -#: ../plug-ins/file-psd/psd-load.c:771 +#: plug-ins/file-psd/psd-load.c:1166 #, c-format msgid "Unsupported or invalid layer mask width: %d" -msgstr "Шырыня маскі пласта не падтрымліваецца або не дапушчаецца: %d" +msgstr "Шырыня маскі слоя не падтрымліваецца або недапушчальная: %d" -#: ../plug-ins/file-psd/psd-load.c:780 +#: plug-ins/file-psd/psd-load.c:1176 #, c-format msgid "Unsupported or invalid layer mask size: %dx%d" -msgstr "Памер маскі пласта не падтрымліваецца або не дапушчаецца: %d×%d" +msgstr "Памер маскі слоя не падтрымліваецца або недапушчальны: %d×%d" -#: ../plug-ins/file-psd/psd-load.c:1231 ../plug-ins/file-psd/psd-load.c:1613 +#: plug-ins/file-psd/psd-load.c:2066 plug-ins/file-psd/psd-load.c:2706 #, c-format msgid "Unsupported compression mode: %d" -msgstr "Рэжым сьцісканьня не падтрымліваецца: %d" +msgstr "Рэжым сціскання не падтрымліваецца: %d" -#: ../plug-ins/file-psd/psd-load.c:1706 +#: plug-ins/file-psd/psd-load.c:2899 msgid "Extra" msgstr "Дадаткова" -#: ../plug-ins/file-psd/psd-load.c:1881 -#, c-format +#: plug-ins/file-psd/psd-load.c:3099 msgid "Unsupported or invalid channel size" -msgstr "Памер канала не падтрымліваецца або не дапушчаецца" +msgstr "Памер канала не падтрымліваецца або недапушчальны" -#: ../plug-ins/file-psd/psd-save.c:228 ../plug-ins/file-psd/psd.c:113 -#: ../plug-ins/file-psd/psd.c:152 +#: plug-ins/file-psd/psd-load.c:3168 +msgid "Failed to decompress data" +msgstr "Не ўдалося распакаваць даныя" + +#: plug-ins/file-psd/psd-load.c:3549 +msgid "Duotone Import" +msgstr "" + +#: plug-ins/file-psd/psd-load.c:3550 +msgid "" +"Image will be imported as Grayscale.\n" +"Duotone color space data has been saved\n" +"and can be reapplied on export." +msgstr "" + +#: plug-ins/file-psd/psd-load.c:3572 plug-ins/file-psd/psd-save.c:2662 +msgid "Compatibility Notice" +msgstr "Звесткі пра сумяшчальнасць" + +#: plug-ins/file-psd/psd-load.c:3573 +msgid "" +"This PSD file contains features that\n" +"are not yet fully supported in PIKA:" +msgstr "" +"Гэты файл PSD змяшчае функцыі,\n" +"якія PIKA падтрымлівае не цалкам:" + +#: plug-ins/file-psd/psd-save.c:502 +msgid "Error: Can't convert PIKA base imagetype to PSD mode" +msgstr "Памылка: немагчыма пераўтварыць асноўны тып відарыса PIKA у рэжым PSD" + +#: plug-ins/file-psd/psd-save.c:2153 +#, c-format +msgid "" +"Unable to export '%s'. The PSD file format does not support images that are " +"more than 30,000 pixels wide or tall." +msgstr "" +"Немагчыма экспартаваць «%s». Файлы ў фармаце PSD не падтрымліваюць " +"відарысы, вышыня або шырыня якіх большая за 30000 пікселяў." + +#: plug-ins/file-psd/psd-save.c:2194 +#, c-format +msgid "" +"Unable to export '%s'. The PSD file format does not support images with " +"layers that are more than 30,000 pixels wide or tall." +msgstr "" +"Немагчыма экспартаваць «%s». Файлы ў фармаце PSD не падтрымліваюць відарысы " +"са слаямі, вышыня або шырыня якіх большая за 30000 пікселяў." + +#: plug-ins/file-psd/psd-save.c:2447 +msgid "Export Image as PSD" +msgstr "Экспартаваць выяву як PSD" + +#: plug-ins/file-psd/psd-save.c:2493 +msgid "" +"Duotone color space information from the original\n" +"imported image will be used." +msgstr "" + +#: plug-ins/file-psd/psd-save.c:2561 +msgid "" +"PSD files can store up to 998 paths. \n" +"The rest will be discarded." +msgstr "" + +#: plug-ins/file-psd/psd-save.c:2663 +msgid "" +"Legacy layer modes have been reported to have better compatibility with " +"Photoshop. If you encounter display issues, consider switching to those " +"layer modes." +msgstr "" + +#: plug-ins/file-psd/psd-util.c:176 +msgid "Error reading data. Most likely unexpected end of file." +msgstr "" + +#: plug-ins/file-psd/psd-util.c:199 +msgid "Unexpected end of file" +msgstr "Нечаканы канец файла" + +#: plug-ins/file-psd/psd.c:131 plug-ins/file-psd/psd.c:211 msgid "Photoshop image" msgstr "Відарыс Photoshop" -#: ../plug-ins/file-psd/psd-save.c:374 +#: plug-ins/file-psd/psd.c:160 +msgid "Photoshop image (merged)" +msgstr "Відарыс Photoshop (аб'яднаны)" + +#: plug-ins/file-psd/psd.c:234 +msgid "Assign a Clipping _Path" +msgstr "" + +#: plug-ins/file-psd/psd.c:235 +msgid "Select a path to be the clipping path" +msgstr "" + +#: plug-ins/file-psd/psd.c:241 +msgid "Clipping Path _Name" +msgstr "" + +#: plug-ins/file-psd/psd.c:242 +msgid "" +"Clipping path name\n" +"(ignored if no clipping path)" +msgstr "" + +#: plug-ins/file-psd/psd.c:248 +msgid "Path _Flatness" +msgstr "" + +#: plug-ins/file-psd/psd.c:249 +msgid "" +"Clipping path flatness in device pixels\n" +"(ignored if no clipping path)" +msgstr "" + +#: plug-ins/file-psd/psd.c:255 +msgid "Export as _CMYK" +msgstr "" + +#: plug-ins/file-psd/psd.c:256 +msgid "Export a CMYK PSD image using the soft-proofing color profile" +msgstr "" + +#: plug-ins/file-psd/psd.c:261 +msgid "Export as _Duotone" +msgstr "" + +#: plug-ins/file-psd/psd.c:262 +msgid "" +"Export as a Duotone PSD file if Duotone color space information was attached " +"to the image when originally imported." +msgstr "" + +#: plug-ins/file-psd/psd.c:361 +msgid "Import PSD" +msgstr "Імпартаваць PSD" + +#: plug-ins/file-psd/psd.c:560 +msgid "Import PSD metadata" +msgstr "Імпартаваць метаданыя PSD" + +#: plug-ins/file-psd/psd.c:564 +msgid "Metadata fill layers are not supported and will be dropped." +msgstr "" + +#: plug-ins/file-raw/file-raw-formats.h:46 +msgid "Raw Canon" +msgstr "Raw Canon" + +#: plug-ins/file-raw/file-raw-formats.h:59 +msgid "Raw Nikon" +msgstr "Raw Nikon" + +#: plug-ins/file-raw/file-raw-formats.h:70 +msgid "Raw Hasselblad" +msgstr "Raw Hasselblad" + +#: plug-ins/file-raw/file-raw-formats.h:81 +msgid "Raw Sony" +msgstr "Raw Sony" + +#: plug-ins/file-raw/file-raw-formats.h:92 +msgid "Raw Casio BAY" +msgstr "Raw Casio BAY" + +#: plug-ins/file-raw/file-raw-formats.h:103 +msgid "Raw Phantom Software CINE" +msgstr "Raw Phantom Software CINE" + +#: plug-ins/file-raw/file-raw-formats.h:114 +msgid "Raw Sinar" +msgstr "Raw Sinar" + +#: plug-ins/file-raw/file-raw-formats.h:125 +msgid "Raw Kodak" +msgstr "Raw Kodak" + +#: plug-ins/file-raw/file-raw-formats.h:136 +msgid "Raw Adobe DNG Digital Negative" +msgstr "Raw Adobe DNG Digital Negative" + +#: plug-ins/file-raw/file-raw-formats.h:147 +msgid "Raw Epson ERF" +msgstr "Raw Epson ERF" + +#: plug-ins/file-raw/file-raw-formats.h:158 +msgid "Raw Phase One" +msgstr "Raw Phase One" + +#: plug-ins/file-raw/file-raw-formats.h:169 +msgid "Raw Minolta" +msgstr "Raw Minolta" + +#: plug-ins/file-raw/file-raw-formats.h:180 +msgid "Raw Mamiya MEF" +msgstr "Raw Mamiya MEF" + +#: plug-ins/file-raw/file-raw-formats.h:190 +msgid "Raw Leaf MOS" +msgstr "Raw Leaf MOS" + +#: plug-ins/file-raw/file-raw-formats.h:201 +msgid "Raw Olympus ORF" +msgstr "Raw Olympus ORF" + +#: plug-ins/file-raw/file-raw-formats.h:212 +msgid "Raw Pentax PEF" +msgstr "Raw Pentax PEF" + +#: plug-ins/file-raw/file-raw-formats.h:223 +msgid "Raw Logitech PXN" +msgstr "Raw Logitech PXN" + +#: plug-ins/file-raw/file-raw-formats.h:234 +msgid "Raw Apple QuickTake QTK" +msgstr "Raw Apple QuickTake QTK" + +#: plug-ins/file-raw/file-raw-formats.h:245 +msgid "Raw Fujifilm RAF" +msgstr "Raw Fujifilm RAF" + +#: plug-ins/file-raw/file-raw-formats.h:256 +msgid "Raw Panasonic" +msgstr "Raw Panasonic" + +#: plug-ins/file-raw/file-raw-formats.h:267 +msgid "Raw Digital Foto Maker RDC" +msgstr "Raw Digital Foto Maker RDC" + +#: plug-ins/file-raw/file-raw-formats.h:278 +msgid "Raw Leica RWL" +msgstr "Raw Leica RWL" + +#: plug-ins/file-raw/file-raw-formats.h:289 +msgid "Raw Samsung SRW" +msgstr "Raw Samsung SRW" + +#: plug-ins/file-raw/file-raw-formats.h:300 +msgid "Raw Sigma X3F" +msgstr "Raw Sigma X3F" + +#: plug-ins/file-raw/file-raw-formats.h:311 +msgid "Raw Arriflex ARI" +msgstr "Raw Arriflex ARI" + +#: plug-ins/file-raw/file-raw-placeholder.c:172 #, c-format msgid "" -"Unable to save layer with mode '%s'. Either the PSD file format or the save " -"plug-in does not support that, using normal mode instead." +"There is no RAW loader installed to open '%s' files.\n" +"\n" +"PIKA currently supports these RAW loaders:\n" +"- darktable (http://www.darktable.org/), at least 1.7\n" +"- RawTherapee (http://rawtherapee.com/), at least 5.2\n" +"\n" +"Please install one of them in order to load RAW files." msgstr "" -"Немагчыма захаваць пласт з рэжымам «%s». Або фармат файла PSD, або дадатак " -"захоўваньня не падтрымліваюць такога, выкарыстаны нармальны рэжым." -#: ../plug-ins/file-psd/psd-save.c:634 -msgid "Error: Can't convert PIKA base imagetype to PSD mode" -msgstr "Памылка: немагчыма ператварыць асноўны тып відарыса PIKA у рэжым PSD" - -#: ../plug-ins/file-psd/psd-save.c:1622 -#, c-format -msgid "" -"Unable to save '%s'. The PSD file format does not support images that are " -"more than 30,000 pixels wide or tall." -msgstr "" -"Немагчыма захаваць «%s». Фармат файлаў PSD не падтрымлівае відарысы, якія " -"маюць больш за 30000 піксэляў удоўжкі або ўшыркі." - -#: ../plug-ins/file-psd/psd-save.c:1637 -#, c-format -msgid "" -"Unable to save '%s'. The PSD file format does not support images with " -"layers that are more than 30,000 pixels wide or tall." -msgstr "" -"Немагчыма захаваць «%s». Фармат файлаў PSD не падтрымлівае відарысы, якія " -"маюць пласты, большыя за 30000 піксэляў удоўжкі або ўшыркі." - -#: ../plug-ins/file-psd/psd-util.c:50 -msgid "Unexpected end of file" -msgstr "Заўчасны канец файла" - -#: ../plug-ins/file-sgi/sgi.c:121 ../plug-ins/file-sgi/sgi.c:141 +#: plug-ins/file-sgi/sgi.c:144 plug-ins/file-sgi/sgi.c:171 msgid "Silicon Graphics IRIS image" msgstr "Відарыс Silicon Graphics IRIS" -#: ../plug-ins/file-sgi/sgi.c:325 +#: plug-ins/file-sgi/sgi.c:147 +msgid "Loads files in SGI image file format" +msgstr "Загружае файлы ў фармаце SGI" + +#: plug-ins/file-sgi/sgi.c:148 +#, fuzzy +#| msgid "This plug-in can only handle RGBA image files with 8bit color depth." +msgid "This plug-in loads SGI image files." +msgstr "" +"Гэты дадатак можа апрацоўваць відарысы толькі ў фармаце RGBA з 8-бітавай " +"глыбінёй колеру. " + +#: plug-ins/file-sgi/sgi.c:177 +msgid "Exports files in SGI image file format" +msgstr "" + +#: plug-ins/file-sgi/sgi.c:178 +msgid "This plug-in exports SGI image files." +msgstr "" + +#: plug-ins/file-sgi/sgi.c:191 +msgid "Compression _type" +msgstr "_Тып сціскання" + +#: plug-ins/file-sgi/sgi.c:192 +msgid "Compression level (0 = none, 1 = RLE, 2 = ARLE)" +msgstr "Узровень сціскання (0 = няма, 1 = RLE, 2 = ARLE)" + +#: plug-ins/file-sgi/sgi.c:274 +msgid "SGI format does not support multiple layers." +msgstr "Фармат SGI не падтрымлівае выкарыстанне некалькіх слаёў." + +#: plug-ins/file-sgi/sgi.c:342 #, c-format msgid "Could not open '%s' for reading." -msgstr "Немагчыма адкрыць '%s' для чытаньня." +msgstr "Не ўдалося адкрыць '%s' для чытання." -#: ../plug-ins/file-sgi/sgi.c:343 +#: plug-ins/file-sgi/sgi.c:358 #, c-format msgid "Invalid width: %hu" msgstr "Недапушчальная шырыня: %hu" -#: ../plug-ins/file-sgi/sgi.c:350 +#: plug-ins/file-sgi/sgi.c:366 #, c-format msgid "Invalid height: %hu" msgstr "Недапушчальная вышыня: %hu" -#: ../plug-ins/file-sgi/sgi.c:357 +#: plug-ins/file-sgi/sgi.c:374 #, c-format msgid "Invalid number of channels: %hu" -msgstr "Недапушчальная колькасьць каналаў: %hu" +msgstr "Недапушчальная колькасць каналаў: %hu" -#: ../plug-ins/file-sgi/sgi.c:571 +#: plug-ins/file-sgi/sgi.c:655 #, c-format msgid "Could not open '%s' for writing." -msgstr "Немагчыма адкрыць '%s' на запіс." +msgstr "Не ўдалося адкрыць '%s' на запіс." -#: ../plug-ins/file-sgi/sgi.c:652 -msgid "SGI" -msgstr "SGI" - -#: ../plug-ins/file-sgi/sgi.c:654 -msgid "Compression type" -msgstr "Тып сьцісканьня" - -#: ../plug-ins/file-sgi/sgi.c:658 +#: plug-ins/file-sgi/sgi.c:745 msgid "No compression" -msgstr "Безь сьцісканьня" +msgstr "Без сціскання" -#: ../plug-ins/file-sgi/sgi.c:660 +#: plug-ins/file-sgi/sgi.c:747 msgid "RLE compression" -msgstr "Сьцісканьне RLE" +msgstr "Сцісканне RLE" -#: ../plug-ins/file-sgi/sgi.c:662 -msgid "" -"Aggressive RLE\n" -"(not supported by SGI)" +#: plug-ins/file-sgi/sgi.c:749 +#, fuzzy +#| msgid "" +#| "Aggressive RLE\n" +#| "(not supported by SGI)" +msgid "Aggressive RLE (not supported by SGI)" msgstr "" "Агрэсіўны RLE\n" "(не падтрымліваецца SGI)" -#: ../plug-ins/file-uri/uri-backend-gvfs.c:233 +#: plug-ins/file-tiff/file-tiff.c:159 plug-ins/file-tiff/file-tiff.c:188 +#, fuzzy +#| msgid "TIFF image" +msgid "TIFF or BigTIFF image" +msgstr "Відарыс TIFF" + +#: plug-ins/file-tiff/file-tiff.c:204 +msgid "TIFF" +msgstr "TIFF" + +#: plug-ins/file-tiff/file-tiff.c:211 +msgid "Export in _BigTIFF variant file format" +msgstr "" + +#: plug-ins/file-tiff/file-tiff.c:212 +msgid "" +"The BigTIFF variant file format uses 64-bit offsets, hence supporting over " +"4GiB files and bigger" +msgstr "" + +#: plug-ins/file-tiff/file-tiff.c:218 +msgid "Co_mpression" +msgstr "С_цісканне" + +#: plug-ins/file-tiff/file-tiff.c:219 +msgid "" +"Compression type: { NONE (0), LZW (1), PACKBITS (2), DEFLATE (3), JPEG (4), " +"CCITT G3 Fax (5), CCITT G4 Fax (6) }" +msgstr "" + +#: plug-ins/file-tiff/file-tiff.c:227 +msgid "" +"Keep the color data masked by an alpha channel intact (do not store " +"premultiplied components)" +msgstr "" + +#: plug-ins/file-tiff/file-tiff.c:234 +msgid "Create a CMYK TIFF image using the soft-proofing color profile" +msgstr "" + +#: plug-ins/file-tiff/file-tiff.c:239 +msgid "Save La_yers" +msgstr "Захаваць _слаі" + +#: plug-ins/file-tiff/file-tiff.c:240 +msgid "Save Layers" +msgstr "Захаваць слаі" + +#: plug-ins/file-tiff/file-tiff.c:245 +msgid "Crop L_ayers" +msgstr "Абрэзаць с_лаі" + +#: plug-ins/file-tiff/file-tiff.c:246 +msgid "Crop Layers" +msgstr "Абрэзаць слаі" + +#: plug-ins/file-tiff/file-tiff.c:251 +msgid "Save _GeoTIFF data" +msgstr "Захаваць _даныя GeoTIFF" + +#: plug-ins/file-tiff/file-tiff.c:252 +msgid "Save GeoTIFF data" +msgstr "Захаваць даныя GeoTIFF" + +#: plug-ins/file-tiff/file-tiff.c:459 +msgid "\"Save layers\" option not set while trying to export multiple layers." +msgstr "" + +#: plug-ins/file-tiff/file-tiff-load.c:298 +msgid "Not a TIFF image or image is corrupt." +msgstr "Не з'яўляецца відарысам TIFF або файл пашкоджаны." + +#: plug-ins/file-tiff/file-tiff-load.c:329 #, c-format -msgid "Downloading image (%s of %s)" -msgstr "Загрузка відарыса (%s з %s)" +msgid "TIFF '%s' does not contain any directories" +msgstr "TIFF «%s» не змяшчае каталогаў" -#: ../plug-ins/file-uri/uri-backend-gvfs.c:237 +#: plug-ins/file-tiff/file-tiff-load.c:336 #, c-format -msgid "Uploading image (%s of %s)" -msgstr "Дасыланьне відарыса (%s з %s)" +msgid "" +"TIFF '%s' directory count by header failed though there seems to be %d page. " +"Attempting to load the file with this assumption." +msgid_plural "" +"TIFF '%s' directory count by header failed though there seem to be %d pages. " +"Attempting to load the file with this assumption." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: ../plug-ins/file-uri/uri-backend-gvfs.c:259 -#: ../plug-ins/file-uri/uri-backend-libcurl.c:134 -#: ../plug-ins/file-uri/uri-backend-wget.c:404 +#: plug-ins/file-tiff/file-tiff-load.c:467 +msgid "Extra channels with unspecified data." +msgstr "" + +#. ExtraSamples field not set, yet we have more channels than +#. * the PhotometricInterpretation field suggests. +#. * This should not happen as the spec clearly says "This field +#. * must be present if there are extra samples". So the files +#. * can be considered non-conformant. +#. * Let's ask what to do with the channel. +#. +#: plug-ins/file-tiff/file-tiff-load.c:479 +msgid "Non-conformant TIFF: extra channels without 'ExtraSamples' field." +msgstr "" + +#: plug-ins/file-tiff/file-tiff-load.c:573 #, c-format -msgid "Downloaded %s of image data" -msgstr "Загружана %s даньняў відарыса" +msgid "Couldn't read page %d of %d. Image might be corrupt.\n" +msgstr "" -#: ../plug-ins/file-uri/uri-backend-gvfs.c:263 +#: plug-ins/file-tiff/file-tiff-load.c:602 #, c-format -msgid "Uploaded %s of image data" -msgstr "Даслана %s даньняў відарыса" +msgid "" +"This image has a linear color profile but it was not set on the first layer. " +"The layers below layer # %d will be interpreted as non linear." +msgstr "" -#: ../plug-ins/file-uri/uri-backend-gvfs.c:317 -#: ../plug-ins/file-uri/uri-backend-libcurl.c:161 -#: ../plug-ins/file-uri/uri-backend-wget.c:200 -msgid "Connecting to server" -msgstr "Злучэньне з паслужнікам" +#: plug-ins/file-tiff/file-tiff-load.c:610 +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 " +"separate image." +msgstr "" -#: ../plug-ins/file-uri/uri-backend-libcurl.c:58 -msgid "Could not initialize libcurl" -msgstr "Немагчыма ініцыялізаваць libcurl" - -#: ../plug-ins/file-uri/uri-backend-libcurl.c:127 -#: ../plug-ins/file-uri/uri-backend-wget.c:361 +#: plug-ins/file-tiff/file-tiff-load.c:622 #, c-format -msgid "Downloading %s of image data" -msgstr "Загрузка %s даньняў відарыса" +msgid "Suspicious bit depth: %d for page %d. Image may be corrupt." +msgstr "" -#: ../plug-ins/file-uri/uri-backend-libcurl.c:244 +#: plug-ins/file-tiff/file-tiff-load.c:696 +#, fuzzy, c-format +#| msgid "Unsupported bit depth: %d" +msgid "Unsupported bit depth: %d for page %d." +msgstr "Глыбіня бітаў не падтрымліваецца: %d" + +#: plug-ins/file-tiff/file-tiff-load.c:711 #, c-format -msgid "Opening '%s' for reading resulted in %s response code: %ld" -msgstr "Пры адкрыцьці «%s» для чытаньня атрыманы %s выніковы код: %ld" +msgid "Could not get image width from '%s'" +msgstr "Не ўдалося атрымаць шырыню відарыса з «%s»" -#: ../plug-ins/file-uri/uri-backend-wget.c:162 -#: ../plug-ins/file-uri/uri-backend-wget.c:182 -#: ../plug-ins/file-uri/uri-backend-wget.c:206 -#: ../plug-ins/file-uri/uri-backend-wget.c:229 -#: ../plug-ins/file-uri/uri-backend-wget.c:281 -#: ../plug-ins/file-uri/uri-backend-wget.c:299 -#: ../plug-ins/file-uri/uri-backend-wget.c:351 +#: plug-ins/file-tiff/file-tiff-load.c:719 #, c-format -msgid "wget exited abnormally on URI '%s'" -msgstr "ненармальны вынік wget на URI «%s»" +msgid "Could not get image length from '%s'" +msgstr "Не ўдалося атрымаць вышыню відарыса з «%s»" -#. The third line is "Connecting to..." -#: ../plug-ins/file-uri/uri-backend-wget.c:195 +#: plug-ins/file-tiff/file-tiff-load.c:727 #, c-format -msgid "(timeout is %d second)" -msgid_plural "(timeout is %d seconds)" -msgstr[0] "(затрымка — %d сэкунда)" -msgstr[1] "(затрымка — %d сэкунды)" -msgstr[2] "(затрымка — %d сэкундаў)" +msgid "Invalid image dimensions (%u x %u) for page %d. Image may be corrupt." +msgstr "" -#. The fourth line is either the network request or an error -#: ../plug-ins/file-uri/uri-backend-wget.c:224 -msgid "Opening URI" -msgstr "Адкрыцьцё URI" - -#: ../plug-ins/file-uri/uri-backend-wget.c:235 -#: ../plug-ins/file-uri/uri-backend-wget.c:245 -#: ../plug-ins/file-uri/uri-backend-wget.c:271 -#: ../plug-ins/file-uri/uri-backend-wget.c:309 +#: plug-ins/file-tiff/file-tiff-load.c:748 #, c-format -msgid "A network error occurred: %s" -msgstr "Сеткавая памылка: %s" +msgid "" +"Could not get photometric from '%s'. Image is CCITT compressed, assuming min-" +"is-white" +msgstr "" -#: ../plug-ins/file-uri/uri-backend-wget.c:366 -msgid "Downloading unknown amount of image data" -msgstr "Загрузка невядомай колькасьці даньняў відарыса" - -#: ../plug-ins/file-uri/uri.c:122 ../plug-ins/file-uri/uri.c:143 -msgid "URI" -msgstr "URI" - -#: ../plug-ins/file-xjt/xjt.c:485 ../plug-ins/file-xjt/xjt.c:503 -msgid "PIKA compressed XJT image" -msgstr "Сціснуты відарыс XJT PIKA" - -#: ../plug-ins/file-xjt/xjt.c:733 +#: plug-ins/file-tiff/file-tiff-load.c:755 #, c-format -msgid "XJT file contains unknown layermode %d" -msgstr "Файл XJT утрымлівае невядомы рэжым пласта %d." +msgid "Could not get photometric from '%s'. Assuming min-is-black" +msgstr "" -#: ../plug-ins/file-xjt/xjt.c:770 +#. 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 #, c-format -msgid "Warning: unsupported layermode %d saved to XJT" -msgstr "Да ўвагі: рэжым пласта %d не падтрымліваецца, але запісаны ў XJT" +msgid "" +"Alpha channel type not defined for %s. Assuming alpha is not premultiplied" +msgstr "" -#: ../plug-ins/file-xjt/xjt.c:786 +#: plug-ins/file-tiff/file-tiff-load.c:812 #, c-format -msgid "XJT file contains unknown pathtype %d" -msgstr "Файл XJT утрымлівае невядомы тып шляха %d." +msgid "" +"Image '%s' does not conform to the TIFF specification: ExtraSamples field is " +"not set while extra channels are present. Assuming the first extra channel " +"is non-premultiplied alpha." +msgstr "" -#: ../plug-ins/file-xjt/xjt.c:802 +#: plug-ins/file-tiff/file-tiff-load.c:1101 #, c-format -msgid "Warning: unsupported pathtype %d saved to XJT" -msgstr "Да ўвагі: тып шляха %d не падтрымліваецца, але запісаны ў XJT" +msgid "Invalid or unknown compression %u. Setting compression to none." +msgstr "" -#: ../plug-ins/file-xjt/xjt.c:821 +#: plug-ins/file-tiff/file-tiff-load.c:1159 +#, fuzzy, c-format +#| msgid "Could not create new image for '%s': %s" +msgid "Could not create a new image: %s" +msgstr "Не ўдалося стварыць новы відарыс для «%s»: %s" + +#: plug-ins/file-tiff/file-tiff-load.c:1329 #, c-format -msgid "XJT file contains unknown unittype %d" -msgstr "Файл XJT утрымлівае невядомы тып адзінкі %d" +msgid "Unknown resolution unit type %d, assuming dpi" +msgstr "" -#: ../plug-ins/file-xjt/xjt.c:842 +#. no res unit tag +#. old AppleScan software produces these +#: plug-ins/file-tiff/file-tiff-load.c:1339 +msgid "Warning: resolution specified without unit type, assuming dpi" +msgstr "" + +#. xres but no yres +#: plug-ins/file-tiff/file-tiff-load.c:1347 +msgid "Warning: no y resolution info, assuming same as x" +msgstr "" + +#: plug-ins/file-tiff/file-tiff-load.c:1364 +msgid "Invalid image resolution info, using default" +msgstr "" + +#: plug-ins/file-tiff/file-tiff-load.c:1423 +#, fuzzy, c-format +#| msgid "Could not read color entries from '%s'" +msgid "Could not get colormaps from '%s'" +msgstr "Не ўдалося прачытаць запісы аб колеры з «%s»." + +#. Validate number of channels to the same maximum as we use for +#. * Photoshop. A higher number most likely means a corrupt image +#. * 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 #, c-format -msgid "Warning: unsupported unittype %d saved to XJT" -msgstr "Да ўвагі: тып адзінкі %d не падтрымліваецца, але запісаны ў XJT" +msgid "Suspicious number of extra channels: %d. Possibly corrupt image." +msgstr "" -#: ../plug-ins/file-xjt/xjt.c:863 -msgid "XJT" -msgstr "XJT" +#: plug-ins/file-tiff/file-tiff-load.c:1573 +msgid "TIFF Channel" +msgstr "Канал TIFF" -#: ../plug-ins/file-xjt/xjt.c:873 -msgid "Optimize" -msgstr "Аптымізаваць" - -#: ../plug-ins/file-xjt/xjt.c:883 -msgid "Clear transparent" -msgstr "Ачысьціць празрыстыя вобласьці" - -#: ../plug-ins/file-xjt/xjt.c:895 -msgid "Quality:" -msgstr "Якасьць:" - -#: ../plug-ins/file-xjt/xjt.c:904 -msgid "Smoothing:" -msgstr "Змазваньне:" - -#: ../plug-ins/file-xjt/xjt.c:1705 ../plug-ins/file-xjt/xjt.c:3343 +#: plug-ins/file-tiff/file-tiff-load.c:1726 #, c-format -msgid "Could not create working folder '%s': %s" -msgstr "Немагчыма выдаліць працоўную тэчку '%s': %s" +msgid "No data could be read from TIFF '%s'. The file is probably corrupted." +msgstr "" -#: ../plug-ins/file-xjt/xjt.c:3209 +#: plug-ins/file-tiff/file-tiff-load.c:1760 +#: plug-ins/file-tiff/file-tiff-load.c:1802 +#, fuzzy, c-format +#| msgid "Error trying to open temporary file '%s' for parasite loading: %s" +msgid "" +"Error trying to open temporary %s file '%s' for tiff metadata loading: %s" +msgstr "Памылка адкрыцця часовага файла «%s» для загрузкі паразіта: %s" + +#: plug-ins/file-tiff/file-tiff-load.c:1878 #, c-format -msgid "Error: Could not read XJT property file '%s'." -msgstr "Памылка: немагчыма прачытаць файл уласьцівасьцяў XJT «%s»." +msgid "%s: Unsupported image format, no RGBA loader available" +msgstr "" -#: ../plug-ins/file-xjt/xjt.c:3216 +#: plug-ins/file-tiff/file-tiff-load.c:1993 +#: plug-ins/file-tiff/file-tiff-load.c:2190 #, c-format -msgid "Error: XJT property file '%s' is empty." -msgstr "Памылка: файл уласьцівасьцяў XJT «%s» пусты." +msgid "Reading tile failed. Image may be corrupt at line %d." +msgstr "" -#: ../plug-ins/flame/flame.c:129 -msgid "Create cosmic recursive fractal flames" -msgstr "Стварыць касьмічныя рэкурсіўныя фрактальныя языкі полымя" +#. Error reading scanline, stop loading +#: plug-ins/file-tiff/file-tiff-load.c:2002 +#: plug-ins/file-tiff/file-tiff-load.c:2199 +#, c-format +msgid "Reading scanline failed. Image may be corrupt at line %d." +msgstr "" -#: ../plug-ins/flame/flame.c:134 +#: plug-ins/file-tiff/file-tiff-load.c:2549 +msgid "Import from TIFF" +msgstr "Імпартаваць з TIFF" + +#: plug-ins/file-tiff/file-tiff-load.c:2554 +#: plug-ins/metadata/metadata-editor.c:5533 +msgid "_Import" +msgstr "_Імпартаваць" + +#: plug-ins/file-tiff/file-tiff-load.c:2570 +#, fuzzy +#| msgid "Show image" +msgid "_Show reduced images" +msgstr "Паказаць відарыс" + +#. 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:2604 +msgid "_Keep empty space around imported layers" +msgstr "" + +#: plug-ins/file-tiff/file-tiff-load.c:2621 +#, fuzzy +#| msgid "Source channel:" +msgid "Process extra channel as:" +msgstr "Выточны канал:" + +#: plug-ins/file-tiff/file-tiff-load.c:2624 +msgid "_Non-premultiplied alpha" +msgstr "" + +#: plug-ins/file-tiff/file-tiff-load.c:2625 +msgid "Pre_multiplied alpha" +msgstr "" + +#: plug-ins/file-tiff/file-tiff-load.c:2626 +#, fuzzy +#| msgid "Channels" +msgid "Channe_l" +msgstr "Каналы" + +#: plug-ins/file-tiff/file-tiff-save.c:648 +msgid "" +"Only monochrome pictures can be compressed with \"CCITT Group 4\" or \"CCITT " +"Group 3\"." +msgstr "" + +#: plug-ins/file-tiff/file-tiff-save.c:662 +msgid "Indexed pictures cannot be compressed with \"JPEG\"." +msgstr "" + +#: plug-ins/file-tiff/file-tiff-save.c:721 +msgid "" +"The TIFF format only supports comments in\n" +"7bit ASCII encoding. No comment is saved." +msgstr "" +"Фармат TIFF дапускае каментарыі толькі з 7-бітавым кадаваннем ASCII. " +"Каментарый не захаваны." + +#: plug-ins/file-tiff/file-tiff-save.c:863 +#, c-format +msgid "Failed a scanline write on row %d" +msgstr "" + +#: plug-ins/file-tiff/file-tiff-save.c:1198 +msgid "Writing pages with different bit depth is strange." +msgstr "" + +#: plug-ins/file-tiff/file-tiff-save.c:1310 +msgid "" +"Warning: maximum TIFF file size exceeded. Retry as BigTIFF or with a " +"different compression algorithm, or cancel." +msgstr "" + +#: plug-ins/file-tiff/file-tiff-save.c:1323 +msgid "LZW" +msgstr "LZW" + +#: plug-ins/file-tiff/file-tiff-save.c:1324 +#, fuzzy +#| msgid "_Pack Bits" +msgid "Pack Bits" +msgstr "_Пакаваныя біты" + +#: plug-ins/file-tiff/file-tiff-save.c:1325 +#, fuzzy +#| msgid "_Deflate" +msgid "Deflate" +msgstr "_Deflate" + +#: plug-ins/file-tiff/file-tiff-save.c:1327 +#, fuzzy +#| msgid "CCITT Group _3 fax" +msgid "CCITT Group 3 fax" +msgstr "Факс МККТТ група 3" + +#: plug-ins/file-tiff/file-tiff-save.c:1328 +#, fuzzy +#| msgid "CCITT Group _4 fax" +msgid "CCITT Group 4 fax" +msgstr "Факс МККТТ група 4" + +#: plug-ins/file-tiff/file-tiff-save.c:1386 +msgid "" +"The assigned soft-proofing profile is not a CMYK profile.\n" +"This profile will not be included in the exported image." +msgstr "" + +#: plug-ins/file-webp/file-webp.c:121 plug-ins/file-webp/file-webp.c:148 +msgid "WebP image" +msgstr "Відарыс WebP" + +#: plug-ins/file-webp/file-webp.c:161 +msgid "WebP" +msgstr "WebP" + +#: plug-ins/file-webp/file-webp.c:168 +msgid "Source _type" +msgstr "_Тып крыніцы" + +#: plug-ins/file-webp/file-webp.c:169 +msgid "" +"WebP encoder preset (Default=0, Picture=1, Photo=2, Drawing=3, Icon=4, " +"Text=5)" +msgstr "" + +#: plug-ins/file-webp/file-webp.c:176 +msgid "Use lossless encoding" +msgstr "Пераўтварэнне без страты якасці" + +#: plug-ins/file-webp/file-webp.c:181 +msgid "Image _quality" +msgstr "_Якасць відарыса" + +#: plug-ins/file-webp/file-webp.c:182 +msgid "Quality of the image" +msgstr "Якасць відараса" + +#: plug-ins/file-webp/file-webp.c:187 +msgid "Alpha q_uality" +msgstr "_Якасць альфа-канала" + +#: plug-ins/file-webp/file-webp.c:188 +msgid "Quality of the image's alpha channel" +msgstr "Якасць альфа-канала ыідарыса" + +#: plug-ins/file-webp/file-webp.c:193 +msgid "Use Sharp YU_V" +msgstr "" + +#. TRANSLATORS: \xe2\x86\x92 is a Unicode +#. * "Rightward Arrow" in UTF-8 encoding. +#. +#: plug-ins/file-webp/file-webp.c:197 +msgid "Use sharper (but slower) RGB→YUV conversion" +msgstr "" + +#: plug-ins/file-webp/file-webp.c:202 +msgid "Loop _forever" +msgstr "_Бясконцае паўтарэнне" + +#: plug-ins/file-webp/file-webp.c:203 +msgid "Loop animation infinitely" +msgstr "Бясконца паўтараць анімацыю" + +#: plug-ins/file-webp/file-webp.c:208 +msgid "_Minimize output size (slower)" +msgstr "_Мінімальны памер выхаднога файла (павольна)" + +#: plug-ins/file-webp/file-webp.c:209 +msgid "Minimize output file size" +msgstr "Мінімальны памер выхаднога файла" + +#: plug-ins/file-webp/file-webp.c:214 +msgid "Max distance between _key-frames" +msgstr "Максімальная _адлегласць паміж ключавымі кадрамі" + +#: plug-ins/file-webp/file-webp.c:215 +msgid "Maximum distance between keyframes" +msgstr "Максімальная адлегласць паміж ключавымі кадрамі" + +#: plug-ins/file-webp/file-webp.c:220 +#, fuzzy +#| msgid "_Delay between frames where unspecified:" +msgid "_Default delay between frames" +msgstr "_Затрымка між кадрамі, калі не вызначаная:" + +#: plug-ins/file-webp/file-webp.c:221 +msgid "" +"Default delay (in milliseconds) to use when timestamps for frames are not " +"available or forced." +msgstr "" + +#: plug-ins/file-webp/file-webp.c:227 +msgid "Use default dela_y for all frames" +msgstr "Выкарыстоўваць прадвызначаную затрымку для _ўсіх кадраў" + +#: plug-ins/file-webp/file-webp.c:228 +msgid "Force default delay on all frames" +msgstr "Прымусовая прадвызначаную затрымка для ўсіх кадраў" + +#: plug-ins/file-webp/file-webp.c:233 +msgid "Save a_nimation" +msgstr "Захаваць _анімацыю" + +#: plug-ins/file-webp/file-webp.c:234 +msgid "Use layers for animation" +msgstr "Выкарыстоўваць слаі для анімацыі" + +#: plug-ins/file-webp/file-webp.c:349 +msgid "" +"The WebP plug-in cannot export multiple layer, except in animation mode." +msgstr "" + +#: plug-ins/file-webp/file-webp-dialog.c:48 +msgid "(no keyframes)" +msgstr "(без ключавых кадраў)" + +#: plug-ins/file-webp/file-webp-dialog.c:52 +msgid "(all frames are keyframes)" +msgstr "(усе кадры ключавыя)" + +#. Create the combobox containing the presets +#: plug-ins/file-webp/file-webp-dialog.c:80 +#: plug-ins/gradient-flare/gradient-flare.c:2623 +msgid "Default" +msgstr "Прадвызначаны" + +#: plug-ins/file-webp/file-webp-dialog.c:81 +msgid "Picture" +msgstr "Малюнак" + +#: plug-ins/file-webp/file-webp-dialog.c:82 +msgid "Photo" +msgstr "Фатаграфія" + +#: plug-ins/file-webp/file-webp-dialog.c:83 +#, fuzzy +#| msgid "Drawing grid" +msgid "Drawing" +msgstr "Маляванне сеткі" + +#: plug-ins/file-webp/file-webp-dialog.c:84 +msgid "Icon" +msgstr "Значок" + +#: plug-ins/file-webp/file-webp-dialog.c:85 +msgid "Text" +msgstr "Тэкст" + +#: plug-ins/file-webp/file-webp-load.c:107 +#, c-format +msgid "Invalid WebP file '%s'" +msgstr "Няправільны файл WebP «%s»" + +#: plug-ins/file-webp/file-webp-load.c:202 +#, c-format +msgid "Failed to decode animated WebP file '%s'" +msgstr "Не ўдалося дэкадаваць анімаваны файл WebP «%s»" + +#: plug-ins/file-webp/file-webp-load.c:210 +#, c-format +msgid "Failed to decode animated WebP information from '%s'" +msgstr "Не ўдалося дэкадаваць інфармацыю анімаванага файла WebP з «%s»" + +#: plug-ins/file-webp/file-webp-load.c:229 +#, c-format +msgid "Failed to decode animated WebP frame from '%s'" +msgstr "Не ўдалося дэкадаваць кадр анімаванага файла WebP з «%s»" + +#: plug-ins/file-webp/file-webp-load.c:234 +#, c-format +msgid "Frame %d (%dms)" +msgstr "Кадр %d (%d мс)" + +#: plug-ins/file-webp/file-webp-save.c:101 +msgid "out of memory" +msgstr "недастаткова памяці" + +#: plug-ins/file-webp/file-webp-save.c:103 +msgid "not enough memory to flush bits" +msgstr "" + +#: plug-ins/file-webp/file-webp-save.c:105 +msgid "NULL parameter" +msgstr "Параметр NULL" + +#: plug-ins/file-webp/file-webp-save.c:107 +msgid "invalid configuration" +msgstr "недапушчальная канфігурацыя" + +#. TRANSLATORS: widthxheight with UTF-8 encoded multiply sign. +#: plug-ins/file-webp/file-webp-save.c:110 +#, c-format +msgid "bad image dimensions (maximum: %d×%d)" +msgstr "непрыдатныя памеры відарыса (максімум %d×%d)" + +#: plug-ins/file-webp/file-webp-save.c:113 +msgid "partition is bigger than 512K" +msgstr "раздзел большы за 512 КБ" + +#: plug-ins/file-webp/file-webp-save.c:115 +msgid "partition is bigger than 16M" +msgstr "раздзел большы за 16 МБ" + +#: plug-ins/file-webp/file-webp-save.c:117 +msgid "unable to flush bytes" +msgstr "немагчыма ачысціць байты" + +#: plug-ins/file-webp/file-webp-save.c:119 +msgid "file is larger than 4GiB" +msgstr "файл большы за 4 ГіБ" + +#: plug-ins/file-webp/file-webp-save.c:121 +msgid "user aborted encoding" +msgstr "" + +#: plug-ins/file-webp/file-webp-save.c:123 +msgid "list terminator" +msgstr "" + +#: plug-ins/file-webp/file-webp-save.c:125 +msgid "unknown error" +msgstr "невядомая памылка" + +#: plug-ins/file-webp/file-webp-save.c:208 +#: plug-ins/file-webp/file-webp-save.c:607 +#, c-format +msgid "Unable to open '%s' for writing: %s" +msgstr "Немагчыма адкрыць «%s» для запісу: %s" + +#: plug-ins/file-webp/file-webp-save.c:294 +#, c-format +msgid "WebP error: '%s'" +msgstr "Памылка WebP: «%s»" + +#: plug-ins/flame/flame.c:175 msgid "_Flame..." -msgstr "_Язык полымя…" +msgstr "_Полымя…" -#: ../plug-ins/flame/flame.c:227 +#: plug-ins/flame/flame.c:180 +msgid "Create cosmic recursive fractal flames" +msgstr "Стварыць касмічныя рэкурсіўныя фрактальныя языкі полымя" + +#: plug-ins/flame/flame.c:284 msgid "Drawing flame" -msgstr "Рысаваньне языка полымя" +msgstr "Маляванне полымя" -#: ../plug-ins/flame/flame.c:317 -msgid "Flame works only on RGB drawables." -msgstr "Язык полымя працуе толькі на абшарах рысаваньня RGB." - -#: ../plug-ins/flame/flame.c:401 +#: plug-ins/flame/flame.c:468 #, c-format msgid "'%s' is not a regular file" -msgstr "«%s» не зьяўляецца звычайным файлам" +msgstr "«%s» не з'яўляецца звычайным файлам" -#: ../plug-ins/flame/flame.c:645 +#: plug-ins/flame/flame.c:712 msgid "Edit Flame" -msgstr "Зьмяніць язык полымя" +msgstr "Змяніць полымя" -#: ../plug-ins/flame/flame.c:668 +#: plug-ins/flame/flame.c:735 msgid "Directions" msgstr "Напрамкі" -#: ../plug-ins/flame/flame.c:704 +#: plug-ins/flame/flame.c:772 msgid "Controls" -msgstr "Кіраваньне" +msgstr "Кіраванне" -#: ../plug-ins/flame/flame.c:718 +#: plug-ins/flame/flame.c:780 msgid "_Speed:" -msgstr "_Хуткасьць:" +msgstr "_Хуткасць:" -#: ../plug-ins/flame/flame.c:735 +#: plug-ins/flame/flame.c:796 msgid "_Randomize" msgstr "_Перамяшаць" -#: ../plug-ins/flame/flame.c:745 +#: plug-ins/flame/flame.c:808 msgid "Same" msgstr "Такі самы" -#: ../plug-ins/flame/flame.c:746 ../plug-ins/pikaressionist/orientation.c:163 -#: ../plug-ins/pikaressionist/size.c:166 +#: plug-ins/flame/flame.c:809 plug-ins/pikaressionist/orientation.c:156 +#: plug-ins/pikaressionist/size.c:163 msgid "Random" msgstr "Выпадковае" -#: ../plug-ins/flame/flame.c:750 +#: plug-ins/flame/flame.c:810 plug-ins/lighting/lighting-ui.c:855 +msgid "Linear" +msgstr "Лінейная" + +#: plug-ins/flame/flame.c:811 plug-ins/lighting/lighting-ui.c:857 +msgid "Sinusoidal" +msgstr "Сінусная" + +#: plug-ins/flame/flame.c:812 plug-ins/lighting/lighting-ui.c:858 +msgid "Spherical" +msgstr "Сферычная" + +#: plug-ins/flame/flame.c:813 msgid "Swirl" msgstr "Вір" -#: ../plug-ins/flame/flame.c:751 +#: plug-ins/flame/flame.c:814 msgid "Horseshoe" msgstr "Падкова" -#: ../plug-ins/flame/flame.c:752 ../plug-ins/gfig/gfig-dialog.c:1479 +#: plug-ins/flame/flame.c:815 plug-ins/gfig/gfig-dialog.c:1441 msgid "Polar" msgstr "Палярныя" -#: ../plug-ins/flame/flame.c:753 +#: plug-ins/flame/flame.c:816 msgid "Bent" msgstr "Выгін" -#: ../plug-ins/flame/flame.c:754 +#: plug-ins/flame/flame.c:817 msgid "Handkerchief" msgstr "Насоўка" -#: ../plug-ins/flame/flame.c:755 +#: plug-ins/flame/flame.c:818 msgid "Heart" msgstr "Сэрца" -#: ../plug-ins/flame/flame.c:756 +#: plug-ins/flame/flame.c:819 msgid "Disc" msgstr "Дыск" -#: ../plug-ins/flame/flame.c:758 +#: plug-ins/flame/flame.c:821 msgid "Hyperbolic" -msgstr "Гіпэрбалічны" +msgstr "Гіпербалічны" -#: ../plug-ins/flame/flame.c:760 +#: plug-ins/flame/flame.c:822 +msgid "Diamond" +msgstr "Ромб" + +#: plug-ins/flame/flame.c:823 msgid "Ex" msgstr "Экс" -#: ../plug-ins/flame/flame.c:761 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:846 +#: plug-ins/flame/flame.c:824 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:842 +#, fuzzy msgid "Julia" msgstr "Юлія" -#: ../plug-ins/flame/flame.c:763 +#: plug-ins/flame/flame.c:825 +msgid "Waves" +msgstr "Хвалі" + +#: plug-ins/flame/flame.c:826 msgid "Fisheye" msgstr "Рыбіна вока" -#: ../plug-ins/flame/flame.c:764 +#: plug-ins/flame/flame.c:827 msgid "Popcorn" msgstr "Папкорн" -#: ../plug-ins/flame/flame.c:765 +#: plug-ins/flame/flame.c:828 msgid "Exponential" -msgstr "Паказьнікавы" +msgstr "Паказнікавы" -#: ../plug-ins/flame/flame.c:766 +#: plug-ins/flame/flame.c:829 msgid "Power" msgstr "Ступень" -#: ../plug-ins/flame/flame.c:767 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:999 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1040 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1081 +#: plug-ins/flame/flame.c:830 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:991 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1032 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1073 msgid "Cosine" msgstr "Косінус" -#: ../plug-ins/flame/flame.c:768 +#: plug-ins/flame/flame.c:831 msgid "Rings" -msgstr "Пярсьцёнкі" +msgstr "Пярсцёнкі" -#: ../plug-ins/flame/flame.c:769 +#: plug-ins/flame/flame.c:832 msgid "Fan" msgstr "Веер" -#: ../plug-ins/flame/flame.c:770 +#: plug-ins/flame/flame.c:833 msgid "Eyefish" msgstr "Рыбіна вока" -#: ../plug-ins/flame/flame.c:771 +#: plug-ins/flame/flame.c:834 msgid "Bubble" msgstr "Бурбалка" -#: ../plug-ins/flame/flame.c:772 ../plug-ins/map-object/map-object-ui.c:431 +#: plug-ins/flame/flame.c:835 plug-ins/map-object/map-object-ui.c:465 msgid "Cylinder" msgstr "Цыліндар" -#: ../plug-ins/flame/flame.c:774 +#: plug-ins/flame/flame.c:837 msgid "Blur" -msgstr "Размыцьцё" +msgstr "Размыццё" -#: ../plug-ins/flame/flame.c:775 +#: plug-ins/flame/flame.c:838 msgid "Gaussian" -msgstr "Ґаўсаўскі" +msgstr "Гаўсаўскі" -#: ../plug-ins/flame/flame.c:788 +#: plug-ins/flame/flame.c:851 msgid "_Variation:" msgstr "_Варыяцыя:" -#: ../plug-ins/flame/flame.c:810 +#: plug-ins/flame/flame.c:873 msgid "Load Flame" -msgstr "Загрузіць язык полымя" +msgstr "Загрузіць полымя" -#: ../plug-ins/flame/flame.c:825 +#: plug-ins/flame/flame.c:888 msgid "Save Flame" msgstr "Захаваць язык полымя" -#: ../plug-ins/flame/flame.c:967 +#: plug-ins/flame/flame.c:1029 msgid "Flame" msgstr "Язык полымя" -#: ../plug-ins/flame/flame.c:1068 -msgid "_Rendering" -msgstr "_Апрацоўваньне" +#: plug-ins/flame/flame.c:1096 plug-ins/pikaressionist/orientation.c:190 +#: plug-ins/pikaressionist/size.c:199 +#: plug-ins/gradient-flare/gradient-flare.c:3082 +msgid "_Edit" +msgstr "_Праца" -#: ../plug-ins/flame/flame.c:1094 +#: plug-ins/flame/flame.c:1127 +msgid "_Rendering" +msgstr "_Апрацоўванне" + +#: plug-ins/flame/flame.c:1137 +msgid "_Brightness:" +msgstr "_Яркасць:" + +#: plug-ins/flame/flame.c:1149 msgid "Co_ntrast:" msgstr "_Кантраст:" -#: ../plug-ins/flame/flame.c:1108 -msgid "_Gamma:" -msgstr "_Ґама:" - -#: ../plug-ins/flame/flame.c:1122 +#: plug-ins/flame/flame.c:1176 msgid "Sample _density:" msgstr "_Гушчыня прыкладу:" -#: ../plug-ins/flame/flame.c:1133 +#: plug-ins/flame/flame.c:1185 msgid "Spa_tial oversample:" msgstr "_Прасторавая перадыскрэтызацыя:" -#: ../plug-ins/flame/flame.c:1144 +#: plug-ins/flame/flame.c:1194 msgid "Spatial _filter radius:" -msgstr "_Радыюс прасторавага фільтра:" +msgstr "_Радыус прасторавага фільтра:" -#: ../plug-ins/flame/flame.c:1163 +#: plug-ins/flame/flame.c:1212 msgid "Color_map:" -msgstr "_Мапа колераў:" +msgstr "_Карта колераў:" -#: ../plug-ins/flame/flame.c:1205 +#: plug-ins/flame/flame.c:1254 msgid "Custom gradient" -msgstr "Свой ґрадыент" +msgstr "Свой градыент" -#: ../plug-ins/flame/flame.c:1231 +#: plug-ins/flame/flame.c:1280 msgid "C_amera" -msgstr "_Камэра" +msgstr "_Камера" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:546 -#: ../plug-ins/gfig/gfig-dialog.c:275 ../plug-ins/pikaressionist/utils.c:142 -#: ../plug-ins/gradient-flare/gradient-flare.c:881 +#: plug-ins/flame/flame.c:1284 +msgid "_Zoom:" +msgstr "_Маштаб:" + +#: plug-ins/flame/flame.c:1296 plug-ins/gradient-flare/gradient-flare.c:2890 +#: plug-ins/lighting/lighting-ui.c:491 +msgid "_X:" +msgstr "_X:" + +#: plug-ins/flame/flame.c:1308 plug-ins/gradient-flare/gradient-flare.c:2894 +#: plug-ins/lighting/lighting-ui.c:508 +msgid "_Y:" +msgstr "_Y:" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:541 +#: plug-ins/gfig/gfig-dialog.c:338 plug-ins/pikaressionist/utils.c:139 +#: plug-ins/gradient-flare/gradient-flare.c:998 #, c-format msgid "" "No %s in pikarc:\n" @@ -9489,1139 +10490,1276 @@ msgstr "" "(%s \"%s\")\n" "у твой файл %s." -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:562 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:557 msgid "Fractal Explorer" -msgstr "Дасьледнік фракталаў" +msgstr "Даследнік фракталаў" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:637 -msgid "Realtime preview" -msgstr "Агляд у рэальным часе" +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:630 +msgid "Re_altime preview" +msgstr "Прагляд у рэальным часе" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:645 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:638 msgid "If enabled the preview will be redrawn automatically" msgstr "Калі задзейнічана, папярэдні прагляд будзе перарысоўвацца аўтаматычна" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:648 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:641 msgid "R_edraw preview" msgstr "_Перарабіць агляд" -#. Zoom Options -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:656 -msgid "Zoom" -msgstr "Маштаб" +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:662 +msgid "Zoom _In" +msgstr "Па_вялічыць" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:694 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:670 +msgid "Zoom _Out" +msgstr "Па_меншыць" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:687 msgid "Undo last zoom change" -msgstr "Адмяніць апошняе зьмяненьне маштабу" +msgstr "Адмяніць апошняе змяненне маштабу" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:704 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:693 +msgid "_Redo" +msgstr "_Паўтарыць скасаванае" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:697 msgid "Redo last zoom change" -msgstr "Паўтарыць апошняе зьмяненьне маштабу" +msgstr "Паўтарыць апошняе змяненне маштабу" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:719 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:714 msgid "_Parameters" -msgstr "_Парамэтры" +msgstr "_Параметры" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:722 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:717 msgid "Fractal Parameters" msgstr "Параметры фрактала" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:735 -#: ../plug-ins/map-object/map-object-ui.c:1053 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:726 +#: plug-ins/map-object/map-object-ui.c:1078 msgid "Left:" -msgstr "Зьлева:" +msgstr "Злева:" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:744 -#: ../plug-ins/map-object/map-object-ui.c:1053 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:735 +#: plug-ins/map-object/map-object-ui.c:1078 msgid "Right:" msgstr "Справа:" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:753 -#: ../plug-ins/map-object/map-object-ui.c:1052 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:744 +#: plug-ins/map-object/map-object-ui.c:1077 msgid "Top:" -msgstr "Зьверху:" +msgstr "Зверху:" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:762 -#: ../plug-ins/map-object/map-object-ui.c:1052 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:753 +#: plug-ins/map-object/map-object-ui.c:1077 msgid "Bottom:" -msgstr "Зьнізу:" +msgstr "Знізу:" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:774 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:764 msgid "" "The higher the number of iterations, the more details will be calculated" -msgstr "Чым болей паўтарэньняў, тым больш падрабязнасьцяў будзе разлічана" +msgstr "Чым болей паўтарэнняў, тым больш падрабязнасцяў будзе разлічана" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:782 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:774 msgid "CX:" msgstr "CX:" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:785 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:795 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:777 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:788 msgid "Changes aspect of fractal" -msgstr "Зьмяняе прапорцыі фрактала" +msgstr "Змяняе прапорцыі фрактала" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:792 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:785 msgid "CY:" msgstr "CY:" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:811 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:807 msgid "Load a fractal from file" msgstr "Загрузіць фрактал з файла" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:819 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:815 msgid "Reset parameters to default values" -msgstr "Вернуць парамэтры да пачатковых значэньняў" +msgstr "Вярнуць параметры да пачатковых значэнняў" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:828 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:824 msgid "Save active fractal to file" msgstr "Захаваць актыўны фрактал у файл" #. Fractal type toggle box -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:831 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:827 msgid "Fractal Type" msgstr "Тып фрактала" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:844 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:840 msgid "Mandelbrot" msgstr "Мандэльброт" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:848 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:844 msgid "Barnsley 1" msgstr "Барнслі 1" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:850 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:846 msgid "Barnsley 2" msgstr "Барнслі 2" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:852 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:848 msgid "Barnsley 3" msgstr "Барнслі 3" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:854 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:850 msgid "Spider" msgstr "Павук" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:856 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:852 msgid "Man'o'war" msgstr "Man'o'war" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:858 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:854 msgid "Lambda" msgstr "Лямбда" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:860 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:856 msgid "Sierpinski" -msgstr "Серпіньскі" +msgstr "Серпінскі" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:922 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:902 +msgid "Co_lors" +msgstr "_Колеры" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:915 msgid "Number of colors:" -msgstr "Колькасьць колераў:" +msgstr "Колькасць колераў:" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:925 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:917 msgid "Change the number of colors in the mapping" -msgstr "Зьмяніць колькасьць колераў у ператварэньні" +msgstr "Змяніць колькасць колераў у пераўтварэнні" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:932 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:926 msgid "Use loglog smoothing" -msgstr "Loglog згладжваньне" +msgstr "Loglog згладжванне" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:939 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:932 msgid "Use log log smoothing to eliminate \"banding\" in the result" -msgstr "" -"Выкарыстоўваць loglog згладжваньне, каб пазьбегнуць «паласатасьці» выніку" +msgstr "Выкарыстоўваць loglog згладжванне, каб пазбегнуць «паласатасці» выніку" #. Color Density frame -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:943 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:937 msgid "Color Density" msgstr "Гушчыня колеру" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:958 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:946 +msgid "Red:" +msgstr "Чырвоны:" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:948 msgid "Change the intensity of the red channel" -msgstr "Зьмяніць інтэнсыўнасьць чырвонага каналу" +msgstr "Змяніць інтэнсыўнасць чырвонага каналу" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:968 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:956 +msgid "Green:" +msgstr "Зялёны:" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:958 msgid "Change the intensity of the green channel" -msgstr "Зьмяніць інтэнсыўнасьць зялёнага каналу" +msgstr "Змяніць інтэнсыўнасць зялёнага каналу" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:978 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:966 +msgid "Blue:" +msgstr "Сіні:" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:968 msgid "Change the intensity of the blue channel" -msgstr "Зьмяніць інтэнсыўнасьць сіняга каналу" +msgstr "Змяніць інтэнсыўнасць сіняга каналу" #. Color Function frame -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:984 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:976 msgid "Color Function" -msgstr "Функцыя колера" +msgstr "Функцыя колеру" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:997 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1038 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1079 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:989 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1030 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1071 msgid "Sine" msgstr "Сінус" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1001 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1042 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1083 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:993 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1034 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1075 msgctxt "color-function" msgid "None" msgstr "Нічога" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1006 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1047 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1088 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:998 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1039 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1080 msgid "Use sine-function for this color component" -msgstr "Выкарыстоўваць функцыю «сінус» для гэтага складніка колера" +msgstr "Выкарыстоўваць функцыю «сінус» для гэтага складніка колеру" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1009 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1050 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1091 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1001 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1042 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1083 msgid "Use cosine-function for this color component" -msgstr "Выкарыстоўваць функцыю «косінус» для гэтага складніка колера" +msgstr "Выкарыстоўваць функцыю «косінус» для гэтага складніка колеру" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1012 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1053 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1094 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1004 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1045 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1086 msgid "" "Use linear mapping instead of any trigonometrical function for this color " "channel" msgstr "" -"Гэты канал ператвараць лінейна, а не паводле нейкай трыганамэтрычнай функцыі" +"Гэты канал пераўтвараць лінейна, а не паводле нейкай трыганаметрычнай функцыі" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1021 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1062 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1103 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1013 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1054 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1095 msgid "Inversion" -msgstr "Інвэрсія" +msgstr "Інверсія" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1029 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1070 -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1111 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1021 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1062 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1103 msgid "" "If you enable this option higher color values will be swapped with lower " "ones and vice versa" msgstr "" -"Калі задзейнічаеш гэты выбор больш яркія піксэлі будуць абмененыя на менш " -"яркія й наадварот" +"Калі задзейнічаеш гэты параметр больш яркія пікселі будуць абмененыя на менш " +"яркія і наадварот" #. Colormode toggle box -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1116 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1108 msgid "Color Mode" msgstr "Рэжым колераў" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1125 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1117 msgid "As specified above" msgstr "Як вызначана вышэй" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1137 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1129 msgid "" "Create a color-map with the options you specified above (color density/" "function). The result is visible in the preview image" msgstr "" -"Стварыць мапу колераў з выборамі, вызначанымі вышэй (шчыльнасьць/функцыя " -"колера). Вынік бачны на відарысе агляду" +"Стварыць карту колераў з параметрамі, вызначанымі вышэй (шчыльнасць/функцыя " +"колеру). Вынік бачны на відарысе агляду" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1147 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1139 msgid "Apply active gradient to final image" -msgstr "Ужыць актыўны ґрадыент да выніковага відарыса" +msgstr "Ужыць актыўны градыент да выніковага відарыса" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1159 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1151 msgid "Create a color-map using a gradient from the gradient editor" -msgstr "Стварыць мапу колераў, выкарыстоўваючы ґрадыент з рэдактара ґрадыентаў" +msgstr "" +"Стварыць карту колераў, выкарыстоўваючы градыент з рэдактара градыентаў" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1170 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1162 msgid "FractalExplorer Gradient" -msgstr "Ґрадыент Дасьледніка фракталаў" +msgstr "Градыент Даследніка фракталаў" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1200 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1192 msgid "_Fractals" msgstr "_Фракталы" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1562 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1552 #, c-format msgid "Could not write '%s': %s" -msgstr "Немагчыма запісаць '%s': %s" +msgstr "Не ўдалося запісаць '%s': %s" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1637 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1627 msgid "Load Fractal Parameters" -msgstr "Загрузіць парамэтры фрактала" +msgstr "Загрузіць параметры фрактала" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1675 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1665 msgid "Save Fractal Parameters" -msgstr "Захаваць парамэтры фрактала" +msgstr "Захаваць параметры фрактала" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1873 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1863 #, c-format msgid "'%s' is not a FractalExplorer file" -msgstr "«%s» не зьяўляецца файлам Дасьледніка фракталаў" +msgstr "«%s» не з'яўляецца файлам Даследніка фракталаў" -#: ../plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1880 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1870 #, c-format msgid "'%s' is corrupt. Line %d Option section incorrect" -msgstr "«%s» пашкоджаны. Радок %d разьдзелу «Option» няправільны" +msgstr "«%s» пашкоджаны. Радок %d раздзелу «Option» няправільны" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:238 -msgid "Render fractal art" -msgstr "Стварэньне выяваў фракталаў" - -#: ../plug-ins/fractal-explorer/fractal-explorer.c:243 +#: plug-ins/fractal-explorer/fractal-explorer.c:241 msgid "_Fractal Explorer..." -msgstr "_Дасьледнік фракталаў…" +msgstr "_Даследнік фракталаў…" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:371 +#: plug-ins/fractal-explorer/fractal-explorer.c:245 +msgid "Render fractal art" +msgstr "Стварэнне выяваў фракталаў" + +#: plug-ins/fractal-explorer/fractal-explorer.c:489 msgid "Rendering fractal" -msgstr "Стварэньне фрактала" +msgstr "Стварэнне фрактала" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:754 -#: ../plug-ins/gradient-flare/gradient-flare.c:3201 +#: plug-ins/fractal-explorer/fractal-explorer.c:866 +#: plug-ins/gradient-flare/gradient-flare.c:3358 #, c-format msgid "Are you sure you want to delete \"%s\" from the list and from disk?" -msgstr "Ці жадаеш сапраўды прыбраць «%s» са сьпісу й выдаліць яго з дыску?" +msgstr "Ці жадаеш сапраўды прыбраць «%s» са спісу і выдаліць яго з дыску?" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:758 +#: plug-ins/fractal-explorer/fractal-explorer.c:870 msgid "Delete Fractal" msgstr "Выдаліць фрактал" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:947 +#: plug-ins/fractal-explorer/fractal-explorer.c:1059 #, c-format msgid "File '%s' is not a FractalExplorer file" -msgstr "Файл «%s» не зьяўляецца файлам Дасьледніка фракталаў" +msgstr "Файл «%s» не з'яўляецца файлам Даследніка фракталаў" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:957 +#: plug-ins/fractal-explorer/fractal-explorer.c:1069 #, c-format msgid "" "File '%s' is corrupt.\n" "Line %d Option section incorrect" msgstr "" "Файл «%s» пашкоджаны.\n" -"Радок %d разьдзелу «Option» няправільны" +"Радок %d раздзелу «Option» няправільны" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:1002 +#: plug-ins/fractal-explorer/fractal-explorer.c:1155 msgid "My first fractal" msgstr "Мой першы фрактал" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:1066 +#: plug-ins/fractal-explorer/fractal-explorer.c:1219 msgid "Select folder and rescan collection" -msgstr "Выбраць тэчку й перасканаваць калекцыю" +msgstr "Выбраць папку і перасканаваць калекцыю" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:1078 +#: plug-ins/fractal-explorer/fractal-explorer.c:1230 msgid "Apply currently selected fractal" msgstr "Ужыць выбраны фрактал" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:1090 +#: plug-ins/fractal-explorer/fractal-explorer.c:1241 msgid "Delete currently selected fractal" msgstr "Выдаліць выбраны фрактал" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:1113 +#: plug-ins/fractal-explorer/fractal-explorer.c:1264 msgid "Rescan for Fractals" -msgstr "Пераскававаць фракталы" +msgstr "Перасканаваць фракталы" -#: ../plug-ins/fractal-explorer/fractal-explorer.c:1132 +#: plug-ins/fractal-explorer/fractal-explorer.c:1283 msgid "Add FractalExplorer Path" -msgstr "Дадаць шлях Дасьледніка фракталаў" +msgstr "Дадаць шлях Даследніка фракталаў" -#: ../plug-ins/gfig/gfig-bezier.c:401 +#: plug-ins/gfig/gfig-bezier.c:402 msgid "Closed" msgstr "Закрыты" -#: ../plug-ins/gfig/gfig-bezier.c:406 +#: plug-ins/gfig/gfig-bezier.c:407 msgid "Close curve on completion" -msgstr "Закрыць крывую па сканчэньні" +msgstr "Закрыць крывую па сканчэнні" -#: ../plug-ins/gfig/gfig-bezier.c:411 +#: plug-ins/gfig/gfig-bezier.c:412 msgid "Show Line Frame" msgstr "Паказваць рамку лініі" -#: ../plug-ins/gfig/gfig-bezier.c:416 +#: plug-ins/gfig/gfig-bezier.c:417 msgid "Draws lines between the control points. Only during curve creation" -msgstr "Рысуе лініі між кіроўнымі пунктамі. Толькі падчас стварэньня крывой." +msgstr "Рысуе лініі між кіроўнымі пунктамі. Толькі падчас стварэння крывой" #. Start building the dialog up -#: ../plug-ins/gfig/gfig-dialog.c:287 +#: plug-ins/gfig/gfig-dialog.c:350 msgid "Gfig" -msgstr "G-фіг" +msgstr "Gfig" + +#: plug-ins/gfig/gfig-dialog.c:385 plug-ins/gfig/gfig-menu.ui:44 +msgid "Line" +msgstr "Лінія" + +#: plug-ins/gfig/gfig-dialog.c:385 +msgid "Create line" +msgstr "Стварыць лінію" + +#: plug-ins/gfig/gfig-dialog.c:387 plug-ins/gfig/gfig-dialog.c:1440 +#: plug-ins/gfig/gfig-menu.ui:49 plug-ins/imagemap/imap_main.c:1572 +#: plug-ins/imagemap/imap-menu.ui:171 plug-ins/imagemap/imap-menu.ui:259 +msgid "Rectangle" +msgstr "Прастакутнік" + +#: plug-ins/gfig/gfig-dialog.c:387 +msgid "Create rectangle" +msgstr "Стварыць прастакутнік" + +#: plug-ins/gfig/gfig-dialog.c:389 plug-ins/gfig/gfig-menu.ui:54 +#: plug-ins/gradient-flare/gradient-flare.c:4021 +#: plug-ins/imagemap/imap_main.c:1574 plug-ins/imagemap/imap-menu.ui:176 +#: plug-ins/imagemap/imap-menu.ui:264 +msgid "Circle" +msgstr "Акружнасць" + +#: plug-ins/gfig/gfig-dialog.c:389 +msgid "Create circle" +msgstr "Стварыць акружнасць" + +#: plug-ins/gfig/gfig-dialog.c:391 plug-ins/gfig/gfig-menu.ui:59 +msgid "Ellipse" +msgstr "Эліпс" + +#: plug-ins/gfig/gfig-dialog.c:391 +msgid "Create ellipse" +msgstr "Стварыць эліпс" + +#: plug-ins/gfig/gfig-dialog.c:393 plug-ins/gfig/gfig-menu.ui:64 +msgid "Arc" +msgstr "Дуга" + +#: plug-ins/gfig/gfig-dialog.c:393 +msgid "Create arc" +msgstr "Стварыць дугу" + +#: plug-ins/gfig/gfig-dialog.c:395 plug-ins/gfig/gfig-menu.ui:69 +#: plug-ins/gradient-flare/gradient-flare.c:4038 +#: plug-ins/imagemap/imap_main.c:1576 plug-ins/imagemap/imap-menu.ui:181 +#: plug-ins/imagemap/imap-menu.ui:269 +msgid "Polygon" +msgstr "Шматкутнік" + +#: plug-ins/gfig/gfig-dialog.c:395 +msgid "Create reg polygon" +msgstr "Стварыць правільны шматкутнік" + +#: plug-ins/gfig/gfig-dialog.c:397 plug-ins/gfig/gfig-menu.ui:74 +msgid "Star" +msgstr "Зорка" + +#: plug-ins/gfig/gfig-dialog.c:397 +msgid "Create star" +msgstr "Стварыць зорку" + +#: plug-ins/gfig/gfig-dialog.c:399 +msgid "Create spiral" +msgstr "Стварыць спіраль" + +#: plug-ins/gfig/gfig-dialog.c:401 plug-ins/gfig/gfig-menu.ui:84 +msgid "Bezier" +msgstr "Безье" + +#: plug-ins/gfig/gfig-dialog.c:401 +msgid "Create bezier curve. Shift + Button ends object creation." +msgstr "Стварыць крывую Безье. Shift + Кнопка мышы завяршае стварэнне аб'екта." + +#: plug-ins/gfig/gfig-dialog.c:404 plug-ins/gfig/gfig-menu.ui:89 +msgid "Move Object" +msgstr "Перамясціць аб'ект" + +#: plug-ins/gfig/gfig-dialog.c:404 +msgid "Move an object" +msgstr "Перамясціць аб'ект" + +#: plug-ins/gfig/gfig-dialog.c:406 plug-ins/gfig/gfig-menu.ui:94 +msgid "Move Point" +msgstr "Перамясціць пункт" + +#: plug-ins/gfig/gfig-dialog.c:406 +msgid "Move a single point" +msgstr "Перамясціць асобны пункт" + +#: plug-ins/gfig/gfig-dialog.c:408 plug-ins/gfig/gfig-dialog.c:1293 +#: plug-ins/gfig/gfig-menu.ui:99 plug-ins/imagemap/imap_cmd_copy.c:53 +#: plug-ins/imagemap/imap_cmd_copy_object.c:54 +#: plug-ins/imagemap/imap_main.c:1537 plug-ins/imagemap/imap-menu.ui:47 +#: plug-ins/imagemap/imap-menu.ui:330 plug-ins/imagemap/imap-menu.ui:367 +msgid "Copy" +msgstr "Капіяваць" + +#: plug-ins/gfig/gfig-dialog.c:408 +msgid "Copy an object" +msgstr "Капіяваць аб'ект" + +#: 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/imagemap/imap_cmd_delete.c:56 plug-ins/imagemap/imap_menu.c:182 +msgid "Delete" +msgstr "Выдаліць" + +#: plug-ins/gfig/gfig-dialog.c:410 +msgid "Delete an object" +msgstr "Выдаліць аб'ект" + +#: plug-ins/gfig/gfig-dialog.c:412 plug-ins/gfig/gfig-menu.ui:109 +#: plug-ins/imagemap/imap_cmd_select.c:52 +msgid "Select" +msgstr "Выбраць" + +#: plug-ins/gfig/gfig-dialog.c:412 +msgid "Select an object" +msgstr "Выбраць аб'ект" + +#: plug-ins/gfig/gfig-dialog.c:415 plug-ins/gfig/gfig-menu.ui:116 +msgid "Raise" +msgstr "Узняць" + +#: plug-ins/gfig/gfig-dialog.c:415 +msgid "Raise selected object" +msgstr "Узняць выбраны аб'ект" + +#: plug-ins/gfig/gfig-dialog.c:417 plug-ins/gfig/gfig-menu.ui:120 +msgid "Lower" +msgstr "Апусціць" + +#: plug-ins/gfig/gfig-dialog.c:417 +msgid "Lower selected object" +msgstr "Апусціць выбраны аб'ект" + +#: plug-ins/gfig/gfig-dialog.c:419 +msgid "To Top" +msgstr "На самы верх" + +#: plug-ins/gfig/gfig-dialog.c:419 +msgid "Raise selected object to top" +msgstr "Узняць выбраны аб'ект на самы верх" + +#: plug-ins/gfig/gfig-dialog.c:421 +msgid "To Bottom" +msgstr "На самы ніз" + +#: plug-ins/gfig/gfig-dialog.c:421 +msgid "Lower selected object to bottom" +msgstr "Апусціць выбраны аб'ект на самы ніз" + +#: plug-ins/gfig/gfig-dialog.c:424 plug-ins/gfig/gfig-menu.ui:134 +msgid "Show Previous" +msgstr "Паказаць папярэдні" + +#: plug-ins/gfig/gfig-dialog.c:424 +msgid "Show previous object" +msgstr "Паказаць папярэдні аб'ект" + +#: plug-ins/gfig/gfig-dialog.c:426 plug-ins/gfig/gfig-menu.ui:138 +msgid "Show Next" +msgstr "Паказаць наступны" + +#: plug-ins/gfig/gfig-dialog.c:426 +msgid "Show next object" +msgstr "Паказаць наступны аб'ект" + +#: plug-ins/gfig/gfig-dialog.c:428 plug-ins/gfig/gfig-menu.ui:142 +msgid "Show All" +msgstr "Паказаць усе" + +#: plug-ins/gfig/gfig-dialog.c:428 +msgid "Show all objects" +msgstr "Паказаць усе аб'екты" #. Tool options notebook -#: ../plug-ins/gfig/gfig-dialog.c:335 +#: plug-ins/gfig/gfig-dialog.c:456 msgid "Tool Options" -msgstr "Выборы прылады" +msgstr "Параметры інструмента" -#: ../plug-ins/gfig/gfig-dialog.c:352 +#: plug-ins/gfig/gfig-dialog.c:473 msgid "_Stroke" -msgstr "_Аблямаваць" +msgstr "_Абвесці" #. Fill frame on right side -#: ../plug-ins/gfig/gfig-dialog.c:399 +#: plug-ins/gfig/gfig-dialog.c:519 msgid "Fill" msgstr "Запоўніць" -#: ../plug-ins/gfig/gfig-dialog.c:413 +#: plug-ins/gfig/gfig-dialog.c:533 msgid "No fill" msgstr "Не запаўняць" -#: ../plug-ins/gfig/gfig-dialog.c:414 +#: plug-ins/gfig/gfig-dialog.c:534 msgid "Color fill" msgstr "Запоўніць колерам" -#: ../plug-ins/gfig/gfig-dialog.c:415 +#: plug-ins/gfig/gfig-dialog.c:535 msgid "Pattern fill" msgstr "Запоўніць узорам" -#: ../plug-ins/gfig/gfig-dialog.c:416 +#: plug-ins/gfig/gfig-dialog.c:536 msgid "Shape gradient" -msgstr "Фіґурным ґрадыентам" +msgstr "Фігурным градыентам" -#: ../plug-ins/gfig/gfig-dialog.c:417 +#: plug-ins/gfig/gfig-dialog.c:537 msgid "Vertical gradient" -msgstr "Вэртыкальны ґрадыент" +msgstr "Вертыкальны градыент" -#: ../plug-ins/gfig/gfig-dialog.c:418 +#: plug-ins/gfig/gfig-dialog.c:538 msgid "Horizontal gradient" -msgstr "Гарызантальны ґрадыент" +msgstr "Гарызантальны градыент" #. "show image" checkbutton at bottom of style frame -#: ../plug-ins/gfig/gfig-dialog.c:478 +#: plug-ins/gfig/gfig-dialog.c:600 msgid "Show image" msgstr "Паказаць відарыс" #. "snap to grid" checkbutton at bottom of style frame -#: ../plug-ins/gfig/gfig-dialog.c:491 +#: plug-ins/gfig/gfig-dialog.c:613 msgctxt "checkbutton" msgid "Snap to grid" msgstr "Прыцягвацца да сеткі" #. "show grid" checkbutton at bottom of style frame -#: ../plug-ins/gfig/gfig-dialog.c:500 +#: plug-ins/gfig/gfig-dialog.c:622 msgid "Show grid" msgstr "Паказваць сетку" -#: ../plug-ins/gfig/gfig-dialog.c:635 +#: plug-ins/gfig/gfig-dialog.c:777 msgid "Load Gfig Object Collection" -msgstr "Загрузіць калекцыю аб'ектаў G-фіг" +msgstr "Загрузіць калекцыю аб'ектаў Gfig" -#: ../plug-ins/gfig/gfig-dialog.c:684 +#: plug-ins/gfig/gfig-dialog.c:827 msgid "Save Gfig Drawing" -msgstr "Захаваць рысунак G-фіг" +msgstr "Захаваць рысунак Gfig" -#: ../plug-ins/gfig/gfig-dialog.c:848 +#: plug-ins/gfig/gfig-dialog.c:1002 msgid "First Gfig" -msgstr "Першы G-фіг" +msgstr "Першы Gfig" -#: ../plug-ins/gfig/gfig-dialog.c:886 -msgid "_Undo" -msgstr "_Адмяніць" - -#: ../plug-ins/gfig/gfig-dialog.c:890 -msgid "_Clear" -msgstr "_Ачысьціць" - -#: ../plug-ins/gfig/gfig-dialog.c:894 ../plug-ins/imagemap/imap_menu.c:208 -msgid "_Grid" -msgstr "_Сетка" - -#: ../plug-ins/gfig/gfig-dialog.c:902 -msgid "Raise selected object" -msgstr "Узьняць выбраны аб'ект" - -#: ../plug-ins/gfig/gfig-dialog.c:906 -msgid "Lower selected object" -msgstr "Апусьціць выбраны аб'ект" - -#: ../plug-ins/gfig/gfig-dialog.c:910 -msgid "Raise selected object to top" -msgstr "Узьняць выбраны аб'ект на вяршыню" - -#: ../plug-ins/gfig/gfig-dialog.c:914 -msgid "Lower selected object to bottom" -msgstr "Апусьціць выбраны аб'ект на спод" - -#: ../plug-ins/gfig/gfig-dialog.c:918 -msgid "Show previous object" -msgstr "Паказаць папярэдні аб'ект" - -#: ../plug-ins/gfig/gfig-dialog.c:922 -msgid "Show next object" -msgstr "Паказаць наступны аб'ект" - -#: ../plug-ins/gfig/gfig-dialog.c:926 ../plug-ins/gfig/gfig-stock.c:52 -msgid "Show all objects" -msgstr "Паказаць усе аб'екты" - -#: ../plug-ins/gfig/gfig-dialog.c:932 ../plug-ins/gfig/gfig-stock.c:46 -msgid "Create line" -msgstr "Стварыць лінію" - -#: ../plug-ins/gfig/gfig-dialog.c:935 ../plug-ins/gfig/gfig-stock.c:50 -msgid "Create rectangle" -msgstr "Стварыць прастакутнік" - -#: ../plug-ins/gfig/gfig-dialog.c:938 ../plug-ins/gfig/gfig-stock.c:41 -msgid "Create circle" -msgstr "Стварыць акружнасьць" - -#: ../plug-ins/gfig/gfig-dialog.c:941 ../plug-ins/gfig/gfig-stock.c:45 -msgid "Create ellipse" -msgstr "Стварыць эліпс" - -#: ../plug-ins/gfig/gfig-dialog.c:944 ../plug-ins/gfig/gfig-stock.c:43 -msgid "Create arc" -msgstr "Стварыць дугу" - -#: ../plug-ins/gfig/gfig-dialog.c:947 ../plug-ins/gfig/gfig-stock.c:49 -msgid "Create reg polygon" -msgstr "Стварыць правільны шматкутнік" - -#: ../plug-ins/gfig/gfig-dialog.c:950 ../plug-ins/gfig/gfig-stock.c:54 -msgid "Create star" -msgstr "Стварыць зорку" - -#: ../plug-ins/gfig/gfig-dialog.c:953 ../plug-ins/gfig/gfig-stock.c:53 -msgid "Create spiral" -msgstr "Стварыць сьпіраль" - -#: ../plug-ins/gfig/gfig-dialog.c:956 -msgid "Create bezier curve. Shift + Button ends object creation." -msgstr "Стварыць крывую бэзье. Shift + Кнопка сканчае стварэньне аб'екта." - -#: ../plug-ins/gfig/gfig-dialog.c:960 ../plug-ins/gfig/gfig-stock.c:47 -msgid "Move an object" -msgstr "Пасунуць аб'ект" - -#: ../plug-ins/gfig/gfig-dialog.c:963 ../plug-ins/gfig/gfig-stock.c:48 -msgid "Move a single point" -msgstr "Пасунуць асобны пункт" - -#: ../plug-ins/gfig/gfig-dialog.c:966 ../plug-ins/gfig/gfig-stock.c:42 -msgid "Copy an object" -msgstr "Капіяваць аб'ект" - -#: ../plug-ins/gfig/gfig-dialog.c:969 ../plug-ins/gfig/gfig-stock.c:44 -msgid "Delete an object" -msgstr "Выдаліць аб'ект" - -#: ../plug-ins/gfig/gfig-dialog.c:972 ../plug-ins/gfig/gfig-stock.c:51 -msgid "Select an object" -msgstr "Выбраць аб'ект" - -#: ../plug-ins/gfig/gfig-dialog.c:1054 +#: plug-ins/gfig/gfig-dialog.c:1021 msgid "This tool has no options" -msgstr "Прылада ня мае выбораў" +msgstr "Інструмент не мае параметраў" #. Put buttons in -#: ../plug-ins/gfig/gfig-dialog.c:1265 +#: plug-ins/gfig/gfig-dialog.c:1237 msgid "Show position" msgstr "Паказаць становішча" -#: ../plug-ins/gfig/gfig-dialog.c:1277 +#: plug-ins/gfig/gfig-dialog.c:1249 msgid "Show control points" msgstr "Паказаць кіроўныя пункты" -#: ../plug-ins/gfig/gfig-dialog.c:1311 +#: plug-ins/gfig/gfig-dialog.c:1265 +msgid "Antialiasing" +msgstr "Згладжванне" + +#: plug-ins/gfig/gfig-dialog.c:1282 msgid "Max undo:" msgstr "Адменаў:" -#: ../plug-ins/gfig/gfig-dialog.c:1320 -#: ../plug-ins/pikaressionist/general.c:184 +#: plug-ins/gfig/gfig-dialog.c:1289 plug-ins/pikaressionist/general.c:184 msgid "Transparent" msgstr "Празрыстая" -#: ../plug-ins/gfig/gfig-dialog.c:1322 +#: plug-ins/gfig/gfig-dialog.c:1291 msgid "Foreground" -msgstr "Колеру рысаваньня" +msgstr "Колеру малявання" -#: ../plug-ins/gfig/gfig-dialog.c:1324 ../plug-ins/imagemap/imap_cmd_copy.c:53 -#: ../plug-ins/imagemap/imap_cmd_copy_object.c:54 -#: ../plug-ins/imagemap/imap_menu.c:159 -msgid "Copy" -msgstr "Капіяваць" - -#: ../plug-ins/gfig/gfig-dialog.c:1333 +#: plug-ins/gfig/gfig-dialog.c:1302 msgid "" "Layer background type. Copy causes the previous layer to be copied before " "the draw is performed." msgstr "" -"Тып асноведзі пласта. «Капіяваць» азначае, што папярэдні пласт будзе " -"скапіяваны перад выконваньнем рысаваньня." +"Тып фону слоя. «Капіяваць» азначае, што папярэдні слой будзе скапіяваны " +"перад выконваннем малявання." -#: ../plug-ins/gfig/gfig-dialog.c:1339 +#: plug-ins/gfig/gfig-dialog.c:1308 msgid "Background:" -msgstr "Асноведзь:" +msgstr "Фон:" -#: ../plug-ins/gfig/gfig-dialog.c:1342 +#: plug-ins/gfig/gfig-dialog.c:1311 msgid "Feather" -msgstr "Зьмякчыць" +msgstr "Змякчыць" -#: ../plug-ins/gfig/gfig-dialog.c:1365 +#: plug-ins/gfig/gfig-dialog.c:1333 msgid "Radius:" -msgstr "Радыюс:" +msgstr "Радыус:" -#: ../plug-ins/gfig/gfig-dialog.c:1423 +#: plug-ins/gfig/gfig-dialog.c:1391 msgid "Grid spacing:" -msgstr "Прагалы між лініямі:" +msgstr "Прабелы між лініямі:" -#: ../plug-ins/gfig/gfig-dialog.c:1440 +#: plug-ins/gfig/gfig-dialog.c:1407 msgid "Polar grid sectors desired:" -msgstr "Пажадана сэктараў палярнай сеткі:" +msgstr "Пажадана сектараў палярнай сеткі:" -#: ../plug-ins/gfig/gfig-dialog.c:1462 +#: plug-ins/gfig/gfig-dialog.c:1424 msgid "Polar grid radius interval:" -msgstr "Інтэрвал радыюсаў палярнай сеткі:" +msgstr "Інтэрвал радыусаў палярнай сеткі:" -#: ../plug-ins/gfig/gfig-dialog.c:1478 ../plug-ins/imagemap/imap_menu.c:219 -msgid "Rectangle" -msgstr "Прастакутнік" - -#: ../plug-ins/gfig/gfig-dialog.c:1480 +#: plug-ins/gfig/gfig-dialog.c:1442 msgid "Isometric" -msgstr "Ізамэтрычны" +msgstr "Ізаметрычны" -#: ../plug-ins/gfig/gfig-dialog.c:1489 +#: plug-ins/gfig/gfig-dialog.c:1451 msgid "Grid type:" msgstr "Тып сеткі:" -#: ../plug-ins/gfig/gfig-dialog.c:1496 -#: ../plug-ins/gradient-flare/gradient-flare.c:551 +#: plug-ins/gfig/gfig-dialog.c:1458 +#: plug-ins/gradient-flare/gradient-flare.c:749 +#: plug-ins/metadata/metadata-tags.c:254 msgid "Normal" msgstr "Нармальны" -#: ../plug-ins/gfig/gfig-dialog.c:1499 +#: plug-ins/gfig/gfig-dialog.c:1461 msgid "Grey" msgstr "Шэры" -#: ../plug-ins/gfig/gfig-dialog.c:1500 +#: plug-ins/gfig/gfig-dialog.c:1462 msgid "Darker" msgstr "Цямнейшы" -#: ../plug-ins/gfig/gfig-dialog.c:1501 +#: plug-ins/gfig/gfig-dialog.c:1463 msgid "Lighter" -msgstr "Сьвятлейшы" +msgstr "Святлейшы" -#: ../plug-ins/gfig/gfig-dialog.c:1502 +#: plug-ins/gfig/gfig-dialog.c:1464 msgid "Very dark" msgstr "Вельмі цёмны" -#: ../plug-ins/gfig/gfig-dialog.c:1511 +#: plug-ins/gfig/gfig-dialog.c:1473 msgid "Grid color:" msgstr "Колер сеткі:" -#: ../plug-ins/gfig/gfig-dialog.c:1732 +#: plug-ins/gfig/gfig-dialog.c:1698 msgid "Sides:" msgstr "Бакоў:" -#: ../plug-ins/gfig/gfig-dialog.c:1742 +#: plug-ins/gfig/gfig-dialog.c:1707 msgid "Right" msgstr "Направа" -#: ../plug-ins/gfig/gfig-dialog.c:1743 +#: plug-ins/gfig/gfig-dialog.c:1708 msgid "Left" msgstr "Налева" -#: ../plug-ins/gfig/gfig-dialog.c:1753 -#: ../plug-ins/pikaressionist/orientation.c:147 +#: plug-ins/gfig/gfig-dialog.c:1718 plug-ins/pikaressionist/orientation.c:140 msgid "Orientation:" -msgstr "Напрамак:" +msgstr "Арыентацыя:" -#: ../plug-ins/gfig/gfig-dobject.c:580 -msgid "Hey where has the object gone ?" -msgstr "Гэй, куды зьнік аб'ект?" +#: plug-ins/gfig/gfig-dobject.c:581 +msgid "Hey, where has the object gone?" +msgstr "Гэй, куды знік аб'ект?" -#: ../plug-ins/gfig/gfig-dobject.c:922 +#: plug-ins/gfig/gfig-dobject.c:926 msgid "Error reading file" -msgstr "Памылка чытаньня файла" +msgstr "Памылка чытання файла" -#: ../plug-ins/gfig/gfig-dobject.c:1011 +#: plug-ins/gfig/gfig-dobject.c:1024 msgid "Editing read-only object - you will not be able to save it" -msgstr "Рэдагаваньне нязьменнага аб'екта, яго нельга будзе захаваць" +msgstr "Рэдагаванне нязменнага аб'екта, яго нельга будзе захаваць" -#: ../plug-ins/gfig/gfig-poly.c:51 +#: plug-ins/gfig/gfig-poly.c:51 msgid "Regular Polygon Number of Sides" -msgstr "Колькасьць бакоў правільнага шматкутніка" +msgstr "Колькасць бакоў правільнага шматкутніка" -#: ../plug-ins/gfig/gfig-preview.c:337 +#: plug-ins/gfig/gfig-preview.c:322 msgid "Object Details" -msgstr "Падрабязнасьці аб'екта" +msgstr "Падрабязнасці аб'екта" #. Position labels -#: ../plug-ins/gfig/gfig-preview.c:388 +#: plug-ins/gfig/gfig-preview.c:373 msgid "XY position:" -msgstr "Становішча XY:" +msgstr "Становішча па X,Y:" -#: ../plug-ins/gfig/gfig-spiral.c:55 +#: plug-ins/gfig/gfig-spiral.c:55 msgid "Spiral Number of Turns" -msgstr "Колькасьць заваротаў сьпіралі" +msgstr "Колькасць заваротаў спіралі" -#: ../plug-ins/gfig/gfig-star.c:52 +#: plug-ins/gfig/gfig-star.c:52 msgid "Star Number of Points" -msgstr "Колькасьць пунктаў зоркі" +msgstr "Колькасць пунктаў зоркі" -#: ../plug-ins/gfig/gfig-stock.c:40 -msgid "Create bezier curve" -msgstr "Стварыць крывуе бэзье" - -#: ../plug-ins/gfig/gfig.c:122 -msgid "Create geometric shapes" -msgstr "Стварыць геамэтрычную фіґуру" - -#: ../plug-ins/gfig/gfig.c:133 +#: plug-ins/gfig/gfig.c:170 msgid "_Gfig..." -msgstr "_G-фіг…" +msgstr "_Gfig..." -#: ../plug-ins/gfig/gfig.c:734 +#: plug-ins/gfig/gfig.c:174 +msgid "Create geometric shapes" +msgstr "Стварыць геаметрычную фігуру" + +#: plug-ins/gfig/gfig.c:833 msgid "" "Error trying to save figure as a parasite: can't attach parasite to drawable." msgstr "" -"Няўдалая спроба захаваць фіґуру паразітам: немагчыма далучыць паразіта да " -"абшару рысаваньня." +"Няўдалая спроба захаваць фігуру паразітам: немагчыма далучыць паразіта да " +"вобласці малявання." -#: ../plug-ins/gfig/gfig.c:761 +#: plug-ins/gfig/gfig.c:863 #, c-format msgid "Error trying to open temporary file '%s' for parasite loading: %s" -msgstr "Памылка адкрыцьця часовага файла «%s» для загрузкі паразіта: %s" +msgstr "Памылка адкрыцця часовага файла «%s» для загрузкі паразіта: %s" -#: ../plug-ins/pikaressionist/brush.c:243 +#: plug-ins/gfig/gfig-menu.ui:6 plug-ins/imagemap/imap-menu.ui:5 +msgid "File" +msgstr "Файл" + +#: plug-ins/gfig/gfig-menu.ui:8 plug-ins/imagemap/imap_main.c:1522 +#: plug-ins/imagemap/imap-menu.ui:8 +msgid "Open" +msgstr "Адкрыць" + +#: plug-ins/gfig/gfig-menu.ui:12 plug-ins/imagemap/imap_main.c:1524 +#: plug-ins/imagemap/imap-menu.ui:12 +msgid "Save" +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 "Закрыць" + +#: plug-ins/gfig/gfig-menu.ui:21 plug-ins/imagemap/imap-menu.ui:32 +msgid "Edit" +msgstr "Змяніць" + +#: plug-ins/gfig/gfig-menu.ui:23 plug-ins/ifs-compose/ifs-compose.c:956 +#: plug-ins/ifs-compose/ifs-menus.ui:31 plug-ins/imagemap/imap_main.c:1530 +#: plug-ins/imagemap/imap-menu.ui:35 +msgid "Undo" +msgstr "Адмяніць" + +#: plug-ins/gfig/gfig-menu.ui:27 plug-ins/imagemap/imap_cmd_clear.c:50 +#: plug-ins/imagemap/imap-menu.ui:55 +msgid "Clear" +msgstr "Ачысціць" + +#: plug-ins/gfig/gfig-menu.ui:35 plug-ins/imagemap/imap_main.c:1527 +#: plug-ins/imagemap/imap-menu.ui:77 +msgid "Preferences" +msgstr "Налады" + +#: plug-ins/gfig/gfig-menu.ui:124 +msgid "Top" +msgstr "Верх" + +#: plug-ins/gfig/gfig-menu.ui:128 +msgid "Bottom" +msgstr "Ніз" + +#: plug-ins/pikaressionist/brush.c:261 msgid "Can only save drawables!" -msgstr "Можна захоўваць толькі аб'екты рысаваньня!" +msgstr "Можна захоўваць толькі аб'екты малявання!" -#: ../plug-ins/pikaressionist/brush.c:248 +#: plug-ins/pikaressionist/brush.c:266 msgid "Save Brush" msgstr "Захаваць пэндзаль" -#: ../plug-ins/pikaressionist/brush.c:503 +#: plug-ins/pikaressionist/brush.c:522 msgid "_Brush" msgstr "_Пэндзаль" -#: ../plug-ins/pikaressionist/brush.c:540 +#: plug-ins/pikaressionist/brush.c:559 msgid "Gamma:" -msgstr "Ґама:" +msgstr "Гама:" -#: ../plug-ins/pikaressionist/brush.c:558 +#: plug-ins/pikaressionist/brush.c:577 msgid "Changes the gamma (brightness) of the selected brush" -msgstr "Зьмяняе ґаму (яркасьць) выбранага пэндзля" +msgstr "Змяняе гаму (яркасць) выбранага пэндзля" -#: ../plug-ins/pikaressionist/brush.c:566 +#: plug-ins/pikaressionist/brush.c:585 plug-ins/metadata/metadata-editor.c:1371 msgid "Select:" msgstr "Выбар:" -#: ../plug-ins/pikaressionist/brush.c:595 +#: plug-ins/pikaressionist/brush.c:601 +msgid "Save _as" +msgstr "Захаваць _як" + +#: plug-ins/pikaressionist/brush.c:613 msgid "Aspect ratio:" msgstr "Прапорцыі:" -#: ../plug-ins/pikaressionist/brush.c:599 +#: plug-ins/pikaressionist/brush.c:615 msgid "Specifies the aspect ratio of the brush" msgstr "Вызначае суадносіны бакоў пэндзля" -#: ../plug-ins/pikaressionist/brush.c:608 -#: ../plug-ins/pikaressionist/paper.c:205 +#: plug-ins/pikaressionist/brush.c:626 plug-ins/pikaressionist/paper.c:202 msgid "Relief:" -msgstr "Рэльефнасьць:" +msgstr "Рэльефнасць:" -#: ../plug-ins/pikaressionist/brush.c:612 -#: ../plug-ins/pikaressionist/paper.c:209 +#: plug-ins/pikaressionist/brush.c:628 plug-ins/pikaressionist/paper.c:204 msgid "Specifies the amount of embossing to apply to the image (in percent)" msgstr "" -"Вызначае узровень выпукласьці, які трэба дадаць да відарыса (у адсотках)" +"Вызначае узровень выпукласці, які трэба дадаць да відарыса (у працэнтах)" -#: ../plug-ins/pikaressionist/color.c:59 +#: plug-ins/pikaressionist/color.c:59 msgid "Co_lor" msgstr "_Колер" -#: ../plug-ins/pikaressionist/color.c:69 +#: plug-ins/pikaressionist/color.c:69 msgid "A_verage under brush" msgstr "_Сярэдні пад пэндзлем" -#: ../plug-ins/pikaressionist/color.c:71 +#: plug-ins/pikaressionist/color.c:71 msgid "C_enter of brush" msgstr "_Сярэдзіна пэндзля" -#: ../plug-ins/pikaressionist/color.c:78 +#: plug-ins/pikaressionist/color.c:78 msgid "Color is computed from the average of all pixels under the brush" -msgstr "Колер узяты як сярэдняе ўсіх піксэляў пад пэндзлем" +msgstr "Колер узяты як сярэдняе ўсіх пікселяў пад пэндзлем" -#: ../plug-ins/pikaressionist/color.c:82 +#: plug-ins/pikaressionist/color.c:82 msgid "Samples the color from the pixel in the center of the brush" -msgstr "Вібірае колер піксэля, разьмешчанага ў сярэдзіне пэндзля" +msgstr "Вібірае колер пікселя, размешчанага ў сярэдзіне пэндзля" -#: ../plug-ins/pikaressionist/color.c:93 +#: plug-ins/pikaressionist/color.c:87 msgid "Color _noise:" -msgstr "_Шум колера:" +msgstr "_Шум колеру:" -#: ../plug-ins/pikaressionist/color.c:97 +#: plug-ins/pikaressionist/color.c:89 msgid "Adds random noise to the color" -msgstr "Дадае адвольны шум да колера" +msgstr "Дадае адвольны шум да колеру" -#: ../plug-ins/pikaressionist/general.c:133 -#: ../plug-ins/gradient-flare/gradient-flare.c:3530 +#: plug-ins/pikaressionist/general.c:133 +#: plug-ins/gradient-flare/gradient-flare.c:3677 msgid "_General" msgstr "_Асноўныя" -#: ../plug-ins/pikaressionist/general.c:149 +#: plug-ins/pikaressionist/general.c:149 msgid "Keep original" -msgstr "Пакінуць спачатны" +msgstr "Пакінуць першапачатковы" -#: ../plug-ins/pikaressionist/general.c:150 +#: plug-ins/pikaressionist/general.c:150 msgid "Preserve the original image as a background" -msgstr "Пакінуць спачатны відарыс як асноведзь" +msgstr "Пакінуць першапачатковы відарыс як фон" -#: ../plug-ins/pikaressionist/general.c:155 +#: plug-ins/pikaressionist/general.c:155 msgid "From paper" msgstr "З паперы" -#: ../plug-ins/pikaressionist/general.c:156 +#: plug-ins/pikaressionist/general.c:156 msgid "Copy the texture of the selected paper as a background" -msgstr "Скапіяваць тэкстуру выбранай паперы як асноведзь" +msgstr "Скапіяваць тэкстуру выбранай паперы як фон" -#: ../plug-ins/pikaressionist/general.c:166 +#: plug-ins/pikaressionist/general.c:166 msgid "Solid colored background" -msgstr "Суцэльна пафарбаваная асноведзь" +msgstr "Суцэльна афарбаваны фон" -#: ../plug-ins/pikaressionist/general.c:185 +#: plug-ins/pikaressionist/general.c:185 msgid "Use a transparent background; Only the strokes painted will be visible" -msgstr "Ужыць празрытую асноведзь. Будуць бачныя толькі нарысаваныя промні" +msgstr "Выкарыстоўваць празрысты фон. Будуць бачныя толькі намаляваныя промні" -#: ../plug-ins/pikaressionist/general.c:202 +#: plug-ins/pikaressionist/general.c:202 msgid "Paint edges" msgstr "Маляваць на краях" -#: ../plug-ins/pikaressionist/general.c:207 +#: plug-ins/pikaressionist/general.c:207 msgid "Selects if to place strokes all the way out to the edges of the image" -msgstr "Выбірае ці разьмесьціць мазкі на краях відарыса" +msgstr "Выбірае ці размесціць мазкі на краях відарыса" -#. Tileable checkbox -#: ../plug-ins/pikaressionist/general.c:212 ../plug-ins/maze/maze-dialog.c:268 +#: plug-ins/pikaressionist/general.c:212 msgid "Tileable" -msgstr "Прыдатны для замошчваньня" +msgstr "Прыдатны для замошчвання" -#: ../plug-ins/pikaressionist/general.c:216 +#: plug-ins/pikaressionist/general.c:216 msgid "Selects if the resulting image should be seamlessly tileable" msgstr "" -"Выбірае, ці будзе выніковы відарыс прыдатным для бясшоўнага замошчваньня" +"Выбірае, ці будзе выніковы відарыс прыдатным для бясшоўнага замошчвання" -#: ../plug-ins/pikaressionist/general.c:221 +#: plug-ins/pikaressionist/general.c:221 msgid "Drop shadow" msgstr "Падаючы цень" -#: ../plug-ins/pikaressionist/general.c:226 +#: plug-ins/pikaressionist/general.c:226 msgid "Adds a shadow effect to each brush stroke" -msgstr "Дадае эфэкт ценю да кожнага мазка пэндзлем" +msgstr "Дадае эфект ценю да кожнага мазка пэндзлем" -#: ../plug-ins/pikaressionist/general.c:239 +#: plug-ins/pikaressionist/general.c:238 msgid "Edge darken:" -msgstr "Зацямненьне краю:" +msgstr "Зацямненне краю:" -#: ../plug-ins/pikaressionist/general.c:243 +#: plug-ins/pikaressionist/general.c:240 msgid "How much to \"darken\" the edges of each brush stroke" msgstr "На колькі «зачарніць» краі кожнага мазка пэндзлем" -#: ../plug-ins/pikaressionist/general.c:248 +#: plug-ins/pikaressionist/general.c:246 msgid "Shadow darken:" -msgstr "Зацямненьне ценю:" +msgstr "Зацямненне ценю:" -#: ../plug-ins/pikaressionist/general.c:252 +#: plug-ins/pikaressionist/general.c:249 msgid "How much to \"darken\" the drop shadow" msgstr "На колькі «зачарніць» падаючы цень" -#: ../plug-ins/pikaressionist/general.c:257 +#: plug-ins/pikaressionist/general.c:255 msgid "Shadow depth:" msgstr "Глыбіня ценю:" -#: ../plug-ins/pikaressionist/general.c:261 +#: plug-ins/pikaressionist/general.c:257 msgid "" "The depth of the drop shadow, i.e. how far apart from the object it should be" -msgstr "Глыбіня падаючага ценю, г.зн. як далёка ад аб'екту мусіць ён быць" +msgstr "Глыбіня падаючага ценю, г.зн. як далёка ад аб'екту павінен ён быць" -#: ../plug-ins/pikaressionist/general.c:266 +#: plug-ins/pikaressionist/general.c:263 msgid "Shadow blur:" -msgstr "Размыцьцё ценю:" +msgstr "Размыццё ценю:" -#: ../plug-ins/pikaressionist/general.c:270 +#: plug-ins/pikaressionist/general.c:265 msgid "How much to blur the drop shadow" msgstr "На колькі размыць падаючы цень" -#: ../plug-ins/pikaressionist/general.c:275 +#: plug-ins/pikaressionist/general.c:271 msgid "Deviation threshold:" -msgstr "Парог адхіленьня:" +msgstr "Парог адхілення:" -#: ../plug-ins/pikaressionist/general.c:279 +#: plug-ins/pikaressionist/general.c:273 msgid "A bailout-value for adaptive selections" -msgstr "Дапаможнае значэньне для адаптыўных вылучэньняў" +msgstr "Дапаможнае значэнне для адаптыўных вылучэнняў" -#: ../plug-ins/pikaressionist/pika.c:89 -msgid "Performs various artistic operations" -msgstr "Выконвае розныя мастакоўскія дзеяньні" - -#: ../plug-ins/pikaressionist/pika.c:94 +#: plug-ins/pikaressionist/pika.c:121 msgid "_PIKAressionist..." -msgstr "_Ґімпрэсіяніст…" +msgstr "_Гімпрэсіяніст…" -#: ../plug-ins/pikaressionist/pika.c:164 -msgid "The selection does not intersect the active layer or mask." -msgstr "Вылучэньне не перасякае актыўны пласт ці маску." +#: plug-ins/pikaressionist/pika.c:125 +msgid "Performs various artistic operations" +msgstr "Выконвае розныя мастакоўскія дзеянні" -#: ../plug-ins/pikaressionist/pika.c:391 +#: plug-ins/pikaressionist/pika.c:449 msgid "Painting" -msgstr "Маляваньне" +msgstr "Маляванне" -#: ../plug-ins/pikaressionist/pikaressionist.c:138 +#: plug-ins/pikaressionist/pikaressionist.c:138 msgid "PIKAressionist" -msgstr "Ґімпрэсіяніст" +msgstr "Гімпрэсіяніст" -#: ../plug-ins/pikaressionist/orientation.c:91 +#: plug-ins/pikaressionist/orientation.c:87 msgid "Or_ientation" msgstr "_Арыентацыя" -#: ../plug-ins/pikaressionist/orientation.c:105 +#: plug-ins/pikaressionist/orientation.c:100 msgid "Directions:" msgstr "Напрамкі:" -#: ../plug-ins/pikaressionist/orientation.c:109 +#: plug-ins/pikaressionist/orientation.c:102 msgid "The number of directions (i.e. brushes) to use" msgstr "Колькі напрамкаў (г.зн. пэндзляў) выкарыстаць" -#: ../plug-ins/pikaressionist/orientation.c:117 +#: plug-ins/pikaressionist/orientation.c:111 msgid "Start angle:" msgstr "Пачатковы вугал:" -#: ../plug-ins/pikaressionist/orientation.c:121 +#: plug-ins/pikaressionist/orientation.c:113 msgid "The starting angle of the first brush to create" msgstr "Пачатковы вугал першага створанага пэндзля" -#: ../plug-ins/pikaressionist/orientation.c:129 +#: plug-ins/pikaressionist/orientation.c:122 msgid "Angle span:" msgstr "Хорда вугла:" -#: ../plug-ins/pikaressionist/orientation.c:133 +#: plug-ins/pikaressionist/orientation.c:124 msgid "The angle span of the first brush to create" msgstr "Дыяпазон вуглоў першага створанага пэндзля" -#: ../plug-ins/pikaressionist/orientation.c:156 +#: plug-ins/pikaressionist/orientation.c:149 msgid "" "Let the value (brightness) of the region determine the direction of the " "stroke" -msgstr "Няхай яркасьць вобласьці вызначае напрамак мазкоў" +msgstr "Няхай яркасць вобласці вызначае напрамак мазкоў" -#: ../plug-ins/pikaressionist/orientation.c:159 -#: ../plug-ins/pikaressionist/size.c:162 +#: plug-ins/pikaressionist/orientation.c:152 plug-ins/pikaressionist/size.c:159 msgid "Radius" -msgstr "Радыюс" +msgstr "Радыус" -#: ../plug-ins/pikaressionist/orientation.c:160 +#: plug-ins/pikaressionist/orientation.c:153 msgid "" "The distance from the center of the image determines the direction of the " "stroke" -msgstr "Адлегласьць ад сярэдзіны відарыса вызначае напрамак мазкоў" +msgstr "Адлегласць ад сярэдзіны відарыса вызначае напрамак мазкоў" -#: ../plug-ins/pikaressionist/orientation.c:164 +#: plug-ins/pikaressionist/orientation.c:157 msgid "Selects a random direction of each stroke" msgstr "Выбірае адвольны напрамак кожнага мазка" -#: ../plug-ins/pikaressionist/orientation.c:167 -#: ../plug-ins/pikaressionist/size.c:170 +#: plug-ins/pikaressionist/orientation.c:160 plug-ins/pikaressionist/size.c:167 msgid "Radial" msgstr "Радыяльны" -#: ../plug-ins/pikaressionist/orientation.c:168 +#: plug-ins/pikaressionist/orientation.c:161 msgid "Let the direction from the center determine the direction of the stroke" -msgstr "Няхай адлегласьць ад сярэдзіны відарыса вызначае напрамак мазкоў" +msgstr "Няхай адлегласць ад сярэдзіны відарыса вызначае напрамак мазкоў" -#: ../plug-ins/pikaressionist/orientation.c:175 -#: ../plug-ins/pikaressionist/size.c:178 +#: plug-ins/pikaressionist/orientation.c:168 plug-ins/pikaressionist/size.c:175 msgid "Flowing" msgstr "Мяккі" -#: ../plug-ins/pikaressionist/orientation.c:176 -#: ../plug-ins/pikaressionist/size.c:179 +#: plug-ins/pikaressionist/orientation.c:169 plug-ins/pikaressionist/size.c:176 msgid "The strokes follow a \"flowing\" pattern" msgstr "Мазкі ідуць за «плыўным» узорам" -#: ../plug-ins/pikaressionist/orientation.c:180 +#: plug-ins/pikaressionist/orientation.c:173 msgid "The hue of the region determines the direction of the stroke" -msgstr "Адценьне вобласьці вызначае напрамак мазка" +msgstr "Адценне вобласці вызначае напрамак мазка" -#: ../plug-ins/pikaressionist/orientation.c:183 -#: ../plug-ins/pikaressionist/size.c:186 -msgid "Adaptive" -msgstr "Адаптыўны" - -#: ../plug-ins/pikaressionist/orientation.c:184 +#: plug-ins/pikaressionist/orientation.c:177 msgid "The direction that matches the original image the closest is selected" -msgstr "Выбраны напрамак, які найлепш адпавядае спачатнаму відарысу" +msgstr "Выбраны напрамак, які найлепш адпавядае першапачатковаму відарысу" -#: ../plug-ins/pikaressionist/orientation.c:191 -#: ../plug-ins/pikaressionist/size.c:195 +#: plug-ins/pikaressionist/orientation.c:184 plug-ins/pikaressionist/size.c:192 msgid "Manual" msgstr "Ручны" -#: ../plug-ins/pikaressionist/orientation.c:192 +#: plug-ins/pikaressionist/orientation.c:185 msgid "Manually specify the stroke orientation" msgstr "Вызначыць уручную напрамак мазкоў" -#: ../plug-ins/pikaressionist/orientation.c:203 +#: plug-ins/pikaressionist/orientation.c:196 msgid "Opens up the Orientation Map Editor" -msgstr "Адкрые рэдактар мапы напрамкаў" +msgstr "Адкрые рэдактар карты напрамкаў" -#: ../plug-ins/pikaressionist/orientmap.c:523 +#: plug-ins/pikaressionist/orientmap.c:523 msgid "Orientation Map Editor" -msgstr "Рэдактар мапы напрамку" +msgstr "Рэдактар карты напрамку" -#: ../plug-ins/pikaressionist/orientmap.c:552 +#: plug-ins/pikaressionist/orientmap.c:552 msgid "Vectors" -msgstr "Вэктары" +msgstr "Вектары" -#: ../plug-ins/pikaressionist/orientmap.c:564 +#: plug-ins/pikaressionist/orientmap.c:563 msgid "" "The vector-field. Left-click to move selected vector, Right-click to point " "it towards mouse, Middle-click to add a new vector." msgstr "" -"Поле вэктараў. Пстрычка левай: пасунуць выбраны вэктар, пстрычка правай: " -"павернуць у напрамку мышы, пстрычка сярэдняй: дадаць новы вэктар." +"Поле вектараў. Пстрычка левай: пасунуць выбраны вектар, пстрычка правай: " +"павярнуць у напрамку мышы, пстрычка сярэдняй: дадаць новы вектар." -#: ../plug-ins/pikaressionist/orientmap.c:588 -#: ../plug-ins/pikaressionist/sizemap.c:457 +#: plug-ins/pikaressionist/orientmap.c:587 +#: plug-ins/pikaressionist/sizemap.c:456 msgid "Adjust the preview's brightness" -msgstr "Рэгуляваць яркасьць агляду" +msgstr "Рэгуляваць яркасць агляду" -#: ../plug-ins/pikaressionist/orientmap.c:611 +#: plug-ins/pikaressionist/orientmap.c:609 msgid "Select previous vector" -msgstr "Выбраць папярэдні вэктар" +msgstr "Выбраць папярэдні вектар" -#: ../plug-ins/pikaressionist/orientmap.c:617 +#: plug-ins/pikaressionist/orientmap.c:615 msgid "Select next vector" -msgstr "Выбраць наступны вэктар" +msgstr "Выбраць наступны вектар" -#: ../plug-ins/pikaressionist/orientmap.c:619 -#: ../plug-ins/pikaressionist/sizemap.c:489 +#: plug-ins/pikaressionist/orientmap.c:617 +#: plug-ins/pikaressionist/sizemap.c:488 msgid "A_dd" msgstr "_Дадаць" -#: ../plug-ins/pikaressionist/orientmap.c:623 +#: plug-ins/pikaressionist/orientmap.c:621 msgid "Add new vector" -msgstr "Дадаць новы вэктар" +msgstr "Дадаць новы вектар" -#: ../plug-ins/pikaressionist/orientmap.c:625 -#: ../plug-ins/pikaressionist/sizemap.c:496 +#: plug-ins/pikaressionist/orientmap.c:623 +#: plug-ins/pikaressionist/sizemap.c:495 msgid "_Kill" msgstr "_Забіць" -#: ../plug-ins/pikaressionist/orientmap.c:629 +#: plug-ins/pikaressionist/orientmap.c:627 msgid "Delete selected vector" -msgstr "Выдаліць выбраны вэктар" +msgstr "Выдаліць выбраны вектар" -#: ../plug-ins/pikaressionist/orientmap.c:640 +#: plug-ins/pikaressionist/orientmap.c:638 msgid "Type" msgstr "Тып" -#: ../plug-ins/pikaressionist/orientmap.c:644 +#: plug-ins/pikaressionist/orientmap.c:642 msgid "_Normal" msgstr "_Нармальны" -#: ../plug-ins/pikaressionist/orientmap.c:645 +#: plug-ins/pikaressionist/orientmap.c:643 msgid "Vorte_x" msgstr "_Вір" -#: ../plug-ins/pikaressionist/orientmap.c:646 +#: plug-ins/pikaressionist/orientmap.c:644 msgid "Vortex_2" msgstr "Вір_2" -#: ../plug-ins/pikaressionist/orientmap.c:647 +#: plug-ins/pikaressionist/orientmap.c:645 msgid "Vortex_3" msgstr "Вір_3" -#: ../plug-ins/pikaressionist/orientmap.c:653 -#: ../plug-ins/pikaressionist/sizemap.c:541 +#: plug-ins/pikaressionist/orientmap.c:651 +#: plug-ins/pikaressionist/sizemap.c:539 msgid "_Voronoi" msgstr "_Вараной" -#: ../plug-ins/pikaressionist/orientmap.c:661 +#: plug-ins/pikaressionist/orientmap.c:659 msgid "" "Voronoi-mode makes only the vector closest to the given point have any " "influence" msgstr "" -"У рэжыме «Вараной» мае ўплыў толькі найбліжэйшы да дадзенага пункту вэктар" +"У рэжыме «Вараной» мае ўплыў толькі найбліжэйшы да дадзенага пункту вектар" -#: ../plug-ins/pikaressionist/orientmap.c:671 +#: plug-ins/pikaressionist/orientmap.c:668 msgid "A_ngle:" msgstr "_Вугал:" -#: ../plug-ins/pikaressionist/orientmap.c:675 +#: plug-ins/pikaressionist/orientmap.c:670 msgid "Change the angle of the selected vector" -msgstr "Зьмяніць вугал выбранага вэктара" +msgstr "Змяніць вугал выбранага вектара" -#: ../plug-ins/pikaressionist/orientmap.c:682 +#: plug-ins/pikaressionist/orientmap.c:678 msgid "Ang_le offset:" msgstr "Зрух _вугла:" -#: ../plug-ins/pikaressionist/orientmap.c:686 +#: plug-ins/pikaressionist/orientmap.c:680 msgid "Offset all vectors with a given angle" -msgstr "Зрушыць усе вэктары з дадзеным вуглом" +msgstr "Зрушыць усе вектары з дадзеным вуглом" -#: ../plug-ins/pikaressionist/orientmap.c:697 +#: plug-ins/pikaressionist/orientmap.c:688 +msgid "_Strength:" +msgstr "_Сіла:" + +#: plug-ins/pikaressionist/orientmap.c:691 msgid "Change the strength of the selected vector" -msgstr "Зьмяніць сілу выбранага вэктара" +msgstr "Змяніць сілу выбранага вектара" -#: ../plug-ins/pikaressionist/orientmap.c:704 +#: plug-ins/pikaressionist/orientmap.c:699 msgid "S_trength exp.:" msgstr "_Ступень сілы:" -#: ../plug-ins/pikaressionist/orientmap.c:708 -#: ../plug-ins/pikaressionist/sizemap.c:536 +#: plug-ins/pikaressionist/orientmap.c:702 +#: plug-ins/pikaressionist/sizemap.c:532 msgid "Change the exponent of the strength" -msgstr "Зьмяніць паказьнік ступені сілы" +msgstr "Змяніць паказнік ступені сілы" -#: ../plug-ins/pikaressionist/paper.c:137 +#: plug-ins/pikaressionist/paper.c:136 msgid "P_aper" msgstr "_Папера" -#: ../plug-ins/pikaressionist/paper.c:172 +#: plug-ins/pikaressionist/paper.c:165 +msgid "_Invert" +msgstr "_Інвертаваць" + +#: plug-ins/pikaressionist/paper.c:171 msgid "Inverts the Papers texture" -msgstr "Інвэртуе ґазэтную тэкстуру" +msgstr "Інвертуе газетную тэкстуру" -#: ../plug-ins/pikaressionist/paper.c:176 +#: plug-ins/pikaressionist/paper.c:175 msgid "O_verlay" -msgstr "_Перакрываньне" +msgstr "_Перакрыванне" -#: ../plug-ins/pikaressionist/paper.c:181 +#: plug-ins/pikaressionist/paper.c:180 msgid "Applies the paper as it is (without embossing it)" -msgstr "Ужывае паперу як яна ёсьць (без рэльефу)" +msgstr "Ужывае паперу як яна ёсць (без рэльефу)" -#: ../plug-ins/pikaressionist/paper.c:197 +#: plug-ins/pikaressionist/paper.c:193 msgid "Specifies the scale of the texture (in percent of original file)" -msgstr "Вызначае памер тэкстуры (у адсотках ад спачатнага файла)" +msgstr "Вызначае памер тэкстуры (у працэнтах ад першапачатковага файла)" -#: ../plug-ins/pikaressionist/placement.c:66 +#: plug-ins/pikaressionist/placement.c:66 msgid "Pl_acement" -msgstr "_Разьмяшчэньне" +msgstr "_Размяшчэнне" -#: ../plug-ins/pikaressionist/placement.c:72 +#: plug-ins/pikaressionist/placement.c:72 msgid "Placement" -msgstr "Разьмяшчэньне" +msgstr "Размяшчэнне" -#: ../plug-ins/pikaressionist/placement.c:76 +#: plug-ins/pikaressionist/placement.c:76 msgid "Randomly" msgstr "Адвольна" -#: ../plug-ins/pikaressionist/placement.c:80 +#: plug-ins/pikaressionist/placement.c:80 msgid "Evenly distributed" -msgstr "Раўнамерна разьмеркаваныя" +msgstr "Раўнамерна размеркаваныя" -#: ../plug-ins/pikaressionist/placement.c:88 +#: plug-ins/pikaressionist/placement.c:88 msgid "Place strokes randomly around the image" -msgstr "Адвольна разьмесьціць мазкі па ўсім відарысе" +msgstr "Адвольна размесціць мазкі па ўсім відарысе" -#: ../plug-ins/pikaressionist/placement.c:92 +#: plug-ins/pikaressionist/placement.c:92 msgid "The strokes are evenly distributed across the image" -msgstr "Мазкі пароўну разьмеркаваныя па ўсім відарысе" +msgstr "Мазкі пароўну размеркаваныя па ўсім відарысе" -#: ../plug-ins/pikaressionist/placement.c:101 +#: plug-ins/pikaressionist/placement.c:101 msgid "Centered" msgstr "Цэнтраваны" -#: ../plug-ins/pikaressionist/placement.c:107 +#: plug-ins/pikaressionist/placement.c:107 msgid "Focus the brush strokes around the center of the image" msgstr "Сфакусаваць мазкі пэндзля вакол сярэдзіны відарыса" -#: ../plug-ins/pikaressionist/placement.c:119 +#: plug-ins/pikaressionist/placement.c:113 msgid "Stroke _density:" msgstr "_Гушчыня мазкоў:" -#: ../plug-ins/pikaressionist/placement.c:123 +#: plug-ins/pikaressionist/placement.c:115 msgid "The relative density of the brush strokes" msgstr "Адносная гушчыня мазкоў пэндзля" @@ -10629,295 +11767,229 @@ msgstr "Адносная гушчыня мазкоў пэндзля" #. * pika_filename_to_utf8 () and g_strerror () return temporary strings #. * that need not and should not be freed. So this call is OK. #. * -#: ../plug-ins/pikaressionist/ppmtool.c:648 +#: plug-ins/pikaressionist/ppmtool.c:648 #, c-format msgid "Failed to save PPM file '%s': %s" msgstr "Не ўдалося захаваць файл PPM «%s»: %s" -#: ../plug-ins/pikaressionist/presets.c:639 +#: plug-ins/pikaressionist/presets.c:638 msgid "Save Current" msgstr "Захаваць бягучы" -#: ../plug-ins/pikaressionist/presets.c:894 -msgid "Pikaressionist Defaults" -msgstr "Прадвызначаныя Ґімпрэсіяніста" +#: plug-ins/pikaressionist/presets.c:665 +msgid "Description:" +msgstr "Апісанне:" -#: ../plug-ins/pikaressionist/presets.c:1015 +#: plug-ins/pikaressionist/presets.c:893 +msgid "Pikaressionist Defaults" +msgstr "Прадвызначаныя Гімпрэсіяніста" + +#: plug-ins/pikaressionist/presets.c:1014 msgid "_Presets" msgstr "_Наборы" -#: ../plug-ins/pikaressionist/presets.c:1030 +#: plug-ins/pikaressionist/presets.c:1029 msgid "Save Current..." msgstr "Захаваць бягучы…" -#: ../plug-ins/pikaressionist/presets.c:1038 +#: plug-ins/pikaressionist/presets.c:1037 msgid "Save the current settings to the specified file" -msgstr "Захаваць бягучыя выборы ў вызначаны файл" +msgstr "Захаваць бягучыя параметры ў вызначаны файл" -#: ../plug-ins/pikaressionist/presets.c:1066 +#: plug-ins/pikaressionist/presets.c:1065 msgid "Reads the selected Preset into memory" msgstr "Чытае выбраны набор у памяць" -#: ../plug-ins/pikaressionist/presets.c:1072 +#: plug-ins/pikaressionist/presets.c:1071 msgid "Deletes the selected Preset" msgstr "Выдаляе выбраны набор" -#: ../plug-ins/pikaressionist/presets.c:1078 +#: plug-ins/pikaressionist/presets.c:1077 msgid "Reread the folder of Presets" -msgstr "Перачытаць тэчку набораў" +msgstr "Перачытаць папку набораў" -#: ../plug-ins/pikaressionist/preview.c:174 -#: ../plug-ins/pikaressionist/repaint.c:1182 -#: ../plug-ins/imagemap/imap_polygon.c:515 -#: ../plug-ins/lighting/lighting-ui.c:1082 +#: plug-ins/pikaressionist/preview.c:174 plug-ins/pikaressionist/repaint.c:1197 +#: plug-ins/imagemap/imap_polygon.c:513 plug-ins/lighting/lighting-ui.c:1093 msgid "_Update" msgstr "_Абнавіць" -#: ../plug-ins/pikaressionist/preview.c:180 +#: plug-ins/pikaressionist/preview.c:180 msgid "Refresh the Preview window" -msgstr "Асьвяжыць вакно агляду" +msgstr "Асвяжыць акно агляду" -#: ../plug-ins/pikaressionist/preview.c:188 +#: plug-ins/pikaressionist/preview.c:188 msgid "Revert to the original image" msgstr "Вернуцца да пачатковага відарыса" -#: ../plug-ins/pikaressionist/size.c:94 -msgid "_Size" -msgstr "_Памер" - -#: ../plug-ins/pikaressionist/size.c:108 +#: plug-ins/pikaressionist/size.c:107 msgid "Size variants:" msgstr "Варыянтаў памеру:" -#: ../plug-ins/pikaressionist/size.c:112 +#: plug-ins/pikaressionist/size.c:109 msgid "The number of sizes of brushes to use" msgstr "Колькі памераў пэндзляў выкарыстаць" -#: ../plug-ins/pikaressionist/size.c:120 +#: plug-ins/pikaressionist/size.c:118 msgid "Minimum size:" msgstr "Найменшы памер:" -#: ../plug-ins/pikaressionist/size.c:124 +#: plug-ins/pikaressionist/size.c:120 msgid "The smallest brush to create" msgstr "Які найменшы пэндзаль ствараць" -#: ../plug-ins/pikaressionist/size.c:132 +#: plug-ins/pikaressionist/size.c:129 msgid "Maximum size:" msgstr "Найбольшы памер:" -#: ../plug-ins/pikaressionist/size.c:136 +#: plug-ins/pikaressionist/size.c:131 msgid "The largest brush to create" msgstr "Які найбольшы пэндзаль ствараць" -#: ../plug-ins/pikaressionist/size.c:150 +#: plug-ins/pikaressionist/size.c:147 msgid "Size depends on:" msgstr "Памер залежыць ад:" -#: ../plug-ins/pikaressionist/size.c:159 +#: plug-ins/pikaressionist/size.c:156 msgid "" "Let the value (brightness) of the region determine the size of the stroke" -msgstr "Няхай яркасьць вобласьці вызначае памер мазка" +msgstr "Няхай яркасць вобласці вызначае памер мазка" -#: ../plug-ins/pikaressionist/size.c:163 +#: plug-ins/pikaressionist/size.c:160 msgid "" "The distance from the center of the image determines the size of the stroke" -msgstr "Адлегласьць ад сярэдзіны відарыса вызначае памер мазка" +msgstr "Адлегласць ад сярэдзіны відарыса вызначае памер мазка" -#: ../plug-ins/pikaressionist/size.c:167 +#: plug-ins/pikaressionist/size.c:164 msgid "Selects a random size for each stroke" msgstr "Выбірае адвольны памер кожнага мазка" -#: ../plug-ins/pikaressionist/size.c:171 +#: plug-ins/pikaressionist/size.c:168 msgid "Let the direction from the center determine the size of the stroke" msgstr "Няхай напрамак ад сярэдзіны вызначае памер мазка" -#: ../plug-ins/pikaressionist/size.c:183 +#: plug-ins/pikaressionist/size.c:180 msgid "The hue of the region determines the size of the stroke" -msgstr "Адценьне вобласьці вызначае памер мазка" +msgstr "Адценне вобласці вызначае памер мазка" -#: ../plug-ins/pikaressionist/size.c:187 +#: plug-ins/pikaressionist/size.c:184 msgid "The brush-size that matches the original image the closest is selected" -msgstr "Выбраны памер пэндзля, які найлепш адпавядае спачатнаму відарысу" +msgstr "Выбраны памер пэндзля, які найлепш адпавядае першапачатковаму відарысу" -#: ../plug-ins/pikaressionist/size.c:196 +#: plug-ins/pikaressionist/size.c:193 msgid "Manually specify the stroke size" msgstr "Уручную вызначыць памер мазка" -#: ../plug-ins/pikaressionist/size.c:207 +#: plug-ins/pikaressionist/size.c:204 msgid "Opens up the Size Map Editor" -msgstr "Адкрые рэдактар мапы памераў" +msgstr "Адкрые рэдактар карты памераў" -#: ../plug-ins/pikaressionist/sizemap.c:397 +#: plug-ins/pikaressionist/sizemap.c:396 msgid "Size Map Editor" -msgstr "Рэдактар мапы памеру" +msgstr "Рэдактар карты памеру" -#: ../plug-ins/pikaressionist/sizemap.c:426 +#: plug-ins/pikaressionist/sizemap.c:425 msgid "Smvectors" -msgstr "Мп-вэктары" +msgstr "Мп-вектары" -#: ../plug-ins/pikaressionist/sizemap.c:436 +#: plug-ins/pikaressionist/sizemap.c:435 msgid "" "The smvector-field. Left-click to move selected smvector, Right-click to " "point it towards mouse, Middle-click to add a new smvector." msgstr "" -"Поле мп-вэктараў. Пстрычка левай: пасунуць выбраны мп-вэктар, пстрычка " -"правай: павернуць у напрамку мышы, пстрычка сярэдняй: дадаць новы мп-вэктар." +"Поле мп-вектараў. Пстрычка левай: пасунуць выбраны мп-вектар, пстрычка " +"правай: павярнуць у напрамку мышы, пстрычка сярэдняй: дадаць новы мп-вектар." -#: ../plug-ins/pikaressionist/sizemap.c:480 +#: plug-ins/pikaressionist/sizemap.c:479 msgid "Select previous smvector" -msgstr "Выбраць папярэдні мп-вэктар" +msgstr "Выбраць папярэдні мп-вектар" -#: ../plug-ins/pikaressionist/sizemap.c:487 +#: plug-ins/pikaressionist/sizemap.c:486 msgid "Select next smvector" -msgstr "Выбраць наступны мп-вэктар" +msgstr "Выбраць наступны мп-вектар" -#: ../plug-ins/pikaressionist/sizemap.c:494 +#: plug-ins/pikaressionist/sizemap.c:493 msgid "Add new smvector" -msgstr "Дадаць новы мп-вэктар" +msgstr "Дадаць новы мп-вектар" -#: ../plug-ins/pikaressionist/sizemap.c:501 +#: plug-ins/pikaressionist/sizemap.c:500 msgid "Delete selected smvector" -msgstr "Выдаліць выбраны мп-вэктар" +msgstr "Выдаліць выбраны мп-вектар" -#: ../plug-ins/pikaressionist/sizemap.c:514 +#: plug-ins/pikaressionist/sizemap.c:508 +msgid "_Size:" +msgstr "_Памер:" + +#: plug-ins/pikaressionist/sizemap.c:510 msgid "Change the angle of the selected smvector" -msgstr "Зьмяніць вугал выбранага мп-вэктара" +msgstr "Змяніць вугал выбранага мп-вектара" -#: ../plug-ins/pikaressionist/sizemap.c:521 +#: plug-ins/pikaressionist/sizemap.c:518 msgid "S_trength:" msgstr "_Сіла:" -#: ../plug-ins/pikaressionist/sizemap.c:525 +#: plug-ins/pikaressionist/sizemap.c:521 msgid "Change the strength of the selected smvector" -msgstr "Зьмяніць сілу выбранага мп-вэктара" +msgstr "Змяніць сілу выбранага мп-вектара" -#: ../plug-ins/pikaressionist/sizemap.c:532 +#: plug-ins/pikaressionist/sizemap.c:529 msgid "St_rength exp.:" msgstr "_Ступень сілы:" -#: ../plug-ins/pikaressionist/sizemap.c:548 +#: plug-ins/pikaressionist/sizemap.c:546 msgid "" "Voronoi-mode makes only the smvector closest to the given point have any " "influence" msgstr "" -"У рэжыме «Вараной» мае ўплыў толькі найбліжэйшы да дадзенага пункту мп-вэктар" +"У рэжыме «Вараной» мае ўплыў толькі найбліжэйшы да дадзенага пункту мп-вектар" -#: ../plug-ins/ui/plug-in-file-gif.ui.h:1 -msgid "I_nterlace" -msgstr "_Празрадковы" - -#: ../plug-ins/ui/plug-in-file-gif.ui.h:2 -msgid "_GIF comment:" -msgstr "_Камэнтар GIF:" - -#: ../plug-ins/ui/plug-in-file-gif.ui.h:3 -msgid "As _animation" -msgstr "Як _анімацыю" - -#: ../plug-ins/ui/plug-in-file-gif.ui.h:4 -msgid "GIF Options" -msgstr "Выборы GIF" - -#: ../plug-ins/ui/plug-in-file-gif.ui.h:5 -msgid "_Loop forever" -msgstr "_Бясконцае паўтарэньне" - -#: ../plug-ins/ui/plug-in-file-gif.ui.h:6 -msgid "_Delay between frames where unspecified:" -msgstr "_Затрымка між кадрамі, калі ня вызначаная:" - -#: ../plug-ins/ui/plug-in-file-gif.ui.h:8 -msgid "_Frame disposal where unspecified:" -msgstr "_Разьмяшчэньне кадраў, калі ня вызначанае:" - -#: ../plug-ins/ui/plug-in-file-gif.ui.h:9 -msgid "_Use delay entered above for all frames" -msgstr "Выкарыстоўваць уведзеную вышэй затрымку для _ўсіх кадраў" - -#: ../plug-ins/ui/plug-in-file-gif.ui.h:10 -msgid "U_se disposal entered above for all frames" -msgstr "Выкарыстоўваць уведзенае вышэй разьмяшчэньне _для ўсіх кадраў" - -#: ../plug-ins/ui/plug-in-file-gif.ui.h:11 -msgid "Animated GIF Options" -msgstr "Выборы анімаванага GIF" - -#: ../plug-ins/ui/plug-in-file-png.ui.h:1 -msgid "_Interlacing (Adam7)" -msgstr "_Празрадковы (Adam7)" - -#: ../plug-ins/ui/plug-in-file-png.ui.h:2 -msgid "Save _background color" -msgstr "Захаваць к_олер асноведзі" - -#: ../plug-ins/ui/plug-in-file-png.ui.h:4 -msgid "Save layer o_ffset" -msgstr "Захаваць зрух _пласта" - -#: ../plug-ins/ui/plug-in-file-png.ui.h:5 -msgid "Save _resolution" -msgstr "Захаваць _разрозьненьне" - -#: ../plug-ins/ui/plug-in-file-png.ui.h:6 -msgid "Save creation _time" -msgstr "Захаваць _час стварэньня" - -#: ../plug-ins/ui/plug-in-file-png.ui.h:7 -msgid "Save comme_nt" -msgstr "Захаваць камэн_тар" - -#: ../plug-ins/ui/plug-in-file-png.ui.h:8 -msgid "Save color _values from transparent pixels" -msgstr "Захаваць значэньні _колераў празрыстых піксэляў" - -#: ../plug-ins/ui/plug-in-file-png.ui.h:9 -msgid "Co_mpression level:" -msgstr "Узровень _сьцісканьня:" - -#: ../plug-ins/ui/plug-in-file-png.ui.h:12 -msgid "S_ave Defaults" -msgstr "За_хаваць прадвызначэньні" - -#: ../plug-ins/gradient-flare/gradient-flare.c:552 +#: plug-ins/gradient-flare/gradient-flare.c:750 msgid "Addition" -msgstr "Дадаваньне" +msgstr "Дадаванне" -#: ../plug-ins/gradient-flare/gradient-flare.c:553 +#: plug-ins/gradient-flare/gradient-flare.c:751 msgid "Overlay" -msgstr "Перакрываньне" +msgstr "Перакрыванне" -#: ../plug-ins/gradient-flare/gradient-flare.c:807 -msgid "Produce a lense flare effect using gradients" -msgstr "Стварае эфэкт сьветларасьсеяньня ў аб'ектыве, ужываючы ґрадыенты" +#: plug-ins/gradient-flare/gradient-flare.c:752 +msgid "Screen" +msgstr "Экран" -#: ../plug-ins/gradient-flare/gradient-flare.c:812 +#: plug-ins/gradient-flare/gradient-flare.c:819 msgid "_Gradient Flare..." -msgstr "_Ґрадыентная ўспышка…" +msgstr "_Градыентная ўспышка…" + +#: plug-ins/gradient-flare/gradient-flare.c:824 +msgid "Produce a lense flare effect using gradients" +msgstr "Стварае эфект светларассеяння ў аб'ектыве, ужываючы градыенты" #. #. * Dialog Shell #. -#: ../plug-ins/gradient-flare/gradient-flare.c:951 -#: ../plug-ins/gradient-flare/gradient-flare.c:2356 +#: plug-ins/gradient-flare/gradient-flare.c:1048 +#: plug-ins/gradient-flare/gradient-flare.c:2513 msgid "Gradient Flare" -msgstr "Ґрадыентная ўспышка" +msgstr "Градыентная ўспышка" -#: ../plug-ins/gradient-flare/gradient-flare.c:1265 +#: plug-ins/gradient-flare/gradient-flare.c:1062 +msgid "Cannot operate on indexed color images." +msgstr "Немагчыма працаваць з відарысамі ў індэксаваных колерах." + +#: plug-ins/gradient-flare/gradient-flare.c:1375 #, c-format msgid "Failed to open GFlare file '%s': %s" -msgstr "Немагчыма адкрыць файл GFlare «%s»: %s" +msgstr "Не ўдалося адкрыць файл GFlare «%s»: %s" -#: ../plug-ins/gradient-flare/gradient-flare.c:1273 +#: plug-ins/gradient-flare/gradient-flare.c:1383 #, c-format msgid "'%s' is not a valid GFlare file." -msgstr "«%s» не зьяўляецца файлам GFlare." +msgstr "«%s» не з'яўляецца файлам GFlare." -#: ../plug-ins/gradient-flare/gradient-flare.c:1327 +#: plug-ins/gradient-flare/gradient-flare.c:1437 #, c-format msgid "invalid formatted GFlare file: %s\n" -msgstr "недапушчальна фарматаваны файл GFlare: %s\n" +msgstr "няправільны фарматаваны файл GFlare: %s\n" -#: ../plug-ins/gradient-flare/gradient-flare.c:1452 +#: plug-ins/gradient-flare/gradient-flare.c:1562 #, c-format msgid "" "GFlare '%s' is not saved. If you add a new entry in '%s', like:\n" @@ -10926,344 +11998,367 @@ msgid "" msgstr "" "GFlare «%s» не захаваны. Калі дадасі новы запіс у «%s» кшталту\n" "(gflare-path \"%s\")\n" -"і створыш каталёґ «%s», тады зможаш захоўваць уласныя GFlare у гэты каталёґ." +"і створыш каталог «%s», тады зможаш захоўваць уласныя GFlare у гэты каталог." -#: ../plug-ins/gradient-flare/gradient-flare.c:1485 +#: plug-ins/gradient-flare/gradient-flare.c:1597 #, c-format msgid "Failed to write GFlare file '%s': %s" -msgstr "Немагчыма запісаць файл GFlare «%s»: %s" +msgstr "Не ўдалося запісаць файл GFlare «%s»: %s" -#: ../plug-ins/gradient-flare/gradient-flare.c:2413 +#: plug-ins/gradient-flare/gradient-flare.c:2569 msgid "A_uto update preview" -msgstr "А_ўтаматычна абнаўляць агляд" +msgstr "А_ўтаабнаўленне папярэдняга прагляду" -#: ../plug-ins/gradient-flare/gradient-flare.c:2464 -msgid "`Default' is created." +#: plug-ins/gradient-flare/gradient-flare.c:2622 +#, fuzzy +#| msgid "`Default' is created." +msgid "'Default' is created." msgstr "«Прадвызначаны» створаны." -#: ../plug-ins/gradient-flare/gradient-flare.c:2465 -msgid "Default" -msgstr "Прадвызначаны" - #. #. * Scales #. #. #. * Scales #. -#: ../plug-ins/gradient-flare/gradient-flare.c:2744 -#: ../plug-ins/gradient-flare/gradient-flare.c:3583 -#: ../plug-ins/gradient-flare/gradient-flare.c:3688 -#: ../plug-ins/gradient-flare/gradient-flare.c:3825 +#: plug-ins/gradient-flare/gradient-flare.c:2910 +#: plug-ins/gradient-flare/gradient-flare.c:3730 +#: plug-ins/gradient-flare/gradient-flare.c:3832 +#: plug-ins/gradient-flare/gradient-flare.c:3963 msgid "Parameters" -msgstr "Парамэтры" +msgstr "Параметры" -#: ../plug-ins/gradient-flare/gradient-flare.c:2770 +#: plug-ins/gradient-flare/gradient-flare.c:2922 +#: plug-ins/imagemap/imap_circle.c:275 +msgid "_Radius:" +msgstr "_Радыус:" + +#: plug-ins/gradient-flare/gradient-flare.c:2933 msgid "Ro_tation:" msgstr "_Паварот:" -#: ../plug-ins/gradient-flare/gradient-flare.c:2782 +#: plug-ins/gradient-flare/gradient-flare.c:2944 msgid "_Hue rotation:" -msgstr "Паварот _адценьня:" +msgstr "Паварот _адцення:" -#: ../plug-ins/gradient-flare/gradient-flare.c:2794 +#: plug-ins/gradient-flare/gradient-flare.c:2955 msgid "Vector _angle:" -msgstr "_Вугал вэктара:" +msgstr "_Вугал вектара:" -#: ../plug-ins/gradient-flare/gradient-flare.c:2806 +#: plug-ins/gradient-flare/gradient-flare.c:2966 msgid "Vector _length:" -msgstr "_Даўжыня вэктара:" +msgstr "_Даўжыня вектара:" -#: ../plug-ins/gradient-flare/gradient-flare.c:2827 +#: plug-ins/gradient-flare/gradient-flare.c:2987 msgid "A_daptive supersampling" -msgstr "Адаптыўны супэрсэмплінг" +msgstr "Адаптыўны суперсэмплінг" -#: ../plug-ins/gradient-flare/gradient-flare.c:2848 +#: plug-ins/gradient-flare/gradient-flare.c:3007 msgid "_Max depth:" msgstr "_Макс. глыбіня:" -#: ../plug-ins/gradient-flare/gradient-flare.c:2858 -msgid "_Threshold" -msgstr "_Парог" +#: plug-ins/gradient-flare/gradient-flare.c:3023 +msgid "_Settings" +msgstr "_Налады" -#: ../plug-ins/gradient-flare/gradient-flare.c:2996 +#: plug-ins/gradient-flare/gradient-flare.c:3151 msgid "S_elector" msgstr "_Выбар" -#: ../plug-ins/gradient-flare/gradient-flare.c:3060 +#: plug-ins/gradient-flare/gradient-flare.c:3215 msgid "New Gradient Flare" -msgstr "Новая ґрадыентная ўспышка" +msgstr "Новая градыентная ўспышка" -#: ../plug-ins/gradient-flare/gradient-flare.c:3063 +#: plug-ins/gradient-flare/gradient-flare.c:3218 msgid "Enter a name for the new GFlare" msgstr "Увядзі назву новага GFlare" -#: ../plug-ins/gradient-flare/gradient-flare.c:3083 +#: plug-ins/gradient-flare/gradient-flare.c:3219 +msgid "Unnamed" +msgstr "Безназоўны" + +#: plug-ins/gradient-flare/gradient-flare.c:3239 +#: plug-ins/gradient-flare/gradient-flare.c:3321 #, c-format msgid "The name '%s' is used already!" msgstr "Назва «%s» ужо выкарыстоўваецца!" -#: ../plug-ins/gradient-flare/gradient-flare.c:3139 +#: plug-ins/gradient-flare/gradient-flare.c:3295 msgid "Copy Gradient Flare" -msgstr "Капіяваць ґрадыентную ўспышку" +msgstr "Капіяваць градыентную ўспышку" -#: ../plug-ins/gradient-flare/gradient-flare.c:3142 +#: plug-ins/gradient-flare/gradient-flare.c:3298 msgid "Enter a name for the copied GFlare" msgstr "Увядзі назву капіяванага GFlare" -#: ../plug-ins/gradient-flare/gradient-flare.c:3164 -#, c-format -msgid "The name `%s' is used already!" -msgstr "Назва «%s» ужо выкарыстоўваецца!" - -#: ../plug-ins/gradient-flare/gradient-flare.c:3195 +#: plug-ins/gradient-flare/gradient-flare.c:3352 msgid "Cannot delete!! There must be at least one GFlare." -msgstr "Немагчыма выдаліць!! Мусіць быць прынамсі адзін GFlare." +msgstr "Немагчыма выдаліць! Павінен быць прынамсі адзін GFlare." -#: ../plug-ins/gradient-flare/gradient-flare.c:3205 +#: plug-ins/gradient-flare/gradient-flare.c:3362 msgid "Delete Gradient Flare" -msgstr "Выдаліць ґрадыентную ўспышку" +msgstr "Выдаліць градыентную ўспышку" -#: ../plug-ins/gradient-flare/gradient-flare.c:3277 +#: plug-ins/gradient-flare/gradient-flare.c:3434 #, c-format msgid "not found %s in gflares_list" msgstr "не адшуканы %s у gflares_list" -#: ../plug-ins/gradient-flare/gradient-flare.c:3318 +#: plug-ins/gradient-flare/gradient-flare.c:3474 msgid "Gradient Flare Editor" -msgstr "Рэдактар ґрадыентай успышкі" +msgstr "Рэдактар градыентай успышкі" -#: ../plug-ins/gradient-flare/gradient-flare.c:3322 -msgid "Rescan Gradients" -msgstr "Перасканаваць ґрадыенты" +#: plug-ins/gradient-flare/gradient-flare.c:3478 +msgid "_Rescan Gradients" +msgstr "_Перасканаваць градыенты" #. Glow -#: ../plug-ins/gradient-flare/gradient-flare.c:3447 +#: plug-ins/gradient-flare/gradient-flare.c:3600 msgid "Glow Paint Options" -msgstr "Выборы рысаваньня зарыва" +msgstr "Параметры малявання зарыва" -#: ../plug-ins/gradient-flare/gradient-flare.c:3458 -#: ../plug-ins/gradient-flare/gradient-flare.c:3486 -#: ../plug-ins/gradient-flare/gradient-flare.c:3514 +#: plug-ins/gradient-flare/gradient-flare.c:3610 +#: plug-ins/gradient-flare/gradient-flare.c:3636 +#: plug-ins/gradient-flare/gradient-flare.c:3662 msgid "Opacity:" -msgstr "Непразрыстасьць:" +msgstr "Непразрыстасць:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3471 -#: ../plug-ins/gradient-flare/gradient-flare.c:3499 -#: ../plug-ins/gradient-flare/gradient-flare.c:3527 +#: plug-ins/gradient-flare/gradient-flare.c:3622 +#: plug-ins/gradient-flare/gradient-flare.c:3648 +#: plug-ins/gradient-flare/gradient-flare.c:3674 msgid "Paint mode:" -msgstr "Рэжым рысаваньня:" +msgstr "Рэжым малявання:" #. Rays -#: ../plug-ins/gradient-flare/gradient-flare.c:3475 +#: plug-ins/gradient-flare/gradient-flare.c:3626 msgid "Rays Paint Options" -msgstr "Выборы рысаваньня промняў" +msgstr "Параметры малявання промняў" #. Rays -#: ../plug-ins/gradient-flare/gradient-flare.c:3503 +#: plug-ins/gradient-flare/gradient-flare.c:3652 msgid "Second Flares Paint Options" -msgstr "Выборы рысаваньня другасных успышак" +msgstr "Параметры малявання другасных успышак" #. #. * Gradient Menus #. -#: ../plug-ins/gradient-flare/gradient-flare.c:3556 -#: ../plug-ins/gradient-flare/gradient-flare.c:3659 -#: ../plug-ins/gradient-flare/gradient-flare.c:3798 +#: plug-ins/gradient-flare/gradient-flare.c:3703 +#: plug-ins/gradient-flare/gradient-flare.c:3803 +#: plug-ins/gradient-flare/gradient-flare.c:3936 msgid "Gradients" -msgstr "Ґрадыенты" +msgstr "Градыенты" -#: ../plug-ins/gradient-flare/gradient-flare.c:3567 -#: ../plug-ins/gradient-flare/gradient-flare.c:3672 -#: ../plug-ins/gradient-flare/gradient-flare.c:3809 +#: plug-ins/gradient-flare/gradient-flare.c:3714 +#: plug-ins/gradient-flare/gradient-flare.c:3816 +#: plug-ins/gradient-flare/gradient-flare.c:3947 msgid "Radial gradient:" -msgstr "Радыяльны ґрадыент:" +msgstr "Радыяльны градыент:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3571 -#: ../plug-ins/gradient-flare/gradient-flare.c:3676 +#: plug-ins/gradient-flare/gradient-flare.c:3718 +#: plug-ins/gradient-flare/gradient-flare.c:3820 msgid "Angular gradient:" -msgstr "Вуглавы ґрадыент:" +msgstr "Вуглавы градыент:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3575 -#: ../plug-ins/gradient-flare/gradient-flare.c:3680 +#: plug-ins/gradient-flare/gradient-flare.c:3722 +#: plug-ins/gradient-flare/gradient-flare.c:3824 msgid "Angular size gradient:" -msgstr "Ґрадыент вуглавога памеру:" +msgstr "Градыент вуглавога памеру:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3595 -#: ../plug-ins/gradient-flare/gradient-flare.c:3700 -#: ../plug-ins/gradient-flare/gradient-flare.c:3837 +#: plug-ins/gradient-flare/gradient-flare.c:3741 +#: plug-ins/gradient-flare/gradient-flare.c:3843 +#: plug-ins/gradient-flare/gradient-flare.c:3974 msgid "Size (%):" msgstr "Памер (%):" -#: ../plug-ins/gradient-flare/gradient-flare.c:3607 -#: ../plug-ins/gradient-flare/gradient-flare.c:3712 -#: ../plug-ins/gradient-flare/gradient-flare.c:3849 +#: plug-ins/gradient-flare/gradient-flare.c:3752 +#: plug-ins/gradient-flare/gradient-flare.c:3854 +#: plug-ins/gradient-flare/gradient-flare.c:3985 msgid "Rotation:" msgstr "Паварот:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3619 -#: ../plug-ins/gradient-flare/gradient-flare.c:3725 -#: ../plug-ins/gradient-flare/gradient-flare.c:3862 +#: plug-ins/gradient-flare/gradient-flare.c:3763 +#: plug-ins/gradient-flare/gradient-flare.c:3865 +#: plug-ins/gradient-flare/gradient-flare.c:3996 msgid "Hue rotation:" -msgstr "Паварот адценьня:" +msgstr "Паварот адцення:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3633 +#: plug-ins/gradient-flare/gradient-flare.c:3777 msgid "G_low" msgstr "_Зарыва" -#: ../plug-ins/gradient-flare/gradient-flare.c:3737 +#: plug-ins/gradient-flare/gradient-flare.c:3876 msgid "# of Spikes:" -msgstr "Колькасьць промняў:" +msgstr "Колькасць промняў:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3749 +#: plug-ins/gradient-flare/gradient-flare.c:3887 msgid "Spike thickness:" msgstr "Таўшчыня промняў:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3763 +#: plug-ins/gradient-flare/gradient-flare.c:3901 msgid "_Rays" msgstr "_Промні" -#: ../plug-ins/gradient-flare/gradient-flare.c:3813 +#: plug-ins/gradient-flare/gradient-flare.c:3951 msgid "Size factor gradient:" -msgstr "Ґрадыент множніка памера:" +msgstr "Градыент множніка памеру:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3817 +#: plug-ins/gradient-flare/gradient-flare.c:3955 msgid "Probability gradient:" -msgstr "Ґрадыент імавернасьці:" +msgstr "Градыент імавернасці:" #. #. * Shape Radio Button Frame #. -#: ../plug-ins/gradient-flare/gradient-flare.c:3879 +#: plug-ins/gradient-flare/gradient-flare.c:4013 msgid "Shape of Second Flares" msgstr "Форма другасных успышак" -#: ../plug-ins/gradient-flare/gradient-flare.c:3887 -#: ../plug-ins/imagemap/imap_menu.c:221 -msgid "Circle" -msgstr "Акружнасьць" - -#: ../plug-ins/gradient-flare/gradient-flare.c:3904 -#: ../plug-ins/imagemap/imap_menu.c:223 -msgid "Polygon" -msgstr "Шматкутнік" - -#: ../plug-ins/gradient-flare/gradient-flare.c:3938 +#: plug-ins/gradient-flare/gradient-flare.c:4072 msgid "Random seed:" msgstr "Адвольны лік:" -#: ../plug-ins/gradient-flare/gradient-flare.c:3952 +#: plug-ins/gradient-flare/gradient-flare.c:4086 msgid "_Second Flares" msgstr "_Другасныя ўспышкі" -#: ../plug-ins/help-browser/dialog.c:184 -#: ../plug-ins/help-browser/dialog.c:1133 +#. the dialog window +#: plug-ins/help-browser/dialog.c:261 plug-ins/help-browser/dialog.c:822 msgid "PIKA Help Browser" -msgstr "Гартач дапамогі PIKA" +msgstr "Прагляд даведкі PIKA" -#: ../plug-ins/help-browser/dialog.c:582 -msgid "Go back one page" -msgstr "На старонку назад" - -#: ../plug-ins/help-browser/dialog.c:587 -msgid "Go forward one page" -msgstr "На старонку наперад" - -#: ../plug-ins/help-browser/dialog.c:592 +#: plug-ins/help-browser/dialog.c:275 plug-ins/help-browser/help-menu.ui:14 msgid "_Reload" -msgstr "Загрузіць _ізноў" +msgstr "_Перазагрузіць" -#: ../plug-ins/help-browser/dialog.c:592 +#: plug-ins/help-browser/dialog.c:275 msgid "Reload current page" -msgstr "Ізноў загрузіць старонку" +msgstr "Перазагрузіць бягучую старонку" -#: ../plug-ins/help-browser/dialog.c:597 +#: plug-ins/help-browser/dialog.c:276 plug-ins/help-browser/help-menu.ui:18 msgid "_Stop" msgstr "_Спыніць" -#: ../plug-ins/help-browser/dialog.c:597 +#: plug-ins/help-browser/dialog.c:276 msgid "Stop loading this page" msgstr "Спыніць загрузку гэтай старонкі" -#: ../plug-ins/help-browser/dialog.c:602 +#: plug-ins/help-browser/dialog.c:277 msgid "Go to the index page" -msgstr "Да старонкі зь пералікам" +msgstr "Да старонкі з пералікам" -#: ../plug-ins/help-browser/dialog.c:607 -msgid "C_opy location" -msgstr "Капіяваць месца" - -#: ../plug-ins/help-browser/dialog.c:608 -msgid "Copy the location of this page to the clipboard" -msgstr "Скапіяваць шлях да файла гэтай старонкі у буфэр абмену" - -#: ../plug-ins/help-browser/dialog.c:628 -msgid "Find text in current page" -msgstr "Шукаць тэкст на бягучай старонцы" - -#: ../plug-ins/help-browser/dialog.c:633 -msgid "Find _Again" -msgstr "Шукаць _ізноў" - -#: ../plug-ins/help-browser/dialog.c:652 -msgid "S_how Index" -msgstr "_Паказваць пералік" - -#: ../plug-ins/help-browser/dialog.c:653 -msgid "Toggle the visibility of the sidebar" -msgstr "Пераключыць бачнасьць бакавой панэлі" - -#: ../plug-ins/help-browser/dialog.c:674 +#: plug-ins/help-browser/dialog.c:283 msgid "Visit the PIKA documentation website" -msgstr "Наведаць старонку дакумэнтацыі PIKA" +msgstr "Наведаць старонку дакументацыі PIKA" -#: ../plug-ins/help-browser/dialog.c:1174 +#: plug-ins/help-browser/dialog.c:1165 msgid "Find:" msgstr "Шукаць:" -#: ../plug-ins/help-browser/dialog.c:1191 +#: plug-ins/help-browser/dialog.c:1181 msgctxt "search" msgid "_Previous" msgstr "_Папярэдняя" -#: ../plug-ins/help-browser/dialog.c:1203 +#: plug-ins/help-browser/dialog.c:1190 msgctxt "search" msgid "_Next" msgstr "_Наступная" -#: ../plug-ins/help/pikahelpdomain.c:180 +#: plug-ins/help-browser/dialog.c:1199 +msgctxt "search" +msgid "_Close" +msgstr "_Закрыць" + +#: plug-ins/help-browser/help-menu.ui:6 +msgid "_Back" +msgstr "_Назад" + +#: plug-ins/help-browser/help-menu.ui:10 +msgid "_Previous" +msgstr "_Папярэдняя" + +#: plug-ins/help-browser/help-menu.ui:24 +msgid "_Home" +msgstr "_Хатняя" + +#: plug-ins/help-browser/help-menu.ui:28 +msgid "C_opy location" +msgstr "Капіяваць размяшчэнне" + +#: plug-ins/help-browser/help-menu.ui:32 +msgid "S_how index" +msgstr "_Паказаць змест" + +#: plug-ins/help-browser/help-menu.ui:38 +msgid "Find" +msgstr "Знайсці" + +#: plug-ins/help-browser/help-menu.ui:42 +msgid "Find _Again" +msgstr "Шукаць _ізноў" + +#: plug-ins/help-browser/help-menu.ui:48 +msgid "Zoom in" +msgstr "Павялічыць" + +#: plug-ins/help-browser/help-menu.ui:52 +msgid "Zoom out" +msgstr "Паменшыць" + +#: plug-ins/help-browser/help-menu.ui:66 +#, fuzzy +#| msgid "Show selection" +msgid "Copy selection" +msgstr "Паказваць вылучэнне" + +#: plug-ins/help/pikahelpdomain.c:180 #, c-format msgid "The help pages for '%s' are not available." -msgstr "Старонкі дапамогі для «%s» не ў наяўнасьці." +msgstr "Старонкі дапамогі для «%s» не ў наяўнасці." -#: ../plug-ins/help/pikahelpdomain.c:186 +#: plug-ins/help/pikahelpdomain.c:186 msgid "The PIKA user manual is not available." -msgstr "Кіраўніцтва карыстальніка PIKA не ў наяўнасьці." +msgstr "Кіраўніцтва карыстальніка PIKA не ў наяўнасці." -#: ../plug-ins/help/pikahelpdomain.c:187 +#. TRANSLATORS: do not end the URL with a dot, +#. * it would be in the link. Because of +#. * technical limitations, make sure the URL +#. * ends with a space, a newline or is end of text. +#. * Cf. bug 762282. +#. +#: plug-ins/help/pikahelpdomain.c:193 +#, fuzzy +#| msgid "" +#| "Please install the additional help package or use the online user manual " +#| "at http://docs.pika.org/." msgid "" -"Please install the additional help package or use the online user manual at " -"http://docs.pika.org/." +"Please install the additional help package or use the online user manual at: " +"https://docs.pika.org/" msgstr "" "Калі ласка, усталюй дадатковы пакунак з дапамогай, або карыстайся сеціўным " "кіраўніцтвам карыстальніка па адрасе http://docs.pika.org/." -#: ../plug-ins/help/pikahelpdomain.c:196 +#: plug-ins/help/pikahelpdomain.c:202 msgid "Perhaps you are missing GIO backends and need to install GVFS?" msgstr "" "Магчыма, у цябе адсутнічаюць модулі працы з GIO, і трэба ўсталяваць GVFS?" -#: ../plug-ins/help/pikahelpdomain.c:215 +#: plug-ins/help/pikahelpdomain.c:221 #, c-format msgid "Help ID '%s' unknown" -msgstr "Невядомы азначнік дапамогі %s" +msgstr "Невядомы ідэнтыфікатар даведкі «%s»" -#: ../plug-ins/help/pikahelplocale.c:208 +#: plug-ins/help/pikahelplocale.c:218 #, c-format msgid "Loading index from '%s'" msgstr "Загрузка пераліку з «%s»" -#: ../plug-ins/help/pikahelplocale.c:266 +#: plug-ins/help/pikahelplocale.c:239 +#, c-format +msgid "Could not load data from '%s': %s" +msgstr "Не ўдалося загрузіць даныя з «%s»: %s" + +#: plug-ins/help/pikahelplocale.c:311 #, c-format msgid "" "Parse error in '%s':\n" @@ -11272,298 +12367,286 @@ msgstr "" "Памылка аналізу ў «%s»:\n" "%s" -#: ../plug-ins/ifs-compose/ifs-compose.c:333 -msgid "Create an Iterated Function System (IFS) fractal" -msgstr "Стварыць фрактал Сыстэмы Ітэратыўных Функцый (СІФ)" - -#: ../plug-ins/ifs-compose/ifs-compose.c:345 +#: plug-ins/ifs-compose/ifs-compose.c:433 msgid "_IFS Fractal..." msgstr "Фрактал _СІФ…" +#: plug-ins/ifs-compose/ifs-compose.c:439 +msgid "Create an Iterated Function System (IFS) fractal" +msgstr "Стварыць фрактал Сістэмы Ітэратыўных Функцый (СІФ)" + #. X -#: ../plug-ins/ifs-compose/ifs-compose.c:525 -#: ../plug-ins/lighting/lighting-ui.c:529 -#: ../plug-ins/map-object/map-object-ui.c:629 -#: ../plug-ins/map-object/map-object-ui.c:683 -#: ../plug-ins/map-object/map-object-ui.c:951 -#: ../plug-ins/map-object/map-object-ui.c:1000 +#: plug-ins/ifs-compose/ifs-compose.c:635 plug-ins/lighting/lighting-ui.c:546 +#: plug-ins/map-object/map-object-ui.c:663 +#: plug-ins/map-object/map-object-ui.c:717 +#: plug-ins/map-object/map-object-ui.c:977 +#: plug-ins/map-object/map-object-ui.c:1023 msgid "X:" msgstr "X:" #. Y -#: ../plug-ins/ifs-compose/ifs-compose.c:539 -#: ../plug-ins/lighting/lighting-ui.c:543 -#: ../plug-ins/map-object/map-object-ui.c:643 -#: ../plug-ins/map-object/map-object-ui.c:696 -#: ../plug-ins/map-object/map-object-ui.c:964 -#: ../plug-ins/map-object/map-object-ui.c:1011 -#: ../plug-ins/map-object/map-object-ui.c:1109 +#: plug-ins/ifs-compose/ifs-compose.c:649 plug-ins/lighting/lighting-ui.c:561 +#: plug-ins/map-object/map-object-ui.c:677 +#: plug-ins/map-object/map-object-ui.c:730 +#: plug-ins/map-object/map-object-ui.c:989 +#: plug-ins/map-object/map-object-ui.c:1034 +#: plug-ins/map-object/map-object-ui.c:1133 msgid "Y:" msgstr "Y:" #. Asym -#: ../plug-ins/ifs-compose/ifs-compose.c:581 +#: plug-ins/ifs-compose/ifs-compose.c:691 msgid "Asymmetry:" -msgstr "Асымэтрыя:" +msgstr "Асіметрыя:" #. Shear -#: ../plug-ins/ifs-compose/ifs-compose.c:595 +#: plug-ins/ifs-compose/ifs-compose.c:705 msgid "Shear:" msgstr "Нажніцы:" #. Simple color control section -#: ../plug-ins/ifs-compose/ifs-compose.c:640 +#: plug-ins/ifs-compose/ifs-compose.c:750 msgid "Simple" msgstr "Просты" -#: ../plug-ins/ifs-compose/ifs-compose.c:649 +#: plug-ins/ifs-compose/ifs-compose.c:759 msgid "IFS Fractal: Target" msgstr "Фрактал СІФ: мэта" -#: ../plug-ins/ifs-compose/ifs-compose.c:655 +#: plug-ins/ifs-compose/ifs-compose.c:765 msgid "Scale hue by:" -msgstr "Маштабаваць адценьне на:" +msgstr "Маштабаваць адценне на:" -#: ../plug-ins/ifs-compose/ifs-compose.c:670 +#: plug-ins/ifs-compose/ifs-compose.c:780 msgid "Scale value by:" -msgstr "Маштабаваць яркасьць на:" +msgstr "Маштабаваць яркасць на:" #. Full color control section -#: ../plug-ins/ifs-compose/ifs-compose.c:687 +#: plug-ins/ifs-compose/ifs-compose.c:797 msgid "Full" msgstr "Поўны" -#: ../plug-ins/ifs-compose/ifs-compose.c:695 +#: plug-ins/ifs-compose/ifs-compose.c:805 msgid "IFS Fractal: Red" msgstr "Фрактал СІФ: чырвоны" -#: ../plug-ins/ifs-compose/ifs-compose.c:703 +#: plug-ins/ifs-compose/ifs-compose.c:813 msgid "IFS Fractal: Green" msgstr "Фрактал СІФ: зялёны" -#: ../plug-ins/ifs-compose/ifs-compose.c:711 +#: plug-ins/ifs-compose/ifs-compose.c:821 msgid "IFS Fractal: Blue" msgstr "Фрактал СІФ: сіні" -#: ../plug-ins/ifs-compose/ifs-compose.c:719 +#: plug-ins/ifs-compose/ifs-compose.c:829 msgid "IFS Fractal: Black" msgstr "Фрактал СІФ: чорны" -#: ../plug-ins/ifs-compose/ifs-compose.c:769 +#: plug-ins/ifs-compose/ifs-compose.c:901 msgid "IFS Fractal" msgstr "Фрактал СІФ" -#: ../plug-ins/ifs-compose/ifs-compose.c:867 -msgid "Spatial Transformation" -msgstr "Прасторавае ператварэньне" - -#: ../plug-ins/ifs-compose/ifs-compose.c:873 -msgid "Color Transformation" -msgstr "Ператварэньне колераў" - -#: ../plug-ins/ifs-compose/ifs-compose.c:883 -msgid "Relative probability:" -msgstr "Адносная імавернасьць:" - -#: ../plug-ins/ifs-compose/ifs-compose.c:1056 -#: ../plug-ins/imagemap/imap_menu.c:162 -msgid "Select _All" -msgstr "Вылучыць _усё" - -#: ../plug-ins/ifs-compose/ifs-compose.c:1060 -msgid "Re_center" -msgstr "_Перацэнтраваць" - -#: ../plug-ins/ifs-compose/ifs-compose.c:1060 -msgid "Recompute Center" -msgstr "Пералічыць цэнтар" - -#: ../plug-ins/ifs-compose/ifs-compose.c:1064 -msgid "Render Options" -msgstr "Выборы стварэньня" - -#: ../plug-ins/ifs-compose/ifs-compose.c:1070 -#: ../plug-ins/imagemap/imap_cmd_move.c:85 -#: ../plug-ins/imagemap/imap_cmd_object_move.c:56 +#: plug-ins/ifs-compose/ifs-compose.c:945 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 "Перасунуць" -#: ../plug-ins/ifs-compose/ifs-compose.c:1073 +#: plug-ins/ifs-compose/ifs-compose.c:947 plug-ins/ifs-compose/ifs-menus.ui:11 msgid "Rotate" -msgstr "Павернуць" +msgstr "Павярнуць" -#: ../plug-ins/ifs-compose/ifs-compose.c:1073 -msgid "Rotate / Scale" -msgstr "Паварот / памер" - -#: ../plug-ins/ifs-compose/ifs-compose.c:1076 +#: plug-ins/ifs-compose/ifs-compose.c:949 plug-ins/ifs-compose/ifs-menus.ui:16 msgid "Stretch" -msgstr "Расьцягнуць" +msgstr "Расцягнуць" -#: ../plug-ins/ifs-compose/ifs-compose.c:1174 +#: plug-ins/ifs-compose/ifs-compose.c:952 plug-ins/ifs-compose/ifs-menus.ui:23 +msgid "New" +msgstr "Новы" + +#: plug-ins/ifs-compose/ifs-compose.c:958 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 "Паўтарыць" + +#: plug-ins/ifs-compose/ifs-compose.c:960 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 "Выбраць усё" + +#: plug-ins/ifs-compose/ifs-compose.c:962 plug-ins/ifs-compose/ifs-menus.ui:43 +msgid "Recompute Center" +msgstr "Пералічыць цэнтр" + +#: plug-ins/ifs-compose/ifs-compose.c:965 plug-ins/ifs-compose/ifs-menus.ui:49 +msgid "Render Options" +msgstr "Параметры стварэння" + +#: plug-ins/ifs-compose/ifs-compose.c:1024 +msgid "Spatial Transformation" +msgstr "Прасторавае пераўтварэнне" + +#: plug-ins/ifs-compose/ifs-compose.c:1030 +msgid "Color Transformation" +msgstr "Пераўтварэнне колераў" + +#: plug-ins/ifs-compose/ifs-compose.c:1040 +msgid "Relative probability:" +msgstr "Адносная імавернасць:" + +#: plug-ins/ifs-compose/ifs-compose.c:1204 msgid "IFS Fractal Render Options" -msgstr "Выборы апрацоўкі фракталаў СІФ" +msgstr "Параметры апрацоўкі фракталаў СІФ" -#: ../plug-ins/ifs-compose/ifs-compose.c:1196 +#: plug-ins/ifs-compose/ifs-compose.c:1226 msgid "Max. memory:" msgstr "Макс. памяці:" -#: ../plug-ins/ifs-compose/ifs-compose.c:1223 +#: plug-ins/ifs-compose/ifs-compose.c:1254 msgid "Subdivide:" -msgstr "Разьдзяленьне:" +msgstr "Раздзяленне:" -#: ../plug-ins/ifs-compose/ifs-compose.c:1236 +#: plug-ins/ifs-compose/ifs-compose.c:1268 msgid "Spot radius:" -msgstr "Радыюс плямы:" +msgstr "Радыус плямы:" -#: ../plug-ins/ifs-compose/ifs-compose.c:1301 +#: plug-ins/ifs-compose/ifs-compose.c:1341 #, c-format msgid "Rendering IFS (%d/%d)" msgstr "Пабудова СІФ (%d/%d)" -#: ../plug-ins/ifs-compose/ifs-compose.c:1467 +#: plug-ins/ifs-compose/ifs-compose.c:1493 #, c-format msgid "Transformation %s" -msgstr "Ператварэньне %s" +msgstr "Пераўтварэнне %s" -#: ../plug-ins/ifs-compose/ifs-compose.c:2413 +#: plug-ins/ifs-compose/ifs-compose.c:2419 msgid "Save failed" msgstr "Не ўдалося захаваць" -#: ../plug-ins/ifs-compose/ifs-compose.c:2496 -#: ../plug-ins/ifs-compose/ifs-compose.c:2509 +#: plug-ins/ifs-compose/ifs-compose.c:2502 +#: plug-ins/ifs-compose/ifs-compose.c:2515 msgid "Open failed" msgstr "Не ўдалося адкрыць" -#: ../plug-ins/ifs-compose/ifs-compose.c:2504 +#: plug-ins/ifs-compose/ifs-compose.c:2510 #, c-format msgid "File '%s' doesn't seem to be an IFS Fractal file." -msgstr "Файл «%s» не зьяўляецца файлам фрактала СІФ." +msgstr "Файл «%s» не з'яўляецца файлам фрактала СІФ." -#: ../plug-ins/ifs-compose/ifs-compose.c:2544 +#: plug-ins/ifs-compose/ifs-compose.c:2550 msgid "Save as IFS Fractal file" msgstr "Захаваць у файл з фракталам СІФ" -#: ../plug-ins/ifs-compose/ifs-compose.c:2581 +#: plug-ins/ifs-compose/ifs-compose.c:2587 msgid "Open IFS Fractal file" msgstr "Загрузіць фрактал СІФ з файла" -#: ../plug-ins/imagemap/imap_about.c:42 -msgid "Image Map Plug-In" -msgstr "Дадатак «Відарыс-мапа»" +#: plug-ins/imagemap/imap_about.c:44 +msgid "Image Map Plug-in" +msgstr "Убудова «Відарыс-Карта»" -#: ../plug-ins/imagemap/imap_about.c:46 +#: plug-ins/imagemap/imap_about.c:48 msgid "Copyright © 1999-2005 by Maurits Rijk" -msgstr "Аўтарскія правы © 1999-2005 Maurits Rijk" +msgstr "Аўтарскае права © 1999-2005 Maurits Rijk" -#: ../plug-ins/imagemap/imap_about.c:48 +#: plug-ins/imagemap/imap_about.c:50 msgid "Released under the GNU General Public License" -msgstr "Выпушчаны на ўмовах Агульнай Грамадзкай Ліцэнзіі GNU" +msgstr "Выпушчана на ўмовах Агульнай Грамадзкай Ліцэнзіі GNU" -#: ../plug-ins/imagemap/imap_circle.c:63 +#: plug-ins/imagemap/imap_circle.c:63 msgid "C_ircle" -msgstr "_Акружнасьць" +msgstr "_Акружнасць" -#: ../plug-ins/imagemap/imap_circle.c:263 +#: plug-ins/imagemap/imap_circle.c:261 msgid "Center _x:" -msgstr "Цэнтар па _X:" +msgstr "Цэнтр па _X:" -#: ../plug-ins/imagemap/imap_circle.c:268 -#: ../plug-ins/imagemap/imap_circle.c:275 -#: ../plug-ins/imagemap/imap_circle.c:281 ../plug-ins/imagemap/imap_grid.c:249 -#: ../plug-ins/imagemap/imap_grid.c:255 -#: ../plug-ins/imagemap/imap_polygon.c:505 -#: ../plug-ins/imagemap/imap_polygon.c:513 -#: ../plug-ins/imagemap/imap_rectangle.c:392 -#: ../plug-ins/imagemap/imap_rectangle.c:399 -#: ../plug-ins/imagemap/imap_rectangle.c:406 -#: ../plug-ins/imagemap/imap_rectangle.c:413 +#: plug-ins/imagemap/imap_circle.c:266 plug-ins/imagemap/imap_circle.c:273 +#: plug-ins/imagemap/imap_circle.c:279 plug-ins/imagemap/imap_grid.c:259 +#: plug-ins/imagemap/imap_grid.c:265 plug-ins/imagemap/imap_polygon.c:503 +#: plug-ins/imagemap/imap_polygon.c:511 plug-ins/imagemap/imap_rectangle.c:389 +#: plug-ins/imagemap/imap_rectangle.c:396 +#: plug-ins/imagemap/imap_rectangle.c:403 +#: plug-ins/imagemap/imap_rectangle.c:410 msgid "pixels" -msgstr "піксэлі" +msgstr "пікселі" -#: ../plug-ins/imagemap/imap_circle.c:270 +#: plug-ins/imagemap/imap_circle.c:268 msgid "Center _y:" -msgstr "Цэнтар па _Y:" +msgstr "Цэнтр па _Y:" -#: ../plug-ins/imagemap/imap_cmd_clear.c:50 -msgid "Clear" -msgstr "Ачысьціць" - -#: ../plug-ins/imagemap/imap_cmd_create.c:57 -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:150 +#: plug-ins/imagemap/imap_cmd_create.c:57 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:150 msgid "Create" msgstr "Стварыць" -#: ../plug-ins/imagemap/imap_cmd_cut.c:54 -#: ../plug-ins/imagemap/imap_cmd_cut_object.c:50 -#: ../plug-ins/imagemap/imap_menu.c:158 +#: plug-ins/imagemap/imap_cmd_cut.c:54 +#: plug-ins/imagemap/imap_cmd_cut_object.c:50 +#: plug-ins/imagemap/imap_main.c:1535 plug-ins/imagemap/imap-menu.ui:43 +#: plug-ins/imagemap/imap-menu.ui:326 plug-ins/imagemap/imap-menu.ui:363 msgid "Cut" msgstr "Выразаць" -#: ../plug-ins/imagemap/imap_cmd_delete.c:56 -#: ../plug-ins/imagemap/imap_menu.c:161 -msgid "Delete" -msgstr "Выдаліць" - -#: ../plug-ins/imagemap/imap_cmd_delete_point.c:60 -#: ../plug-ins/imagemap/imap_menu.c:178 +#: plug-ins/imagemap/imap_cmd_delete_point.c:60 +#: plug-ins/imagemap/imap-menu.ui:343 msgid "Delete Point" msgstr "Выдаліць пункт" -#: ../plug-ins/imagemap/imap_cmd_edit_object.c:53 +#: plug-ins/imagemap/imap_cmd_edit_object.c:53 msgid "Edit Object" -msgstr "Зьмяніць аб'ект" +msgstr "Змяніць аб'ект" #. Create the areas -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:116 -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:146 -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:250 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:116 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:146 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:253 msgid "Use Pika Guides" -msgstr "Ужываць накіроўныя PIKA" +msgstr "Выкарыстоўваць накіроўныя PIKA" -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:159 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:159 msgid "Al_ternate" msgstr "_Альтэрнатыўныя" -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:164 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:164 msgid "A_ll" msgstr "_Усе" -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:168 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:168 msgid "Add Additional Guides" msgstr "Дадаць дадатковы накіроўныя" -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:176 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:176 msgid "L_eft border" msgstr "_Левая мяжа" -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:180 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:180 msgid "_Right border" msgstr "_Правая мяжа" -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:184 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:184 msgid "_Upper border" msgstr "_Верхняя мяжа" -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:188 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:188 msgid "Lo_wer border" msgstr "_Ніжняя мяжа" -#: ../plug-ins/imagemap/imap_cmd_pika_guides.c:196 +#: plug-ins/imagemap/imap_cmd_pika_guides.c:196 msgid "_Base URL:" msgstr "Базавы _URL:" -#: ../plug-ins/imagemap/imap_cmd_guides.c:73 -#: ../plug-ins/imagemap/imap_cmd_guides.c:139 +#: plug-ins/imagemap/imap_cmd_guides.c:72 +#: plug-ins/imagemap/imap_cmd_guides.c:138 msgid "Create Guides" msgstr "Стварыць накіроўныя" -#: ../plug-ins/imagemap/imap_cmd_guides.c:112 +#: plug-ins/imagemap/imap_cmd_guides.c:111 #, c-format msgid "Resulting Guide Bounds: %d,%d to %d,%d (%d areas)" -msgstr "Выніковыя межы накіроўнай: з %d,%d да %d,%d (%d абласьцей)" +msgstr "Выніковыя межы накіроўнай: з %d,%d да %d,%d (%d абласцей)" -#: ../plug-ins/imagemap/imap_cmd_guides.c:143 +#: plug-ins/imagemap/imap_cmd_guides.c:142 msgid "" "Guides are pre-defined rectangles covering the image. You define them by " "their width, height, and spacing from each other. This allows you to rapidly " @@ -11571,1506 +12654,5287 @@ msgid "" "suitable for navigation bars." msgstr "" "Накіроўныя — гэта прадвызначаныя прастакутнікі, якія пакрываюць відарыс. " -"Вызначай іх з дапамогай шырыні, вышыні й прагалаў між імі. Гэта дазволіць " -"хутка ствараць найбольш тыповы тып відарыса-мапы: калекцыю «мініятураў», " +"Вызначай іх з дапамогай шырыні, вышыні і прабелаў між імі. Гэта дазволіць " +"хутка ствараць найбольш тыповы тып відарыса-карты: калекцыю «мініяцюр», " "прыдатную для навігацыі." -#: ../plug-ins/imagemap/imap_cmd_guides.c:169 +#: plug-ins/imagemap/imap_cmd_guides.c:168 msgid "_Left start at:" -msgstr "Пачатак _зьлева: " +msgstr "Пачатак _злева:" -#: ../plug-ins/imagemap/imap_cmd_guides.c:179 +#: plug-ins/imagemap/imap_cmd_guides.c:178 msgid "_Top start at:" -msgstr "Пачатак зьверху: " +msgstr "Пачатак з_верху:" -#: ../plug-ins/imagemap/imap_cmd_guides.c:184 +#: plug-ins/imagemap/imap_cmd_guides.c:183 msgid "_Horz. spacing:" -msgstr "_Гар. прагал:" +msgstr "_Гар. прабел:" -#: ../plug-ins/imagemap/imap_cmd_guides.c:190 +#: plug-ins/imagemap/imap_cmd_guides.c:189 msgid "_No. across:" msgstr "У_поперак:" -#: ../plug-ins/imagemap/imap_cmd_guides.c:196 +#: plug-ins/imagemap/imap_cmd_guides.c:195 msgid "_Vert. spacing:" -msgstr "_Вэрт. прагал:" +msgstr "_Верт. прабел:" -#: ../plug-ins/imagemap/imap_cmd_guides.c:202 +#: plug-ins/imagemap/imap_cmd_guides.c:201 msgid "No. _down:" msgstr "У_ніз:" -#: ../plug-ins/imagemap/imap_cmd_guides.c:211 +#: plug-ins/imagemap/imap_cmd_guides.c:210 msgid "Base _URL:" msgstr "Базавы _URL:" -#: ../plug-ins/imagemap/imap_cmd_guides.c:236 -msgid "Resulting Guide Bounds: 0,0 to 0,0 (0 areas)" -msgstr "Выніковыя межы накіроўнай: з 0,0 да 0,0 (0 абласьцей)" +#: plug-ins/imagemap/imap_cmd_guides.c:229 +#, c-format +msgid "Image dimensions: %d × %d" +msgstr "Памеры відарыса: %d × %d" -#: ../plug-ins/imagemap/imap_cmd_guides.c:271 +#: plug-ins/imagemap/imap_cmd_guides.c:235 +msgid "Resulting Guide Bounds: 0,0 to 0,0 (0 areas)" +msgstr "Выніковыя межы накіроўнай: з 0,0 да 0,0 (0 абласцей)" + +#: plug-ins/imagemap/imap_cmd_guides.c:270 msgid "Guides" msgstr "Накіроўныя" -#: ../plug-ins/imagemap/imap_cmd_insert_point.c:61 -#: ../plug-ins/imagemap/imap_menu.c:177 +#: plug-ins/imagemap/imap_cmd_insert_point.c:61 +#: plug-ins/imagemap/imap-menu.ui:339 msgid "Insert Point" msgstr "Уставіць пункт" -#: ../plug-ins/imagemap/imap_cmd_move_down.c:52 -#: ../plug-ins/imagemap/imap_cmd_object_down.c:54 -#: ../plug-ins/imagemap/imap_menu.c:175 +#: plug-ins/imagemap/imap_cmd_move_down.c:52 +#: plug-ins/imagemap/imap_cmd_object_down.c:54 +#: plug-ins/imagemap/imap_menu.c:178 plug-ins/imagemap/imap-menu.ui:238 +#: plug-ins/imagemap/imap-menu.ui:322 plug-ins/imagemap/imap-menu.ui:359 msgid "Move Down" -msgstr "Апусьціць" +msgstr "Апусціць" -#: ../plug-ins/imagemap/imap_cmd_move_sash.c:69 +#: plug-ins/imagemap/imap_cmd_move_sash.c:69 msgid "Move Sash" msgstr "Пасунуць стужку" -#: ../plug-ins/imagemap/imap_cmd_move_selected.c:55 +#: plug-ins/imagemap/imap_cmd_move_selected.c:55 msgid "Move Selected Objects" msgstr "Пасунуць вылучаныя аб'екты" -#: ../plug-ins/imagemap/imap_cmd_move_to_front.c:50 +#: plug-ins/imagemap/imap_cmd_move_to_front.c:50 msgid "Move To Front" -msgstr "Перанесьці наперад" +msgstr "Перанесці наперад" -#: ../plug-ins/imagemap/imap_cmd_move_up.c:52 -#: ../plug-ins/imagemap/imap_cmd_object_up.c:54 -#: ../plug-ins/imagemap/imap_menu.c:174 +#: plug-ins/imagemap/imap_cmd_move_up.c:52 +#: plug-ins/imagemap/imap_cmd_object_up.c:54 plug-ins/imagemap/imap_menu.c:176 +#: plug-ins/imagemap/imap-menu.ui:234 plug-ins/imagemap/imap-menu.ui:318 +#: plug-ins/imagemap/imap-menu.ui:355 msgid "Move Up" -msgstr "Узьняць" +msgstr "Узняць" -#: ../plug-ins/imagemap/imap_cmd_paste.c:50 -#: ../plug-ins/imagemap/imap_menu.c:160 +#: plug-ins/imagemap/imap_cmd_paste.c:50 plug-ins/imagemap/imap_main.c:1539 +#: plug-ins/imagemap/imap-menu.ui:51 plug-ins/imagemap/imap-menu.ui:301 msgid "Paste" msgstr "Уставіць" -#: ../plug-ins/imagemap/imap_cmd_select.c:52 -msgid "Select" -msgstr "Выбраць" - -#: ../plug-ins/imagemap/imap_cmd_select_next.c:50 +#: plug-ins/imagemap/imap_cmd_select_next.c:50 msgid "Select Next" msgstr "Выбраць наступны" -#: ../plug-ins/imagemap/imap_cmd_select_prev.c:50 +#: plug-ins/imagemap/imap_cmd_select_prev.c:50 msgid "Select Previous" msgstr "Выбраць папярэдні" -#: ../plug-ins/imagemap/imap_cmd_select_region.c:63 +#: plug-ins/imagemap/imap_cmd_select_region.c:63 msgid "Select Region" -msgstr "Выбраць вобласьць" +msgstr "Выбраць вобласць" -#: ../plug-ins/imagemap/imap_cmd_send_to_back.c:50 +#: plug-ins/imagemap/imap_cmd_send_to_back.c:50 msgid "Send To Back" -msgstr "Даслаць назад" +msgstr "Адправіць назад" -#: ../plug-ins/imagemap/imap_cmd_unselect.c:52 +#: plug-ins/imagemap/imap_cmd_unselect.c:52 msgid "Unselect" -msgstr "Зьняць вылучэньне" +msgstr "Зняць вылучэнне" -#: ../plug-ins/imagemap/imap_cmd_unselect_all.c:55 +#: plug-ins/imagemap/imap_cmd_unselect_all.c:55 msgid "Unselect All" -msgstr "Зьняць усе вылучэньні" +msgstr "Зняць усе вылучэнні" -#: ../plug-ins/imagemap/imap_edit_area_info.c:205 +#: plug-ins/imagemap/imap_edit_area_info.c:219 msgid "Link Type" -msgstr "Тып лучыва" +msgstr "Тып спасылкі" -#: ../plug-ins/imagemap/imap_edit_area_info.c:214 +#: plug-ins/imagemap/imap_edit_area_info.c:228 msgid "_Web Site" -msgstr "_Пляцоўка" +msgstr "Вэб-сайт" -#: ../plug-ins/imagemap/imap_edit_area_info.c:220 -msgid "_Ftp Site" -msgstr "_FTP" +#: plug-ins/imagemap/imap_edit_area_info.c:234 +msgid "_FTP Site" +msgstr "_FTP-сайт" -#: ../plug-ins/imagemap/imap_edit_area_info.c:226 +#: plug-ins/imagemap/imap_edit_area_info.c:240 msgid "_Gopher" msgstr "_Gopher" -#: ../plug-ins/imagemap/imap_edit_area_info.c:232 +#: plug-ins/imagemap/imap_edit_area_info.c:246 msgid "Ot_her" msgstr "_Іншы" -#: ../plug-ins/imagemap/imap_edit_area_info.c:238 +#: plug-ins/imagemap/imap_edit_area_info.c:252 msgid "F_ile" msgstr "_Файл" -#: ../plug-ins/imagemap/imap_edit_area_info.c:244 +#: plug-ins/imagemap/imap_edit_area_info.c:258 msgid "WAI_S" msgstr "WAI_S" -#: ../plug-ins/imagemap/imap_edit_area_info.c:250 +#: plug-ins/imagemap/imap_edit_area_info.c:264 msgid "Tel_net" msgstr "Tel_net" -#: ../plug-ins/imagemap/imap_edit_area_info.c:256 +#: plug-ins/imagemap/imap_edit_area_info.c:270 msgid "e-_mail" msgstr "e-_mail" -#: ../plug-ins/imagemap/imap_edit_area_info.c:262 +#: plug-ins/imagemap/imap_edit_area_info.c:276 +#, fuzzy msgid "_URL to activate when this area is clicked: (required)" -msgstr "Задзейнічаць _URL, калі пстрыкнута па вобласьці (абавязкова):" +msgstr "Задзейнічаць _URL, калі пстрыкнута па вобласці (абавязкова):" -#: ../plug-ins/imagemap/imap_edit_area_info.c:264 +#: plug-ins/imagemap/imap_edit_area_info.c:278 msgid "Select HTML file" msgstr "Выберы файл HTML" -#: ../plug-ins/imagemap/imap_edit_area_info.c:273 +#: plug-ins/imagemap/imap_edit_area_info.c:287 msgid "Relati_ve link" -msgstr "Адноснае _лучыва" +msgstr "Адносная _спасылка" -#: ../plug-ins/imagemap/imap_edit_area_info.c:279 +#: plug-ins/imagemap/imap_edit_area_info.c:293 msgid "_Target frame name/ID: (optional - used for FRAMES only)" msgstr "_Назва/ID мэтавага кадру (неабавязкова, толькі для КАДРАЎ):" -#: ../plug-ins/imagemap/imap_edit_area_info.c:282 +#: plug-ins/imagemap/imap_edit_area_info.c:296 msgid "ALT te_xt: (optional)" msgstr "_Альтэрнатыўны тэкст (неабавязковы):" -#: ../plug-ins/imagemap/imap_edit_area_info.c:285 +#: plug-ins/imagemap/imap_edit_area_info.c:299 +#, fuzzy +#| msgid "ALT te_xt: (optional)" +msgid "Access _Key: (optional)" +msgstr "_Альтэрнатыўны тэкст (неабавязковы):" + +#: plug-ins/imagemap/imap_edit_area_info.c:302 +#, fuzzy +#| msgid "ALT te_xt: (optional)" +msgid "Ta_b Index: (optional)" +msgstr "_Альтэрнатыўны тэкст (неабавязковы):" + +#: plug-ins/imagemap/imap_edit_area_info.c:305 msgid "_Link" -msgstr "_Лучыва" +msgstr "_Спасылка" -#: ../plug-ins/imagemap/imap_edit_area_info.c:319 +#: plug-ins/imagemap/imap_edit_area_info.c:339 msgid "Dimensions" -msgstr "Вымеры" +msgstr "Памеры" -#: ../plug-ins/imagemap/imap_edit_area_info.c:323 +#: plug-ins/imagemap/imap_edit_area_info.c:343 msgid "Pre_view" -msgstr "_Агляд" +msgstr "_Папярэдні прагляд" -#: ../plug-ins/imagemap/imap_edit_area_info.c:361 +#: plug-ins/imagemap/imap_edit_area_info.c:385 msgid "_JavaScript" msgstr "_JavaScript" -#: ../plug-ins/imagemap/imap_edit_area_info.c:460 +#: plug-ins/imagemap/imap_edit_area_info.c:490 msgid "Area Settings" -msgstr "Настройкі вобласьці" +msgstr "Налады вобласці" -#: ../plug-ins/imagemap/imap_edit_area_info.c:502 +#: plug-ins/imagemap/imap_edit_area_info.c:536 #, c-format msgid "Area #%d Settings" -msgstr "Настройкі вобласьці #%d" +msgstr "Налады вобласці #%d" -#: ../plug-ins/imagemap/imap_file.c:47 ../plug-ins/imagemap/imap_menu.c:70 +#: plug-ins/imagemap/imap_file.c:47 msgid "Error opening file" -msgstr "Памылка адкрыцьця файла" +msgstr "Памылка адкрыцця файла" -#: ../plug-ins/imagemap/imap_file.c:67 +#: plug-ins/imagemap/imap_file.c:69 msgid "Load Image Map" -msgstr "Загрузіць відарыс-мапу" +msgstr "Загрузіць відарыс-карту" -#: ../plug-ins/imagemap/imap_file.c:122 +#: plug-ins/imagemap/imap_file.c:124 msgid "Save Image Map" -msgstr "Захаваць відарыс-мапу" +msgstr "Захаваць відарыс-карту" -#: ../plug-ins/imagemap/imap_grid.c:196 +#: plug-ins/imagemap/imap_grid.c:204 msgid "Grid Settings" -msgstr "Настройкі сеткі" +msgstr "Налады сеткі" -#: ../plug-ins/imagemap/imap_grid.c:200 +#: plug-ins/imagemap/imap_grid.c:210 msgid "_Snap-to grid enabled" -msgstr "_Прыцягненьне да сеткі" +msgstr "_Прыцягненне да сеткі" -#: ../plug-ins/imagemap/imap_grid.c:206 +#: plug-ins/imagemap/imap_grid.c:216 msgid "Grid Visibility and Type" -msgstr "Тып і бачнасьць сеткі" +msgstr "Тып і бачнасць сеткі" -#: ../plug-ins/imagemap/imap_grid.c:213 +#: plug-ins/imagemap/imap_grid.c:223 msgid "_Hidden" msgstr "_Схаваная" -#: ../plug-ins/imagemap/imap_grid.c:221 +#: plug-ins/imagemap/imap_grid.c:231 msgid "_Lines" msgstr "_Лініі" -#: ../plug-ins/imagemap/imap_grid.c:230 +#: plug-ins/imagemap/imap_grid.c:240 msgid "C_rosses" msgstr "_Крыжы" -#: ../plug-ins/imagemap/imap_grid.c:238 +#: plug-ins/imagemap/imap_grid.c:248 msgid "Grid Granularity" -msgstr "Памер ячэі" +msgstr "Памер ячэйкі" -#: ../plug-ins/imagemap/imap_grid.c:245 -msgid "_Width" -msgstr "_Шырыня" - -#: ../plug-ins/imagemap/imap_grid.c:251 -msgid "_Height" -msgstr "_Вышыня" - -#: ../plug-ins/imagemap/imap_grid.c:265 +#: plug-ins/imagemap/imap_grid.c:275 msgid "Grid Offset" msgstr "Зрух сеткі" -#: ../plug-ins/imagemap/imap_grid.c:272 +#: plug-ins/imagemap/imap_grid.c:282 msgid "pixels from l_eft" -msgstr "піксэлі зь_лева" +msgstr "пікселі з_лева" -#: ../plug-ins/imagemap/imap_grid.c:277 +#: plug-ins/imagemap/imap_grid.c:287 msgid "pixels from _top" -msgstr "піксэлі зь_верху" +msgstr "пікселі з_верху" -#: ../plug-ins/imagemap/imap_grid.c:288 -msgid "_Preview" -msgstr "_Агляд" - -#: ../plug-ins/imagemap/imap_main.c:121 -msgid "Create a clickable imagemap" -msgstr "Стварыць пстрыкальны мышай відарыс-мапу" - -#: ../plug-ins/imagemap/imap_main.c:126 +#: plug-ins/imagemap/imap_main.c:220 msgid "_Image Map..." -msgstr "_Відарыс-мапа…" +msgstr "_Відарыс-Карта…" -#: ../plug-ins/imagemap/imap_main.c:490 -#: ../plug-ins/imagemap/imap_settings.c:170 +#: plug-ins/imagemap/imap_main.c:224 +#, fuzzy +msgid "Create a clickable imagemap" +msgstr "Стварыць пстрыкальны мышай відарыс-карту" + +#: plug-ins/imagemap/imap_main.c:652 plug-ins/imagemap/imap_settings.c:170 msgid "" msgstr "<Безназоўны>" -#: ../plug-ins/imagemap/imap_main.c:632 +#: plug-ins/imagemap/imap_main.c:800 msgid "Some data has been changed!" -msgstr "Крыху даньняў зьменена!" +msgstr "Некаторыя даныя былі зменены!" -#: ../plug-ins/imagemap/imap_main.c:635 +#: plug-ins/imagemap/imap_main.c:803 msgid "Do you really want to discard your changes?" -msgstr "Ці сапраўды жадаеш адкінуць зьмены?" +msgstr "Сапраўды адмяніць змены?" -#: ../plug-ins/imagemap/imap_main.c:847 +#: plug-ins/imagemap/imap_main.c:1040 #, c-format msgid "File \"%s\" saved." -msgstr "Файл «%s» запісаны." +msgstr "Файл «%s» захаваны." -#: ../plug-ins/imagemap/imap_main.c:851 +#: plug-ins/imagemap/imap_main.c:1044 msgid "Couldn't save file:" msgstr "Немагчыма захаваць файл:" -#: ../plug-ins/imagemap/imap_main.c:864 +#: plug-ins/imagemap/imap_main.c:1057 msgid "Image size has changed." -msgstr "Памер відарыса быў зьменены." +msgstr "Памер відарыса быў зменены." -#: ../plug-ins/imagemap/imap_main.c:865 +#: plug-ins/imagemap/imap_main.c:1058 +#, fuzzy msgid "Resize area's?" -msgstr "Зьмяніць вобласьць?" +msgstr "Змяніць вобласць?" -#: ../plug-ins/imagemap/imap_main.c:898 +#: plug-ins/imagemap/imap_main.c:1100 msgid "Couldn't read file:" msgstr "Немагчыма прачытаць файл:" -#: ../plug-ins/imagemap/imap_main.c:945 +#: plug-ins/imagemap/imap_main.c:1153 #, c-format msgid "URL: %s" msgstr "URL: %s" -#: ../plug-ins/imagemap/imap_menu.c:109 +#: plug-ins/imagemap/imap_main.c:1542 plug-ins/imagemap/imap-menu.ui:108 +#: plug-ins/imagemap/imap-menu.ui:279 +msgid "Zoom In" +msgstr "Павялічыць" + +#: plug-ins/imagemap/imap_main.c:1544 plug-ins/imagemap/imap-menu.ui:112 +#: plug-ins/imagemap/imap-menu.ui:283 +msgid "Zoom Out" +msgstr "Паменшыць" + +#: plug-ins/imagemap/imap_main.c:1547 +msgid "Edit Map Info" +msgstr "Змяніць звесткі аб карце" + +#: plug-ins/imagemap/imap_main.c:1550 +msgid "Move Area to Front" +msgstr "Перанесці вобласць наперад" + +#: plug-ins/imagemap/imap_main.c:1552 +msgid "Move Area to Bottom" +msgstr "Перанесці вобласць уніз" + +#: plug-ins/imagemap/imap_main.c:1570 plug-ins/imagemap/imap-menu.ui:166 +#: plug-ins/imagemap/imap-menu.ui:254 +msgid "Arrow" +msgstr "Стрэлка" + +#: plug-ins/imagemap/imap_main.c:1570 +msgid "Select Existing Area" +msgstr "Выбраць існую вобласць" + +#: plug-ins/imagemap/imap_main.c:1572 +msgid "Define Rectangle area" +msgstr "Вызначыць прастакутную вобласць" + +#: plug-ins/imagemap/imap_main.c:1574 +msgid "Define Circle/Oval area" +msgstr "Вызначыць круглую/эліптычную вобласць" + +#: plug-ins/imagemap/imap_main.c:1576 +msgid "Define Polygon area" +msgstr "Вызначыць шматкутную вобласць" + +#: plug-ins/imagemap/imap_main.c:1579 plug-ins/imagemap/imap_menu.c:180 +#: plug-ins/imagemap/imap-menu.ui:310 plug-ins/imagemap/imap-menu.ui:347 +msgid "Edit Area Info..." +msgstr "Змяніць звесткі аб вобласці…" + +#: plug-ins/imagemap/imap_main.c:1579 plug-ins/imagemap/imap_menu.c:180 +msgid "Edit selected area info" +msgstr "Рэдагаваць звесткі вылучанай вобласці" + +#: plug-ins/imagemap/imap_menu.c:97 #, c-format msgid "_Undo %s" -msgstr "_Адмяніць %s" +msgstr "_Адрабіць %s" -#: ../plug-ins/imagemap/imap_menu.c:122 +#: plug-ins/imagemap/imap_menu.c:107 #, c-format msgid "_Redo %s" msgstr "_Паўтарыць %s" -#: ../plug-ins/imagemap/imap_menu.c:145 -msgid "_File" -msgstr "_Файл" - -#: ../plug-ins/imagemap/imap_menu.c:146 -msgid "_Open..." -msgstr "_Адкрыць…" - -#: ../plug-ins/imagemap/imap_menu.c:146 -msgid "Open" -msgstr "Адкрыць" - -#: ../plug-ins/imagemap/imap_menu.c:148 -msgid "_Save..." -msgstr "_Захаваць…" - -#: ../plug-ins/imagemap/imap_menu.c:148 -msgid "Save" -msgstr "Захаваць" - -#: ../plug-ins/imagemap/imap_menu.c:150 -msgid "Save _As..." -msgstr "Захаваць _як…" - -#: ../plug-ins/imagemap/imap_menu.c:155 -msgid "_Edit" -msgstr "_Праца" - -#: ../plug-ins/imagemap/imap_menu.c:156 -msgid "Undo" -msgstr "Адмяніць" - -#: ../plug-ins/imagemap/imap_menu.c:157 -msgid "Redo" -msgstr "Паўтарыць" - -#: ../plug-ins/imagemap/imap_menu.c:163 -msgid "D_eselect All" -msgstr "_Зьняць вылучэньне" - -#: ../plug-ins/imagemap/imap_menu.c:165 -msgid "Edit Area _Info..." -msgstr "_Зьмяніць зьвесткі аб вобласьці…" - -#: ../plug-ins/imagemap/imap_menu.c:166 -msgid "Edit selected area info" -msgstr "Рэдагаваць зьвесткі вылучанай вобласьці" - -#: ../plug-ins/imagemap/imap_menu.c:167 -msgid "Preferences" -msgstr "Настаўленьні" - -#: ../plug-ins/imagemap/imap_menu.c:169 -msgid "Move Area to Front" -msgstr "Перанесьці вобласьць наперад" - -#: ../plug-ins/imagemap/imap_menu.c:171 -msgid "Move Area to Bottom" -msgstr "Перанесьці вобласьць уніз" - -#: ../plug-ins/imagemap/imap_menu.c:173 -msgid "Delete Area" -msgstr "Выдаліць вобласьць" - -#: ../plug-ins/imagemap/imap_menu.c:180 -msgid "_View" -msgstr "_Від" - -#: ../plug-ins/imagemap/imap_menu.c:181 -msgid "Source..." -msgstr "_Крыніца…" - -#: ../plug-ins/imagemap/imap_menu.c:182 -msgid "Zoom in" -msgstr "Наблізіць" - -#: ../plug-ins/imagemap/imap_menu.c:183 -msgid "Zoom out" -msgstr "Аддаліць" - -#: ../plug-ins/imagemap/imap_menu.c:184 -msgid "_Zoom To" -msgstr "_Маштаб" - -#: ../plug-ins/imagemap/imap_menu.c:186 -msgid "_Mapping" -msgstr "_Мапа" - -#: ../plug-ins/imagemap/imap_menu.c:187 -msgid "Edit Map Info..." -msgstr "Зьмяніць зьвесткі аб мапе…" - -#: ../plug-ins/imagemap/imap_menu.c:188 -msgid "Edit Map Info" -msgstr "Зьмяніць зьвесткі аб мапе" - -#: ../plug-ins/imagemap/imap_menu.c:190 -msgid "_Tools" -msgstr "_Прылады" - -#: ../plug-ins/imagemap/imap_menu.c:191 -msgid "Grid Settings..." -msgstr "Настройкі сеткі…" - -#: ../plug-ins/imagemap/imap_menu.c:193 -msgid "Use PIKA Guides..." -msgstr "Ужываць накіроўныя PIKA…" - -#: ../plug-ins/imagemap/imap_menu.c:195 -msgid "Create Guides..." -msgstr "Стварыць накіроўныя…" - -#: ../plug-ins/imagemap/imap_menu.c:198 -msgid "_Help" -msgstr "_Дапамога" - -#: ../plug-ins/imagemap/imap_menu.c:199 -msgid "_Contents" -msgstr "_Зьмесьціва" - -#: ../plug-ins/imagemap/imap_menu.c:202 -msgid "_Zoom" -msgstr "_Набліжэньне" - -#: ../plug-ins/imagemap/imap_menu.c:207 -msgid "Area List" -msgstr "Сьпіс абласьцей" - -#: ../plug-ins/imagemap/imap_menu.c:217 -msgid "Arrow" -msgstr "Стрэлка" - -#: ../plug-ins/imagemap/imap_menu.c:218 -msgid "Select existing area" -msgstr "Выбраць існоўную вобласьць" - -#: ../plug-ins/imagemap/imap_menu.c:220 -msgid "Define Rectangle area" -msgstr "Вызначыць прастакутную вобласьць" - -#: ../plug-ins/imagemap/imap_menu.c:222 -msgid "Define Circle/Oval area" -msgstr "Вызначы круглую/эліптычную вобласьць" - -#: ../plug-ins/imagemap/imap_menu.c:224 -msgid "Define Polygon area" -msgstr "Вызначыць шматкутную вобласьць" - -#: ../plug-ins/imagemap/imap_polygon.c:73 +#: plug-ins/imagemap/imap_polygon.c:74 msgid "_Polygon" msgstr "_Шматкутнік" -#: ../plug-ins/imagemap/imap_polygon.c:474 +#: plug-ins/imagemap/imap_polygon.c:472 msgid "x (pixels)" -msgstr "x (у піксэлях)" +msgstr "x (у пікселях)" -#: ../plug-ins/imagemap/imap_polygon.c:483 +#: plug-ins/imagemap/imap_polygon.c:481 msgid "y (pixels)" -msgstr "y (у піксэлях)" +msgstr "y (у пікселях)" -#: ../plug-ins/imagemap/imap_polygon.c:521 +#: plug-ins/imagemap/imap_polygon.c:519 msgid "_Insert" msgstr "_Уставіць" -#: ../plug-ins/imagemap/imap_polygon.c:527 +#: plug-ins/imagemap/imap_polygon.c:525 msgid "A_ppend" msgstr "_Дадаць" -#: ../plug-ins/imagemap/imap_polygon.c:533 -msgid "_Remove" -msgstr "_Выдаліць" - -#: ../plug-ins/imagemap/imap_preferences.c:247 +#: plug-ins/imagemap/imap_preferences.c:266 msgid "Couldn't save resource file:" msgstr "Немагчыма захаваць файл рэсурсаў:" -#: ../plug-ins/imagemap/imap_preferences.c:360 +#: plug-ins/imagemap/imap_preferences.c:382 msgid "General" msgstr "Асноўныя" -#: ../plug-ins/imagemap/imap_preferences.c:364 +#: plug-ins/imagemap/imap_preferences.c:386 msgid "Default Map Type" -msgstr "Прадвызначаны тып мапы" +msgstr "Прадвызначаны тып карты" -#: ../plug-ins/imagemap/imap_preferences.c:383 +#: plug-ins/imagemap/imap_preferences.c:405 msgid "_Prompt for area info" -msgstr "_Запытаць пра зьвесткі аб вобласьці" +msgstr "_Запытаць пра звесткі аб вобласці" -#: ../plug-ins/imagemap/imap_preferences.c:385 +#: plug-ins/imagemap/imap_preferences.c:407 msgid "_Require default URL" msgstr "_Патрабаваць прадвызначаны URL" -#: ../plug-ins/imagemap/imap_preferences.c:387 +#: plug-ins/imagemap/imap_preferences.c:409 msgid "Show area _handles" -msgstr "Паказаць _ручкі вобласьці" +msgstr "Паказаць _ручкі вобласці" -#: ../plug-ins/imagemap/imap_preferences.c:389 +#: plug-ins/imagemap/imap_preferences.c:411 msgid "_Keep NCSA circles true" -msgstr "Трымаць акружыны NCSA круглымі" +msgstr "Трымаць акружнасці NCSA круглымі" -#: ../plug-ins/imagemap/imap_preferences.c:391 +#: plug-ins/imagemap/imap_preferences.c:413 msgid "Show area URL _tip" -msgstr "Паказаць _намінкі з URL вобласьці" +msgstr "Паказаць _намінкі з URL вобласці" -#: ../plug-ins/imagemap/imap_preferences.c:394 +#: plug-ins/imagemap/imap_preferences.c:416 msgid "_Use double-sized grab handles" msgstr "Пад_войны памер ручак захопу" -#: ../plug-ins/imagemap/imap_preferences.c:401 +#: plug-ins/imagemap/imap_preferences.c:423 msgid "Menu" -msgstr "Мэню" +msgstr "Меню" -#: ../plug-ins/imagemap/imap_preferences.c:405 +#: plug-ins/imagemap/imap_preferences.c:427 msgid "Number of _undo levels (1 - 99):" -msgstr "_Колькасьць крокаў адмены (1-99):" +msgstr "_Колькасць крокаў адмены (1-99):" -#: ../plug-ins/imagemap/imap_preferences.c:410 +#: plug-ins/imagemap/imap_preferences.c:432 msgid "Number of M_RU entries (1 - 16):" -msgstr "Колькасьць ранейшых (1-16):" +msgstr "Колькасць ранейшых (1-16):" -#: ../plug-ins/imagemap/imap_preferences.c:419 +#: plug-ins/imagemap/imap_preferences.c:441 msgid "Select Color" msgstr "Выберы колер" -#: ../plug-ins/imagemap/imap_preferences.c:434 +#: plug-ins/imagemap/imap_preferences.c:453 +msgid "Colors" +msgstr "Колеры" + +#: plug-ins/imagemap/imap_preferences.c:455 msgid "Normal:" msgstr "Нармальны:" -#: ../plug-ins/imagemap/imap_preferences.c:438 +#: plug-ins/imagemap/imap_preferences.c:459 msgid "Selected:" -msgstr "Выбраны: " +msgstr "Выбрана:" -#: ../plug-ins/imagemap/imap_preferences.c:442 +#: plug-ins/imagemap/imap_preferences.c:463 msgid "Interaction:" -msgstr "Узаемадзеяньне:" +msgstr "Узаемадзеянне:" -#: ../plug-ins/imagemap/imap_preferences.c:451 +#: plug-ins/imagemap/imap_preferences.c:472 msgid "Co_ntiguous Region" -msgstr "_Прылеглая вобласьць" +msgstr "_Прылеглая вобласць" -#: ../plug-ins/imagemap/imap_preferences.c:457 +#: plug-ins/imagemap/imap_preferences.c:476 +#: plug-ins/map-object/map-object-ui.c:572 +msgid "_Threshold:" +msgstr "_Парог:" + +#: plug-ins/imagemap/imap_preferences.c:478 msgid "_Automatically convert" -msgstr "_Аўтаматычна ператвараць" +msgstr "_Аўтаматычна пераўтвараць" -#: ../plug-ins/imagemap/imap_preferences.c:468 +#: plug-ins/imagemap/imap_preferences.c:489 msgid "General Preferences" -msgstr "Асноўныя настаўленьне" +msgstr "Асноўныя налады" -#: ../plug-ins/imagemap/imap_rectangle.c:68 +#: plug-ins/imagemap/imap_rectangle.c:68 msgid "_Rectangle" msgstr "_Прастакутнік" -#: ../plug-ins/imagemap/imap_rectangle.c:387 +#: plug-ins/imagemap/imap_rectangle.c:384 msgid "Upper left _x:" msgstr "Верхні левы _X:" -#: ../plug-ins/imagemap/imap_rectangle.c:394 +#: plug-ins/imagemap/imap_rectangle.c:391 msgid "Upper left _y:" msgstr "Верхні левы _Y:" -#: ../plug-ins/imagemap/imap_selection.c:349 +#: plug-ins/imagemap/imap_selection.c:349 msgid "#" msgstr "#" -#: ../plug-ins/imagemap/imap_selection.c:360 +#: plug-ins/imagemap/imap_selection.c:360 msgid "URL" msgstr "URL" -#: ../plug-ins/imagemap/imap_selection.c:378 +#: plug-ins/imagemap/imap_selection.c:378 msgid "ALT Text" msgstr "Альтэрнатыўны тэкст" -#: ../plug-ins/imagemap/imap_selection.c:388 +#: plug-ins/imagemap/imap_selection.c:388 msgid "Target" msgstr "Мэта" -#: ../plug-ins/imagemap/imap_settings.c:89 +#: plug-ins/imagemap/imap_settings.c:88 msgid "Settings for this Mapfile" -msgstr "Настройкі файла мапы" +msgstr "Налады файла карты" -#: ../plug-ins/imagemap/imap_settings.c:93 +#: plug-ins/imagemap/imap_settings.c:92 msgid "Filename:" msgstr "Назва файла:" -#: ../plug-ins/imagemap/imap_settings.c:96 +#: plug-ins/imagemap/imap_settings.c:95 msgid "Image name:" msgstr "Назва відарыса:" -#: ../plug-ins/imagemap/imap_settings.c:97 +#: plug-ins/imagemap/imap_settings.c:96 msgid "Select Image File" msgstr "Выберы файл відарыса" -#: ../plug-ins/imagemap/imap_settings.c:101 +#: plug-ins/imagemap/imap_settings.c:99 msgid "_Title:" msgstr "_Загаловак:" -#: ../plug-ins/imagemap/imap_settings.c:103 +#: plug-ins/imagemap/imap_settings.c:101 msgid "Aut_hor:" msgstr "_Стваральнік:" -#: ../plug-ins/imagemap/imap_settings.c:105 +#: plug-ins/imagemap/imap_settings.c:103 msgid "Default _URL:" msgstr "Прадвызначаны _URL:" -#: ../plug-ins/imagemap/imap_settings.c:107 -msgid "_Description:" -msgstr "_Апісаньне:" - -#: ../plug-ins/imagemap/imap_settings.c:129 +#: plug-ins/imagemap/imap_settings.c:127 msgid "Map File Format" -msgstr "Фармат файла мапы" +msgstr "Фармат файла карты" -#: ../plug-ins/imagemap/imap_source.c:66 +#: plug-ins/imagemap/imap_source.c:68 msgid "View Source" -msgstr "Праглад крыніцы" +msgstr "Прагляд крыніцы" -#: ../plug-ins/lighting/lighting-apply.c:105 -#: ../plug-ins/lighting/lighting-ui.c:1023 +#: plug-ins/imagemap/imap-menu.ui:16 +msgid "Save As" +msgstr "Захаваць як" + +#: plug-ins/imagemap/imap-menu.ui:65 +msgid "Deselect All" +msgstr "Зняць вылучэнне з усіх" + +#: plug-ins/imagemap/imap-menu.ui:71 +msgid "Edit Area Info" +msgstr "Змяніць звесткі аб вобласці" + +#: plug-ins/imagemap/imap-menu.ui:83 +msgid "View" +msgstr "Выгляд" + +#: plug-ins/imagemap/imap-menu.ui:86 +msgid "Area List" +msgstr "Спіс абласцей" + +#: plug-ins/imagemap/imap-menu.ui:90 +msgid "Source..." +msgstr "_Крыніца…" + +#: plug-ins/imagemap/imap-menu.ui:116 +#, fuzzy +#| msgid "_Zoom To" +msgid "Zoom To" +msgstr "_Маштаб" + +#: plug-ins/imagemap/imap-menu.ui:119 +msgid "1:1" +msgstr "1:1" + +#: plug-ins/imagemap/imap-menu.ui:124 +msgid "1:2" +msgstr "1:2" + +#: plug-ins/imagemap/imap-menu.ui:129 +msgid "1:3" +msgstr "1:3" + +#: plug-ins/imagemap/imap-menu.ui:134 +msgid "1:4" +msgstr "1:4" + +#: plug-ins/imagemap/imap-menu.ui:139 +msgid "1:5" +msgstr "1:5" + +#: plug-ins/imagemap/imap-menu.ui:144 +msgid "1:6" +msgstr "1:6" + +#: plug-ins/imagemap/imap-menu.ui:149 +msgid "1:7" +msgstr "1:7" + +#: plug-ins/imagemap/imap-menu.ui:154 +msgid "1:8" +msgstr "1:8" + +#: plug-ins/imagemap/imap-menu.ui:163 +#, fuzzy +#| msgid "_Mapping" +msgid "Mappings" +msgstr "_Карта" + +#: plug-ins/imagemap/imap-menu.ui:188 plug-ins/imagemap/imap-menu.ui:247 +msgid "Edit Map Info..." +msgstr "Змяніць звесткі аб карце…" + +#: plug-ins/imagemap/imap-menu.ui:194 plug-ins/imagemap/imap-menu.ui:251 +msgid "Tools" +msgstr "Інструменты" + +#: plug-ins/imagemap/imap-menu.ui:201 plug-ins/imagemap/imap-menu.ui:293 +msgid "Grid Settings..." +msgstr "Налады сеткі…" + +#: plug-ins/imagemap/imap-menu.ui:207 +msgid "Use PIKA Guides..." +msgstr "Выкарыстоўваць накіроўныя PIKA…" + +#: plug-ins/imagemap/imap-menu.ui:211 plug-ins/imagemap/imap-menu.ui:297 +msgid "Create Guides..." +msgstr "Стварыць накіроўныя…" + +#: plug-ins/imagemap/imap-menu.ui:217 +msgid "Help" +msgstr "Даведка" + +#: plug-ins/imagemap/imap-menu.ui:220 +msgid "Contents" +msgstr "Змесціва" + +#: plug-ins/imagemap/imap-menu.ui:224 +msgid "About" +msgstr "Аб праграме" + +#: plug-ins/imagemap/imap-menu.ui:314 plug-ins/imagemap/imap-menu.ui:351 +msgid "Delete Area" +msgstr "Выдаліць вобласць" + +#: plug-ins/lighting/lighting-apply.c:101 plug-ins/lighting/lighting-ui.c:1034 msgid "Lighting Effects" -msgstr "Эфэкты асьвятленьня" +msgstr "Эфекты асвятлення" -#: ../plug-ins/lighting/lighting-main.c:191 -msgid "Apply various lighting effects to an image" -msgstr "Ужыць розныя эфэкты асьвятленьня да гэтага відарыса" - -#: ../plug-ins/lighting/lighting-main.c:196 +#: plug-ins/lighting/lighting-main.c:121 msgid "_Lighting Effects..." -msgstr "_Эфэкты асьвятленьня…" +msgstr "_Эфекты асвятлення…" + +#: plug-ins/lighting/lighting-main.c:126 +msgid "Apply various lighting effects to an image" +msgstr "Ужыць розныя эфекты асвятлення да гэтага відарыса" #. General options -#: ../plug-ins/lighting/lighting-ui.c:297 -#: ../plug-ins/map-object/map-object-ui.c:412 +#: plug-ins/lighting/lighting-ui.c:311 plug-ins/map-object/map-object-ui.c:446 msgid "General Options" -msgstr "Асноўныя выборы" +msgstr "Асноўныя параметры" -#: ../plug-ins/lighting/lighting-ui.c:305 +#: plug-ins/lighting/lighting-ui.c:319 msgid "T_ransparent background" -msgstr "Празрыстая _асноведзь" +msgstr "Празрысты _фон" -#: ../plug-ins/lighting/lighting-ui.c:315 +#: plug-ins/lighting/lighting-ui.c:329 msgid "Make destination image transparent where bump height is zero" -msgstr "Зрабіць мэтавы відарыс празрыстым там, дзе нулявая вышыня паверхні " +msgstr "Зрабіць мэтавы відарыс празрыстым там, дзе нулявая вышыня паверхні" -#: ../plug-ins/lighting/lighting-ui.c:318 +#: plug-ins/lighting/lighting-ui.c:332 msgid "Cre_ate new image" msgstr "_Стварыць новы відарыс" -#: ../plug-ins/lighting/lighting-ui.c:328 -#: ../plug-ins/map-object/map-object-ui.c:481 +#: plug-ins/lighting/lighting-ui.c:342 plug-ins/map-object/map-object-ui.c:515 msgid "Create a new image when applying filter" -msgstr "Ствараць новы відарыс пры ўжываньні фільтра" +msgstr "Ствараць новы відарыс пры ўжыванні фільтра" -#: ../plug-ins/lighting/lighting-ui.c:330 +#: plug-ins/lighting/lighting-ui.c:344 msgid "High _quality preview" msgstr "_Высокаякасны агляд" -#: ../plug-ins/lighting/lighting-ui.c:340 +#: plug-ins/lighting/lighting-ui.c:354 msgid "Enable/disable high quality preview" msgstr "Пераключыць высокаякасны папярэдні прагляд" -#: ../plug-ins/lighting/lighting-ui.c:347 +#: plug-ins/lighting/lighting-ui.c:356 msgid "Distance:" -msgstr "Адлегласьць: " +msgstr "Адлегласць:" -#: ../plug-ins/lighting/lighting-ui.c:380 -#: ../plug-ins/map-object/map-object-ui.c:573 +#: plug-ins/lighting/lighting-ui.c:389 plug-ins/map-object/map-object-ui.c:606 msgid "Light Settings" -msgstr "Настройкі сьвятла" +msgstr "Налады святла" -#: ../plug-ins/lighting/lighting-ui.c:393 +#: plug-ins/lighting/lighting-ui.c:399 msgid "Light 1" -msgstr "Сьвятло 1" +msgstr "Святло 1" -#: ../plug-ins/lighting/lighting-ui.c:394 +#: plug-ins/lighting/lighting-ui.c:400 msgid "Light 2" -msgstr "Сьвятло 2" +msgstr "Святло 2" -#: ../plug-ins/lighting/lighting-ui.c:395 +#: plug-ins/lighting/lighting-ui.c:401 msgid "Light 3" -msgstr "Сьвятло 3" +msgstr "Святло 3" -#: ../plug-ins/lighting/lighting-ui.c:396 +#: plug-ins/lighting/lighting-ui.c:402 msgid "Light 4" -msgstr "Сьвятло 4" +msgstr "Святло 4" -#: ../plug-ins/lighting/lighting-ui.c:397 +#: plug-ins/lighting/lighting-ui.c:403 msgid "Light 5" -msgstr "Сьвятло 5" +msgstr "Святло 5" -#: ../plug-ins/lighting/lighting-ui.c:398 +#: plug-ins/lighting/lighting-ui.c:404 msgid "Light 6" -msgstr "Сьвятло 6" +msgstr "Святло 6" -#: ../plug-ins/lighting/lighting-ui.c:412 +#: plug-ins/lighting/lighting-ui.c:419 msgid "Color:" msgstr "Колер:" -#: ../plug-ins/lighting/lighting-ui.c:418 +#: plug-ins/lighting/lighting-ui.c:425 msgctxt "light-source" msgid "None" msgstr "Няма" -#: ../plug-ins/lighting/lighting-ui.c:419 +#: plug-ins/lighting/lighting-ui.c:426 msgid "Directional" msgstr "Накіраваны" -#: ../plug-ins/lighting/lighting-ui.c:420 +#: plug-ins/lighting/lighting-ui.c:427 msgid "Point" msgstr "Пункт" -#: ../plug-ins/lighting/lighting-ui.c:434 -#: ../plug-ins/map-object/map-object-ui.c:596 +#: plug-ins/lighting/lighting-ui.c:441 plug-ins/map-object/map-object-ui.c:630 msgid "Type of light source to apply" -msgstr "Тып крыніцы сьвятла" +msgstr "Тып крыніцы святла" -#: ../plug-ins/lighting/lighting-ui.c:436 -#: ../plug-ins/map-object/map-object-ui.c:598 +#: plug-ins/lighting/lighting-ui.c:443 plug-ins/map-object/map-object-ui.c:632 msgid "Select lightsource color" -msgstr "Выберы колер крыніцы сьвятла" +msgstr "Выберы колер крыніцы святла" -#: ../plug-ins/lighting/lighting-ui.c:450 -#: ../plug-ins/map-object/map-object-ui.c:611 +#: plug-ins/lighting/lighting-ui.c:458 plug-ins/map-object/map-object-ui.c:645 msgid "Set light source color" -msgstr "Вызначыць колер крыніцы сьвятла" +msgstr "Вызначыць колер крыніцы святла" -#: ../plug-ins/lighting/lighting-ui.c:458 +#: plug-ins/lighting/lighting-ui.c:468 msgid "_Intensity:" -msgstr "_Яркасьць:" +msgstr "_Яркасць:" -#: ../plug-ins/lighting/lighting-ui.c:466 +#: plug-ins/lighting/lighting-ui.c:476 msgid "Light intensity" -msgstr "Яркасьць сьвятла" +msgstr "Яркасць святла" -#: ../plug-ins/lighting/lighting-ui.c:469 -#: ../plug-ins/map-object/map-object-ui.c:613 -#: ../plug-ins/map-object/map-object-ui.c:940 -#: ../plug-ins/print/print-page-layout.c:371 +#: plug-ins/lighting/lighting-ui.c:479 plug-ins/map-object/map-object-ui.c:647 +#: plug-ins/map-object/map-object-ui.c:967 +#: plug-ins/print/print-page-layout.c:384 msgid "Position" msgstr "Становішча" -#: ../plug-ins/lighting/lighting-ui.c:487 -#: ../plug-ins/map-object/map-object-ui.c:637 +#: plug-ins/lighting/lighting-ui.c:499 plug-ins/map-object/map-object-ui.c:671 msgid "Light source X position in XYZ space" msgstr "Становішча крыніцы па X у прасторы XYZ" -#: ../plug-ins/lighting/lighting-ui.c:502 -#: ../plug-ins/map-object/map-object-ui.c:651 +#: plug-ins/lighting/lighting-ui.c:516 plug-ins/map-object/map-object-ui.c:685 msgid "Light source Y position in XYZ space" msgstr "Становішча крыніцы па Y у прасторы XYZ" -#: ../plug-ins/lighting/lighting-ui.c:509 +#: plug-ins/lighting/lighting-ui.c:525 msgid "_Z:" msgstr "_Z:" -#: ../plug-ins/lighting/lighting-ui.c:517 -#: ../plug-ins/map-object/map-object-ui.c:665 +#: plug-ins/lighting/lighting-ui.c:533 plug-ins/map-object/map-object-ui.c:699 msgid "Light source Z position in XYZ space" msgstr "Становішча крыніцы па Z у прасторы XYZ" -#: ../plug-ins/lighting/lighting-ui.c:537 -#: ../plug-ins/map-object/map-object-ui.c:691 +#: plug-ins/lighting/lighting-ui.c:536 +msgid "Direction" +msgstr "Напрамак" + +#: plug-ins/lighting/lighting-ui.c:554 plug-ins/map-object/map-object-ui.c:725 msgid "Light source X direction in XYZ space" msgstr "Напрамак крыніцы па X у прасторы XYZ" -#: ../plug-ins/lighting/lighting-ui.c:551 -#: ../plug-ins/map-object/map-object-ui.c:704 +#: plug-ins/lighting/lighting-ui.c:569 plug-ins/map-object/map-object-ui.c:738 msgid "Light source Y direction in XYZ space" msgstr "Напрамак крыніцы па Y у прасторы XYZ" -#: ../plug-ins/lighting/lighting-ui.c:557 -#: ../plug-ins/map-object/map-object-ui.c:657 -#: ../plug-ins/map-object/map-object-ui.c:709 -#: ../plug-ins/map-object/map-object-ui.c:977 -#: ../plug-ins/map-object/map-object-ui.c:1022 -#: ../plug-ins/map-object/map-object-ui.c:1121 +#: plug-ins/lighting/lighting-ui.c:576 plug-ins/map-object/map-object-ui.c:691 +#: plug-ins/map-object/map-object-ui.c:743 +#: plug-ins/map-object/map-object-ui.c:1001 +#: plug-ins/map-object/map-object-ui.c:1045 +#: plug-ins/map-object/map-object-ui.c:1145 msgid "Z:" msgstr "Z:" -#: ../plug-ins/lighting/lighting-ui.c:565 -#: ../plug-ins/map-object/map-object-ui.c:717 +#: plug-ins/lighting/lighting-ui.c:584 plug-ins/map-object/map-object-ui.c:751 msgid "Light source Z direction in XYZ space" msgstr "Напрамак крыніцы па Z у прасторы XYZ" -#: ../plug-ins/lighting/lighting-ui.c:568 +#: plug-ins/lighting/lighting-ui.c:587 msgid "I_solate" msgstr "_Адасобіць" -#: ../plug-ins/lighting/lighting-ui.c:577 +#: plug-ins/lighting/lighting-ui.c:596 msgid "Lighting preset:" msgstr "Набор маланкі:" -#: ../plug-ins/lighting/lighting-ui.c:623 +#: plug-ins/lighting/lighting-ui.c:641 msgid "Material Properties" -msgstr "Уласьцівасьці матар'яла" +msgstr "Уласцівасці матэрыялу" -#: ../plug-ins/lighting/lighting-ui.c:641 +#: plug-ins/lighting/lighting-ui.c:660 msgid "_Glowing:" -msgstr "_Сьвячэньне:" +msgstr "_свячэнне:" -#: ../plug-ins/lighting/lighting-ui.c:660 -#: ../plug-ins/map-object/map-object-ui.c:778 +#: plug-ins/lighting/lighting-ui.c:678 plug-ins/map-object/map-object-ui.c:812 msgid "Amount of original color to show where no direct light falls" -msgstr "Колькі паказваць пачатковага колера там, дзе ня падае прамое сьвятло" +msgstr "Колькі паказваць пачатковага колеру там, дзе не падае прамое святло" -#: ../plug-ins/lighting/lighting-ui.c:674 +#: plug-ins/lighting/lighting-ui.c:691 msgid "_Bright:" -msgstr "_Сьветлы:" +msgstr "_светлы:" -#: ../plug-ins/lighting/lighting-ui.c:693 -#: ../plug-ins/map-object/map-object-ui.c:807 +#: plug-ins/lighting/lighting-ui.c:709 plug-ins/map-object/map-object-ui.c:839 msgid "Intensity of original color when lit by a light source" -msgstr "Яркасьць пачатковага колера, асьветленага крыніцай сьвятла" +msgstr "Яркасць пачатковага колеру, асветленага крыніцай святла" -#: ../plug-ins/lighting/lighting-ui.c:707 +#: plug-ins/lighting/lighting-ui.c:722 msgid "_Shiny:" msgstr "_Бліскучы:" -#: ../plug-ins/lighting/lighting-ui.c:726 -#: ../plug-ins/map-object/map-object-ui.c:879 +#: plug-ins/lighting/lighting-ui.c:740 plug-ins/map-object/map-object-ui.c:908 msgid "Controls how intense the highlights will be" -msgstr "Вызначае, наколькі яркімі будуць асьветленыя месцы" +msgstr "Вызначае, наколькі яркімі будуць асветленыя месцы" -#: ../plug-ins/lighting/lighting-ui.c:739 +#: plug-ins/lighting/lighting-ui.c:752 msgid "_Polished:" -msgstr "_Гладкасьць:" +msgstr "_Гладкасць:" -#: ../plug-ins/lighting/lighting-ui.c:758 -#: ../plug-ins/map-object/map-object-ui.c:908 +#: plug-ins/lighting/lighting-ui.c:770 plug-ins/map-object/map-object-ui.c:935 msgid "Higher values makes the highlights more focused" -msgstr "Вышэйшыя значэньні робяць падсьвечваньне больш факусаваным" +msgstr "Вышэйшыя значэнні робяць падсвечванне больш факусаваным" #. Metallic -#: ../plug-ins/lighting/lighting-ui.c:768 +#: plug-ins/lighting/lighting-ui.c:779 msgid "_Metallic" msgstr "_Мэталічны" -#: ../plug-ins/lighting/lighting-ui.c:805 +#: plug-ins/lighting/lighting-ui.c:815 msgid "E_nable bump mapping" -msgstr "_Задзейнічаць мапу паверхні" +msgstr "_Задзейнічаць карту паверхні" -#: ../plug-ins/lighting/lighting-ui.c:819 +#: plug-ins/lighting/lighting-ui.c:829 msgid "Enable/disable bump-mapping (image depth)" -msgstr "Пераключыць мапу паверхні (глыбіню відарыса)" +msgstr "Пераключыць карту паверхні (глыбіню відарыса)" -#: ../plug-ins/lighting/lighting-ui.c:842 +#: plug-ins/lighting/lighting-ui.c:852 msgid "Bumpm_ap image:" -msgstr "_Відарыс мапы паверхні:" +msgstr "_Відарыс карты паверхні:" -#: ../plug-ins/lighting/lighting-ui.c:846 +#: plug-ins/lighting/lighting-ui.c:856 msgid "Logarithmic" -msgstr "Лягарытмічная" +msgstr "Лагарыфмічная" -#: ../plug-ins/lighting/lighting-ui.c:858 +#: plug-ins/lighting/lighting-ui.c:868 msgid "Cu_rve:" msgstr "_Крывая:" -#: ../plug-ins/lighting/lighting-ui.c:863 +#: plug-ins/lighting/lighting-ui.c:874 msgid "Ma_ximum height:" msgstr "_Найбольшая вышыня:" -#: ../plug-ins/lighting/lighting-ui.c:873 +#: plug-ins/lighting/lighting-ui.c:884 msgid "Maximum height for bumps" msgstr "Найбольшая вышыня паверхні" -#: ../plug-ins/lighting/lighting-ui.c:897 +#: plug-ins/lighting/lighting-ui.c:908 msgid "E_nable environment mapping" -msgstr "_Задзейнічаць мапу асяродзьдзя" +msgstr "_Задзейнічаць карту асяродздзя" -#: ../plug-ins/lighting/lighting-ui.c:911 +#: plug-ins/lighting/lighting-ui.c:922 msgid "Enable/disable environment-mapping (reflection)" -msgstr "Пераключыць мапу асяродзьдзя (адбіцьцё)" +msgstr "Пераключыць карту асяроддзя (адбіццё)" -#: ../plug-ins/lighting/lighting-ui.c:929 +#: plug-ins/lighting/lighting-ui.c:940 msgid "En_vironment image:" -msgstr "_Відарыса асяродзьдзя:" +msgstr "_Відарыса асяроддзя:" -#: ../plug-ins/lighting/lighting-ui.c:932 +#: plug-ins/lighting/lighting-ui.c:943 msgid "Environment image to use" -msgstr "Выкарыстоўваць відарыс асяродзьядзя" +msgstr "Выкарыстоўваць відарыс асяроддзя" -#: ../plug-ins/lighting/lighting-ui.c:954 +#: plug-ins/lighting/lighting-ui.c:965 msgid "Op_tions" -msgstr "_Выборы" +msgstr "_Параметры" -#: ../plug-ins/lighting/lighting-ui.c:958 -#: ../plug-ins/map-object/map-object-ui.c:1245 +#: plug-ins/lighting/lighting-ui.c:969 plug-ins/map-object/map-object-ui.c:1267 msgid "_Light" -msgstr "_Сьвятло" +msgstr "_святло" -#: ../plug-ins/lighting/lighting-ui.c:962 -#: ../plug-ins/map-object/map-object-ui.c:1249 +#: plug-ins/lighting/lighting-ui.c:973 plug-ins/map-object/map-object-ui.c:1271 msgid "_Material" msgstr "_Матар'ял" -#: ../plug-ins/lighting/lighting-ui.c:966 +#: plug-ins/lighting/lighting-ui.c:977 msgid "_Bump Map" -msgstr "_Мапа паверхні" +msgstr "_Карта паверхні" -#: ../plug-ins/lighting/lighting-ui.c:970 +#: plug-ins/lighting/lighting-ui.c:981 msgid "_Environment Map" -msgstr "_Мапа асяродзьдзя" +msgstr "_Карта асяроддзя" -#: ../plug-ins/lighting/lighting-ui.c:1089 -#: ../plug-ins/map-object/map-object-ui.c:1357 +#: plug-ins/lighting/lighting-ui.c:1100 +#: plug-ins/map-object/map-object-ui.c:1382 msgid "Recompute preview image" msgstr "Пералічыць відарыс агляду" -#: ../plug-ins/lighting/lighting-ui.c:1091 +#: plug-ins/lighting/lighting-ui.c:1102 msgid "I_nteractive" msgstr "_Інтэрактыўна" -#: ../plug-ins/lighting/lighting-ui.c:1105 +#: plug-ins/lighting/lighting-ui.c:1116 msgid "Enable/disable real time preview of changes" -msgstr "Пераключыць прагляд зьмяненьняў у рэальным часе" +msgstr "Пераключыць прагляд змяненняў у рэальным часе" -#: ../plug-ins/lighting/lighting-ui.c:1149 +#: plug-ins/lighting/lighting-ui.c:1159 msgid "Save Lighting Preset" -msgstr "Захаваць набор асьвятленьня" +msgstr "Захаваць набор асвятлення" -#: ../plug-ins/lighting/lighting-ui.c:1293 +#: plug-ins/lighting/lighting-ui.c:1303 msgid "Load Lighting Preset" -msgstr "Загрузіць набор асьвятленьня" +msgstr "Загрузіць набор асвятлення" -#: ../plug-ins/map-object/map-object-apply.c:251 -#: ../plug-ins/map-object/map-object-apply.c:272 +#: plug-ins/map-object/map-object-apply.c:241 +#: plug-ins/map-object/map-object-apply.c:266 msgid "Map to plane" -msgstr "Спраектаваць на плоскасьць" +msgstr "Спраектаваць на плоскасць" -#: ../plug-ins/map-object/map-object-apply.c:251 -#: ../plug-ins/map-object/map-object-apply.c:275 +#: plug-ins/map-object/map-object-apply.c:242 +#: plug-ins/map-object/map-object-apply.c:269 msgid "Map to sphere" -msgstr "Спраектаваць на сфэру" +msgstr "Спраектаваць на сферу" -#: ../plug-ins/map-object/map-object-apply.c:251 -#: ../plug-ins/map-object/map-object-apply.c:278 +#: plug-ins/map-object/map-object-apply.c:243 +#: plug-ins/map-object/map-object-apply.c:272 msgid "Map to box" msgstr "Спраектаваць на скрыню" -#: ../plug-ins/map-object/map-object-apply.c:252 -#: ../plug-ins/map-object/map-object-apply.c:281 +#: plug-ins/map-object/map-object-apply.c:244 +#: plug-ins/map-object/map-object-apply.c:275 msgid "Map to cylinder" -msgstr "Спраектаваць на цыліндар" +msgstr "Спраектаваць на цыліндр" -#: ../plug-ins/map-object/map-object-main.c:188 -msgid "Map the image to an object (plane, sphere, box or cylinder)" -msgstr "Спраектаваць відарыс на аб'ект (плоскасьць, сфэру, скрыню ці цыліндар)" - -#: ../plug-ins/map-object/map-object-main.c:193 +#: plug-ins/map-object/map-object-main.c:121 msgid "Map _Object..." msgstr "_Спраектаваць на аб'ект…" -#: ../plug-ins/map-object/map-object-ui.c:207 -#: ../plug-ins/map-object/map-object-ui.c:1260 +#: plug-ins/map-object/map-object-main.c:125 +msgid "Map the image to an object (plane, sphere, box or cylinder)" +msgstr "Спраектаваць відарыс на аб'ект (плоскасць, сферу, скрыню ці цыліндр)" + +#: plug-ins/map-object/map-object-ui.c:219 +#: plug-ins/map-object/map-object-ui.c:1282 msgid "_Box" msgstr "_Скрыня" -#: ../plug-ins/map-object/map-object-ui.c:224 -#: ../plug-ins/map-object/map-object-ui.c:1267 +#: plug-ins/map-object/map-object-ui.c:236 +#: plug-ins/map-object/map-object-ui.c:1289 msgid "C_ylinder" -msgstr "_Цыліндар" +msgstr "_Цыліндр" -#: ../plug-ins/map-object/map-object-ui.c:424 +#: plug-ins/map-object/map-object-ui.c:458 msgid "Map to:" msgstr "Спраектаваць на:" -#: ../plug-ins/map-object/map-object-ui.c:428 +#: plug-ins/map-object/map-object-ui.c:462 msgid "Plane" -msgstr "Плоскасьць" +msgstr "Плоскасць" -#: ../plug-ins/map-object/map-object-ui.c:429 +#: plug-ins/map-object/map-object-ui.c:463 msgid "Sphere" -msgstr "Сфэру" +msgstr "Сферу" -#: ../plug-ins/map-object/map-object-ui.c:430 +#: plug-ins/map-object/map-object-ui.c:464 msgid "Box" msgstr "Скрыню" -#: ../plug-ins/map-object/map-object-ui.c:441 +#: plug-ins/map-object/map-object-ui.c:475 msgid "Type of object to map to" msgstr "На які аб'ект спраектаваць" -#: ../plug-ins/map-object/map-object-ui.c:443 +#: plug-ins/map-object/map-object-ui.c:477 msgid "Transparent background" -msgstr "Празрыстая асноведзь" +msgstr "Празрысты фон" -#: ../plug-ins/map-object/map-object-ui.c:454 +#: plug-ins/map-object/map-object-ui.c:488 msgid "Make image transparent outside object" msgstr "Зрабіць відарыс празрыстым па-за аб'ектам" -#: ../plug-ins/map-object/map-object-ui.c:456 +#: plug-ins/map-object/map-object-ui.c:490 msgid "Tile source image" -msgstr "Замасьціць выточным відарысам" +msgstr "Замасціць зыходным відарысам" -#: ../plug-ins/map-object/map-object-ui.c:467 +#: plug-ins/map-object/map-object-ui.c:501 msgid "Tile source image: useful for infinite planes" -msgstr "Замасьціць выточным відарысам: прыдатна для бясконцых плоскасьцяў" +msgstr "Замасціць зыходным відарысам: прыдатна для бясконцых плоскасцяў" -#: ../plug-ins/map-object/map-object-ui.c:470 +#: plug-ins/map-object/map-object-ui.c:504 msgid "Create new image" msgstr "Стварыць новы відарыс" -#: ../plug-ins/map-object/map-object-ui.c:483 +#: plug-ins/map-object/map-object-ui.c:517 msgid "Create new layer" -msgstr "Стварыць новы пласт" +msgstr "Стварыць новы слой" -#: ../plug-ins/map-object/map-object-ui.c:494 +#: plug-ins/map-object/map-object-ui.c:528 msgid "Create a new layer when applying filter" -msgstr "Ствараць новы відарыс пры ўжываньні фільтра" +msgstr "Ствараць новы відарыс пры ўжыванні фільтра" -#: ../plug-ins/map-object/map-object-ui.c:502 +#: plug-ins/map-object/map-object-ui.c:536 msgid "Enable _antialiasing" -msgstr "_Задзейнічаць згладжваньне" +msgstr "_Задзейнічаць згладжванне" -#: ../plug-ins/map-object/map-object-ui.c:513 +#: plug-ins/map-object/map-object-ui.c:547 msgid "Enable/disable jagged edges removal (antialiasing)" -msgstr "Ці выкарыстоўваць выдаленьне вострых краёў (згладжваньне)" +msgstr "Ці выкарыстоўваць выдаленне вострых краёў (згладжванне)" -#: ../plug-ins/map-object/map-object-ui.c:530 +#: plug-ins/map-object/map-object-ui.c:560 +msgid "_Depth:" +msgstr "_Глыбіня:" + +#: plug-ins/map-object/map-object-ui.c:561 msgid "Antialiasing quality. Higher is better, but slower" -msgstr "Якасьць згладжваньня. Чым вышэй, тым лепей, але павольней" +msgstr "Якасць згладжвання. Чым вышэй, тым лепей, але павольней" -#: ../plug-ins/map-object/map-object-ui.c:547 +#: plug-ins/map-object/map-object-ui.c:580 msgid "Stop when pixel differences are smaller than this value" -msgstr "Спыніцца, калі рознасьць піксэляў меншая за гэтае значэньне" +msgstr "Спыніцца, калі рознасць пікселяў меншая за гэтае значэнне" -#: ../plug-ins/map-object/map-object-ui.c:582 +#: plug-ins/map-object/map-object-ui.c:616 msgid "Point light" -msgstr "Кропкавае сьвятло" +msgstr "Кропкавае святло" -#: ../plug-ins/map-object/map-object-ui.c:583 +#: plug-ins/map-object/map-object-ui.c:617 msgid "Directional light" -msgstr "Накіраванае сьвятло" +msgstr "Накіраванае святло" -#: ../plug-ins/map-object/map-object-ui.c:584 +#: plug-ins/map-object/map-object-ui.c:618 msgid "No light" -msgstr "Няма сьвятла" +msgstr "Няма святла" -#: ../plug-ins/map-object/map-object-ui.c:589 +#: plug-ins/map-object/map-object-ui.c:623 msgid "Lightsource type:" -msgstr "Тып крыніцы сьвятла:" +msgstr "Тып крыніцы святла:" -#: ../plug-ins/map-object/map-object-ui.c:603 +#: plug-ins/map-object/map-object-ui.c:637 msgid "Lightsource color:" -msgstr "Колер крыніцы сьвятла:" +msgstr "Колер крыніцы святла:" -#: ../plug-ins/map-object/map-object-ui.c:668 +#: plug-ins/map-object/map-object-ui.c:702 msgid "Direction Vector" -msgstr "Вэктар напрамку" +msgstr "Вектар напрамку" -#: ../plug-ins/map-object/map-object-ui.c:744 +#: plug-ins/map-object/map-object-ui.c:778 msgid "Intensity Levels" -msgstr "Узроўні яркасьці" +msgstr "Узроўні яркасці" -#: ../plug-ins/map-object/map-object-ui.c:763 +#: plug-ins/map-object/map-object-ui.c:798 msgid "Ambient:" msgstr "Навакольле:" -#: ../plug-ins/map-object/map-object-ui.c:792 -#: ../plug-ins/map-object/map-object-ui.c:835 +#: plug-ins/map-object/map-object-ui.c:825 +#: plug-ins/map-object/map-object-ui.c:867 msgid "Diffuse:" -msgstr "Пранікненьне:" +msgstr "Пранікненне:" -#: ../plug-ins/map-object/map-object-ui.c:816 +#: plug-ins/map-object/map-object-ui.c:847 msgid "Reflectivity" -msgstr "Адбівальная здольнасьць" +msgstr "Адбівальная здольнасць" -#: ../plug-ins/map-object/map-object-ui.c:850 +#: plug-ins/map-object/map-object-ui.c:881 msgid "Higher values makes the object reflect more light (appear lighter)" -msgstr "" -"З вышэйшымі значэньнямі аб'ект адбівае больш сьвятла (стаецца ярчэйшым)" +msgstr "З вышэйшымі значэннямі аб'ект адбівае больш святла (стаецца ярчэйшым)" -#: ../plug-ins/map-object/map-object-ui.c:864 +#: plug-ins/map-object/map-object-ui.c:894 msgid "Specular:" -msgstr "Адбівальнасьць:" +msgstr "Адбівальнасць:" -#: ../plug-ins/map-object/map-object-ui.c:893 +#: plug-ins/map-object/map-object-ui.c:921 msgid "Highlight:" -msgstr "Падсьвечваньне:" +msgstr "Падсвечванне:" -#: ../plug-ins/map-object/map-object-ui.c:954 +#: plug-ins/map-object/map-object-ui.c:978 msgid "Object X position in XYZ space" msgstr "Становішча аб'екта па X у прасторы XYZ" -#: ../plug-ins/map-object/map-object-ui.c:967 +#: plug-ins/map-object/map-object-ui.c:990 msgid "Object Y position in XYZ space" msgstr "Становішча аб'екта па Y у прасторы XYZ" -#: ../plug-ins/map-object/map-object-ui.c:980 +#: plug-ins/map-object/map-object-ui.c:1002 msgid "Object Z position in XYZ space" msgstr "Становішча аб'екта па Z у прасторы XYZ" -#: ../plug-ins/map-object/map-object-ui.c:1003 +#: plug-ins/map-object/map-object-ui.c:1025 msgid "Rotation angle about X axis" msgstr "Вугал павароту вакол восі X" -#: ../plug-ins/map-object/map-object-ui.c:1014 +#: plug-ins/map-object/map-object-ui.c:1036 msgid "Rotation angle about Y axis" msgstr "Вугал павароту вакол восі Y" -#: ../plug-ins/map-object/map-object-ui.c:1025 +#: plug-ins/map-object/map-object-ui.c:1047 msgid "Rotation angle about Z axis" msgstr "Вугал павароту вакол восі Z" -#: ../plug-ins/map-object/map-object-ui.c:1051 +#: plug-ins/map-object/map-object-ui.c:1076 msgid "Front:" msgstr "Перад:" -#: ../plug-ins/map-object/map-object-ui.c:1051 +#: plug-ins/map-object/map-object-ui.c:1076 msgid "Back:" msgstr "Зад:" -#: ../plug-ins/map-object/map-object-ui.c:1059 +#: plug-ins/map-object/map-object-ui.c:1084 msgid "Map Images to Box Faces" msgstr "Спраектаваць відарысы на бакі скрыні" -#: ../plug-ins/map-object/map-object-ui.c:1100 +#: plug-ins/map-object/map-object-ui.c:1123 msgid "X scale (size)" msgstr "Памер па X" -#: ../plug-ins/map-object/map-object-ui.c:1112 +#: plug-ins/map-object/map-object-ui.c:1135 msgid "Y scale (size)" msgstr "Памер па Y" -#: ../plug-ins/map-object/map-object-ui.c:1124 +#: plug-ins/map-object/map-object-ui.c:1147 msgid "Z scale (size)" msgstr "Памер па Z" -#: ../plug-ins/map-object/map-object-ui.c:1147 -#: ../plug-ins/print/print-page-layout.c:430 +#: plug-ins/map-object/map-object-ui.c:1173 +#: plug-ins/print/print-page-layout.c:447 msgid "_Top:" msgstr "У_версе:" -#: ../plug-ins/map-object/map-object-ui.c:1147 -#: ../plug-ins/print/print-page-layout.c:449 +#: plug-ins/map-object/map-object-ui.c:1173 +#: plug-ins/print/print-page-layout.c:468 msgid "_Bottom:" msgstr "У_нізе:" -#: ../plug-ins/map-object/map-object-ui.c:1152 +#: plug-ins/map-object/map-object-ui.c:1178 msgid "Images for the Cap Faces" -msgstr "Відарысы зьверху й зьнізу цыліндра" +msgstr "Відарысы зверху і знізу цыліндра" -#: ../plug-ins/map-object/map-object-ui.c:1181 -#: ../plug-ins/print/print-page-layout.c:247 +#: plug-ins/map-object/map-object-ui.c:1207 +#: plug-ins/print/print-page-layout.c:253 msgid "Size" msgstr "Памер" -#: ../plug-ins/map-object/map-object-ui.c:1192 +#: plug-ins/map-object/map-object-ui.c:1217 msgid "R_adius:" -msgstr "_Радыюс:" +msgstr "_Радыус:" -#: ../plug-ins/map-object/map-object-ui.c:1196 +#: plug-ins/map-object/map-object-ui.c:1218 msgid "Cylinder radius" -msgstr "Радыюс цыліндра" +msgstr "Радыус цыліндра" -#: ../plug-ins/map-object/map-object-ui.c:1210 +#: plug-ins/map-object/map-object-ui.c:1229 +msgid "L_ength:" +msgstr "_Даўжыня:" + +#: plug-ins/map-object/map-object-ui.c:1230 msgid "Cylinder length" msgstr "Даўжыня цыліндра" -#: ../plug-ins/map-object/map-object-ui.c:1241 +#: plug-ins/map-object/map-object-ui.c:1263 msgid "O_ptions" -msgstr "_Выборы" +msgstr "_Параметры" -#: ../plug-ins/map-object/map-object-ui.c:1253 +#: plug-ins/map-object/map-object-ui.c:1275 msgid "O_rientation" msgstr "_Арыентацыя" -#: ../plug-ins/map-object/map-object-ui.c:1291 +#: plug-ins/map-object/map-object-ui.c:1313 +#, fuzzy msgid "Map to Object" msgstr "Спраектаваць на аб'ект" -#: ../plug-ins/map-object/map-object-ui.c:1375 +#: plug-ins/map-object/map-object-ui.c:1370 +msgid "_Preview!" +msgstr "_Прагляд!" + +#: plug-ins/map-object/map-object-ui.c:1400 msgid "Show _wireframe" msgstr "Паказваць _каркас" -#: ../plug-ins/map-object/map-object-ui.c:1384 +#: plug-ins/map-object/map-object-ui.c:1409 msgid "Update preview _live" -msgstr "Абнаўляць агляд _ужывую" +msgstr "Адразу абнаўляць папярэдні прагляд" -#: ../plug-ins/maze/maze-algorithms.c:278 -msgid "Constructing maze using Prim's Algorithm" -msgstr "Стварэньне лябірынту паводле альгарытму Прыма" +#: plug-ins/metadata/metadata-editor.c:484 +msgid "Document Title" +msgstr "Назва дакумента" -#: ../plug-ins/maze/maze-algorithms.c:488 -msgid "Constructing tileable maze using Prim's Algorithm" +#: plug-ins/metadata/metadata-editor.c:485 +msgid "Author" +msgstr "Аўтар" + +#: plug-ins/metadata/metadata-editor.c:486 +msgid "Author Title" +msgstr "Пасада" + +#. Description tab +#: plug-ins/metadata/metadata-editor.c:487 +#: plug-ins/metadata/metadata-editor.c:1216 +msgid "Description" +msgstr "Апісанне" + +#: plug-ins/metadata/metadata-editor.c:488 +#, fuzzy +#| msgid "Description:" +msgid "Description Writer" +msgstr "Апісанне:" + +#: plug-ins/metadata/metadata-editor.c:489 +msgid "Rating" +msgstr "Ацэнка" + +#: plug-ins/metadata/metadata-editor.c:490 +msgid "Keywords" +msgstr "Ключавыя словы" + +#: plug-ins/metadata/metadata-editor.c:492 +msgid "Copyright Status" +msgstr "Стан аўтарскакага права" + +#: plug-ins/metadata/metadata-editor.c:493 +#: plug-ins/metadata/metadata-editor.c:622 +msgid "Copyright Notice" +msgstr "Звесткі пра аўтарскае права" + +#: plug-ins/metadata/metadata-editor.c:494 +msgid "Copyright URL" +msgstr "Спасылка на прававыя звесткі" + +#: plug-ins/metadata/metadata-editor.c:500 +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 +msgid "City" +msgstr "Населены пункт" + +#: plug-ins/metadata/metadata-editor.c:502 +#: plug-ins/metadata/metadata-editor.c:517 +#: plug-ins/metadata/metadata-editor.c:538 +msgid "State / Province" +msgstr "Штат/вобласць" + +#: plug-ins/metadata/metadata-editor.c:503 +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 +msgid "Country" +msgstr "Краіна" + +#: plug-ins/metadata/metadata-editor.c:506 +msgid "Phone(s)" +msgstr "Тэлефон" + +#: plug-ins/metadata/metadata-editor.c:507 +msgid "E-mail(s)" +msgstr "Электронная пошта" + +#: plug-ins/metadata/metadata-editor.c:508 +msgid "Website(s)" +msgstr "Сайт" + +#: plug-ins/metadata/metadata-editor.c:510 +msgid "Creation Date" +msgstr "Дата стварэння" + +#: plug-ins/metadata/metadata-editor.c:512 +msgid "Intellectual Genre" msgstr "" -"Пабудова паводле альгарытму Прыма лябірынта, прыдатнага для замошчваньня" -#: ../plug-ins/maze/maze-dialog.c:162 -msgid "Maze" -msgstr "Лябірынт" +#: plug-ins/metadata/metadata-editor.c:513 +msgid "IPTC Scene Code" +msgstr "" -#. The maze size frame -#: ../plug-ins/maze/maze-dialog.c:184 -msgid "Maze Size" -msgstr "Памер лябірынту" +#: plug-ins/metadata/metadata-editor.c:515 +#: plug-ins/metadata/metadata-editor.c:536 +#: plug-ins/metadata/metadata-editor.c:594 +#, fuzzy +#| msgid "Curl Location" +msgid "Sublocation" +msgstr "Месца загіну" -#: ../plug-ins/maze/maze-dialog.c:210 ../plug-ins/maze/maze-dialog.c:226 -msgid "Pieces:" -msgstr "Кавалкаў:" +#: plug-ins/metadata/metadata-editor.c:519 +#: plug-ins/metadata/metadata-editor.c:540 +msgid "Country ISO-Code" +msgstr "Код краіны паводле ISO" -#: ../plug-ins/maze/maze-dialog.c:215 -msgid "Height (pixels):" -msgstr "Вышыня (у піксэлях):" +#: plug-ins/metadata/metadata-editor.c:521 +msgid "Urgency" +msgstr "Тэрміновасць" -#. The maze algorithm frame -#: ../plug-ins/maze/maze-dialog.c:234 -msgid "Algorithm" -msgstr "Альгарытм" +#: plug-ins/metadata/metadata-editor.c:522 +#, fuzzy +#| msgid "Create line" +msgid "Headline" +msgstr "Стварыць лінію" -#: ../plug-ins/maze/maze-dialog.c:260 -msgid "Depth first" -msgstr "Спачатку ўглыб" +#: plug-ins/metadata/metadata-editor.c:523 +msgid "IPTC Subject Code" +msgstr "" -#: ../plug-ins/maze/maze-dialog.c:261 -msgid "Prim's algorithm" +#: plug-ins/metadata/metadata-editor.c:525 +#, fuzzy +#| msgid "_Identifier prefix:" +msgid "Job Identifier" +msgstr "_Прэфікс вызначніка:" + +#: plug-ins/metadata/metadata-editor.c:526 +#, fuzzy +#| msgid "Intersection" +msgid "Instructions" +msgstr "Перасячэнне" + +#: plug-ins/metadata/metadata-editor.c:527 +msgid "Credit Line" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:528 +#: plug-ins/metadata/metadata-editor.c:620 +msgid "Source" +msgstr "Крыніца" + +#: plug-ins/metadata/metadata-editor.c:529 +msgid "Usage Terms" +msgstr "Умовы выкарыстання" + +#: plug-ins/metadata/metadata-editor.c:535 +msgid "Person Shown" +msgstr "Асоба на відарысе" + +#: plug-ins/metadata/metadata-editor.c:541 +#: plug-ins/metadata/metadata-editor.c:599 +msgid "World Region" +msgstr "Частка свету" + +#: plug-ins/metadata/metadata-editor.c:542 +msgid "Location Shown" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:544 +msgid "Featured Organization" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:546 +msgid "Organization Code" +msgstr "Код арганізацыі" + +#: plug-ins/metadata/metadata-editor.c:548 +msgid "Event" +msgstr "Падзея" + +#: plug-ins/metadata/metadata-editor.c:549 +#, fuzzy +#| msgid "Map to Object" +msgid "Artwork or Object" +msgstr "Спраектаваць на аб'ект" + +#: plug-ins/metadata/metadata-editor.c:552 +#, fuzzy +#| msgid "Add Additional Guides" +msgid "Additional Model Info" +msgstr "Дадаць дадатковы накіроўныя" + +#: plug-ins/metadata/metadata-editor.c:553 +#, fuzzy +#| msgid "Mode _1" +msgid "Model Age" +msgstr "Рэжым _1" + +#: plug-ins/metadata/metadata-editor.c:554 +msgid "Minor Model Age Disclosure" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:555 +msgid "Model Release Status" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:556 +#: plug-ins/metadata/metadata-editor.c:628 +msgid "Model Release Identifier" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:559 +#, fuzzy +#| msgid "Image Size" +msgid "Image Supplier Name" +msgstr "Памер відарыса" + +#: plug-ins/metadata/metadata-editor.c:560 +#, fuzzy +#| msgid "Image Size" +msgid "Image Supplier ID" +msgstr "Памер відарыса" + +#: plug-ins/metadata/metadata-editor.c:561 +msgid "Supplier's Image ID" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:562 +msgid "Registry Entry" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:564 +msgid "Max. Available Width" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:565 +#, fuzzy +#| msgid "Available images:" +msgid "Max. Available Height" +msgstr "Наяўныя відарысы:" + +#: plug-ins/metadata/metadata-editor.c:566 +#, fuzzy +#| msgid "Lightsource type:" +msgid "Digital Source Type" +msgstr "Тып крыніцы святла:" + +#: plug-ins/metadata/metadata-editor.c:568 +#, fuzzy +#| msgid "Image Selection" +msgid "Image Creator" +msgstr "Выбар відарысаў" + +#: plug-ins/metadata/metadata-editor.c:570 +#, fuzzy +#| msgid "_Copyright:" +msgid "Copyright Owner" +msgstr "_Аўтарскія правы:" + +#: plug-ins/metadata/metadata-editor.c:572 +#, fuzzy +#| msgid "_License:" +msgid "Licensor" +msgstr "_Ліцэнзія:" + +#: plug-ins/metadata/metadata-editor.c:574 +msgid "Property Release Status" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:575 +msgid "Property Release Identifier" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:596 +msgid "Province / State" +msgstr "Штат/вобласць" + +#: plug-ins/metadata/metadata-editor.c:598 +msgid "Country ISO Code" +msgstr "Код краіны паводле ISO" + +#: plug-ins/metadata/metadata-editor.c:611 +msgid "Code" +msgstr "Код" + +#: plug-ins/metadata/metadata-editor.c:617 +msgid "Title" +msgstr "Назва" + +#: plug-ins/metadata/metadata-editor.c:618 +msgid "Date Created" +msgstr "Дата стварэння" + +#: plug-ins/metadata/metadata-editor.c:619 +msgid "Creator" +msgstr "Стваральнік" + +#: plug-ins/metadata/metadata-editor.c:621 +msgid "Source Inventory ID" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:634 +msgid "Organization Identifier" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:635 +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 +#, fuzzy +#| msgid "_Identifier prefix:" +msgid "Identifier" +msgstr "_Прэфікс вызначніка:" + +#: plug-ins/metadata/metadata-editor.c:657 +msgid "Phone Number 1" +msgstr "Нумар тэлефона 1" + +#: plug-ins/metadata/metadata-editor.c:658 +msgid "Phone Type 1" +msgstr "Тып тэлефона 1" + +#: plug-ins/metadata/metadata-editor.c:659 +msgid "Phone Number 2" +msgstr "Нумар тэлефона 2" + +#: plug-ins/metadata/metadata-editor.c:660 +msgid "Phone Type 2" +msgstr "Тып тэлефона 2" + +#: plug-ins/metadata/metadata-editor.c:661 +msgid "Email Address" +msgstr "Адрас электроннай пошты" + +#: plug-ins/metadata/metadata-editor.c:662 +msgid "Web Address" +msgstr "Вэб-адрас" + +#: plug-ins/metadata/metadata-editor.c:675 +msgid "Category" +msgstr "Катэгорыя" + +#: plug-ins/metadata/metadata-editor.c:676 +msgid "Supplemental Category" +msgstr "Дадатковая катэгорыя" + +#: plug-ins/metadata/metadata-editor.c:682 +msgid "Longitude" +msgstr "Даўгата" + +#: plug-ins/metadata/metadata-editor.c:683 +msgid "Longitude Reference" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:684 +msgid "Latitude" +msgstr "Шырата" + +#: plug-ins/metadata/metadata-editor.c:685 +msgid "Latitude Reference" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:686 +msgid "Altitude" +msgstr "Вышыня над узроўнем мора" + +#: plug-ins/metadata/metadata-editor.c:688 +msgid "Altitude Reference" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:694 +msgid "Patient" +msgstr "Пацыент" + +#: plug-ins/metadata/metadata-editor.c:695 +msgid "Patient ID" +msgstr "Ідэнтыфікатар пацыента" + +#: plug-ins/metadata/metadata-editor.c:696 +msgid "Date of Birth" +msgstr "Дата нараджэння" + +#: plug-ins/metadata/metadata-editor.c:698 +msgid "Patient Sex" +msgstr "Пол пацыента" + +#: plug-ins/metadata/metadata-editor.c:700 +msgid "Study ID" +msgstr "Ідэнтыфікатар даследавання" + +#: plug-ins/metadata/metadata-editor.c:701 +#, fuzzy +#| msgid "Rendering wind" +msgid "Referring Physician" +msgstr "Стварэнне ветру" + +#: plug-ins/metadata/metadata-editor.c:702 +msgid "Study Date" +msgstr "Дата даследавання" + +#: plug-ins/metadata/metadata-editor.c:704 +msgid "Study Description" +msgstr "Апісанне даследавання" + +#: plug-ins/metadata/metadata-editor.c:705 +msgid "Series Number" +msgstr "Нумар серыі" + +#: plug-ins/metadata/metadata-editor.c:706 +msgid "Modality" +msgstr "Метад" + +#: plug-ins/metadata/metadata-editor.c:707 +msgid "Series Date" +msgstr "Дата серыі" + +#: plug-ins/metadata/metadata-editor.c:709 +msgid "Series Description" +msgstr "Апісанне серыі" + +#: plug-ins/metadata/metadata-editor.c:711 +msgid "Equipment Institution" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:712 +msgid "Equipment Manufacturer" +msgstr "" + +#: plug-ins/metadata/metadata-editor.c:752 +msgid "_Edit Metadata" +msgstr "_Змяніць метаданыя" + +#: plug-ins/metadata/metadata-editor.c:756 +msgid "Edit metadata (IPTC, EXIF, XMP)" +msgstr "Змяніць метаданыя (IPTC, EXIF, XMP)" + +#: plug-ins/metadata/metadata-editor.c:1178 +#, c-format +msgid "Metadata Editor: %s" +msgstr "Рэдактар метаданых: %s" + +#: plug-ins/metadata/metadata-editor.c:1186 +msgid "_Write Metadata" +msgstr "За_пісаць метаданыя" + +#. IPTC tab +#: plug-ins/metadata/metadata-editor.c:1222 +#: plug-ins/metadata/metadata-viewer.c:401 +msgid "IPTC" +msgstr "IPTC" + +#. IPTC Extension tab +#: plug-ins/metadata/metadata-editor.c:1228 +msgid "IPTC Extension" +msgstr "Пашырэнне IPTC" + +#. Categories tab +#: plug-ins/metadata/metadata-editor.c:1334 +msgid "Categories" +msgstr "Катэгорыі" + +#. GPS tab +#: plug-ins/metadata/metadata-editor.c:1340 +msgid "GPS" +msgstr "GPS" + +#. DICOM tab +#: plug-ins/metadata/metadata-editor.c:1351 +msgid "DICOM" +msgstr "DICOM" + +#: plug-ins/metadata/metadata-editor.c:1373 +msgid "Import metadata" +msgstr "Імпартаваць метаданыя" + +#: plug-ins/metadata/metadata-editor.c:1375 +msgid "Export metadata" +msgstr "Экспартаваць метаданыя" + +#: plug-ins/metadata/metadata-editor.c:1678 +msgid "Choose Date" +msgstr "Выбраць дату" + +#: plug-ins/metadata/metadata-editor.c:1682 +msgid "Set Date" +msgstr "Задаць дату" + +#: plug-ins/metadata/metadata-editor.c:2416 +msgid "" +"Enter or edit GPS value here.\n" +"Valid values consist of 1, 2 or 3 numbers (degrees, minutes, seconds), see " +"the following examples:\n" +"10deg 15' 20\", or 10° 15' 20\", or 10:15:20.45, or 10 15 20, or 10 15.30, " +"or 10.45\n" +"Delete all text to remove the current value." +msgstr "" +"Увядзіце або змяніце значэнне GPS.\n" +"Дапушчальныя значэнні змяшчаюць адзін, два ці тры лікі (градусы, мінуты, " +"секунды), гл. прыклады ніжэй:\n" +"10deg 15' 20\", або 10° 15' 20\", або 10:15:20.45, або 10 15 20, або 10 " +"15.30, або 10.45\n" +"Каб выдаліць бягучае значэнне, выдаліце ўвесь тэкст." + +#: plug-ins/metadata/metadata-editor.c:2422 +msgid "" +"Enter or edit GPS altitude value here.\n" +"A valid value consists of one number:\n" +"e.g. 100, or 12.24\n" +"Depending on the selected measurement type the value should be entered in " +"meter (m) or feet (ft)\n" +"Delete all text to remove the current value." +msgstr "" +"Увядзіце або змяніце значэнне GPS.\n" +"Дапушчальныя значэнні змяшчаюць адзін лік:\n" +"напр. 100, або 12.24\n" +"У залежнасці ад выбранай сістэмы вымярэння, значэнне трэба ўвесці ў метрах " +"(m) або футах (ft).\n" +"Каб выдаліць бягучае значэнне, выдаліце ўвесь тэкст." + +#: plug-ins/metadata/metadata-editor.c:2556 +msgid "Unrated" +msgstr "Без ацэнкі" + +#: plug-ins/metadata/metadata-editor.c:4666 +#, fuzzy, c-format +msgid "Failed to set metadata tag %s: %s" +msgstr "Не ўдалося задаць тэг метаданых %s: %s" + +#: plug-ins/metadata/metadata-editor.c:5529 +msgid "Import Metadata File" +msgstr "Імпартаваць файл метаданых" + +#: plug-ins/metadata/metadata-editor.c:5564 +msgid "Export Metadata File" +msgstr "Экспартаваць файл метаданых" + +#: plug-ins/metadata/metadata-editor.c:5568 +msgid "_Export" +msgstr "_Экспартаваць" + +#: plug-ins/metadata/metadata-tags.c:187 plug-ins/metadata/metadata-tags.c:210 +#: plug-ins/metadata/metadata-tags.c:270 plug-ins/metadata/metadata-tags.c:287 +msgid "Select a value" +msgstr "Выберыце значэнне" + +#: plug-ins/metadata/metadata-tags.c:188 +msgid "Original digital capture of a real life scene" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:189 +msgid "Digitized from a negative on film" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:190 +msgid "Digitized from a positive on film" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:191 +msgid "Digitized from a print on non-transparent medium" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:192 +msgid "Original media with minor human edits" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:193 +msgid "Composite of captured elements" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:194 +msgid "Algorithmically-enhanced media" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:195 +msgid "Data-driven media" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:196 +msgid "Digital art" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:197 +msgid "Virtual recording" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:198 +msgid "Composite including synthetic elements" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:199 +msgid "Trained algorithmic media" +msgstr "" + +#: plug-ins/metadata/metadata-tags.c:200 +#, fuzzy +#| msgid "Prim's algorithm" +msgid "Pure algorithmic media" msgstr "Альгарытм Прыма" -#: ../plug-ins/maze/maze-dialog.c:380 -msgid "" -"Selection size is not even.\n" -"Tileable maze won't work perfectly." +#: plug-ins/metadata/metadata-tags.c:201 +msgid "Created by software" +msgstr "Створана ў праграме" + +#: plug-ins/metadata/metadata-tags.c:212 plug-ins/metadata/metadata-tags.c:224 +msgid "Not Applicable" msgstr "" -"Памер вылучэньня няцотны.\n" -"Лябірынт будзе ня вельмі прыдатны для замошчваньня." -#: ../plug-ins/maze/maze.c:122 -msgid "Draw a labyrinth" -msgstr "Нарысаваць лябірынт" +#: plug-ins/metadata/metadata-tags.c:213 +msgid "Unlimited Model Releases" +msgstr "" -#: ../plug-ins/maze/maze.c:129 -msgid "_Maze..." -msgstr "_Лябірынт…" +#: plug-ins/metadata/metadata-tags.c:214 +msgid "Limited or Incomplete Model Releases" +msgstr "" -#: ../plug-ins/maze/maze.c:425 -msgid "Drawing maze" -msgstr "Рысаваньне лябірынту" +#: plug-ins/metadata/metadata-tags.c:225 +msgid "Unlimited Property Releases" +msgstr "" -#: ../plug-ins/metadata/metadata.c:185 -msgid "View and edit metadata (EXIF, IPTC, XMP)" -msgstr "Прагледзець і правіць мэтаданьні (EXIF, IPTC, XMP)" +#: plug-ins/metadata/metadata-tags.c:226 +msgid "Limited or Incomplete Property Releases" +msgstr "" -#: ../plug-ins/metadata/metadata.c:194 -msgid "Propert_ies" -msgstr "_Уласьцівасьці" +#: plug-ins/metadata/metadata-tags.c:235 +msgid "Age Unknown" +msgstr "Узрост невядомы" -#: ../plug-ins/metadata/xmp-parse.c:237 +#: plug-ins/metadata/metadata-tags.c:236 +msgid "Age 25 or Over" +msgstr "25 гадоў і болей" + +#: plug-ins/metadata/metadata-tags.c:237 +msgid "Age 24" +msgstr "24 гады" + +#: plug-ins/metadata/metadata-tags.c:238 +msgid "Age 23" +msgstr "23 гады" + +#: plug-ins/metadata/metadata-tags.c:239 +msgid "Age 22" +msgstr "22 гады" + +#: plug-ins/metadata/metadata-tags.c:240 +msgid "Age 21" +msgstr "21 год" + +#: plug-ins/metadata/metadata-tags.c:241 +msgid "Age 20" +msgstr "20 гадоў" + +#: plug-ins/metadata/metadata-tags.c:242 +msgid "Age 19" +msgstr "19 гадоў" + +#: plug-ins/metadata/metadata-tags.c:243 +msgid "Age 18" +msgstr "18 гадоў" + +#: plug-ins/metadata/metadata-tags.c:244 +msgid "Age 17" +msgstr "17 гадоў" + +#: plug-ins/metadata/metadata-tags.c:245 +msgid "Age 16" +msgstr "16 гадоў" + +#: plug-ins/metadata/metadata-tags.c:246 +msgid "Age 15" +msgstr "15 гадоў" + +#: plug-ins/metadata/metadata-tags.c:247 +msgid "Age 14 or Under" +msgstr "14 гадоў і меней" + +#: plug-ins/metadata/metadata-tags.c:254 +msgid "2" +msgstr "2" + +#: plug-ins/metadata/metadata-tags.c:254 +msgid "3" +msgstr "3" + +#: plug-ins/metadata/metadata-tags.c:254 +msgid "4" +msgstr "4" + +#: plug-ins/metadata/metadata-tags.c:254 +msgid "6" +msgstr "6" + +#: plug-ins/metadata/metadata-tags.c:254 +msgid "7" +msgstr "7" + +#: plug-ins/metadata/metadata-tags.c:261 plug-ins/metadata/metadata-tags.c:297 +#: plug-ins/metadata/metadata-tags.c:304 plug-ins/metadata/metadata-tags.c:311 +msgid "Unknown" +msgstr "Невядома" + +#. DO NOT SAVE +#: plug-ins/metadata/metadata-tags.c:262 +msgid "Copyrighted" +msgstr "Абаронена аўтарскім правам" + +#. TRUE +#: plug-ins/metadata/metadata-tags.c:263 +msgid "Public Domain" +msgstr "Грамадскі набытак" + +#: plug-ins/metadata/metadata-tags.c:271 +msgid "Work" +msgstr "Праца" + +#: plug-ins/metadata/metadata-tags.c:272 +msgid "Cell" +msgstr "Мабільны" + +#: plug-ins/metadata/metadata-tags.c:273 +msgid "Fax" +msgstr "Факс" + +#: plug-ins/metadata/metadata-tags.c:274 +msgid "Home" +msgstr "Дамашні" + +#: plug-ins/metadata/metadata-tags.c:275 +msgid "Pager" +msgstr "Пэйджар" + +#: plug-ins/metadata/metadata-tags.c:288 +msgid "Male" +msgstr "Мужчынскі" + +#: plug-ins/metadata/metadata-tags.c:289 +msgid "Female" +msgstr "Жаночы" + +#: plug-ins/metadata/metadata-tags.c:290 +msgid "Other" +msgstr "Іншы" + +#: plug-ins/metadata/metadata-tags.c:297 +msgid "Above sea level" +msgstr "Над узроўнем мора" + +#: plug-ins/metadata/metadata-tags.c:297 +msgid "Below sea level" +msgstr "Ніжэй за ўзровень мора" + +#: plug-ins/metadata/metadata-tags.c:304 +msgid "North" +msgstr "Поўнач" + +#: plug-ins/metadata/metadata-tags.c:304 +msgid "South" +msgstr "Поўдзень" + +#: plug-ins/metadata/metadata-tags.c:311 +msgid "East" +msgstr "Усход" + +#: plug-ins/metadata/metadata-tags.c:311 +msgid "West" +msgstr "Захад" + +#: plug-ins/metadata/metadata-viewer.c:177 +msgid "_View Metadata" +msgstr "_Прагляд метаданых" + +#: plug-ins/metadata/metadata-viewer.c:181 +msgid "View metadata (Exif, IPTC, XMP)" +msgstr "Прагляд метаданых (Exif, IPTC, XMP)" + +#: plug-ins/metadata/metadata-viewer.c:265 #, c-format -msgid "Error: No XMP packet found" -msgstr "Памылка: Не адшукана пакетаў XMP" +msgid "Metadata Viewer: %s" +msgstr "Праглядальнік метаданых: %s" -#: ../plug-ins/metadata/xmp-parse.c:253 +#: plug-ins/metadata/metadata-viewer.c:308 +msgid "Exif Tag" +msgstr "" + +#: plug-ins/metadata/metadata-viewer.c:325 +msgid "Exif" +msgstr "Exif" + +#: plug-ins/metadata/metadata-viewer.c:346 +msgid "XMP Tag" +msgstr "" + +#: plug-ins/metadata/metadata-viewer.c:363 +msgid "XMP" +msgstr "XMP" + +#: plug-ins/metadata/metadata-viewer.c:384 +msgid "IPTC Tag" +msgstr "" + +#: plug-ins/metadata/metadata-viewer.c:481 #, c-format -msgid "Error on line %d char %d: %s" -msgstr "Памылка ў радку %d знак %d: %s" +msgid "(%lu more character(s))" +msgstr "" -#: ../plug-ins/metadata/xmp-parse.c:275 +#: plug-ins/metadata/metadata-viewer.c:728 +msgid " meter" +msgstr " метраў" + +#: plug-ins/metadata/metadata-viewer.c:729 +msgid " feet" +msgstr " футаў" + +#: plug-ins/metadata/metadata-viewer.c:897 #, c-format -msgid "Expected text or optional element <%s>, found <%s> instead" -msgstr "Чакаўся тэкст ці неабавязковы элемэнт <%s>, але знойдзены <%s>" +msgid "(%llu more byte(s))" +msgstr "(яшчэ %llu байт(ы))" -#: ../plug-ins/metadata/xmp-parse.c:279 -#, c-format -msgid "Expected element <%s>, found <%s> instead" -msgstr "Чакаўся элемэнт <%s>, але знойдзены <%s>" - -#: ../plug-ins/metadata/xmp-parse.c:294 -#, c-format -msgid "Unknown element <%s>" -msgstr "Невядомы элемэнт <%s>" - -#: ../plug-ins/metadata/xmp-parse.c:323 -#, c-format -msgid "Unknown attribute \"%s\"=\"%s\" in element <%s>" -msgstr "Невядомы атрыбут \"%s\"=\"%s\" элемэнта <%s>" - -#: ../plug-ins/metadata/xmp-parse.c:676 -#, c-format -msgid "Required attribute rdf:about missing in <%s>" -msgstr "Патрэбны атрыбут rdf:about адсутнічае ў <%s>" - -#: ../plug-ins/metadata/xmp-parse.c:902 -#, c-format -msgid "Nested elements (<%s>) are not allowed in this context" -msgstr "Укладзеныя элемэнты (<%s>) не дапушчаюцца ў гэтым кантэксьце" - -#: ../plug-ins/metadata/xmp-parse.c:1031 -#, c-format -msgid "End of element <%s> not expected in this context" -msgstr "Канец элемэнта <%s> не чакаўся ў гэтым кантэксьце" - -#: ../plug-ins/metadata/xmp-parse.c:1140 -#, c-format -msgid "The current element (<%s>) cannot contain text" -msgstr "Бягучы элемэнт (<%s>) ня можа ўтрымліваць тэкст" - -#: ../plug-ins/metadata/xmp-parse.c:1165 -msgid "XMP packets must start with " -msgstr "Пакункі XMP мусяць пачынацца з " - -#: ../plug-ins/metadata/xmp-parse.c:1179 -msgid "XMP packets must end with " -msgstr "Пакункі XMP мусяць сканчацца на " - -#: ../plug-ins/metadata/xmp-parse.c:1192 -msgid "XMP cannot contain XML comments or processing instructions" -msgstr "XMP ня можа ўтрымліваць камэнтары XML або загады апрацоўкі" - -#: ../plug-ins/pagecurl/pagecurl.c:216 -msgid "Curl up one of the image corners" -msgstr "Загнуць адзін з кутоў відарыса" - -#: ../plug-ins/pagecurl/pagecurl.c:221 +#: plug-ins/pagecurl/pagecurl.c:231 msgid "_Pagecurl..." msgstr "_Загнуць край…" -#: ../plug-ins/pagecurl/pagecurl.c:440 -msgid "Pagecurl Effect" -msgstr "Эфэкт загіну старонкі" +#: plug-ins/pagecurl/pagecurl.c:235 +msgid "Curl up one of the image corners" +msgstr "Загнуць адзін з кутоў відарыса" -#: ../plug-ins/pagecurl/pagecurl.c:462 +#: plug-ins/pagecurl/pagecurl.c:492 +msgid "Pagecurl Effect" +msgstr "Эфект загіну старонкі" + +#: plug-ins/pagecurl/pagecurl.c:514 msgid "Curl Location" msgstr "Месца загіну" -#: ../plug-ins/pagecurl/pagecurl.c:481 +#: plug-ins/pagecurl/pagecurl.c:534 msgid "Lower right" msgstr "Ніжні правы" -#: ../plug-ins/pagecurl/pagecurl.c:482 +#: plug-ins/pagecurl/pagecurl.c:535 msgid "Lower left" msgstr "Ніжні левы" -#: ../plug-ins/pagecurl/pagecurl.c:483 +#: plug-ins/pagecurl/pagecurl.c:536 msgid "Upper left" msgstr "Верхні левы" -#: ../plug-ins/pagecurl/pagecurl.c:484 +#: plug-ins/pagecurl/pagecurl.c:537 msgid "Upper right" msgstr "Верхні правы" -#: ../plug-ins/pagecurl/pagecurl.c:524 +#: plug-ins/pagecurl/pagecurl.c:573 msgid "Curl Orientation" msgstr "Напрамак загіну" -#: ../plug-ins/pagecurl/pagecurl.c:569 +#: plug-ins/pagecurl/pagecurl.c:617 msgid "_Shade under curl" msgstr "_Цень пад загінам" -#: ../plug-ins/pagecurl/pagecurl.c:582 +#: plug-ins/pagecurl/pagecurl.c:630 msgid "Current gradient (reversed)" -msgstr "Бягучы ґрадыент (перавернуты)" +msgstr "Бягучы градыент (перавернуты)" -#: ../plug-ins/pagecurl/pagecurl.c:587 +#: plug-ins/pagecurl/pagecurl.c:635 msgid "Current gradient" -msgstr "Бягучы ґрадыент" +msgstr "Бягучы градыент" -#: ../plug-ins/pagecurl/pagecurl.c:592 +#: plug-ins/pagecurl/pagecurl.c:640 msgid "Foreground / background colors" -msgstr "Колеры рысаваньня й асноведзі" +msgstr "Колеры малявання і фону" -#: ../plug-ins/pagecurl/pagecurl.c:612 +#: plug-ins/pagecurl/pagecurl.c:652 msgid "_Opacity:" -msgstr "_Непразрыстасьць:" +msgstr "_Непразрыстасць:" -#: ../plug-ins/pagecurl/pagecurl.c:735 +#: plug-ins/pagecurl/pagecurl.c:760 msgid "Curl Layer" -msgstr "Пласт загіну" +msgstr "Слой загіну" -#: ../plug-ins/pagecurl/pagecurl.c:1026 +#: plug-ins/pagecurl/pagecurl.c:1024 msgid "Page Curl" msgstr "Загін старонкі" -#: ../plug-ins/print/print-page-layout.c:153 +#: plug-ins/print/print-page-layout.c:158 msgid "Ignore Page _Margins" -msgstr "Іґнараваць _палі паперы" +msgstr "Ігнараваць _палі паперы" #. crop marks toggle -#: ../plug-ins/print/print-page-layout.c:164 +#: plug-ins/print/print-page-layout.c:169 msgid "_Draw Crop Marks" -msgstr "_Рысаваць пазнакі абразаньня" +msgstr "_Рысаваць пазнакі абразання" -#: ../plug-ins/print/print-page-layout.c:322 +#: plug-ins/print/print-page-layout.c:328 msgid "_X resolution:" -msgstr "Разрозьненьне па _X:" +msgstr "Раздзяляльнасць па _X:" -#: ../plug-ins/print/print-page-layout.c:326 +#: plug-ins/print/print-page-layout.c:332 msgid "_Y resolution:" -msgstr "Разрозьненьне па _Y:" +msgstr "Раздзяляльнасць па _Y:" -#: ../plug-ins/print/print-page-layout.c:397 +#: plug-ins/print/print-page-layout.c:335 +msgid "_Load Defaults" +msgstr "За_грузіць прадвызначаныя" + +#: plug-ins/print/print-page-layout.c:410 msgid "_Left:" -msgstr "Зь_лева:" +msgstr "З_лева:" -#: ../plug-ins/print/print-page-layout.c:416 +#: plug-ins/print/print-page-layout.c:431 msgid "_Right:" msgstr "С_права:" -#: ../plug-ins/print/print-page-layout.c:470 +#: plug-ins/print/print-page-layout.c:489 msgid "C_enter:" msgstr "_Цэнтраваць:" #. if and how to center the image on the page -#: ../plug-ins/print/print-page-layout.c:477 +#: plug-ins/print/print-page-layout.c:496 msgctxt "center-mode" msgid "None" msgstr "Ніяк" -#: ../plug-ins/print/print-page-layout.c:478 +#: plug-ins/print/print-page-layout.c:497 msgid "Horizontally" msgstr "Гарызантальна" -#: ../plug-ins/print/print-page-layout.c:479 +#: plug-ins/print/print-page-layout.c:498 msgid "Vertically" -msgstr "Вэртыкальна" +msgstr "Вертыкальна" -#: ../plug-ins/print/print-page-layout.c:480 +#: plug-ins/print/print-page-layout.c:499 msgid "Both" msgstr "Па сярэдзіне" -#: ../plug-ins/print/print.c:89 +#: plug-ins/print/print.c:167 +msgid "_Print..." +msgstr "_Друк..." + +#: plug-ins/print/print.c:172 msgid "Print the image" msgstr "Надрукаваць відарыс" -#: ../plug-ins/print/print.c:94 -msgid "_Print..." -msgstr "_Надрукаваць…" +#: plug-ins/print/print.c:191 +msgid "Page Set_up..." +msgstr "Наладка с_таронкі..." -#: ../plug-ins/print/print.c:216 +#: plug-ins/print/print.c:196 +msgid "Adjust page size and orientation for printing" +msgstr "Наладзіць памер і арыентацыю старонкі для друку" + +#: plug-ins/print/print.c:327 msgid "Image Settings" -msgstr "Настройкі відарыса" +msgstr "Налады відарыса" -#: ../plug-ins/print/print.c:267 +#: plug-ins/print/print.c:425 msgid "An error occurred while trying to print:" -msgstr "Здарылася памылка падчас спробы друку:" +msgstr "Падчас спробы друку адбылася памылка:" -#: ../plug-ins/print/print.c:294 +#: plug-ins/print/print.c:452 msgid "Printing" -msgstr "Друкаваньне" +msgstr "Друк" + +#: plug-ins/screenshot/screenshot.c:139 +msgid "_Screenshot..." +msgstr "_Здымак экрана…" + +#: plug-ins/screenshot/screenshot.c:144 +msgid "Create an image from an area of the screen" +msgstr "Стварыць відарыс з вобласці экрана" + +#: plug-ins/screenshot/screenshot.c:509 +#: plug-ins/screenshot/screenshot-x11.c:427 +msgid "Screenshot" +msgstr "Здымак экрана" + +#: plug-ins/screenshot/screenshot.c:514 +msgid "S_nap" +msgstr "_Зняць" + +#. Area +#: plug-ins/screenshot/screenshot.c:541 +msgid "Area" +msgstr "Вобласць" + +#: plug-ins/screenshot/screenshot.c:553 +msgid "Take a screenshot of a single _window" +msgstr "Зрабіць здымак _аднаго акна" + +#: plug-ins/screenshot/screenshot.c:576 +msgid "Include window _decoration" +msgstr "_Улучыць рамку акна" + +#: plug-ins/screenshot/screenshot.c:597 plug-ins/screenshot/screenshot.c:642 +msgid "Include _mouse pointer" +msgstr "Улучыць _указальнік мышы" + +#: plug-ins/screenshot/screenshot.c:619 +msgid "Take a screenshot of the entire _screen" +msgstr "Зрабіць здымак усяго _экрана" + +#: plug-ins/screenshot/screenshot.c:670 +msgid "Select a _region to grab" +msgstr "_Вылучыць вобласць захопу" + +#: plug-ins/screenshot/screenshot.c:688 +msgid "Delay" +msgstr "Затрымка" + +#: plug-ins/screenshot/screenshot.c:708 +msgid "Selection delay: " +msgstr "Затрымка да _вылучэння: " + +#. translators: this is the unit label of a spinbutton +#: plug-ins/screenshot/screenshot.c:724 plug-ins/screenshot/screenshot.c:784 +msgid "seconds" +msgstr "секунд" + +#: plug-ins/screenshot/screenshot.c:737 +msgid "" +"After the delay, drag your mouse to select the region for the screenshot." +msgstr "" +"Пасля затрымкі зацісніце кнопку мышы і перамяшчайце, каб вылучыць вобласць " +"здымкі." + +#: plug-ins/screenshot/screenshot.c:741 +msgid "Click in a window to snap it after delay." +msgstr "Націсніце на акно, каб атрымаць яго здымак пасля затрымкі." + +#: plug-ins/screenshot/screenshot.c:746 +msgid "At the end of the delay, click in a window to snap it." +msgstr "Пасля завяршэння затрымкі, націсніце на акно, каб атрымаць яго здымак." + +#: plug-ins/screenshot/screenshot.c:767 +msgid "Screenshot dela_y: " +msgstr "Затрымка для здымкі экрана: " + +#: plug-ins/screenshot/screenshot.c:795 +msgid "After the delay, the screenshot is taken." +msgstr "Здымак будзе зроблены пасля затрымкі." + +#: plug-ins/screenshot/screenshot.c:797 +msgid "Once the region is selected, it will be captured after this delay." +msgstr "Здымак выбранай вобласці будзе зроблены пасля затрымкі." + +#: plug-ins/screenshot/screenshot.c:802 +msgid "Once the window is selected, it will be captured after this delay." +msgstr "Здымак выбранага акна будзе зроблены пасля затрымкі." + +#: plug-ins/screenshot/screenshot.c:808 +msgid "After the delay, the active window will be captured." +msgstr "Здымак актыўнага акна будзе зроблены пасля затрымкі." + +#: plug-ins/screenshot/screenshot.c:815 +msgid "Color Profile" +msgstr "Колеравы профіль" + +#: plug-ins/screenshot/screenshot.c:820 +msgid "Tag image with _monitor profile" +msgstr "" + +#: plug-ins/screenshot/screenshot.c:824 +msgid "Convert image to sR_GB" +msgstr "_Пераўтварыць відарыс у sRGB" + +#: plug-ins/screenshot/screenshot-win32.c:302 +msgid "No data captured" +msgstr "Даныя не захопленыя" + +#: plug-ins/screenshot/screenshot-x11.c:95 +msgid "Error selecting the window" +msgstr "Памылка падчас выбару акна" + +#: plug-ins/screenshot/screenshot-x11.c:415 +msgid "Importing screenshot" +msgstr "Імпартаванне здымка экрана" + +#: plug-ins/screenshot/screenshot-x11.c:468 +msgid "Mouse Pointer" +msgstr "Указальнік мышы" + +#: plug-ins/screenshot/screenshot-x11.c:626 +msgid "Specified window not found" +msgstr "Пазначанае акно не адшукана" #. printf("width = %d, height = %d\n",BITMAP_WIDTH(marked),BITMAP_HEIGHT(marked)); -#: ../plug-ins/selection-to-path/pxl-outline.c:81 +#: plug-ins/selection-to-path/pxl-outline.c:81 msgid "Selection to Path" -msgstr "Вылучэньне ў шлях" +msgstr "Вылучэнне ў контур" -#: ../plug-ins/selection-to-path/selection-to-path.c:185 +#: plug-ins/selection-to-path/selection-to-path.c:293 msgid "No selection to convert" -msgstr "Няма вылучэньня для ператварэньня" +msgstr "Няма вылучэння для пераўтварэння" -#: ../plug-ins/selection-to-path/selection-to-path.c:302 +#: plug-ins/selection-to-path/selection-to-path.c:407 msgid "Selection to Path Advanced Settings" -msgstr "Дадатковыя настройкі «Вылучэньня ў шлях»" +msgstr "Дадатковыя налады «Вылучэння ў контур»" -#: ../plug-ins/twain/twain.c:86 +#: plug-ins/selection-to-path/selection-to-path-dialog.c:114 +msgid "Align Threshold:" +msgstr "Парог выраўноўвання:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:116 +msgid "If two endpoints are closer than this, they are made to be equal." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:126 +#, fuzzy +#| msgid "Gray Threshold" +msgid "Corner Always Threshold:" +msgstr "Парог шэрага" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:128 +msgid "" +"If the angle defined by a point and its predecessors and successors is " +"smaller than this, it's a corner, even if it's within 'corner_surround' " +"pixels of a point with a smaller angle." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:140 +#, fuzzy +#| msgid "Foreground" +msgid "Corner Surround:" +msgstr "Колеру малявання" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:142 +msgid "" +"Number of points to consider when determining if a point is a corner or not." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:152 +#, fuzzy +#| msgid "Lower t_hreshold:" +msgid "Corner Threshold:" +msgstr "_Ніжні парог:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:154 +msgid "" +"If a point, its predecessors, and its successors define an angle smaller " +"than this, it's a corner." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:165 +#, fuzzy +#| msgid "Threshold:" +msgid "Error Threshold:" +msgstr "Парог:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:167 +msgid "" +"Amount of error at which a fitted spline is unacceptable. If any pixel is " +"further away than this from the fitted curve, we try again." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:179 +msgid "Filter Alternative Surround:" +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:181 +msgid "A second number of adjacent points to consider when filtering." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:191 +#, fuzzy +#| msgid "_Filter length:" +msgid "Filter Epsilon:" +msgstr "_Даўжыня фільтра:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:193 +msgid "" +"If the angles between the vectors produced by filter_surround and " +"filter_alternative_surround points differ by more than this, use the one " +"from filter_alternative_surround." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:205 +#, fuzzy +#| msgid "T_ile saturation:" +msgid "Filter Iteration Count:" +msgstr "_Насычанасць пліткі:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:207 +msgid "" +"Number of times to smooth original data points. Increasing this number " +"dramatically --- to 50 or so --- can produce vastly better results. But if " +"any points that 'should' be corners aren't found, the curve goes to hell " +"around that point." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:220 +#, fuzzy +#| msgid "_Filter length:" +msgid "Filter Percent:" +msgstr "_Даўжыня фільтра:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:222 +msgid "" +"To produce the new point, use the old point plus this times the neighbors." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:232 +msgid "Filter Secondary Surround:" +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:234 +msgid "" +"Number of adjacent points to consider if 'filter_surround' points defines a " +"straight line." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:245 +msgid "Filter Surround:" +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:247 +msgid "Number of adjacent points to consider when filtering." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:257 +msgid "Keep Knees" +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:261 +msgid "Says whether or not to remove 'knee' points after finding the outline." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:271 +#, fuzzy +#| msgid "Deviation threshold:" +msgid "Line Reversion Threshold:" +msgstr "Парог адхілення:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:273 +msgid "" +"If a spline is closer to a straight line than this, it remains a straight " +"line, even if it would otherwise be changed back to a curve. This is " +"weighted by the square of the curve length, to make shorter curves more " +"likely to be reverted." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:286 +msgid "Line Threshold:" +msgstr "Парог лініі:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:288 +msgid "" +"How many pixels (on the average) a spline can diverge from the line " +"determined by its endpoints before it is changed to a straight line." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:299 +msgid "Reparametrize Improvement:" +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:301 +msgid "" +"If reparameterization doesn't improve the fit by this much percent, stop " +"doing it. Amount of error at which it is pointless to reparameterize." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:312 +#, fuzzy +#| msgid "Deviation threshold:" +msgid "Reparametrize Threshold:" +msgstr "Парог адхілення:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:314 +msgid "" +"Amount of error at which it is pointless to reparameterize. This happens, " +"for example, when we are trying to fit the outline of the outside of an 'O' " +"with a single spline. The initial fit is not good enough for the Newton-" +"Raphson iteration to improve it. It may be that it would be better to " +"detect the cases where we didn't find any corners." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:328 +#, fuzzy +#| msgid "Subdivide:" +msgid "Subdivide Search:" +msgstr "Раздзяленне:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:330 +msgid "" +"Percentage of the curve away from the worst point to look for a better place " +"to subdivide." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:340 +#, fuzzy +#| msgid "Subdivide:" +msgid "Subdivide Surround:" +msgstr "Раздзяленне:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:342 +msgid "" +"Number of points to consider when deciding whether a given point is a better " +"place to subdivide." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:353 +#, fuzzy +#| msgid "Threshold:" +msgid "Subdivide Threshold:" +msgstr "Парог:" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:355 +msgid "" +"How many pixels a point can diverge from a straight line and still be " +"considered a better place to subdivide." +msgstr "" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:366 +#, fuzzy +#| msgid "Transparent background" +msgid "Tangent Surround:" +msgstr "Празрысты фон" + +#: plug-ins/selection-to-path/selection-to-path-dialog.c:368 +msgid "" +"Number of points to look at on either side of a point when computing the " +"approximation to the tangent at that point." +msgstr "" + +#: plug-ins/twain/twain.c:86 msgid "Capture an image from a TWAIN datasource" msgstr "Захапіць відарыс з крыніцы TWAIN" -#: ../plug-ins/twain/twain.c:351 +#: plug-ins/twain/twain.c:87 +#, fuzzy +#| msgid "Capture an image from a TWAIN datasource" +msgid "This plug-in will capture an image from a TWAIN datasource" +msgstr "Захапіць відарыс з крыніцы TWAIN" + +#: plug-ins/twain/twain.c:207 msgid "_Scanner/Camera..." -msgstr "_Сканэр/камэра…" +msgstr "_Сканер/камера…" #. Initialize our progress dialog -#: ../plug-ins/twain/twain.c:485 +#: plug-ins/twain/twain.c:521 +#, fuzzy msgid "Transferring data from scanner/camera" -msgstr "Прыймо даньняў са сканэра/камэры" +msgstr "Прыём даных са сканера/камеры" -#: ../plug-ins/win-snap/winsnap.c:871 -msgid "Grab" -msgstr "Захапіць" +#~ msgid "Original" +#~ msgstr "Першапачатковы" -#: ../plug-ins/win-snap/winsnap.c:888 -msgid "Grab a single window" -msgstr "Захапіць адно вакно" +#~ msgid "Rotated" +#~ msgstr "Павернуты" -#: ../plug-ins/win-snap/winsnap.c:902 -msgid "Grab the whole screen" -msgstr "Захапіць увесь экран" +#~ msgid "Continuous update" +#~ msgstr "Пастаяннае абнаўленне" -#: ../plug-ins/win-snap/winsnap.c:918 -msgid "after" -msgstr "пасьля" +#~ msgid "Area:" +#~ msgstr "Вобласць:" -#: ../plug-ins/win-snap/winsnap.c:930 -msgid "Seconds delay" -msgstr "Затрымка (сэкунды)" +#~ msgid "Entire Layer" +#~ msgstr "Увесь слой" -#: ../plug-ins/win-snap/winsnap.c:937 -msgid "Include decorations" -msgstr "Уключыць аздабленьне" +#~ msgid "Context" +#~ msgstr "Кантэкст" -#: ../plug-ins/win-snap/winsnap.c:996 -msgid "Capture a window or desktop image" -msgstr "Захоп вакна або відарыса стальца" +#~ msgctxt "color-range" +#~ msgid "From:" +#~ msgstr "Ад:" -#: ../plug-ins/win-snap/winsnap.c:1001 -msgid "_Screen Shot..." -msgstr "_Здымак экрана…" +#~ msgctxt "color-range" +#~ msgid "To:" +#~ msgstr "Да:" -#: ../plug-ins/win-snap/winsnap.c:1149 -msgid "No data captured" -msgstr "Даньні не захопленыя" +#~ msgctxt "color-rotate" +#~ msgid "From:" +#~ msgstr "З:" + +#~ msgctxt "color-rotate" +#~ msgid "To:" +#~ msgstr "У:" + +#~ msgid "Hue:" +#~ msgstr "Адценне:" + +#~ msgid "Saturation:" +#~ msgstr "Насычанасць:" + +#~ msgid "Gray Mode" +#~ msgstr "Рэжым шэрых колераў" + +#~ msgid "Treat as this" +#~ msgstr "Апрацоўваць як гэты" + +#~ msgid "Change to this" +#~ msgstr "Змяніць у гэты" + +#~ msgid "Units" +#~ msgstr "Адзінкі" + +#~ msgid "Radians/Pi" +#~ msgstr "Радыяны/Pi" + +#~ msgid "Degrees" +#~ msgstr "Градусы" + +#~ msgid "Rotate Colors" +#~ msgstr "Павярнуць колеры" + +#~ msgid "Gray Options" +#~ msgstr "Параметры шэрага" + +#~ msgid "Switch to Clockwise" +#~ msgstr "За стрэлкай" + +#~ msgid "Switch to C/Clockwise" +#~ msgstr "Супраць стрэлкі" + +#~ msgid "Change Order of Arrows" +#~ msgstr "Змяніць парадак стрэлак" + +#~ msgid "Replace a range of colors with another" +#~ msgstr "Замена дыяпазону колераў на іншы" + +#~ msgid "_Rotate Colors..." +#~ msgstr "_Павярнуць колеры…" + +#~ msgid "Rotating the colors" +#~ msgstr "Паварот колераў" + +#~ msgid "_Modify red channel" +#~ msgstr "Змяніць _чырвоны канал" + +#~ msgid "_Modify hue channel" +#~ msgstr "Змяніць канал _адцення" + +#~ msgid "Mo_dify green channel" +#~ msgstr "Змяніць _зялёны канал" + +#~ msgid "Mo_dify saturation channel" +#~ msgstr "Змяніць канал _насычанасці" + +#~ msgid "Mod_ify blue channel" +#~ msgstr "Змяніць _сіні канал" + +#~ msgid "Mod_ify luminosity channel" +#~ msgstr "Змяніць канал _яркасці" + +#~ msgid "Red _frequency:" +#~ msgstr "Частата _чырвонага:" + +#~ msgid "Hue _frequency:" +#~ msgstr "Частата _адцення:" + +#~ msgid "Green fr_equency:" +#~ msgstr "Частата _зялёнага:" + +#~ msgid "Saturation fr_equency:" +#~ msgstr "Частата _насычанасці:" + +#~ msgid "Blue freq_uency:" +#~ msgstr "Частата _сіняга:" + +#~ msgid "Luminosity freq_uency:" +#~ msgstr "Частата _яркасці:" + +#~ msgid "Red _phaseshift:" +#~ msgstr "Зрух фазы _чырвонага:" + +#~ msgid "Hue _phaseshift:" +#~ msgstr "Зрух фазы _адцення:" + +#~ msgid "Green ph_aseshift:" +#~ msgstr "Зрух фазы _зялёнага:" + +#~ msgid "Saturation ph_aseshift:" +#~ msgstr "Зрух фазы _насычанасці:" + +#~ msgid "Blue pha_seshift:" +#~ msgstr "Зрух фазы _сіняга:" + +#~ msgid "Luminosity pha_seshift:" +#~ msgstr "Зрух фазы _яркасці:" + +#~ msgid "Alter colors in various psychedelic ways" +#~ msgstr "Змяніць колеры рознымі псіхадэлічнымі спосабамі" + +#~ msgid "_Alien Map..." +#~ msgstr "_Чужое пераўтварэнне…" + +#~ msgid "Alien Map: Transforming" +#~ msgstr "Адбываецца чужое пераўтварэнне" + +#~ msgid "Alien Map" +#~ msgstr "Чужое пераўтварэнне" + +#~ msgid "Number of cycles covering full value range" +#~ msgstr "Колькасць цыкляў, што расцягваюцца на ўвесь дыяпазон яркасці" + +#~ msgid "Phase angle, range 0-360" +#~ msgstr "Вугал фазы, ад 0 да 360" + +#~ msgid "_RGB color model" +#~ msgstr "Мадэль колераў _RGB" + +#~ msgid "_HSL color model" +#~ msgstr "Мадэль колераў _HSL" + +#~ msgid "_Grid size:" +#~ msgstr "_Памер сеткі:" + +#~ msgid "Reset speed" +#~ msgstr "Вярнуць хуткасць" + +#~ msgid "Tried to display an invalid layer." +#~ msgstr "Спроба паказаць недапушчальны слой." + +#~ msgid "Antialias using the Scale3X edge-extrapolation algorithm" +#~ msgstr "Згладзіць выкарыстоўваючы алгарытм экстрапаляцыі краёў Scale3X" + +#~ msgid "_Antialias" +#~ msgstr "_Згладзіць" + +#~ msgid "Antialiasing..." +#~ msgstr "Згладжванне…" + +#~ msgid "Add a canvas texture to the image" +#~ msgstr "Дадаць да відарыса тэкстуру палатна" + +#~ msgid "_Apply Canvas..." +#~ msgstr "Дадаць палатно" + +#~ msgid "Applying canvas" +#~ msgstr "Дадаванне палатна" + +#~ msgid "Apply Canvas" +#~ msgstr "Дадаванне палатна" + +#~ msgid "_Top-right" +#~ msgstr "_Верхні правы" + +#~ msgid "Top-_left" +#~ msgstr "Верхні _левы" + +#~ msgid "_Bottom-left" +#~ msgstr "_Ніжні левы" + +#~ msgid "Bottom-_right" +#~ msgstr "Ніжні _правы" + +#~ msgid "Blur neighboring pixels, but only in low-contrast areas" +#~ msgstr "Размыць суседнія пікселі, але толькі ў нізкакантрасных абласцях." + +#~ msgid "_Selective Gaussian Blur..." +#~ msgstr "_Селекцыйнае Гаўсаўскае размыццё…" + +#~ msgid "Selective Gaussian Blur" +#~ msgstr "Селекцыйнае Гаўсаўскае размыццё" + +#~ msgid "_Blur radius:" +#~ msgstr "_Радыус размыцця:" + +#~ msgid "_Max. delta:" +#~ msgstr "Макс. дэльта:" + +#~ msgid "Simplest, most commonly used way of blurring" +#~ msgstr "Найпросты, найчасцей ужываны спосаб размывання" + +#~ msgid "_Gaussian Blur..." +#~ msgstr "_Гаўсаўскае размыццё…" + +#~ msgid "Apply a gaussian blur" +#~ msgstr "Ужыць гаўсаўскае размыццё" + +#~ msgid "Gaussian Blur" +#~ msgstr "Гаўсаўскае размыццё" + +#~ msgid "Blur Radius" +#~ msgstr "Радыус размыцця" + +#~ msgid "_Horizontal:" +#~ msgstr "Па _гарызанталі:" + +#~ msgid "_Vertical:" +#~ msgstr "Па _вертыкалі:" + +#~ msgid "Blur Method" +#~ msgstr "Метад размыцця" + +#~ msgid "_IIR" +#~ msgstr "_IIR" + +#~ msgid "Simulate movement using directional blur" +#~ msgstr "Удаць рух, выкарыстоўваючы накіраванае размыццё" + +#~ msgid "_Motion Blur..." +#~ msgstr "_Размыццё руху…" + +#~ msgid "Motion blurring" +#~ msgstr "Размыванне руху" + +#~ msgid "Motion Blur" +#~ msgstr "Размыццё руху" + +#~ msgid "Blur Type" +#~ msgstr "Тып размыцця" + +#~ msgctxt "blur-type" +#~ msgid "_Linear" +#~ msgstr "_Лінейны" + +#~ msgctxt "blur-type" +#~ msgid "_Radial" +#~ msgstr "_Радыяльны" + +#~ msgctxt "blur-type" +#~ msgid "_Zoom" +#~ msgstr "_Набліжэнне" + +#~ msgid "Blur Center" +#~ msgstr "Сярэдзіна размыцця" + +#~ msgid "Blur _outward" +#~ msgstr "Размыццё _навонкі" + +#~ msgid "Blur Parameters" +#~ msgstr "Параметры размыцця" + +#~ msgid "_Angle:" +#~ msgstr "_Вугал:" + +#~ msgid "Simple blur, fast but not very strong" +#~ msgstr "Простае размыццё, хуткае, але не вельмі моцнае" + +#~ msgid "_Blur" +#~ msgstr "_Размыццё" + +#~ msgid "Blurring" +#~ msgstr "Размыванне" + +#~ msgid "Borderaverage" +#~ msgstr "Сярэдняе мяжы" + +#~ msgid "Create an embossing effect using a bump map" +#~ msgstr "Стварыць эфект рэльефу, ужываючы карту паверхні" + +#~ msgid "_Bump Map..." +#~ msgstr "_Карта паверхні…" + +#~ msgid "Bump-mapping" +#~ msgstr "Стварэнне карты паверхні" + +#~ msgid "Bump Map" +#~ msgstr "Карта паверхні" + +#~ msgid "_Bump map:" +#~ msgstr "_Карта паверхні:" + +#~ msgid "_Map type:" +#~ msgstr "_Тып карты:" + +#~ msgid "Co_mpensate for darkening" +#~ msgstr "_Кампэнсаваць зацямненне" + +#~ msgid "_Tile bumpmap" +#~ msgstr "_Замосціць картай" + +#~ msgid "_Azimuth:" +#~ msgstr "_Азімут:" + +#~ msgid "_Elevation:" +#~ msgstr "_Вышыня:" + +#~ msgid "" +#~ "The offset can be adjusted by dragging the preview using the middle mouse " +#~ "button." +#~ msgstr "Зрух можна змяніць, пацягнуўшы агляд сярэдняй кнопкай мышы." + +#~ msgid "_Waterlevel:" +#~ msgstr "_Ровень вады:" + +#~ msgid "A_mbient:" +#~ msgstr "_Навакольле:" + +#~ msgid "Simulate a cartoon by enhancing edges" +#~ msgstr "Удаць карыкатуру, паляпшаючы краі" + +#~ msgid "Ca_rtoon..." +#~ msgstr "_Карыкатура…" + +#~ msgid "Cartoon" +#~ msgstr "Карыкатура" + +#~ msgid "_Mask radius:" +#~ msgstr "_Радыус маскі:" + +#~ msgid "_Percent black:" +#~ msgstr "Працэнт _чорнага:" + +#~ msgid "Alter colors by mixing RGB Channels" +#~ msgstr "Змяніць колеры, перамяшаўшы RGB каналы" + +#~ msgid "Channel Mi_xer..." +#~ msgstr "_Мікшэр каналаў…" + +#~ msgid "Channel Mixer" +#~ msgstr "Мікшэр каналаў" + +#~ msgid "O_utput channel:" +#~ msgstr "_Выходны канал:" + +#~ msgid "_Monochrome" +#~ msgstr "_Манахромны" + +#~ msgid "Preserve _luminosity" +#~ msgstr "_Захоўваць яркасць" + +#~ msgid "Load Channel Mixer Settings" +#~ msgstr "Загрузіць налады мікшэра каналаў" + +#~ msgid "Save Channel Mixer Settings" +#~ msgstr "Захаваць налады мікшэра каналаў" + +#~ msgid "Adding checkerboard" +#~ msgstr "Дабаўленне «шахматнай дошкі»" + +#~ msgid "Analyze the set of colors in the image" +#~ msgstr "Аналізаваць набор колераў відарыса" + +#~ msgid "Colorcube A_nalysis..." +#~ msgstr "_Аналіз кубу колераў…" + +#~ msgid "Colorcube Analysis" +#~ msgstr "Аналіз кубу колераў" + +#~ msgid "No colors" +#~ msgstr "Няма колераў" + +#~ msgid "Only one unique color" +#~ msgstr "Толькі адзін унікальны колер" + +#, c-format +#~ msgid "Number of unique colors: %d" +#~ msgstr "Колькасць унікальных колераў: %d" + +#~ msgid "Stretch color saturation to cover maximum possible range" +#~ msgstr "" +#~ "Расцягнуць насычанасць колеру, каб яна распрасціралася на максімальна " +#~ "магчымы дыяпазон" + +#~ msgid "_Color Enhance" +#~ msgstr "_Палепшыць колеры" + +#~ msgid "Swap one color with another" +#~ msgstr "Абменьвае пэўны колер з іншым" + +#~ msgid "_Color Exchange..." +#~ msgstr "_Абмен колераў…" + +#~ msgid "Color Exchange" +#~ msgstr "Абмен колераў" + +#~ msgid "Middle-Click Inside Preview to Pick \"From Color\"" +#~ msgstr "" +#~ "Пстрыкні сярэдняй кнопкай унутры агляду,\n" +#~ "каб выбраць «З колеру»" + +#~ msgid "To Color" +#~ msgstr "У колер" + +#~ msgid "From Color" +#~ msgstr "З колеру" + +#~ msgid "Color Exchange: To Color" +#~ msgstr "Абмен колераў: з колеру" + +#~ msgid "Color Exchange: From Color" +#~ msgstr "Абмен колераў: у колер" + +#~ msgid "R_ed threshold:" +#~ msgstr "Парог чырвонага:" + +#~ msgid "G_reen threshold:" +#~ msgstr "Парог _зялёнага:" + +#~ msgid "B_lue threshold:" +#~ msgstr "Парог _сіняга:" + +#~ msgid "Lock _thresholds" +#~ msgstr "_Замкнуць парогі" + +#~ msgid "Convert a specified color to transparency" +#~ msgstr "Пераўтварыць вызначаны колер у празрыстасць" + +#~ msgid "Color to _Alpha..." +#~ msgstr "Колер у _альфу…" + +#~ msgid "Removing color" +#~ msgstr "Выдаленне колеру" + +#~ msgid "Color to Alpha" +#~ msgstr "Колер у альфу" + +#~ msgctxt "color-to-alpha" +#~ msgid "From:" +#~ msgstr "З:" + +#~ msgid "Color to Alpha Color Picker" +#~ msgstr "Выбар колеру, які стане празрыстым" + +#~ msgid "to alpha" +#~ msgstr "у альфу" + +#~ msgid "Replace all colors with shades of a specified color" +#~ msgstr "Замена ўсіх колераў на адценні вызначанага колеру" + +#~ msgid "Colorif_y..." +#~ msgstr "_Калярызаваць…" + +#~ msgid "Colorifying" +#~ msgstr "Калярызаванне" + +#~ msgid "Colorify" +#~ msgstr "Калярызаванне" + +#~ msgid "Custom color:" +#~ msgstr "Свой колер:" + +#~ msgid "Colorify Custom Color" +#~ msgstr "Калярызаваць сваім колерам" + +#~ msgid "CMY" +#~ msgstr "CMY" + +#~ msgid "_Luma y470f:" +#~ msgstr "_Яркасць y470f:" + +#~ msgid "_Blueness cb470f:" +#~ msgstr "_Сінь cb470f:" + +#~ msgid "_Redness cr470f:" +#~ msgstr "_Чырвань cr470f:" + +#~ msgid "_Luma y709f:" +#~ msgstr "_Яркасць y709f:" + +#~ msgid "_Blueness cb709f:" +#~ msgstr "_Сінь cb709f:" + +#~ msgid "_Redness cr709f:" +#~ msgstr "_Чырвань cr709f:" + +#, c-format +#~ msgid "Image is not a gray image (bpp=%d)" +#~ msgstr "Відарыс не з'яўляецца шэрым (bpp=%d)" + +#~ msgid "Stretch brightness values to cover the full range" +#~ msgstr "" +#~ "Расцягнуць значэнні яркасці, каб яны распрасціраліся на ўвесь дыяпазон" + +#~ msgid "_Normalize" +#~ msgstr "_Нармалізаваць" + +#~ msgid "Normalizing" +#~ msgstr "Нармалізаванне" + +#~ msgid "_Level:" +#~ msgstr "_Узровень:" + +#~ msgid "_Scale:" +#~ msgstr "_Шкала:" + +#~ msgid "Stretch image contrast to cover the maximum possible range" +#~ msgstr "" +#~ "Расцягнуць кантраст відарыса, каб ён распрасціраўся на максімальна " +#~ "магчымы дыяпазон" + +#~ msgid "Stretch _HSV" +#~ msgstr "_Расцягнуць HSV" + +#~ msgid "Auto-Stretching HSV" +#~ msgstr "Аўтарасцягванне HSV" + +#~ msgid "autostretch_hsv: cmap was NULL! Quitting...\n" +#~ msgstr "autostretch_hsv: cmap быў NULL! Выхад…\n" + +#~ msgid "Stretch contrast to cover the maximum possible range" +#~ msgstr "" +#~ "Расцягнуць кантраст, каб ён распрасціраўся на максімальна магчымы дыяпазон" + +#~ msgid "_Stretch Contrast" +#~ msgstr "_Расцягнуць кантраст" + +#~ msgid "Auto-stretching contrast" +#~ msgstr "Аўтапарасцягванне кантрасту" + +#~ msgid "c_astretch: cmap was NULL! Quitting...\n" +#~ msgstr "c_astretch: cmap быў NULL! Выхад…\n" + +#~ msgid "Gr_ey" +#~ msgstr "_Шэры" + +#~ msgid "Re_d" +#~ msgstr "_Чырвоны" + +#~ msgid "_Green" +#~ msgstr "_Зялёны" + +#~ msgid "_Blue" +#~ msgstr "_Сіні" + +#~ msgid "E_xtend" +#~ msgstr "_Пашырыць" + +#~ msgid "_Wrap" +#~ msgstr "_Загарнуць" + +#~ msgid "Cro_p" +#~ msgstr "_Абрэзаць" + +#~ msgid "Apply a generic 5x5 convolution matrix" +#~ msgstr "Ужыць агульную матрыцу згортвання 5×5" + +#~ msgid "_Convolution Matrix..." +#~ msgstr "_Матрыца згортвання…" + +#~ msgid "Convolution does not work on layers smaller than 3x3 pixels." +#~ msgstr "Згортванне не працуе на слаях, меншых за 3×3 пікселі." + +#~ msgid "Convolution Matrix" +#~ msgstr "Матрыца згортвання" + +#~ msgid "Matrix" +#~ msgstr "Матрыца" + +#~ msgid "D_ivisor:" +#~ msgstr "_Дзельнік:" + +#~ msgid "N_ormalise" +#~ msgstr "_Нармалізаваць" + +#~ msgid "A_lpha-weighting" +#~ msgstr "_Узважваць празрыстасць" + +#~ msgid "Border" +#~ msgstr "Мяжа" + +#~ msgid "Remove empty borders from the image" +#~ msgstr "Выдаліць пустыя межы з відарыса" + +#~ msgid "Remove empty borders from the layer" +#~ msgstr "Выдаліць пустыя межы з слоя" + +#~ msgid "Cropping" +#~ msgstr "Абразанне" + +#~ msgid "Convert the image into randomly rotated square blobs" +#~ msgstr "Пераўтварае відарыс у павернутыя выпадковым чынам квадратныя плямы" + +#~ msgid "_Cubism..." +#~ msgstr "_Кубізм…" + +#~ msgid "Cubism" +#~ msgstr "Кубізм" + +#~ msgid "_Tile size:" +#~ msgstr "_Памер пліткі:" + +#~ msgid "_Use background color" +#~ msgstr "Ужываць колер _фону" + +#~ msgid "Cubistic transformation" +#~ msgstr "Кубістычнае пераўтварэнне" + +#~ msgid "Fix images where every other row is missing" +#~ msgstr "Папраўляе відарысы, ў якіх адсутнічае кожны іншы радок" + +#~ msgid "_Deinterlace..." +#~ msgstr "_Дэінтэрлэйс.." + +#~ msgid "Keep o_dd fields" +#~ msgstr "Пакінуць _няцотныя палі" + +#~ msgid "Keep _even fields" +#~ msgstr "Пакінуць _цотныя палі" + +#~ msgid "_Adaptive" +#~ msgstr "_Адаптыўная" + +#~ msgid "Generate diffraction patterns" +#~ msgstr "Стварае ўзоры пераламлення" + +#~ msgid "_Diffraction Patterns..." +#~ msgstr "_Узоры пераламлення…" + +#~ msgid "Creating diffraction pattern" +#~ msgstr "Стварэнне ўзораў пераламлення" + +#~ msgid "Diffraction Patterns" +#~ msgstr "Узоры пераламлення" + +#~ msgid "Frequencies" +#~ msgstr "Частоты" + +#~ msgid "Sharp Edges" +#~ msgstr "Рэзкія краі" + +#~ msgid "Sc_attering:" +#~ msgstr "_Раскіданне:" + +#~ msgid "Po_larization:" +#~ msgstr "_Палярызацыя:" + +#~ msgid "Other Options" +#~ msgstr "Іншыя параметры" + +#~ msgid "_X displacement" +#~ msgstr "Зрух па _X:" + +#~ msgid "_Pinch" +#~ msgstr "_Шчыпок" + +#~ msgid "_Y displacement" +#~ msgstr "Зрух па _Y:" + +#~ msgid "_Whirl" +#~ msgstr "_Вір" + +#~ msgid "Displace pixels as indicated by displacement maps" +#~ msgstr "Зрушыць пікселі ў адпаведнасцю з картамі зрушэння" + +#~ msgid "_Displace..." +#~ msgstr "_Зрушыць…" + +#~ msgid "Displacing" +#~ msgstr "Зрушэнне" + +#~ msgid "Displace" +#~ msgstr "Зрушэнне" + +#~ msgid "_X displacement:" +#~ msgstr "Зрушэнне па _X:" + +#~ msgid "_Y displacement:" +#~ msgstr "Зрух па _X:" + +#~ msgid "Displacement Mode" +#~ msgstr "Рэжым зрушэння" + +#~ msgid "_Cartesian" +#~ msgstr "_Дэкартаў" + +#~ msgid "_Polar" +#~ msgstr "_Палярны" + +#~ msgid "Edge Behavior" +#~ msgstr "Паводзіны краю" + +#~ msgid "_Smear" +#~ msgstr "_Размазаць" + +#~ msgid "_Black" +#~ msgstr "_Чорны колер" + +#~ msgid "Edge detection with control of edge thickness" +#~ msgstr "Вызначэнне краёў з кантролем таўшчыні краёў" + +#~ msgid "_Difference of Gaussians..." +#~ msgstr "_Рознасць гаўсаўскіх…" + +#~ msgid "DoG Edge Detect" +#~ msgstr "Вызначэнне краёў рознасцю гаўсаўскіх" + +#~ msgid "Smoothing Parameters" +#~ msgstr "Параметры змазвання" + +#~ msgid "_Radius 1:" +#~ msgstr "Радыус _1:" + +#~ msgid "R_adius 2:" +#~ msgstr "Радыус _2:" + +#~ msgid "High-resolution edge detection" +#~ msgstr "Вызначэнне краю з высокім разрозненнем" + +#~ msgid "_Laplace" +#~ msgstr "_Ляпляс" + +#~ msgid "Laplace" +#~ msgstr "Лапласаў" + +#~ msgid "Cleanup" +#~ msgstr "Ачысціць" + +#~ msgid "Simulate the glowing boundary of a neon light" +#~ msgstr "Удаць свячэнне неону" + +#~ msgid "_Neon..." +#~ msgstr "_Нэон…" + +#~ msgid "Neon" +#~ msgstr "Неон" + +#~ msgid "Neon Detection" +#~ msgstr "Вызначэнне неону" + +#~ msgid "_Amount:" +#~ msgstr "_Узровень:" + +#~ msgid "Specialized direction-dependent edge detection" +#~ msgstr "Спецыялізаванае, залежнае ад напрамку вызначэнне краёў" + +#~ msgid "_Sobel..." +#~ msgstr "_Собель…" + +#~ msgid "Sobel Edge Detection" +#~ msgstr "Вызначэнне краёў аператарам Собеля" + +#~ msgid "Sobel _horizontally" +#~ msgstr "Собэль па _гарызанталі" + +#~ msgid "Sobel _vertically" +#~ msgstr "Собэль па _вертыкалі" + +#~ msgid "_Keep sign of result (one direction only)" +#~ msgstr "_Пакінуць знак выніку (толькі адзін напрамак)" + +#~ msgid "Sobel edge detecting" +#~ msgstr "Вызначэнне краёў аператарам Собеля" + +#~ msgid "Several simple methods for detecting edges" +#~ msgstr "Некалькі простых метадаў вызначэння краёў" + +#~ msgid "_Edge..." +#~ msgstr "_Край…" + +#~ msgid "Edge detection" +#~ msgstr "Вызначэнне краю" + +#~ msgid "Edge Detection" +#~ msgstr "Вызначэнне краю" + +#~ msgid "Sobel" +#~ msgstr "Собеля" + +#~ msgid "Prewitt compass" +#~ msgstr "Компас Прувіта" + +#~ msgid "Roberts" +#~ msgstr "Робертса" + +#~ msgid "Differential" +#~ msgstr "Дыферэнцыяльны" + +#~ msgid "_Algorithm:" +#~ msgstr "_Альгарытм:" + +#~ msgid "A_mount:" +#~ msgstr "_Узровень:" + +#~ msgid "Simulate an image created by embossing" +#~ msgstr "Удаць выгляд барэльефа" + +#~ msgid "_Emboss..." +#~ msgstr "_Рэльеф…" + +#~ msgid "Emboss" +#~ msgstr "Рэльеф" + +#~ msgid "Function" +#~ msgstr "Функцыя" + +#~ msgid "_Bumpmap" +#~ msgstr "_Карта паверхні" + +#~ msgid "_Emboss" +#~ msgstr "_Рэльеф" + +#~ msgid "E_levation:" +#~ msgstr "_Вышыня:" + +#~ msgid "Simulate an antique engraving" +#~ msgstr "Удаць антыкварную гравюру" + +#~ msgid "En_grave..." +#~ msgstr "_Гравюра…" + +#~ msgid "Engraving" +#~ msgstr "Гравіраванне" + +#~ msgid "Engrave" +#~ msgstr "Гравюра" + +#~ msgid "_Limit line width" +#~ msgstr "_Абмежаваць шырыню лініі" + +#~ msgid "Op_acity:" +#~ msgstr "_Непразрыстасць:" + +#, c-format +#~ msgid "Invalid header data in '%s': width=%lu, height=%lu, bytes=%lu" +#~ msgstr "" +#~ "Недапушчальныя даныя ў загалоўку «%s»: шырыня=%lu, вышыня=%lu, байтаў=%lu" + +#, c-format +#~ msgid "Invalid UTF-8 string in brush file '%s'." +#~ msgstr "Недапушчальны радок UTF-8 у файле з пэндзлем «%s»." + +#~ msgid "PIKA brushes are either GRAYSCALE or RGBA" +#~ msgstr "Пэндзлі PIKA або ШЭРЫЯ, або RGBA" + +#, c-format +#~ msgid "" +#~ "Error loading UI file '%s':\n" +#~ "%s" +#~ msgstr "" +#~ "Памылка загрузкі файла ІК «%s»:\n" +#~ "%s" + +#, c-format +#~ msgid "The default comment is limited to %d characters." +#~ msgstr "Прадвызначаны каментарый абмежаваны %d знакамі." + +#~ msgid "Error in PIKA brush pipe file." +#~ msgstr "Памылка ў файле з паслядоўнасцю пэндзляў PIKA." + +#~ msgid "PIKA brush file appears to be corrupted." +#~ msgstr "Файл з пэндзлем PIKA, падаецца пашкоджаным!" + +#~ msgid "Couldn't load one brush in the pipe, giving up." +#~ msgstr "Немагчыма загрузіць адзін пэндзаль у паслядоўнасці, пакіданне." + +#, c-format +#~ msgid "" +#~ "The image '%s' is in grayscale but does not contain any gray component." +#~ msgstr "" +#~ "Відарыс «%s» зроблены ў шэрых колерах, але не ўтрымлівае аніякага шэрага " +#~ "складніку." + +#, c-format +#~ msgid "The image '%s' is in RGB, but is missing some of the components." +#~ msgstr "" +#~ "Відарыс «%s» зроблены ў RGB, але ў ім адсутнічаюць некаторыя складнікі." + +#, c-format +#~ msgid "" +#~ "The image '%s' is in the CIEXYZ color space, but there is no code in " +#~ "place to convert it to RGB." +#~ msgstr "" +#~ "Відарыс «%s» зроблены ў прасторы колераў CIEXYZ, але адсутнічае код, каб " +#~ "пераўтварыць яго ў RGB." + +#, c-format +#~ msgid "" +#~ "The image '%s' is in the CIELAB color space, but there is no code in " +#~ "place to convert it to RGB." +#~ msgstr "" +#~ "Відарыс «%s» зроблены ў прасторы колераў CIELAB, але адсутнічае код, каб " +#~ "пераўтварыць яго ў RGB." + +#, c-format +#~ msgid "" +#~ "The image '%s' is in the YCbCr color space, but there is no code in place " +#~ "to convert it to RGB." +#~ msgstr "" +#~ "Відарыс «%s» зроблены ў прасторы колераў YCbCr, але адсутнічае код, каб " +#~ "пераўтварыць яго ў RGB." + +#, c-format +#~ msgid "The image '%s' is in an unknown color space." +#~ msgstr "Відарыс «%s» выкарыстоўвае невядомую прастору колераў." + +#, c-format +#~ msgid "" +#~ "Image component %d of image '%s' does not have the same size as the " +#~ "image. This is currently not supported." +#~ msgstr "" +#~ "Памер складніка %d відарыса «%s» не роўны памеру відарыса, гэта пакуль не " +#~ "падтрымліваецца. " + +#, c-format +#~ msgid "" +#~ "Image component %d of image '%s' does not have both a hstep and vstep." +#~ msgstr "Складнік %d відарыса «%s» не мае адначасова hstep і vstep." + +#, c-format +#~ msgid "" +#~ "Image component %d of image '%s' is signed. This is currently not " +#~ "supported." +#~ msgstr "" +#~ "Складнік %d відарыса «%s» мае знак, гэта пакуль не падтрымліваецца PIKA." + +#~ msgid "Save background color" +#~ msgstr "Захаваць колер фону" + +#~ msgid "Loop" +#~ msgstr "Цыкл" + +#, c-format +#~ msgid "Invalid UTF-8 string in pattern file '%s'." +#~ msgstr "Недапушчальны радок UTF-8 у файле ўзору «%s»." + +#, c-format +#~ msgid "%s-%s" +#~ msgstr "%s-%s" + +#~ msgid "You must select a file to save!" +#~ msgstr "Патрэбна выбраць файл для захоўвання!" + +#, c-format +#~ msgid "Error loading UI file '%s': %s" +#~ msgstr "Памылка загрузкі файла ІК «%s»: %s" + +#~ msgid "Raw" +#~ msgstr "Сыры" + +#~ msgid "Import from PostScript" +#~ msgstr "Імпартаваць з PostScript" + +#~ msgid "Images" +#~ msgstr "Відарысы" + +#~ msgctxt "antialiasing" +#~ msgid "None" +#~ msgstr "Няма" + +#~ msgid "PostScript" +#~ msgstr "PostScript" + +#~ msgid "P_review" +#~ msgstr "_Агляд" + +#~ msgid "Preview _size:" +#~ msgstr "_Памер агляду:" + +#~ msgctxt "compression" +#~ msgid "None" +#~ msgstr "Няма" + +#~ msgid "RGB Alpha" +#~ msgstr "RGB-альфа" + +#~ msgid "Image _Type:" +#~ msgstr "_Тып відарыса:" + +#~ msgid "Off_set:" +#~ msgstr "_Зрух:" + +#~ msgid "Select Palette File" +#~ msgstr "Выберы файл з палітрай" + +#~ msgid "Raw Image" +#~ msgstr "«Сыры» відарыс" + +#~ msgid "RGB Save Type" +#~ msgstr "Тып захавання RGB" + +#~ msgid "Standard (R,G,B)" +#~ msgstr "Стандартны (R,G,B)" + +#~ msgid "Planar (RRR,GGG,BBB)" +#~ msgstr "Плоскі (RRR,GGG,BBB)" + +#~ msgid "Indexed Palette Type" +#~ msgstr "Тып індэксаванай палітры" + +#~ msgid "RunLength Encoded" +#~ msgstr "Закадаваны ў RLE" + +#~ msgid "Or_igin:" +#~ msgstr "_Пачатак:" + +#, c-format +#~ msgid "%s-%d-of-%d-pages" +#~ msgstr "%s-%d-з-%d-старонак" + +#~ msgid "" +#~ "Warning:\n" +#~ "The image you are loading has 16 bits per channel. PIKA can only handle 8 " +#~ "bit, so it will be converted for you. Information will be lost because of " +#~ "this conversion." +#~ msgstr "" +#~ "Увага!\n" +#~ "Відарыс, які ты загружаеш, мае 16 бітаў на канал. PIKA можа апрацоўваць 8 " +#~ "біт, таму ён будзе ператвораны. З-за гэтага пераўтварэння пэўныя звесткі " +#~ "будуць страчаныя." + +#~ msgid "_JPEG" +#~ msgstr "_JPEG" + +#~ msgid "Save _color values from transparent pixels" +#~ msgstr "Захаваць значэнні _колераў празрыстых пікселяў" + +#~ msgid "Comment:" +#~ msgstr "Каментарый:" + +#~ msgid "XBM Options" +#~ msgstr "Параметры XBM" + +#~ msgid "Mask File" +#~ msgstr "Файл маскі" + +#~ msgid "XMC Options" +#~ msgstr "Параметры XMC " + +#~ msgid "_Use this value only for a frame which size is not specified." +#~ msgstr "_Ужываць гэтае значэнне толькі для кадраў, чый памер не вызначаны." + +#~ msgid "_Replace the size of all frames even if it is specified." +#~ msgstr "_Замяніць памер усіх кадраў, нават калі ён вызначаны." + +#~ msgid "_Delay:" +#~ msgstr "_Затрымка:" + +#~ msgid "_Use this value only for a frame which delay is not specified." +#~ msgstr "" +#~ "_Ужываць гэтае значэнне толькі для кадраў, чыя затрымка не вызначаная." + +#~ msgid "_Replace the delay of all frames even if it is specified." +#~ msgstr "_Замяніць затрымку ўсіх кадраў, нават калі яна вызначаная." + +#~ msgid "" +#~ "The part of copyright information that exceeded 65535 characters was " +#~ "removed." +#~ msgstr "" +#~ "Частка звестак пра аўтарскія правы, якая выходзіла за межы 65535 знакаў, " +#~ "была выдаленая." + +#~ msgid "" +#~ "The part of license information that exceeded 65535 characters was " +#~ "removed." +#~ msgstr "" +#~ "Частка звестак пра ліцэнзію, якая выходзіла за межы 65535 знакаў, была " +#~ "выдаленая." + +#, c-format +#~ msgid "Comment is limited to %d characters." +#~ msgstr "Каментарый абмежаваны %d знакамі." + +#, c-format +#~ msgid "" +#~ "The parasite \"%s\" is too long for an X cursor comment. It was cut off " +#~ "to fit." +#~ msgstr "" +#~ "Паразіт «%s» занадта доўгі для каментарыя курсора X. Ён быў абрэзаны." + +#~ msgid "Error during writing indexed/gray image" +#~ msgstr "Памылка падчас запісу індэксаванага/шэрага відарыса." + +#~ msgid "Error during writing rgb image" +#~ msgstr "Памылка падчас запісу RGB відарыса." + +#~ msgid "Cyan:" +#~ msgstr "Цыянавы:" + +#~ msgid "Yellow:" +#~ msgstr "Жоўты:" + +#~ msgid "Magenta:" +#~ msgstr "Маджэнта:" + +#~ msgid "Darker:" +#~ msgstr "Цямней:" + +#~ msgid "Lighter:" +#~ msgstr "святлей:" + +#~ msgid "More Sat:" +#~ msgstr "Болей насыч.:" + +#~ msgid "Less Sat:" +#~ msgstr "Меней насыч.:" + +#~ msgid "Current:" +#~ msgstr "Бягучы:" + +#~ msgid "Interactively modify the image colors" +#~ msgstr "Інтэрактыўна змяніць колеры відарыса" + +#~ msgid "_Filter Pack..." +#~ msgstr "Набор _фільтраў" + +#~ msgid "FP can only be used on RGB images." +#~ msgstr "Набор фільтраў працуе толькі з відарысамі RGB." + +#~ msgid "Applying filter pack" +#~ msgstr "Ужыванне набору фільтраў" + +#~ msgid "Original:" +#~ msgstr "Зыходны:" + +#~ msgid "Hue Variations" +#~ msgstr "Змяненне адцення" + +#~ msgid "Roughness" +#~ msgstr "Рэзкасць" + +#~ msgid "Affected Range" +#~ msgstr "Дыяпазон, на які ўздзейнічае" + +#~ msgid "Sha_dows" +#~ msgstr "_Цені" + +#~ msgid "_Midtones" +#~ msgstr "_Паўтоны" + +#~ msgid "H_ighlights" +#~ msgstr "светлыя ўчасткі" + +#~ msgid "Windows" +#~ msgstr "Вокны" + +#~ msgid "A_dvanced" +#~ msgstr "_Пашыраныя" + +#~ msgid "Value Variations" +#~ msgstr "Змяненне яркасці" + +#~ msgid "Saturation Variations" +#~ msgstr "Змяненне насычанасці" + +#~ msgid "Select Pixels By" +#~ msgstr "Крытэрый выбару пікселяў" + +#~ msgid "H_ue" +#~ msgstr "_Адценне" + +#~ msgid "Satu_ration" +#~ msgstr "_Насычанасць" + +#~ msgid "V_alue" +#~ msgstr "_Яркасць" + +#~ msgid "Show" +#~ msgstr "Паказаць" + +#~ msgid "_Entire image" +#~ msgstr "_Увесь відарыс" + +#~ msgid "Selec_tion in context" +#~ msgstr "_Вылучэнне ў кантэксце" + +#~ msgid "Filter Pack Simulation" +#~ msgstr "Удаванне набору фільтраў" + +#~ msgid "Shadows:" +#~ msgstr "Цені:" + +#~ msgid "Midtones:" +#~ msgstr "Паўтоны:" + +#~ msgid "Highlights:" +#~ msgstr "светлыя ўчасткі:" + +#~ msgid "Advanced Filter Pack Options" +#~ msgstr "Пашыраныя параметры набору фільтраў" + +#~ msgid "Transform image with the Mandelbrot Fractal" +#~ msgstr "Пераўтварыць відарыс фракталам Мандэльброта" + +#~ msgid "_Fractal Trace..." +#~ msgstr "_След фрактала…" + +#~ msgid "Fractal Trace" +#~ msgstr "След фрактала" + +#~ msgid "Outside Type" +#~ msgstr "Звонку" + +#~ msgid "_White" +#~ msgstr "_Белы" + +#~ msgid "Mandelbrot Parameters" +#~ msgstr "Параметры Мандэльброта" + +#~ msgid "X_1:" +#~ msgstr "X_1:" + +#~ msgid "X_2:" +#~ msgstr "X_2:" + +#~ msgid "Y_1:" +#~ msgstr "Y_1:" + +#~ msgid "Y_2:" +#~ msgstr "Y_2:" + +#~ msgid "_Guillotine" +#~ msgstr "_Гільятына" + +#~ msgid "Superimpose many altered copies of the image" +#~ msgstr "Накласці шмат змененых копій відарыса" + +#~ msgid "_Illusion..." +#~ msgstr "_Міраж…" + +#~ msgid "Illusion" +#~ msgstr "Міраж" + +#~ msgid "_Divisions:" +#~ msgstr "_Частак:" + +#~ msgid "Mode _2" +#~ msgstr "Рэжым _2" + +#~ msgid "Use mouse control to warp image areas" +#~ msgstr "Выкарыстоўвай мыш, каб скрывіць вобласці відарыса" + +#~ msgid "_IWarp..." +#~ msgstr "_І-Скрыўленне…" + +#~ msgid "Warping" +#~ msgstr "Скрыўленне" + +#, c-format +#~ msgid "Warping Frame %d" +#~ msgstr "Скрыўленне кадра %d" + +#~ msgid "Ping pong" +#~ msgstr "Пінг-понг" + +#~ msgid "Region affected by plug-in is empty" +#~ msgstr "Вобласць, якую апрацоўвае дадатак, пустая" + +#~ msgid "A_nimate" +#~ msgstr "_Анімаваць" + +#~ msgid "Number of _frames:" +#~ msgstr "_Колькасць кадраў:" + +#~ msgid "R_everse" +#~ msgstr "_Зваротны" + +#~ msgid "_Ping pong" +#~ msgstr "_Пінг-понг" + +#~ msgid "_Animate" +#~ msgstr "_Анімаваць" + +#~ msgid "Deform Mode" +#~ msgstr "Рэжым скрыўлення" + +#~ msgid "_Move" +#~ msgstr "_Перасунуць" + +#~ msgid "_Grow" +#~ msgstr "_Павялічыць" + +#~ msgid "S_wirl CCW" +#~ msgstr "Спіральны (сс)" + +#~ msgid "Remo_ve" +#~ msgstr "_Прыбраць" + +#~ msgid "S_hrink" +#~ msgstr "_Зменшыць" + +#~ msgid "Sw_irl CW" +#~ msgstr "С_піральны (ЗC)" + +#~ msgid "_Deform radius:" +#~ msgstr "Радыус _дэфармацыі:" + +#~ msgid "D_eform amount:" +#~ msgstr "_Ровень дэфармавацыі:" + +#~ msgid "_Bilinear" +#~ msgstr "_Білінейны" + +#~ msgid "Adaptive s_upersample" +#~ msgstr "Адаптыўная _інтэрпаляцыя" + +#~ msgid "Thresho_ld:" +#~ msgstr "_Парог:" + +#~ msgid "IWarp" +#~ msgstr "І-Скрыўленне" + +#~ msgid "" +#~ "Click and drag in the preview to define the distortions to apply to the " +#~ "image." +#~ msgstr "Пстрыкні і пацягні ў вакне агляду, каб вызначыць скажэнні відарыса." + +#~ msgid "_Bevel width:" +#~ msgstr "_Шырыня скосу:" + +#~ msgid "H_ighlight:" +#~ msgstr "_Падсвечванне:" + +#~ msgid "Each piece has straight sides" +#~ msgstr "Кожны кавалак мае роўныя бакі" + +#~ msgid "Each piece has curved sides" +#~ msgstr "Кожны кавалак мае крывыя бакі" + +#~ msgid "_Assign Color Profile..." +#~ msgstr "_Прызначыць профіль колераў…" + +#~ msgid "Assign default RGB Profile" +#~ msgstr "Прызначыць прадвызначаны профіль RGB" + +#~ msgid "Apply a color profile on the image" +#~ msgstr "Ужыць профіль колераў да відарыса" + +#~ msgid "_Convert to Color Profile..." +#~ msgstr "_Пераўтварыць у профіль колераў…" + +#~ msgid "Convert to default RGB Profile" +#~ msgstr "Пераўтварыць у прадвызначаны RGB-профіль" + +#~ msgid "Image Color Profile Information" +#~ msgstr "Звесткі аб профілі колераў відарыса" + +#~ msgid "Color Profile Information" +#~ msgstr "Звесткі аб профілі колераў" + +#, c-format +#~ msgid "Color profile '%s' is not for RGB color space." +#~ msgstr "Профіль колераў '%s' не ў прасторы RGB." + +#~ msgid "Default RGB working space" +#~ msgstr "Прадвызначаная працоўная прастора RGB" + +#~ msgid "" +#~ "Data attached as 'icc-profile' does not appear to be an ICC color profile" +#~ msgstr "Даныя, далучаныя як профіль ICC, не з'яўляюцца ім" + +#, c-format +#~ msgid "'%s' does not appear to be an ICC color profile" +#~ msgstr "'%s' не з'яўляецца профілем колераў ICC" + +#, c-format +#~ msgid "Converting from '%s' to '%s'" +#~ msgstr "Пераўтварэнне '%s' у '%s'" + +#, c-format +#~ msgid "Could not load ICC profile from '%s'" +#~ msgstr "Не ўдалося загрузіць профіль ICC з '%s'" + +#, c-format +#~ msgid "The image '%s' has an embedded color profile:" +#~ msgstr "Відарыс '%s' мае ўбудаваны профіль колераў:" + +#, c-format +#~ msgid "Convert the image to the RGB working space (%s)?" +#~ msgstr "Ці пераўтварыць відарыс у працоўную прастору RGB (%s)?" + +#~ msgid "Convert to RGB working space?" +#~ msgstr "Ці пераўтварыць у колеравую прастору RGB?" + +#~ msgid "_Keep" +#~ msgstr "_Пакінуць" + +#~ msgid "_Convert" +#~ msgstr "_Пераўтварыць" + +#~ msgid "_Don't ask me again" +#~ msgstr "_Болей не пытаць" + +#~ msgid "Select destination profile" +#~ msgstr "Выберы канчатковы профіль" + +#~ msgid "All files (*.*)" +#~ msgstr "Усе файлы (*.*)" + +#~ msgid "ICC color profile (*.icc, *.icm)" +#~ msgstr "Профіль колераў ICC (*.icc, *.icm)" + +#, c-format +#~ msgid "RGB workspace (%s)" +#~ msgstr "Рабочая прастора RGB (%s)" + +#~ msgid "Convert to ICC Color Profile" +#~ msgstr "Пераўтварыць у профіль колераў ICC" + +#~ msgid "Assign ICC Color Profile" +#~ msgstr "Прызначыць профіль колераў ICC" + +#~ msgid "_Assign" +#~ msgstr "_Прызначыць" + +#~ msgid "Current Color Profile" +#~ msgstr "Бягучы профіль колераў" + +#~ msgid "Convert to" +#~ msgstr "Пераўтварыць у" + +#~ msgid "Assign" +#~ msgstr "Прызначыць" + +#~ msgid "_Rendering Intent:" +#~ msgstr "_Мэта перадачы колеру: " + +#~ msgid "_Black Point Compensation" +#~ msgstr "_Кампэнсацыя чорнага пункту" + +#~ msgid "Destination profile is not for RGB color space." +#~ msgstr "Мэтавы профіль не прызначаны для прасторы RGB." + +#~ msgid "Simulate an elliptical lens over the image" +#~ msgstr "Удаваць эліптычную лінзу над відарысам" + +#~ msgid "Apply _Lens..." +#~ msgstr "Ужыць _лінзу…" + +#~ msgid "Applying lens" +#~ msgstr "Ужыванне лінзы" + +#~ msgid "Lens Effect" +#~ msgstr "Эфект лінзы" + +#~ msgid "_Keep original surroundings" +#~ msgstr "_Пакінуць пачатковае акружэнне" + +#~ msgid "_Set surroundings to index 0" +#~ msgstr "Устанавіць для акружэння каэфіцыент 0" + +#~ msgid "_Set surroundings to background color" +#~ msgstr "_Запоўніць акружэнне колерам фону" + +#~ msgid "_Lens refraction index:" +#~ msgstr "_Каэфіцыент пераламлення лінзы:" + +#~ msgid "Corrects lens distortion" +#~ msgstr "Карэктуе скажэнні ад лінзы" + +#~ msgid "Lens Distortion..." +#~ msgstr "Скажэнне лінзай…" + +#~ msgid "Lens distortion" +#~ msgstr "Скажэнне лінзай" + +#~ msgid "Lens Distortion" +#~ msgstr "Скажэнне лінзай" + +#~ msgid "_Main:" +#~ msgstr "_Галоўнае:" + +#~ msgid "_Edge:" +#~ msgstr "_Край:" + +#~ msgid "_Brighten:" +#~ msgstr "_Асветліць:" + +#~ msgid "_X shift:" +#~ msgstr "Зрух па _X:" + +#~ msgid "_Y shift:" +#~ msgstr "Зрух па _Y:" + +#~ msgid "Add a lens flare effect" +#~ msgstr "Дадае эфект светларассеяння ў аб'ектыве" + +#~ msgid "Lens _Flare..." +#~ msgstr "_светларассеянне…" + +#~ msgid "Render lens flare" +#~ msgstr "Стварэнне светларассеяння" + +#~ msgid "Lens Flare" +#~ msgstr "светларассеянне ў аб'ектыве" + +#~ msgid "Center of Flare Effect" +#~ msgstr "Цэнтр эфекту" + +#~ msgid "Show _position" +#~ msgstr "Паказаць _становішча" + +#~ msgid "_Filename:" +#~ msgstr "_Назва файла:" + +#~ msgid "Reduce image to pure red, green, and blue" +#~ msgstr "Зменшыць відарыс да чыстых чырвонага, зялёнага і сіняга" + +#~ msgid "Maxim_um RGB..." +#~ msgstr "_Найбольшы з RGB…" + +#~ msgid "Can only operate on RGB drawables." +#~ msgstr "Працуе толькі на аб'ектах малявання ў RGB." + +#~ msgid "Max RGB" +#~ msgstr "Найбольшы з RGB" + +#~ msgid "Maximum RGB Value" +#~ msgstr "Найбольшае значэнне RGB" + +#~ msgid "_Hold the maximal channels" +#~ msgstr "Пакінуць най_большы канал" + +#~ msgid "Ho_ld the minimal channels" +#~ msgstr "Пакінуць най_меншы канал" + +#~ msgid "Convert the image into irregular tiles" +#~ msgstr "Пераўтварае відарыс у мазаіку, складзеную з няроўных плітак" + +#~ msgid "_Mosaic..." +#~ msgstr "_Мазаіка…" + +#~ msgid "Finding edges" +#~ msgstr "Пошук краёў" + +#~ msgid "Rendering tiles" +#~ msgstr "Стварэнне плітак" + +#~ msgid "Mosaic" +#~ msgstr "Мазаіка" + +#~ msgid "Squares" +#~ msgstr "Квадраты" + +#~ msgid "Hexagons" +#~ msgstr "Шасцікутнікі" + +#~ msgid "Octagons & squares" +#~ msgstr "Васмікутнікі і квадраты" + +#~ msgid "Triangles" +#~ msgstr "Трохкутнікі" + +#~ msgid "_Tiling primitives:" +#~ msgstr "Прымітывы п_літак:" + +#~ msgid "Tile _size:" +#~ msgstr "_Памер плітак:" + +#~ msgid "Tile _neatness:" +#~ msgstr "_Акуратнасць плітак:" + +#~ msgid "Light _direction:" +#~ msgstr "Напрамак святла:" + +#~ msgid "Color _variation:" +#~ msgstr "_Варыяцыя колераў:" + +#~ msgid "Co_lor averaging" +#~ msgstr "_Спасярэджаныя колеры" + +#~ msgid "Allo_w tile splitting" +#~ msgstr "_Дазволіць падзел плітак" + +#~ msgid "_Pitted surfaces" +#~ msgstr "Рабінкі _на паверхні" + +#~ msgid "_FG/BG lighting" +#~ msgstr "Асвятл_енне ПП/Асн." + +#~ msgid "Round" +#~ msgstr "Акружнасць" + +#~ msgid "PS Square (Euclidean Dot)" +#~ msgstr "PS квадрат (Эўклідава кропка)" + +#~ msgid "PS Diamond" +#~ msgstr "PS ромб" + +#~ msgid "_Grey" +#~ msgstr "_Шэры" + +#~ msgid "R_ed" +#~ msgstr "_Чырвоны" + +#~ msgid "C_yan" +#~ msgstr "_Блакітны" + +#~ msgid "Magen_ta" +#~ msgstr "Пурпуровы" + +#~ msgid "_Yellow" +#~ msgstr "_Жоўты" + +#~ msgid "Luminance" +#~ msgstr "Яркасць" + +#~ msgid "Halftone the image to give newspaper-like effect" +#~ msgstr "" +#~ "Зрабіць паўтонавы відарыс, каб атрымаць эфект падабенства да газеты " + +#~ msgid "Newsprin_t..." +#~ msgstr "_Газетная папера…" + +#~ msgid "Newsprint" +#~ msgstr "Газетная папера" + +#~ msgid "_Spot function:" +#~ msgstr "_Функцыя плямаў:" + +#~ msgid "_Input SPI:" +#~ msgstr "_В/Ц спачатку:" + +#~ msgid "O_utput LPI:" +#~ msgstr "_Р/Ц вынікова:" + +#~ msgid "C_ell size:" +#~ msgstr "_Памер ячэйкі:" + +#~ msgid "B_lack pullout (%):" +#~ msgstr "Выхад _чорнага (%):" + +#~ msgid "Separate to:" +#~ msgstr "Падзяліць на:" + +#~ msgid "_RGB" +#~ msgstr "_RGB" + +#~ msgid "C_MYK" +#~ msgstr "C_MYK" + +#~ msgid "I_ntensity" +#~ msgstr "_Інтэнсіўнасць" + +#~ msgid "_Lock channels" +#~ msgstr "_Замкнуць каналы" + +#~ msgid "_Factory Defaults" +#~ msgstr "_Вярнуць прадвызначаныя" + +#~ msgid "O_versample:" +#~ msgstr "_Перадыскрэтызацыя:" + +#~ msgid "A_lpha:" +#~ msgstr "_Альфа:" + +#~ msgid "Randomize hue/saturation/value independently" +#~ msgstr "Перамяшаць адценне/насычанасць/яркасць паасобку" + +#~ msgid "HSV Noise..." +#~ msgstr "Шум HSV…" + +#~ msgid "HSV Noise" +#~ msgstr "Шум HSV" + +#~ msgid "_Holdness:" +#~ msgstr "_Стрымліванне:" + +#~ msgid "H_ue:" +#~ msgstr "_Адценне:" + +#~ msgid "Random Hurl" +#~ msgstr "Адвольны кідок" + +#~ msgid "Random Pick" +#~ msgstr "Адвольны выбар" + +#~ msgid "Random Slur" +#~ msgstr "Адвольнае раставанне" + +#~ msgid "Completely randomize a fraction of pixels" +#~ msgstr "Цалкам адвольная доля пікселяў" + +#~ msgid "Randomly interchange some pixels with neighbors" +#~ msgstr "Адвольны абмяняць некаторыя пікселі з іхнімі суседзямі" + +#~ msgid "Randomly slide some pixels downward (similar to melting)" +#~ msgstr "Адвольна саслізгнуць крыху пікселяў уніз (падобна на раставанне)" + +#~ msgid "_Hurl..." +#~ msgstr "_Кідок…" + +#~ msgid "_Pick..." +#~ msgstr "_Выбар…" + +#~ msgid "_Slur..." +#~ msgstr "_Неахайны…" + +#~ msgid "_Random seed:" +#~ msgstr "_Адвольны лік:" + +#~ msgid "R_andomization (%):" +#~ msgstr "Адвольнасць (%):" + +#~ msgid "Percentage of pixels to be filtered" +#~ msgstr "Працэнт пікселяў, якія трэба адфільтраваць" + +#~ msgid "R_epeat:" +#~ msgstr "_Паўтараць:" + +#~ msgid "Distort colors by random amounts" +#~ msgstr "Адвольна сказіць колеры" + +#~ msgid "_RGB Noise..." +#~ msgstr "Шум _RGB…" + +#~ msgid "Adding noise" +#~ msgstr "Дабаўленне шуму" + +#~ msgid "RGB Noise" +#~ msgstr "Шум RGB" + +#~ msgid "Co_rrelated noise" +#~ msgstr "_Карэляцыйны шум" + +#~ msgid "_Independent RGB" +#~ msgstr "_Незалежныя RGB" + +#~ msgid "_Gray:" +#~ msgstr "_Шэры:" + +#, c-format +#~ msgid "Channel #%d:" +#~ msgstr "Канал #%d:" + +#~ msgid "Create a random cloud-like texture" +#~ msgstr "Стварыць выпадковую тэкстуру, падобную на воблака" + +#~ msgid "_Solid Noise..." +#~ msgstr "_Суцэльны шум…" + +#~ msgid "Solid Noise" +#~ msgstr "Суцэльны шум" + +#~ msgid "_Detail:" +#~ msgstr "_Падрабязнасці:" + +#~ msgid "T_urbulent" +#~ msgstr "_Узбураны" + +#~ msgid "T_ilable" +#~ msgstr "_Прыдатны для замошчвання" + +#~ msgid "_X size:" +#~ msgstr "Памер па _X:" + +#~ msgid "_Y size:" +#~ msgstr "Памер па _Y:" + +#~ msgid "Move pixels around randomly" +#~ msgstr "Адвольна ва ўсе бакі пасунуць пікселі" + +#~ msgid "Sp_read..." +#~ msgstr "_Раскідаць…" + +#~ msgid "Spreading" +#~ msgstr "Раскідванне" + +#~ msgid "Spread" +#~ msgstr "Раскідванне" + +#~ msgid "Spread Amount" +#~ msgstr "Узровень раскідання" + +#~ msgid "Add a starburst to the image" +#~ msgstr "Дадаць выбух зоркі да відарыса" + +#~ msgid "Super_nova..." +#~ msgstr "_Звышновая…" + +#~ msgid "Rendering supernova" +#~ msgstr "Стварэнне звышновай" + +#~ msgid "Supernova" +#~ msgstr "Звышновая" + +#~ msgid "Supernova Color Picker" +#~ msgstr "Выбар колеру звышновай" + +#~ msgid "_Spokes:" +#~ msgstr "_Промняў:" + +#~ msgid "R_andom hue:" +#~ msgstr "Выпадковае _адценне:" + +#~ msgid "Center of Nova" +#~ msgstr "Цэнтр Новай" + +#~ msgid "Smear colors to simulate an oil painting" +#~ msgstr "Размазаць колеры, каб удаць маляванне алеем" + +#~ msgid "Oili_fy..." +#~ msgstr "_Малюнак алеем…" + +#~ msgid "Oil painting" +#~ msgstr "Маляванне алеем" + +#~ msgid "Oilify" +#~ msgstr "Малюнак алеем" + +#~ msgid "_Mask size:" +#~ msgstr "Памер _маскі:" + +#~ msgid "Use m_ask-size map:" +#~ msgstr "Ужываць карту _памераў маскі:" + +#~ msgid "_Exponent:" +#~ msgstr "_Паказнік ступені:" + +#~ msgid "Use e_xponent map:" +#~ msgstr "Ужываць карту _ступеняў:" + +#~ msgid "_Use intensity algorithm" +#~ msgstr "_Ужываць альгарытм яркасці" + +#~ msgid "Simulate color distortion produced by a copy machine" +#~ msgstr "Удаць скажэнне колераў, створанае капіявальнай машынай" + +#~ msgid "_Photocopy..." +#~ msgstr "_Фатакопія…" + +#~ msgid "_Sharpness:" +#~ msgstr "_Рэзкасць:" + +#~ msgid "Percent _black:" +#~ msgstr "Працэнт _чорнага:" + +#~ msgid "Percent _white:" +#~ msgstr "Працэнт _белага:" + +#~ msgid "Simplify image into an array of solid-colored squares" +#~ msgstr "Спросціць відарыс да масыву суцэльна пафарбаваных квадратаў" + +#~ msgid "_Pixelize..." +#~ msgstr "_Пікселізаваць…" + +#~ msgid "Pixelizing" +#~ msgstr "Пікселізаванне" + +#~ msgid "Pixelize" +#~ msgstr "Пікселізаваць" + +#~ msgid "Pixel _width:" +#~ msgstr "_Шырыня пікселя:" + +#~ msgid "Pixel _height:" +#~ msgstr "_Вышыня пікселя:" + +#~ msgid "Create a random plasma texture" +#~ msgstr "Стварыць адвольную тэкстуру плазмы" + +#~ msgid "_Plasma..." +#~ msgstr "_Плазма…" + +#~ msgid "Plasma" +#~ msgstr "Плазма" + +#~ msgid "Random _seed:" +#~ msgstr "Адвольны _лік:" + +#~ msgid "T_urbulence:" +#~ msgstr "_Узбуранасць:" + +#~ msgid "Convert image to or from polar coordinates" +#~ msgstr "Пераўтварыць у палярныя каардынаты (або з п.к.)." + +#~ msgid "P_olar Coordinates..." +#~ msgstr "_Палярныя каардынаты…" + +#~ msgid "Polar Coordinates" +#~ msgstr "Палярныя каардынаты" + +#~ msgid "Circle _depth in percent:" +#~ msgstr "_Глыбіня акружнасці (%):" + +#~ msgid "Offset _angle:" +#~ msgstr "_Вугал зруху:" + +#~ msgid "_Map backwards" +#~ msgstr "_Задам наперад" + +#~ msgid "" +#~ "If checked the mapping will begin at the right side, as opposed to " +#~ "beginning at the left." +#~ msgstr "" +#~ "Калі задзейнічана, праектаванне пачнецца з правага боку, калі не, то з " +#~ "левага" + +#~ msgid "Map from _top" +#~ msgstr "_Пачаць зверху" + +#~ msgid "" +#~ "If unchecked the mapping will put the bottom row in the middle and the " +#~ "top row on the outside. If checked it will be the opposite." +#~ msgstr "" +#~ "Калі не задзейнічана, праектаванне перанясе ніжні радок у сярэдзіну, а " +#~ "верхні вонкі. Калі задзейнічана, то наадварот." + +#~ msgid "To _polar" +#~ msgstr "У _палярныя" + +#~ msgid "" +#~ "If unchecked the image will be circularly mapped onto a rectangle. If " +#~ "checked the image will be mapped onto a circle." +#~ msgstr "" +#~ "Калі не задзейнічана, відарыс будзе кругла спраектаваны на прастакутнік. " +#~ "Калі задзейнічана, то на кола." + +#~ msgid "Remove the red eye effect caused by camera flashes" +#~ msgstr "Прыбірае эфект чырвоных вачэй з-за ўспышкі фотаапарата" + +#~ msgid "_Red Eye Removal..." +#~ msgstr "_Выдаліць чырвоныя вочы…" + +#~ msgid "Red Eye Removal" +#~ msgstr "Выдаленне чырвоных вачэй" + +#~ msgid "Threshold for the red eye color to remove." +#~ msgstr "Парог для выдалення чырвоных вачэй." + +#~ msgid "Manually selecting the eyes may improve the results." +#~ msgstr "Ручны выбар вачэй можа палепшыць вынік." + +#~ msgid "Removing red eye" +#~ msgstr "Выдаленне чырвоных вачэй" + +#~ msgid "Displace pixels in a ripple pattern" +#~ msgstr "Зрушыць пікселі, каб атрымаць эфект рабізны" + +#~ msgid "_Ripple..." +#~ msgstr "_Рабізна…" + +#~ msgid "Rippling" +#~ msgstr "Пакрыванне рабізной" + +#~ msgid "Ripple" +#~ msgstr "Рабізна" + +#~ msgid "_Retain tilability" +#~ msgstr "_Ёсць пліткай мазайкі" + +#~ msgid "Edges" +#~ msgstr "Краі" + +#~ msgid "_Blank" +#~ msgstr "_Чысты" + +#~ msgid "Wave Type" +#~ msgstr "Тып хвалі" + +#~ msgid "Saw_tooth" +#~ msgstr "_Зуб пілы" + +#~ msgid "S_ine" +#~ msgstr "_Сінусная" + +#~ msgid "_Period:" +#~ msgstr "_Пэрыяд:" + +#~ msgid "Phase _shift:" +#~ msgstr "Зрух _фазы:" + +#~ msgid "You can not rotate the whole image if there's a selection." +#~ msgstr "Немагчыма павярнуць увесь відарыс, які мае вылучаную вобласць." + +#~ msgid "You can not rotate the whole image if there's a floating selection." +#~ msgstr "Немагчыма павярнуць увесь відарыс, які мае плаваючае вылучэнне." + +#~ msgid "Sorry, channels and masks can not be rotated." +#~ msgstr "На жаль каналы і маскі нельга паварочваць." + +#~ msgid "_Semi-Flatten" +#~ msgstr "_Псэўда-сплюшчыць" + +#~ msgid "Semi-Flattening" +#~ msgstr "Псэўда-сплюшчванне" + +#~ msgid "Make image sharper (less powerful than Unsharp Mask)" +#~ msgstr "Зрабіць відарыс больш рэзкім (не такі моцны, як «Нярэзкая маска»)" + +#~ msgid "_Sharpen..." +#~ msgstr "_Рэзкасць…" + +#~ msgid "Sharpening" +#~ msgstr "Павелічэнне рэзкасці" + +#~ msgid "Sharpen" +#~ msgstr "Рэзкасць" + +#~ msgid "Shift each row of pixels by a random amount" +#~ msgstr "Адвольна зрушыць кожны радок пікселяў" + +#~ msgid "_Shift..." +#~ msgstr "_Зрушэнне…" + +#~ msgid "Shifting" +#~ msgstr "Зрушэнне" + +#~ msgid "Shift" +#~ msgstr "Зрушэнне" + +#~ msgid "Shift _horizontally" +#~ msgstr "Зрушыць па _гарызанталі" + +#~ msgid "Shift _vertically" +#~ msgstr "Зрушыць па _вертыкалі" + +#~ msgid "Shift _amount:" +#~ msgstr "На колькі зрушыць:" + +#~ msgid "Generate complex sinusoidal textures" +#~ msgstr "Згенераваць складаныя сінусныя тэкстуры" + +#~ msgid "_Sinus..." +#~ msgstr "_Сінус…" + +#~ msgid "Sinus: rendering" +#~ msgstr "Сінус: пабудова" + +#~ msgid "Sinus" +#~ msgstr "Сінус" + +#~ msgid "Drawing Settings" +#~ msgstr "Налады малявання" + +#~ msgid "_X scale:" +#~ msgstr "Памер па _X:" + +#~ msgid "_Y scale:" +#~ msgstr "Памер па _Y:" + +#~ msgid "Co_mplexity:" +#~ msgstr "С_кладанасць:" + +#~ msgid "Calculation Settings" +#~ msgstr "Налады разліку" + +#~ msgid "R_andom seed:" +#~ msgstr "_Адвольны лік" + +#~ msgid "_Force tiling?" +#~ msgstr "_Мазаіка?" + +#~ msgid "_Ideal" +#~ msgstr "_Ідэальны" + +#~ msgid "_Distorted" +#~ msgstr "_Скажоны" + +#~ msgid "The colors are white and black." +#~ msgstr "Колеры — чорны і белы" + +#~ msgid "Bl_ack & white" +#~ msgstr "_Чорны і белы" + +#~ msgid "_Foreground & background" +#~ msgstr "_Колеры малявання і фону" + +#~ msgid "First color" +#~ msgstr "Першы колер" + +#~ msgid "Second color" +#~ msgstr "Другі колер" + +#~ msgid "Alpha Channels" +#~ msgstr "Альфа-каналы" + +#~ msgid "F_irst color:" +#~ msgstr "_Першы колер:" + +#~ msgid "S_econd color:" +#~ msgstr "_Другі колер:" + +#~ msgid "Blend Settings" +#~ msgstr "Налады градыенту" + +#~ msgid "L_inear" +#~ msgstr "_Лінейны" + +#~ msgid "Bili_near" +#~ msgstr "_Білінейны" + +#~ msgid "Sin_usoidal" +#~ msgstr "_Сінусны" + +#~ msgid "_Blend" +#~ msgstr "_Градыент" + +#~ msgid "Do _preview" +#~ msgstr "_Агляд" + +#~ msgid "Simulate glow by making highlights intense and fuzzy" +#~ msgstr "Удаць зарава, зрабіўшы падсвечаныя месцы яркімі і змякчанымі" + +#~ msgid "_Softglow..." +#~ msgstr "_Мяккае зарава…" + +#~ msgid "Softglow" +#~ msgstr "Мяккае зарава" + +#~ msgid "_Glow radius:" +#~ msgstr "_Радыус зарава:" + +#~ msgid "_Foreground color" +#~ msgstr "Колер _малявання" + +#~ msgid "Use the color of the image" +#~ msgstr "Ужываць колер відарыса" + +#~ msgid "Use the foreground color" +#~ msgstr "Ужываць колер малявання" + +#~ msgid "Make transparency all-or-nothing" +#~ msgstr "Зрабіць празрыстым або ўсё, або нічога" + +#~ msgid "_Threshold Alpha..." +#~ msgstr "_Парог празрыстасці…" + +#~ msgid "The layer has its alpha channel locked." +#~ msgstr "Альфа-канал слоя заблакаваны." + +#~ msgid "RGBA/GRAYA drawable is not selected." +#~ msgstr "Не выбраны абшар малявання RGBA/GRAYA." + +#~ msgid "Coloring transparency" +#~ msgstr "Фарбаванне празрыстасці" + +#~ msgid "Threshold Alpha" +#~ msgstr "Парог празрыстасці" + +#~ msgid "Simulate distortion caused by square glass tiles" +#~ msgstr "Удае скажэнне, выкліканае квадратнымі празрыстымі пліткамі" + +#~ msgid "_Glass Tile..." +#~ msgstr "_Празрыстыя пліткі…" + +#~ msgid "Glass Tile" +#~ msgstr "Празрыстыя пліткі" + +#~ msgid "Paper Tile" +#~ msgstr "Папяровыя шматкі" + +#~ msgid "Division" +#~ msgstr "Дзяленне" + +#~ msgid "Fractional Pixels" +#~ msgstr "Частковыя пікселі" + +#~ msgid "_Background" +#~ msgstr "_Асноведз" + +#~ msgid "_Ignore" +#~ msgstr "_Ігнараваць" + +#~ msgid "_Force" +#~ msgstr "_Прымусова" + +#~ msgid "C_entering" +#~ msgstr "_Цэнтраванне" + +#~ msgid "Movement" +#~ msgstr "Рух" + +#~ msgid "_Max (%):" +#~ msgstr "_Макс. (%):" + +#~ msgid "Background Type" +#~ msgstr "Тып фону" + +#~ msgid "I_nverted image" +#~ msgstr "_Інвертаваны відарыс" + +#~ msgid "Im_age" +#~ msgstr "_Відарыс" + +#~ msgid "Fo_reground color" +#~ msgstr "_Колер малявання" + +#~ msgid "Bac_kground color" +#~ msgstr "_Колер фону" + +#~ msgid "S_elect here:" +#~ msgstr "_Выбраць тут:" + +#~ msgid "Background Color" +#~ msgstr "Колер фону" + +#~ msgid "Cut image into paper tiles, and slide them" +#~ msgstr "Парэзаць відарыс на папяровыя шматкі і скласці іх" + +#~ msgid "September 31, 1999" +#~ msgstr "31 верасня 1999" + +#~ msgid "_Paper Tile..." +#~ msgstr "_Папяровыя шматкі…" + +#~ msgid "Alters edges to make the image seamlessly tileable" +#~ msgstr "" +#~ "Змяніць краі, каб зрабіць відарыс, прыдатным для замошчвання без швоў" + +#~ msgid "_Make Seamless" +#~ msgstr "_Сшыць без швоў" + +#~ msgid "Tiler" +#~ msgstr "Замошчвальнік" + +#~ msgid "The most widely useful method for sharpening an image" +#~ msgstr "" +#~ "Спосаб павелічэння рэзкасці відарыса, які найчасцей выкарыстоўваецца" + +#~ msgid "_Unsharp Mask..." +#~ msgstr "_Нярэзкая маска…" + +#~ msgid "Merging" +#~ msgstr "Аб'яднанне" + +#~ msgid "Unsharp Mask" +#~ msgstr "Нярэзкая маска" + +#~ msgid "Invert the brightness of each pixel" +#~ msgstr "Інвертаваць яркасць кожнага пікселя" + +#~ msgid "_Value Invert" +#~ msgstr "_Інвертаваць яркасць" + +#~ msgid "Value Invert" +#~ msgstr "Інвертаванне яркасці" + +#~ msgid "More _white (larger value)" +#~ msgstr "Больш _белага (большае значэнне)" + +#~ msgid "More blac_k (smaller value)" +#~ msgstr "Больш _чорнага (меншае значэнне)" + +#~ msgid "_Middle value to peaks" +#~ msgstr "_Сярэднія значэнні на пікі" + +#~ msgid "_Foreground to peaks" +#~ msgstr "_Колер малявання на пікі" + +#~ msgid "O_nly foreground" +#~ msgstr "Толькі колер _малявання" + +#~ msgid "Only b_ackground" +#~ msgstr "Толькі колер _фону" + +#~ msgid "Mor_e opaque" +#~ msgstr "Больш _непразрысты" + +#~ msgid "More t_ransparent" +#~ msgstr "Больш _празрысты" + +#~ msgid "Propagate certain colors to neighboring pixels" +#~ msgstr "Распаўсюдзіць пэўныя колеры на суседнія пікселі" + +#~ msgid "_Value Propagate..." +#~ msgstr "_Распаўсюдзіць значэнні…" + +#~ msgid "Shrink lighter areas of the image" +#~ msgstr "Зменшыць святлейшыя вобласці відарыса" + +#~ msgid "E_rode" +#~ msgstr "_Разесці…" + +#~ msgid "Grow lighter areas of the image" +#~ msgstr "Павялічыць святлейшыя вобласці відарыса" + +#~ msgid "_Dilate" +#~ msgstr "_Пашырыць" + +#~ msgid "Value Propagate" +#~ msgstr "Распаўсюд значэнняў" + +#~ msgid "Propagate" +#~ msgstr "Распаўсюд" + +#~ msgid "_Upper threshold:" +#~ msgstr "_Верхні парог:" + +#~ msgid "_Propagating rate:" +#~ msgstr "_Ступень:" + +#~ msgid "To l_eft" +#~ msgstr "У_лева" + +#~ msgid "To _right" +#~ msgstr "У_права" + +#~ msgid "To _top" +#~ msgstr "Ув_ерх" + +#~ msgid "Propagating _alpha channel" +#~ msgstr "Распаўсюд _альфа-каналу" + +#~ msgid "Propagating value channel" +#~ msgstr "Распаўсюд каналу значэння" + +#~ msgid "_Staggered" +#~ msgstr "У _шахматным парадку" + +#~ msgid "_Large staggered" +#~ msgstr "_Вялікі ў шахматным парадку" + +#~ msgid "S_triped" +#~ msgstr "_Паласаты" + +#~ msgid "_Wide-striped" +#~ msgstr "_Шырокапалосы" + +#~ msgid "Lo_ng-staggered" +#~ msgstr "_Доўгі ў шахматным парадку" + +#~ msgid "_3x3" +#~ msgstr "_3×3" + +#~ msgid "Larg_e 3x3" +#~ msgstr "_Вялікі 3×3" + +#~ msgid "_Hex" +#~ msgstr "Шасцікутны" + +#~ msgid "_Dots" +#~ msgstr "_Кропкі" + +#~ msgid "Simulate distortion produced by a fuzzy or low-res monitor" +#~ msgstr "" +#~ "Удаць скажэнне, выкліканае ненастаўленым або нізкаразрозневым маніторам" + +#~ msgid "Vi_deo..." +#~ msgstr "_Відэа…" + +#~ msgid "Video" +#~ msgstr "Відэа" + +#~ msgid "Video Pattern" +#~ msgstr "Узор відэа" + +#~ msgid "_Rotated" +#~ msgstr "_Павернуты" + +#~ msgid "Distort the image with waves" +#~ msgstr "Сказіць відарыс хвалямі" + +#~ msgid "_Waves..." +#~ msgstr "_Хвалі…" + +#~ msgid "_Reflective" +#~ msgstr "_Адбітыя" + +#~ msgid "_Amplitude:" +#~ msgstr "_Амплітуда:" + +#~ msgid "_Phase:" +#~ msgstr "_Фаза:" + +#~ msgid "_Wavelength:" +#~ msgstr "_Даўжыня хвалі:" + +#~ msgid "Waving" +#~ msgstr "Стварэнне хваль" + +#~ msgid "_Create" +#~ msgstr "_Стварыць" + +#~ msgid "Distort an image by whirling and pinching" +#~ msgstr "Скрывіць відарыс віраваннямі і шчыпаннямі" + +#~ msgid "W_hirl and Pinch..." +#~ msgstr "Вір і _шчыпок…" + +#~ msgid "Whirling and pinching" +#~ msgstr "Віраванне і шчыпанне" + +#~ msgid "Whirl and Pinch" +#~ msgstr "Вір і шчыпок" + +#~ msgid "_Whirl angle:" +#~ msgstr "_Вугал віравання:" + +#~ msgid "_Pinch amount:" +#~ msgstr "Моц шчыпання:" + +#~ msgid "Smear image to give windblown effect" +#~ msgstr "Змазвае відарыс, каб стварыць эфект ветру" + +#~ msgid "Wi_nd..." +#~ msgstr "_Вецер…" + +#~ msgid "Rendering blast" +#~ msgstr "Стварэнне парыву ветру" + +#~ msgid "Wind" +#~ msgstr "Вецер" + +#~ msgid "Style" +#~ msgstr "Стыль" + +#~ msgid "_Wind" +#~ msgstr "_Вецер" + +#~ msgid "_Blast" +#~ msgstr "_Парыў" + +#~ msgid "_Left" +#~ msgstr "_Левы" + +#~ msgid "_Right" +#~ msgstr "_Правы" + +#~ msgid "Edge Affected" +#~ msgstr "Закрануты край" + +#~ msgid "L_eading" +#~ msgstr "_Пярэдні" + +#~ msgid "Tr_ailing" +#~ msgstr "_Задні" + +#~ msgid "Bot_h" +#~ msgstr "_Абодва" + +#~ msgid "Higher values restrict the effect to fewer areas of the image" +#~ msgstr "Большыя значэнні абмяжоўваюць эфект да меншых абласцей відарыса" + +#~ msgid "Higher values increase the magnitude of the effect" +#~ msgstr "Большыя значэнні павялічваюць велічыню эфекту" + +#~ msgid "_Advanced Options" +#~ msgstr "_Дадатковыя параметры" + +#~ msgid "24 bits" +#~ msgstr "24 біты" + +#~ msgid "32 bits" +#~ msgstr "32 біты" + +#~ msgid "Load FITS File" +#~ msgstr "Загрузіць файла FITS" + +#~ msgid "Image Composing" +#~ msgstr "Складанне відарыса" + +#~ msgctxt "composing" +#~ msgid "None" +#~ msgstr "Няма" + +#~ msgid "Sorry, I can save only INDEXED and GRAY images." +#~ msgstr "На жаль магчыма захоўваць толькі індэксаваныя і шэрыя відарысы." + +#~ msgid "GFLI 1.3 - Load framestack" +#~ msgstr "GFLI 1.3 - Загрузка стосу кадраў" + +#~ msgctxt "frame-range" +#~ msgid "From:" +#~ msgstr "Ад:" + +#~ msgctxt "frame-range" +#~ msgid "To:" +#~ msgstr "Да:" + +#~ msgid "GFLI 1.3" +#~ msgstr "GFLI 1.3" + +#~ msgid "_Keep Orientation" +#~ msgstr "_Пакінуць напрамак" + +#~ msgid "According to the EXIF data, this image is rotated." +#~ msgstr "У адпаведнасці з данымі EXIF, відарыс павернуты" + +#~ msgid "Would you like PIKA to rotate it into the standard orientation?" +#~ msgstr "Ці жадаеш каб PIKA павярнуў яго да стандартнага напрамку?" + +#~ msgid "_Optimize" +#~ msgstr "_Аптымізаваць" + +#~ msgid "Save _thumbnail" +#~ msgstr "Захаваць _мініяцюру" + +#~ msgid "4:2:2 horizontal (chroma halved)" +#~ msgstr "4:2:2 гарызантальны (палова насычанасці)" + +#~ msgid "Sa_ve Defaults" +#~ msgstr "За_хаваць прадвызначаныя" + +#, c-format +#~ msgid "" +#~ "Unable to save layer with mode '%s'. Either the PSD file format or the " +#~ "save plug-in does not support that, using normal mode instead." +#~ msgstr "" +#~ "Немагчыма захаваць слой з рэжымам «%s». Або фармат файла PSD, або дадатак " +#~ "захоўвання не падтрымліваюць такога, выкарыстаны нармальны рэжым." + +#~ msgid "SGI" +#~ msgstr "SGI" + +#, c-format +#~ msgid "Downloading image (%s of %s)" +#~ msgstr "Загрузка відарыса (%s з %s)" + +#, c-format +#~ msgid "Downloaded %s of image data" +#~ msgstr "Загружана %s даных відарыса" + +#, c-format +#~ msgid "Uploaded %s of image data" +#~ msgstr "Даслана %s даных відарыса" + +#~ msgid "Connecting to server" +#~ msgstr "Злучэнне з серверам" + +#~ msgid "Could not initialize libcurl" +#~ msgstr "Не ўдалося ініцыялізаваць libcurl" + +#, c-format +#~ msgid "Downloading %s of image data" +#~ msgstr "Загрузка %s даных відарыса" + +#, c-format +#~ msgid "Opening '%s' for reading resulted in %s response code: %ld" +#~ msgstr "Пры адкрыцці «%s» для чытання атрыманы %s выніковы код: %ld" + +#, c-format +#~ msgid "wget exited abnormally on URI '%s'" +#~ msgstr "ненармальны вынік wget на URI «%s»" + +#, c-format +#~ msgid "(timeout is %d second)" +#~ msgid_plural "(timeout is %d seconds)" +#~ msgstr[0] "(затрымка — %d секунда)" +#~ msgstr[1] "(затрымка — %d секунды)" +#~ msgstr[2] "(затрымка — %d секундаў)" + +#~ msgid "Opening URI" +#~ msgstr "Адкрыццё URI" + +#, c-format +#~ msgid "A network error occurred: %s" +#~ msgstr "Сеткавая памылка: %s" + +#~ msgid "Downloading unknown amount of image data" +#~ msgstr "Загрузка невядомай колькасці даных відарыса" + +#~ msgid "URI" +#~ msgstr "URI" + +#, c-format +#~ msgid "XJT file contains unknown layermode %d" +#~ msgstr "Файл XJT утрымлівае невядомы рэжым слоя %d." + +#, c-format +#~ msgid "Warning: unsupported layermode %d saved to XJT" +#~ msgstr "Да ўвагі: рэжым слоя %d не падтрымліваецца, але запісаны ў XJT" + +#, c-format +#~ msgid "Warning: unsupported pathtype %d saved to XJT" +#~ msgstr "Да ўвагі: тып шляху %d не падтрымліваецца, але запісаны ў XJT" + +#, c-format +#~ msgid "XJT file contains unknown unittype %d" +#~ msgstr "Файл XJT утрымлівае невядомы тып адзінкі %d" + +#, c-format +#~ msgid "Warning: unsupported unittype %d saved to XJT" +#~ msgstr "Да ўвагі: тып адзінкі %d не падтрымліваецца, але запісаны ў XJT" + +#~ msgid "XJT" +#~ msgstr "XJT" + +#~ msgid "Clear transparent" +#~ msgstr "Ачысціць празрыстыя вобласці" + +#~ msgid "Smoothing:" +#~ msgstr "Змазванне:" + +#, c-format +#~ msgid "Could not create working folder '%s': %s" +#~ msgstr "Не ўдалося выдаліць працоўную папку '%s': %s" + +#, c-format +#~ msgid "Error: Could not read XJT property file '%s'." +#~ msgstr "Памылка: не ўдалося прачытаць файл уласцівасцяў XJT «%s»." + +#, c-format +#~ msgid "Error: XJT property file '%s' is empty." +#~ msgstr "Памылка: файл уласцівасцяў XJT «%s» пусты." + +#~ msgid "Flame works only on RGB drawables." +#~ msgstr "Язык полымя працуе толькі на абшарах малявання RGB." + +#~ msgid "_Clear" +#~ msgstr "_Ачысціць" + +#~ msgid "Create bezier curve" +#~ msgstr "Стварыць крывуе бэзе" + +#~ msgid "The selection does not intersect the active layer or mask." +#~ msgstr "Вылучэнне не перасякае актыўны слой ці маску." + +#~ msgid "I_nterlace" +#~ msgstr "_Празрадковы" + +#~ msgid "GIF Options" +#~ msgstr "Параметры GIF" + +#~ msgid "Save _resolution" +#~ msgstr "Захаваць _разрозненне" + +#~ msgid "S_ave Defaults" +#~ msgstr "За_хаваць прадвызначэнні" + +#, c-format +#~ msgid "The name `%s' is used already!" +#~ msgstr "Назва «%s» ужо выкарыстоўваецца!" + +#~ msgid "Go back one page" +#~ msgstr "На старонку назад" + +#~ msgid "Go forward one page" +#~ msgstr "На старонку наперад" + +#~ msgid "Copy the location of this page to the clipboard" +#~ msgstr "Скапіяваць шлях да файла гэтай старонкі у буфер абмену" + +#~ msgid "Find text in current page" +#~ msgstr "Шукаць тэкст на бягучай старонцы" + +#~ msgid "Toggle the visibility of the sidebar" +#~ msgstr "Пераключыць бачнасць бакавой панэлі" + +#~ msgid "Select _All" +#~ msgstr "Вылучыць _усё" + +#~ msgid "Re_center" +#~ msgstr "_Перацэнтраваць" + +#~ msgid "_Open..." +#~ msgstr "_Адкрыць…" + +#~ msgid "_Save..." +#~ msgstr "_Захаваць…" + +#~ msgid "_Zoom" +#~ msgstr "_Набліжэнне" + +#~ msgid "Constructing maze using Prim's Algorithm" +#~ msgstr "Стварэнне лабірынту паводле алгарытму Прыма" + +#~ msgid "Constructing tileable maze using Prim's Algorithm" +#~ msgstr "" +#~ "Пабудова паводле алгарытму Прыма лабірынта, прыдатнага для замошчвання" + +#~ msgid "Maze" +#~ msgstr "Лабірынт" + +#~ msgid "Maze Size" +#~ msgstr "Памер лабірынту" + +#~ msgid "Pieces:" +#~ msgstr "Кавалкаў:" + +#~ msgid "Height (pixels):" +#~ msgstr "Вышыня (у пікселях):" + +#~ msgid "Algorithm" +#~ msgstr "Алгарытм" + +#, c-format +#~ msgid "Error on line %d char %d: %s" +#~ msgstr "Памылка ў радку %d знак %d: %s" + +#, c-format +#~ msgid "Expected text or optional element <%s>, found <%s> instead" +#~ msgstr "Чакаўся тэкст ці неабавязковы элемент <%s>, але знойдзены <%s>" + +#, c-format +#~ msgid "Expected element <%s>, found <%s> instead" +#~ msgstr "Чакаўся элемент <%s>, але знойдзены <%s>" + +#, c-format +#~ msgid "Unknown attribute \"%s\"=\"%s\" in element <%s>" +#~ msgstr "Невядомы атрыбут \"%s\"=\"%s\" элемента <%s>" + +#, c-format +#~ msgid "Required attribute rdf:about missing in <%s>" +#~ msgstr "Патрэбны атрыбут rdf:about адсутнічае ў <%s>" + +#, c-format +#~ msgid "Nested elements (<%s>) are not allowed in this context" +#~ msgstr "Укладзеныя элементы (<%s>) не дапушчаюцца ў гэтым кантэксце" + +#, c-format +#~ msgid "End of element <%s> not expected in this context" +#~ msgstr "Канец элемента <%s> не чакаўся ў гэтым кантэксце" + +#, c-format +#~ msgid "The current element (<%s>) cannot contain text" +#~ msgstr "Бягучы элемент (<%s>) не можа ўтрымліваць тэкст" + +#~ msgid "XMP packets must start with " +#~ msgstr "Пакункі XMP мусяць пачынацца з " + +#~ msgid "XMP packets must end with " +#~ msgstr "Пакункі XMP мусяць сканчацца на " + +#~ msgid "XMP cannot contain XML comments or processing instructions" +#~ msgstr "XMP не можа ўтрымліваць каментарыі XML або загады апрацоўкі" + +#~ msgid "Grab" +#~ msgstr "Захапіць" + +#~ msgid "Grab a single window" +#~ msgstr "Захапіць адно вакно" + +#~ msgid "Grab the whole screen" +#~ msgstr "Захапіць увесь экран" + +#~ msgid "after" +#~ msgstr "пасля" + +#~ msgid "Seconds delay" +#~ msgstr "Затрымка (секунды)" + +#~ msgid "Include decorations" +#~ msgstr "Уключыць аздабленне" + +#~ msgid "_Screen Shot..." +#~ msgstr "_Здымак экрана…" diff --git a/po-plug-ins/ca.po b/po-plug-ins/ca.po index 7da36ee..2463689 100644 --- a/po-plug-ins/ca.po +++ b/po-plug-ins/ca.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: ca\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-07-22 22:21+0000\n" +"POT-Creation-Date: 2023-10-21 01:50+0000\n" "PO-Revision-Date: 2023-07-25 10:17+0100\n" "Last-Translator: Jordi Mas i Hernàndez \n" "Language-Team: Catalan \n" @@ -34,26 +34,26 @@ msgid "Exercise a goat in the C language" msgstr "Entrena una cabra en el llenguatge C" #: extensions/goat-exercises/goat-exercise-c.c:150 -#: plug-ins/common/blinds.c:202 plug-ins/common/border-average.c:186 -#: plug-ins/common/checkerboard.c:177 plug-ins/common/cml-explorer.c:558 -#: plug-ins/common/compose.c:557 plug-ins/common/contrast-retinex.c:253 -#: plug-ins/common/crop-zealous.c:151 plug-ins/common/curve-bend.c:665 -#: plug-ins/common/decompose.c:376 plug-ins/common/depth-merge.c:307 -#: plug-ins/common/despeckle.c:232 plug-ins/common/destripe.c:182 -#: plug-ins/common/gradient-map.c:216 plug-ins/common/grid.c:283 -#: plug-ins/common/hot.c:311 plug-ins/common/jigsaw.c:473 -#: plug-ins/common/nl-filter.c:224 plug-ins/common/qbist.c:253 -#: plug-ins/common/sample-colorize.c:431 plug-ins/common/smooth-palette.c:208 -#: plug-ins/common/sparkle.c:307 plug-ins/common/sphere-designer.c:3179 -#: plug-ins/common/tile.c:220 plug-ins/common/tile-small.c:308 -#: plug-ins/common/van-gogh-lic.c:913 plug-ins/common/warp.c:375 -#: plug-ins/common/wavelet-decompose.c:182 plug-ins/file-dds/dds.c:519 -#: plug-ins/flame/flame.c:241 plug-ins/fractal-explorer/fractal-explorer.c:399 +#: 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/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/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/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/fractal-explorer/fractal-explorer.c:427 #: plug-ins/gfig/gfig.c:215 plug-ins/pikaressionist/pika.c:178 -#: plug-ins/gradient-flare/gradient-flare.c:935 -#: plug-ins/ifs-compose/ifs-compose.c:541 plug-ins/imagemap/imap_main.c:636 -#: plug-ins/lighting/lighting-main.c:404 -#: plug-ins/map-object/map-object-main.c:496 plug-ins/pagecurl/pagecurl.c:302 +#: 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/lighting/lighting-main.c:756 +#: plug-ins/map-object/map-object-main.c:532 plug-ins/pagecurl/pagecurl.c:299 #, c-format msgid "Procedure '%s' only works with one drawable." msgstr "El procediment «%s» només funciona amb un dibuixable." @@ -67,51 +67,38 @@ msgstr "Entrena 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:1348 -#: plug-ins/common/cml-explorer.c:2114 plug-ins/common/cml-explorer.c:2247 -#: plug-ins/common/colormap-remap.c:704 plug-ins/common/compose.c:1183 -#: plug-ins/common/curve-bend.c:1203 plug-ins/common/curve-bend.c:1977 -#: plug-ins/common/curve-bend.c:2012 plug-ins/common/depth-merge.c:734 -#: plug-ins/common/file-cel.c:1001 plug-ins/common/file-gif-save.c:1164 -#: plug-ins/common/file-heif.c:2351 plug-ins/common/file-pdf-load.c:709 -#: plug-ins/common/file-pdf-save.c:1113 plug-ins/common/file-svg.c:839 -#: plug-ins/common/file-wmf.c:546 plug-ins/common/film.c:1323 -#: plug-ins/common/grid.c:761 plug-ins/common/qbist.c:848 -#: plug-ins/common/qbist.c:890 plug-ins/common/qbist.c:944 -#: plug-ins/common/smooth-palette.c:511 plug-ins/common/sphere-designer.c:2287 -#: plug-ins/common/sphere-designer.c:2632 plug-ins/common/tile.c:492 -#: plug-ins/common/tile-small.c:446 plug-ins/common/unit-editor.c:439 -#: plug-ins/common/van-gogh-lic.c:709 plug-ins/common/warp.c:490 -#: plug-ins/common/web-page.c:278 plug-ins/file-tiff/file-tiff-load.c:2553 -#: plug-ins/flame/flame.c:540 plug-ins/flame/flame.c:716 -#: plug-ins/flame/flame.c:1033 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:561 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1631 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1669 -#: plug-ins/fractal-explorer/fractal-explorer.c:875 -#: plug-ins/fractal-explorer/fractal-explorer.c:1269 +#: 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/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/fractal-explorer/fractal-explorer-dialogs.c:1540 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1578 +#: plug-ins/fractal-explorer/fractal-explorer.c:887 +#: plug-ins/fractal-explorer/fractal-explorer.c:1390 #: plug-ins/gfig/gfig-dialog.c:354 plug-ins/gfig/gfig-dialog.c:781 #: plug-ins/gfig/gfig-dialog.c:831 plug-ins/pikaressionist/brush.c:270 -#: plug-ins/pikaressionist/pikaressionist.c:142 #: plug-ins/pikaressionist/orientmap.c:528 #: plug-ins/pikaressionist/presets.c:642 plug-ins/pikaressionist/sizemap.c:401 -#: plug-ins/gradient-flare/gradient-flare.c:2517 -#: plug-ins/gradient-flare/gradient-flare.c:3367 -#: plug-ins/gradient-flare/gradient-flare.c:3479 -#: plug-ins/ifs-compose/ifs-compose.c:962 -#: plug-ins/ifs-compose/ifs-compose.c:2608 -#: plug-ins/ifs-compose/ifs-compose.c:2645 plug-ins/imagemap/imap_browse.c:80 +#: 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/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:1038 plug-ins/lighting/lighting-ui.c:1163 -#: plug-ins/lighting/lighting-ui.c:1307 -#: plug-ins/map-object/map-object-ui.c:1317 -#: plug-ins/metadata/metadata-editor.c:1181 -#: plug-ins/metadata/metadata-editor.c:1677 -#: plug-ins/metadata/metadata-editor.c:5306 -#: plug-ins/metadata/metadata-editor.c:5341 plug-ins/pagecurl/pagecurl.c:496 -#: plug-ins/screenshot/screenshot.c:513 -#: plug-ins/selection-to-path/selection-to-path.c:413 +#: 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 msgid "_Cancel" msgstr "_Cancel·la" @@ -162,29 +149,19 @@ msgstr "Exercita 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:1349 plug-ins/common/colormap-remap.c:705 -#: plug-ins/common/compose.c:1184 plug-ins/common/curve-bend.c:1204 -#: plug-ins/common/depth-merge.c:735 plug-ins/common/file-heif.c:2352 -#: plug-ins/common/file-pdf-load.c:710 plug-ins/common/file-svg.c:840 -#: plug-ins/common/file-wmf.c:547 plug-ins/common/film.c:1324 -#: plug-ins/common/grid.c:762 plug-ins/common/qbist.c:945 -#: plug-ins/common/smooth-palette.c:512 plug-ins/common/sphere-designer.c:2633 -#: plug-ins/common/tile.c:493 plug-ins/common/tile-small.c:447 -#: plug-ins/common/unit-editor.c:268 plug-ins/common/van-gogh-lic.c:710 -#: plug-ins/common/warp.c:491 plug-ins/file-psd/psd-load.c:3533 +#: 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/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/fractal-explorer/fractal-explorer-dialogs.c:562 -#: plug-ins/fractal-explorer/fractal-explorer.c:1270 -#: plug-ins/pikaressionist/pikaressionist.c:143 +#: 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:2518 -#: plug-ins/gradient-flare/gradient-flare.c:3480 -#: plug-ins/ifs-compose/ifs-compose.c:963 +#: plug-ins/gradient-flare/gradient-flare.c:3446 +#: plug-ins/ifs-compose/ifs-compose.c:909 #: plug-ins/imagemap/imap_default_dialog.c:109 -#: plug-ins/lighting/lighting-ui.c:1039 -#: plug-ins/map-object/map-object-ui.c:1318 plug-ins/pagecurl/pagecurl.c:497 -#: plug-ins/selection-to-path/selection-to-path.c:414 msgid "_OK" msgstr "_D'acord" @@ -318,8 +295,10 @@ msgstr "Base ver_tical" msgid "_Grid" msgstr "_Quadrícula" -#: plug-ins/common/align-layers.c:223 plug-ins/common/grid.c:757 -#: plug-ins/gfig/gfig-dialog.c:1360 plug-ins/imagemap/imap_main.c:1927 +#: plug-ins/common/align-layers.c:223 plug-ins/common/grid.c:782 +#: plug-ins/gfig/gfig-dialog.c:1360 plug-ins/gfig/gfig-menu.ui:31 +#: plug-ins/imagemap/imap_main.c:1555 plug-ins/imagemap/imap-menu.ui:197 +#: plug-ins/imagemap/imap-menu.ui:289 msgid "Grid" msgstr "Quadrícula" @@ -339,67 +318,73 @@ msgstr "_Utilitza la capa (invisible) inferior com a base" msgid "Use the (invisible) bottom layer as the base" msgstr "_Utilitza la capa (invisible) inferior com a base" -#: plug-ins/common/align-layers.c:291 +#: plug-ins/common/align-layers.c:287 msgid "There are not enough layers to align." msgstr "No hi ha prou capes per a alinear." -#: plug-ins/common/align-layers.c:739 +#: plug-ins/common/align-layers.c:731 msgid "Align Visible Layers" msgstr "Alinea les capes visibles" #. Text antialiasing #. Graphics antialiasing #. file save type -#: plug-ins/common/align-layers.c:748 plug-ins/common/align-layers.c:766 -#: plug-ins/common/file-ps.c:3745 plug-ins/common/file-ps.c:3753 -#: plug-ins/common/file-psp.c:840 plug-ins/file-tiff/file-tiff-save.c:1322 -#: plug-ins/metadata/metadata-tags.c:204 plug-ins/metadata/metadata-tags.c:216 -#: plug-ins/metadata/metadata-tags.c:247 +#: 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/fractal-explorer/fractal-explorer.c:344 +#: plug-ins/fractal-explorer/fractal-explorer.c:354 +#: plug-ins/fractal-explorer/fractal-explorer.c:364 +#: plug-ins/lighting/lighting-main.c:200 plug-ins/lighting/lighting-main.c:323 +#: plug-ins/lighting/lighting-main.c:382 plug-ins/lighting/lighting-main.c:441 +#: plug-ins/lighting/lighting-main.c:500 plug-ins/lighting/lighting-main.c:559 +#: plug-ins/metadata/metadata-tags.c:211 plug-ins/metadata/metadata-tags.c:223 +#: plug-ins/metadata/metadata-tags.c:254 msgid "None" msgstr "Cap" -#: plug-ins/common/align-layers.c:749 plug-ins/common/align-layers.c:767 +#: plug-ins/common/align-layers.c:741 plug-ins/common/align-layers.c:759 msgid "Collect" msgstr "Recull" -#: plug-ins/common/align-layers.c:750 +#: plug-ins/common/align-layers.c:742 msgid "Fill (left to right)" msgstr "Omple (d'esquerra a dreta)" -#: plug-ins/common/align-layers.c:751 +#: plug-ins/common/align-layers.c:743 msgid "Fill (right to left)" msgstr "Omple (de dreta a esquerra)" -#: plug-ins/common/align-layers.c:752 plug-ins/common/align-layers.c:770 +#: plug-ins/common/align-layers.c:744 plug-ins/common/align-layers.c:762 msgid "Snap to grid" msgstr "Ajusta a la quadrícula" -#: plug-ins/common/align-layers.c:758 +#: plug-ins/common/align-layers.c:750 msgid "Left edge" msgstr "Vora esquerra" -#: plug-ins/common/align-layers.c:759 plug-ins/common/align-layers.c:777 -#: plug-ins/gradient-flare/gradient-flare.c:2878 +#: plug-ins/common/align-layers.c:751 plug-ins/common/align-layers.c:769 +#: plug-ins/gradient-flare/gradient-flare.c:2919 msgid "Center" msgstr "Centre" -#: plug-ins/common/align-layers.c:760 +#: plug-ins/common/align-layers.c:752 msgid "Right edge" msgstr "Vora dreta" -#: plug-ins/common/align-layers.c:768 +#: plug-ins/common/align-layers.c:760 msgid "Fill (top to bottom)" msgstr "Omple (de dalt a baix)" -#: plug-ins/common/align-layers.c:769 +#: plug-ins/common/align-layers.c:761 msgid "Fill (bottom to top)" msgstr "Omple (de baix a dalt)" -#: plug-ins/common/align-layers.c:776 +#: plug-ins/common/align-layers.c:768 msgid "Top edge" msgstr "Vora superior" -#: plug-ins/common/align-layers.c:778 +#: plug-ins/common/align-layers.c:770 msgid "Bottom edge" msgstr "Vora inferior" @@ -452,106 +437,129 @@ msgstr "S'està cercant el fons de l'animació" msgid "Optimizing animation" msgstr "S'està optimitzant l'animació" -#: plug-ins/common/animation-play.c:331 +#: plug-ins/common/animation-play.c:330 msgid "_Playback..." msgstr "_Reprodueix..." -#: plug-ins/common/animation-play.c:336 +#: plug-ins/common/animation-play.c:335 msgid "Preview a PIKA layer-based animation" msgstr "Previsualitza una animació basada en capes del PIKA" +#: plug-ins/common/animation-play.c:370 plug-ins/common/animation-play.c:736 +#: plug-ins/common/animation-play.c:1352 +msgid "Start playback" +msgstr "Inicia la reproducció" + +#: plug-ins/common/animation-play.c:371 plug-ins/common/animation-play.c:738 +msgid "Step back to previous frame" +msgstr "Ves enrere al fotograma anterior" + +#: plug-ins/common/animation-play.c:372 plug-ins/common/animation-play.c:740 +msgid "Step to next frame" +msgstr "Ves al fotograma següent" + +#: plug-ins/common/animation-play.c:373 plug-ins/common/animation-play.c:742 +msgid "Rewind the animation" +msgstr "Rebobina l'animació" + +#: plug-ins/common/animation-play.c:378 +#, fuzzy +msgid "Increase the speed of the animation" +msgstr "Augmenta la velocitat de l'animació" + +#: plug-ins/common/animation-play.c:379 +#, fuzzy +msgid "Decrease the speed of the animation" +msgstr "Disminueix la velocitat de l'animació" + +#: plug-ins/common/animation-play.c:380 +#, fuzzy +#| msgid "Rewind the animation" +msgid "Reset the speed of the animation" +msgstr "Rebobina l'animació" + +#: plug-ins/common/animation-play.c:385 plug-ins/common/animation-play.c:745 +msgid "Detach the animation from the dialog window" +msgstr "Separa l'animació des de la finestra del diàleg" + +#: plug-ins/common/animation-play.c:386 plug-ins/common/animation-play.c:747 +msgid "Reload the image" +msgstr "Torna a carregar la imatge" + +#: plug-ins/common/animation-play.c:387 plug-ins/imagemap/imap-menu.ui:26 +#, fuzzy +msgid "Quit" +msgstr "Surt" + #. list is given in "fps" - frames per second -#: plug-ins/common/animation-play.c:498 plug-ins/common/animation-play.c:556 -#: plug-ins/common/animation-play.c:834 +#: plug-ins/common/animation-play.c:467 plug-ins/common/animation-play.c:525 +#: plug-ins/common/animation-play.c:803 #, c-format msgid "%.1f %%" msgstr "%.1f %%" #. Image Name -#: plug-ins/common/animation-play.c:689 +#: plug-ins/common/animation-play.c:658 msgid "Animation Playback:" msgstr "Reproducció de l'animació:" -#: plug-ins/common/animation-play.c:767 plug-ins/common/animation-play.c:1383 -msgid "Start playback" -msgstr "Inicia la reproducció" - -#: plug-ins/common/animation-play.c:769 +#: plug-ins/common/animation-play.c:738 msgid "Step _back" msgstr "_Pas enrere" -#: plug-ins/common/animation-play.c:769 -msgid "Step back to previous frame" -msgstr "Ves enrere al fotograma anterior" - -#: plug-ins/common/animation-play.c:771 +#: plug-ins/common/animation-play.c:740 msgid "_Step" msgstr "_Pas" -#: plug-ins/common/animation-play.c:771 -msgid "Step to next frame" -msgstr "Ves al fotograma següent" - -#: plug-ins/common/animation-play.c:773 -msgid "Rewind the animation" -msgstr "Rebobina l'animació" - -#: plug-ins/common/animation-play.c:776 +#: plug-ins/common/animation-play.c:745 msgid "Detach" msgstr "Separa" -#: plug-ins/common/animation-play.c:776 -msgid "Detach the animation from the dialog window" -msgstr "Separa l'animació des de la finestra del diàleg" - -#: plug-ins/common/animation-play.c:778 -msgid "Reload the image" -msgstr "Torna a carregar la imatge" - #. Zoom Options -#: plug-ins/common/animation-play.c:849 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:649 +#: plug-ins/common/animation-play.c:818 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:702 +#: plug-ins/imagemap/imap-menu.ui:276 msgid "Zoom" msgstr "Ampliació/Reducció" #. list is given in "fps" - frames per second -#: plug-ins/common/animation-play.c:859 +#: plug-ins/common/animation-play.c:828 #, c-format msgid "%d fps" msgstr "%d fps" -#: plug-ins/common/animation-play.c:870 +#: plug-ins/common/animation-play.c:839 msgid "Default framerate" msgstr "Fotogrames per defecte" -#: plug-ins/common/animation-play.c:890 +#: plug-ins/common/animation-play.c:859 msgid "Playback speed" msgstr "Velocitat de reproducció" #. 2 styles of default frame disposals: cumulative layers and one #. * frame per layer. -#: plug-ins/common/animation-play.c:901 plug-ins/common/file-gif-save.c:1273 +#: plug-ins/common/animation-play.c:870 plug-ins/common/file-gif-save.c:1269 msgid "Cumulative layers (combine)" msgstr "Capes acumulatives (combina)" -#: plug-ins/common/animation-play.c:906 plug-ins/common/file-gif-save.c:1275 +#: plug-ins/common/animation-play.c:875 plug-ins/common/file-gif-save.c:1271 msgid "One frame per layer (replace)" msgstr "Un fotograma per capa (substitueix)" -#: plug-ins/common/animation-play.c:1002 +#: plug-ins/common/animation-play.c:971 msgid "Memory could not be allocated to the frame container." msgstr "No s'ha pogut assignar memòria al contenidor de marcs." -#: plug-ins/common/animation-play.c:1069 +#: plug-ins/common/animation-play.c:1038 msgid "Invalid image. Did you close it?" msgstr "Imatge no vàlida. L'has tancat?" -#: plug-ins/common/animation-play.c:1181 +#: plug-ins/common/animation-play.c:1150 #, c-format msgid "Frame %d of %d" msgstr "Marc %d de %d" -#: plug-ins/common/animation-play.c:1383 +#: plug-ins/common/animation-play.c:1352 msgid "Stop playback" msgstr "Atura la reproducció" @@ -595,46 +603,46 @@ msgstr "_Transparent" msgid "Background transparent" msgstr "Fons transparent" -#: plug-ins/common/blinds.c:238 +#: plug-ins/common/blinds.c:221 msgid "Adding blinds" msgstr "S'estan afegint angles morts" -#: plug-ins/common/blinds.c:279 +#: plug-ins/common/blinds.c:256 msgid "Blinds" msgstr "Angles morts" -#: plug-ins/common/blinds.c:294 +#: plug-ins/common/blinds.c:271 plug-ins/pagecurl/pagecurl.c:251 msgid "Horizontal" msgstr "Horitzontal" -#: plug-ins/common/blinds.c:295 +#: plug-ins/common/blinds.c:272 plug-ins/pagecurl/pagecurl.c:250 msgid "Vertical" msgstr "Vertical" #. * Create the "background" layer to hold the image... -#: plug-ins/common/blinds.c:301 plug-ins/common/compose.c:1129 -#: plug-ins/common/decompose.c:666 plug-ins/common/file-cel.c:496 -#: plug-ins/common/file-cel.c:501 plug-ins/common/file-dicom.c:745 -#: plug-ins/common/file-farbfeld.c:322 plug-ins/common/file-gegl.c:465 -#: plug-ins/common/file-gif-load.c:1097 plug-ins/common/file-iff.c:343 -#: plug-ins/common/file-jp2-load.c:1317 plug-ins/common/file-pcx.c:742 -#: plug-ins/common/file-pcx.c:750 plug-ins/common/file-pcx.c:758 -#: plug-ins/common/file-pix.c:422 plug-ins/common/file-png.c:950 -#: plug-ins/common/file-pnm.c:869 plug-ins/common/file-qoi.c:321 -#: plug-ins/common/file-raw-data.c:1836 plug-ins/common/file-sunras.c:1083 -#: plug-ins/common/file-tga.c:1117 plug-ins/common/file-wbmp.c:270 -#: plug-ins/common/file-xbm.c:912 plug-ins/common/film.c:811 -#: plug-ins/common/smooth-palette.c:332 plug-ins/common/tile.c:405 -#: plug-ins/file-bmp/bmp-load.c:737 plug-ins/file-exr/file-exr.c:271 -#: plug-ins/file-faxg3/faxg3.c:574 plug-ins/file-fits/fits.c:701 +#: plug-ins/common/blinds.c:278 plug-ins/common/compose.c:1183 +#: 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-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-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-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:475 +#: 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-webp/file-webp-load.c:166 plug-ins/gfig/gfig-dialog.c:1290 +#: 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:315 plug-ins/twain/twain.c:661 +#: plug-ins/screenshot/screenshot-win32.c:317 plug-ins/twain/twain.c:661 msgid "Background" msgstr "Fons" @@ -676,17 +684,16 @@ msgstr "Bits per a la mida del contenidor (per defecte=4: 16 nivells)" msgid "The average color of the specified border." msgstr "El color mitjà de la vora especificada." -#: plug-ins/common/border-average.c:225 plug-ins/common/border-average.c:406 +#: plug-ins/common/border-average.c:208 plug-ins/common/border-average.c:386 msgid "Border Average" msgstr "Vora mitjana" -#: plug-ins/common/border-average.c:417 +#: plug-ins/common/border-average.c:397 msgid "Border Size" msgstr "Mida de la vora" -#. Number of Colors frame -#: plug-ins/common/border-average.c:443 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:906 +#: plug-ins/common/border-average.c:424 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:864 msgid "Number of Colors" msgstr "Nombre de colors" @@ -731,7 +738,7 @@ msgstr "Mida de les caselles" msgid "Check size unit of measure" msgstr "Unitat de mesura per a la mida de les caselles" -#: plug-ins/common/checkerboard.c:370 plug-ins/common/checkerboard.c:500 +#: plug-ins/common/checkerboard.c:347 plug-ins/common/checkerboard.c:477 msgid "Checkerboard" msgstr "Tauler d'escacs" @@ -959,103 +966,131 @@ msgstr "_Explorador CML..." msgid "Create abstract Coupled-Map Lattice patterns" msgstr "Crea patrons abstractes Coupled-Map-Lattice" -#: plug-ins/common/cml-explorer.c:877 +#: plug-ins/common/cml-explorer.c:515 +#, fuzzy +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 " +"of a parameter file is passed as the 4th arg. You can control CML_explorer " +"via parameter file." +msgstr "" +"Crea una imatge del Lattice Coupled-Map (CML). CML és una classe d'Autòmat " +"Cel·lular en domini continu (valor). En el PIKARUNNONINTERACTIVE, el nom " +"d'un fitxer de paràmetres es passa com el 4t argument. Podeu controlar el " +"CMLexplorer mitjançant un fitxer de paràmetres." + +#: plug-ins/common/cml-explorer.c:534 +#, fuzzy +#| msgid "Parameter k:" +msgid "Parameter URI" +msgstr "Paràmetre k:" + +#: plug-ins/common/cml-explorer.c:535 +#, fuzzy +msgid "" +"The local file:// URI of parameter file. CML_explorer makes an image with " +"its settings." +msgstr "" +"L'URI local file:// del fitxer de paràmetres. CMLexplorer fa una imatge amb " +"la seva configuració." + +#: plug-ins/common/cml-explorer.c:884 msgid "CML Explorer: evoluting" msgstr "Explorador CML: s'està calculant" -#: plug-ins/common/cml-explorer.c:1344 +#: plug-ins/common/cml-explorer.c:1351 msgid "Coupled-Map-Lattice Explorer" msgstr "Explorador Coupled-Map-Lattice" -#: plug-ins/common/cml-explorer.c:1388 +#: plug-ins/common/cml-explorer.c:1395 msgid "New Seed" msgstr "Llavor nova" -#: plug-ins/common/cml-explorer.c:1399 +#: plug-ins/common/cml-explorer.c:1406 msgid "Fix Seed" msgstr "Llavor fixa" -#: plug-ins/common/cml-explorer.c:1410 +#: plug-ins/common/cml-explorer.c:1417 msgid "Random Seed" msgstr "Llavor aleatòria" #. The Load button -#: plug-ins/common/cml-explorer.c:1425 plug-ins/common/cml-explorer.c:2248 -#: plug-ins/common/curve-bend.c:1463 plug-ins/common/curve-bend.c:1978 -#: plug-ins/common/file-cel.c:1002 plug-ins/common/qbist.c:849 -#: plug-ins/common/qbist.c:1032 plug-ins/common/sphere-designer.c:2290 +#: 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/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/fractal-explorer/fractal-explorer-dialogs.c:801 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1632 -#: plug-ins/gfig/gfig-dialog.c:782 plug-ins/ifs-compose/ifs-compose.c:959 -#: plug-ins/ifs-compose/ifs-compose.c:2646 plug-ins/imagemap/imap_browse.c:81 -#: plug-ins/imagemap/imap_file.c:74 plug-ins/lighting/lighting-ui.c:608 -#: plug-ins/lighting/lighting-ui.c:1308 +#: 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/imagemap/imap_file.c:74 plug-ins/lighting/lighting-ui.c:492 +#: plug-ins/lighting/lighting-ui.c:883 msgid "_Open" msgstr "_Obre" #. The Save button -#: plug-ins/common/cml-explorer.c:1433 plug-ins/common/cml-explorer.c:2115 -#: plug-ins/common/curve-bend.c:1475 plug-ins/common/curve-bend.c:2013 -#: plug-ins/common/file-pdf-save.c:1112 plug-ins/common/qbist.c:891 -#: plug-ins/common/qbist.c:1040 plug-ins/common/sphere-designer.c:2290 +#: 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/fractal-explorer/fractal-explorer-dialogs.c:818 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1670 +#: 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:960 -#: plug-ins/ifs-compose/ifs-compose.c:2609 plug-ins/imagemap/imap_file.c:129 -#: plug-ins/lighting/lighting-ui.c:601 plug-ins/lighting/lighting-ui.c:1164 +#: 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/lighting/lighting-ui.c:486 plug-ins/lighting/lighting-ui.c:739 msgid "_Save" msgstr "_Desa" -#: plug-ins/common/cml-explorer.c:1452 plug-ins/common/van-gogh-lic.c:736 +#: plug-ins/common/cml-explorer.c:1459 plug-ins/common/van-gogh-lic.c:736 msgid "_Hue" msgstr "_To" -#: plug-ins/common/cml-explorer.c:1456 +#: plug-ins/common/cml-explorer.c:1463 msgid "Sat_uration" msgstr "Sat_uració" -#: plug-ins/common/cml-explorer.c:1460 +#: plug-ins/common/cml-explorer.c:1467 msgid "_Value" msgstr "_Valor" -#: plug-ins/common/cml-explorer.c:1464 +#: plug-ins/common/cml-explorer.c:1471 msgid "_Advanced" msgstr "_Avançat" -#: plug-ins/common/cml-explorer.c:1479 +#: plug-ins/common/cml-explorer.c:1486 msgid "Channel Independent Parameters" msgstr "Paràmetres independents del canal" -#: plug-ins/common/cml-explorer.c:1501 +#: plug-ins/common/cml-explorer.c:1508 msgid "Initial value:" msgstr "Valor inicial:" -#: plug-ins/common/cml-explorer.c:1506 +#: plug-ins/common/cml-explorer.c:1513 msgid "Zoom scale:" msgstr "Escala d'ampliació/reducció:" -#: plug-ins/common/cml-explorer.c:1513 +#: plug-ins/common/cml-explorer.c:1520 msgid "Start offset:" msgstr "Inicia el desplaçament:" -#: plug-ins/common/cml-explorer.c:1521 +#: plug-ins/common/cml-explorer.c:1528 msgid "Seed of Random (only for \"From Seed\" Modes)" msgstr "Llavor inicial (només per als modes «amb llavor»)" -#: plug-ins/common/cml-explorer.c:1531 +#: plug-ins/common/cml-explorer.c:1538 msgid "Seed:" msgstr "Llavor:" -#: plug-ins/common/cml-explorer.c:1543 +#: plug-ins/common/cml-explorer.c:1550 msgid "Switch to \"From seed\" With the Last Seed" msgstr "Commuta a «amb llavor» amb la darrera llavor" -#: plug-ins/common/cml-explorer.c:1555 +#: plug-ins/common/cml-explorer.c:1562 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 (this is the reason why image on drawable is different from preview), and (2) all mutation rates equal to zero." @@ -1063,202 +1098,200 @@ msgstr "" "El botó «Llavor fixa» és un àlies meu.\n" "La mateixa llavor produeix la mateixa imatge, si (1) les amplades de les imatges són les mateixes (aquesta és la raó per la qual la imatge dibuixada és diferent de la previsualitzada) i (2) tots els valors de mutació són iguals a zero." -#: plug-ins/common/cml-explorer.c:1563 +#: plug-ins/common/cml-explorer.c:1570 msgid "O_thers" msgstr "Al_tres" -#: plug-ins/common/cml-explorer.c:1578 +#: plug-ins/common/cml-explorer.c:1585 msgid "Copy Settings" msgstr "Copia les opcions" -#: plug-ins/common/cml-explorer.c:1597 +#: plug-ins/common/cml-explorer.c:1604 msgid "Source channel:" msgstr "Canal d'origen:" -#: plug-ins/common/cml-explorer.c:1612 plug-ins/common/cml-explorer.c:1659 +#: plug-ins/common/cml-explorer.c:1619 plug-ins/common/cml-explorer.c:1666 msgid "Destination channel:" msgstr "Canal de destinació:" -#: plug-ins/common/cml-explorer.c:1616 +#: plug-ins/common/cml-explorer.c:1623 msgid "Copy Parameters" msgstr "Copia els paràmetres" -#: plug-ins/common/cml-explorer.c:1624 +#: plug-ins/common/cml-explorer.c:1631 msgid "Selective Load Settings" msgstr "Opcions de càrrega selectiva" -#: plug-ins/common/cml-explorer.c:1644 +#: plug-ins/common/cml-explorer.c:1651 msgid "Source channel in file:" msgstr "Canal d'origen del fitxer:" -#: plug-ins/common/cml-explorer.c:1665 +#: plug-ins/common/cml-explorer.c:1672 msgid "_Misc" msgstr "_Diverses" -#: plug-ins/common/cml-explorer.c:1724 +#: plug-ins/common/cml-explorer.c:1731 msgid "Function type:" msgstr "Tipus de funció:" -#: plug-ins/common/cml-explorer.c:1740 +#: plug-ins/common/cml-explorer.c:1747 msgid "Composition:" msgstr "Composició:" -#: plug-ins/common/cml-explorer.c:1754 +#: plug-ins/common/cml-explorer.c:1761 msgid "Misc arrange:" msgstr "Disposicions diverses:" -#: plug-ins/common/cml-explorer.c:1758 +#: plug-ins/common/cml-explorer.c:1765 msgid "Use cyclic range" msgstr "Utilitza un abast cíclic" -#: plug-ins/common/cml-explorer.c:1767 +#: plug-ins/common/cml-explorer.c:1774 msgid "Mod. rate:" msgstr "Factor de mod.:" -#: plug-ins/common/cml-explorer.c:1774 +#: plug-ins/common/cml-explorer.c:1781 msgid "Env. sensitivity:" msgstr "Sens. entorn:" -#: plug-ins/common/cml-explorer.c:1781 +#: plug-ins/common/cml-explorer.c:1788 msgid "Diffusion dist.:" msgstr "Dist. de difusió:" -#: plug-ins/common/cml-explorer.c:1788 +#: plug-ins/common/cml-explorer.c:1795 msgid "# of subranges:" msgstr "Núm. de subabast:" -#: plug-ins/common/cml-explorer.c:1795 +#: plug-ins/common/cml-explorer.c:1802 msgid "P(ower factor):" msgstr "P(factor potència):" -#: plug-ins/common/cml-explorer.c:1803 +#: plug-ins/common/cml-explorer.c:1810 msgid "Parameter k:" msgstr "Paràmetre k:" -#: plug-ins/common/cml-explorer.c:1811 +#: plug-ins/common/cml-explorer.c:1818 msgid "Range low:" msgstr "Rang curt:" -#: plug-ins/common/cml-explorer.c:1818 +#: plug-ins/common/cml-explorer.c:1825 msgid "Range high:" msgstr "Rang llarg:" -#: plug-ins/common/cml-explorer.c:1829 +#: plug-ins/common/cml-explorer.c:1836 msgid "Plot a Graph of the Settings" msgstr "Dibuixa un graf de les opcions" -#: plug-ins/common/cml-explorer.c:1871 +#: plug-ins/common/cml-explorer.c:1878 msgid "Ch. sensitivity:" msgstr "Sensibilitat del canal:" -#: plug-ins/common/cml-explorer.c:1879 +#: plug-ins/common/cml-explorer.c:1886 msgid "Mutation rate:" msgstr "Vel. de mutació:" -#: plug-ins/common/cml-explorer.c:1887 +#: plug-ins/common/cml-explorer.c:1894 msgid "Mutation dist.:" msgstr "Dist. de mutació:" -#: plug-ins/common/cml-explorer.c:1979 +#: plug-ins/common/cml-explorer.c:1986 msgid "Graph of the Current Settings" msgstr "Graf de les opcions actuals" -#: plug-ins/common/cml-explorer.c:1983 plug-ins/common/plugin-browser.c:560 -#: plug-ins/common/procedure-browser.c:168 -#: plug-ins/common/sample-colorize.c:1415 plug-ins/gfig/gfig-dialog.c:355 +#: plug-ins/common/cml-explorer.c:1990 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:1262 +#: plug-ins/ifs-compose/ifs-compose.c:1208 #: plug-ins/metadata/metadata-viewer.c:272 msgid "_Close" msgstr "_Tanca" -#: plug-ins/common/cml-explorer.c:2051 +#: plug-ins/common/cml-explorer.c:2058 msgid "Warning: the source and the destination are the same channel." msgstr "Avís: la font i la destinació són el mateix canal." -#: plug-ins/common/cml-explorer.c:2110 +#: plug-ins/common/cml-explorer.c:2117 msgid "Save CML Explorer Parameters" msgstr "Desa els paràmetres de l'Explorador CML" -#: plug-ins/common/cml-explorer.c:2166 plug-ins/common/curve-bend.c:822 -#: plug-ins/common/file-dicom.c:1558 plug-ins/common/file-farbfeld.c:381 -#: plug-ins/common/file-mng.c:876 plug-ins/common/file-mng.c:1223 -#: plug-ins/common/file-pcx.c:1230 plug-ins/common/file-pdf-save.c:720 -#: plug-ins/common/file-png.c:1502 plug-ins/common/file-raw-data.c:1345 -#: plug-ins/common/file-raw-data.c:1374 plug-ins/common/file-sunras.c:638 -#: plug-ins/common/file-tga.c:1238 plug-ins/common/file-xmc.c:1383 +#: plug-ins/common/cml-explorer.c:2173 plug-ins/common/curve-bend.c:792 +#: 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-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/file-fli/fli-pika.c:817 plug-ins/file-icns/file-icns-save.c:428 -#: plug-ins/file-ico/ico-save.c:1341 plug-ins/file-ico/ico-save.c:1558 +#: 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/fractal-explorer/fractal-explorer-dialogs.c:1538 -#: plug-ins/gfig/gfig.c:1044 plug-ins/ifs-compose/ifs-compose.c:2468 -#: plug-ins/lighting/lighting-ui.c:1233 +#: 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/lighting/lighting-ui.c:808 #, c-format msgid "Could not open '%s' for writing: %s" msgstr "No s'ha pogut obrir «%s» en escriptura: %s" -#: plug-ins/common/cml-explorer.c:2221 +#: plug-ins/common/cml-explorer.c:2228 #, c-format msgid "Parameters were saved to '%s'" msgstr "Els paràmetres s'han desat a «%s»" -#: plug-ins/common/cml-explorer.c:2243 +#: plug-ins/common/cml-explorer.c:2250 msgid "Load CML Explorer Parameters" msgstr "Carrega els paràmetres de l'explorador CML" -#: plug-ins/common/cml-explorer.c:2339 plug-ins/common/curve-bend.c:875 -#: plug-ins/common/file-cel.c:352 plug-ins/common/file-cel.c:403 -#: plug-ins/common/file-cel.c:641 plug-ins/common/file-dicom.c:377 -#: plug-ins/common/file-farbfeld.c:299 plug-ins/common/file-gif-load.c:410 -#: plug-ins/common/file-iff.c:227 plug-ins/common/file-mng.c:1407 -#: plug-ins/common/file-pcx.c:523 plug-ins/common/file-pcx.c:566 -#: plug-ins/common/file-png.c:673 plug-ins/common/file-ps.c:1126 -#: plug-ins/common/file-ps.c:3636 plug-ins/common/file-psp.c:2383 -#: plug-ins/common/file-psp.c:2433 plug-ins/common/file-qoi.c:300 -#: plug-ins/common/file-raw-data.c:514 plug-ins/common/file-raw-data.c:1673 -#: plug-ins/common/file-sunras.c:458 plug-ins/common/file-svg.c:365 -#: plug-ins/common/file-svg.c:825 plug-ins/common/file-tga.c:448 -#: plug-ins/common/file-wbmp.c:184 plug-ins/common/file-xbm.c:750 -#: plug-ins/common/file-xmc.c:658 plug-ins/common/file-xmc.c:897 -#: plug-ins/common/file-xwd.c:486 plug-ins/common/sphere-designer.c:2090 -#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:155 -#: plug-ins/file-faxg3/faxg3.c:256 plug-ins/file-fits/fits.c:396 -#: plug-ins/file-fli/fli-pika.c:459 plug-ins/file-fli/fli-pika.c:510 -#: plug-ins/file-icns/file-icns-load.c:515 -#: plug-ins/file-icns/file-icns-load.c:566 plug-ins/file-ico/ico-load.c:681 -#: plug-ins/file-ico/ico-load.c:819 plug-ins/file-ico/ico-load.c:1019 -#: plug-ins/file-jpeg/jpeg-load.c:99 plug-ins/file-jpeg/jpeg-load.c:614 +#: 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: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: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:1855 -#: plug-ins/fractal-explorer/fractal-explorer.c:1038 plug-ins/gfig/gfig.c:674 +#: 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:1377 +#: plug-ins/lighting/lighting-ui.c:952 #, c-format msgid "Could not open '%s' for reading: %s" msgstr "No s'ha pogut obrir «%s» en lectura: %s" -#: plug-ins/common/cml-explorer.c:2361 +#: plug-ins/common/cml-explorer.c:2368 msgid "Error: it's not CML parameter file." msgstr "S'ha produït un error: aquest no és un fitxer CML." -#: plug-ins/common/cml-explorer.c:2368 +#: plug-ins/common/cml-explorer.c:2375 #, c-format msgid "Warning: '%s' is an old format file." msgstr "Avís: «%s» és un fitxer en format antic." -#: plug-ins/common/cml-explorer.c:2372 +#: plug-ins/common/cml-explorer.c:2379 #, c-format msgid "Warning: '%s' is a parameter file for a newer version of CML Explorer." msgstr "" "Avís: «%s» és un fitxer de paràmetres per a un explorador CML més modern que" " el que esteu utilitzant." -#: plug-ins/common/cml-explorer.c:2435 +#: plug-ins/common/cml-explorer.c:2442 msgid "Error: failed to load parameters" msgstr "S'ha produït un error: no es poden carregar els paràmetres" @@ -1270,6 +1303,27 @@ msgstr "Ajusta _els colors..." msgid "Rearrange the colormap" msgstr "Torna a ajustar el mapa de colors" +#: plug-ins/common/colormap-remap.c:193 +#, fuzzy +msgid "" +"This procedure takes an indexed image and lets you alter the positions of " +"colors in the colormap without visually changing the image." +msgstr "" +"Aquest procediment pren una imatge indexada i permet alterar les posicions " +"dels colors en el mapa de colors sense canviar visualment la imatge." + +#: plug-ins/common/colormap-remap.c:204 +#, fuzzy +#| msgid "Map to:" +msgid "Map" +msgstr "Projecta sobre un:" + +#: plug-ins/common/colormap-remap.c:205 +#, fuzzy +#| msgid "Rearrange the colormap" +msgid "Remap array for the colormap" +msgstr "Torna a ajustar el mapa de colors" + #: plug-ins/common/colormap-remap.c:220 msgid "_Swap Colors" msgstr "_Intercanvia colors" @@ -1278,31 +1332,89 @@ msgstr "_Intercanvia colors" msgid "Swap two colors in the colormap" msgstr "Intercanvia dos colors en el mapa de colors" -#: plug-ins/common/colormap-remap.c:423 plug-ins/common/colormap-remap.c:434 -#: plug-ins/common/colormap-remap.c:445 +#: plug-ins/common/colormap-remap.c:225 +#, fuzzy +msgid "" +"This procedure takes an indexed image and lets you swap the positions of two" +" colors in the colormap without visually changing the image." +msgstr "" +"Aquest procediment pren una imatge indexada i permet intercanviar les " +"posicions de dos colors en el mapa de colors sense canviar visualment la " +"imatge." + +#: plug-ins/common/colormap-remap.c:237 +#, fuzzy +#| msgid "Indexed" +msgid "Index 1" +msgstr "Indexat" + +#: plug-ins/common/colormap-remap.c:238 +#, fuzzy +#| msgid "Rearranging the colormap" +msgid "First index in the colormap" +msgstr "S'està ajustant el mapa de colors" + +#: plug-ins/common/colormap-remap.c:243 +#, fuzzy +#| msgid "Indexed" +msgid "Index 2" +msgstr "Indexat" + +#: plug-ins/common/colormap-remap.c:244 +#, fuzzy +#| msgid "Swap two colors in the colormap" +msgid "Second (other) index in the colormap" +msgstr "Intercanvia dos colors en el mapa de colors" + +#: plug-ins/common/colormap-remap.c:277 +#, fuzzy +msgid "Sort on Hue" +msgstr "Ordena pel to" + +#: plug-ins/common/colormap-remap.c:278 +#, fuzzy +#| msgid "Saturation" +msgid "Sort on Saturation" +msgstr "Saturació" + +#: plug-ins/common/colormap-remap.c:279 +#, fuzzy +msgid "Sort on Value" +msgstr "Ordena pel valor" + +#: plug-ins/common/colormap-remap.c:284 +#, fuzzy +msgid "Reverse Order" +msgstr "Ordre invers" + +#: plug-ins/common/colormap-remap.c:285 +#, fuzzy +#| msgid "L_eft border" +msgid "Reset Order" +msgstr "Marge _esquerre" + +#: plug-ins/common/colormap-remap.c:412 plug-ins/common/colormap-remap.c:423 +#: plug-ins/common/colormap-remap.c:434 msgid "Invalid remap array was passed to remap function" msgstr "S'ha introduït una taula de traducció de colors invàlida a la funció" -#: plug-ins/common/colormap-remap.c:469 +#: plug-ins/common/colormap-remap.c:458 msgid "Rearranging the colormap" msgstr "S'està ajustant el mapa de colors" -#: plug-ins/common/colormap-remap.c:699 +#: plug-ins/common/colormap-remap.c:689 msgid "Rearrange Colormap" msgstr "Ajusta el mapa de colors" #. The Reset button -#: plug-ins/common/colormap-remap.c:703 plug-ins/common/curve-bend.c:1446 -#: plug-ins/common/sample-colorize.c:1413 -#: plug-ins/common/sphere-designer.c:2631 plug-ins/common/tile-small.c:531 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:809 +#: 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:961 -#: plug-ins/selection-to-path/selection-to-path.c:412 +#: plug-ins/ifs-compose/ifs-compose.c:907 msgid "_Reset" msgstr "_Restableix" -#: plug-ins/common/colormap-remap.c:805 +#: plug-ins/common/colormap-remap.c:795 msgid "" "Drag and drop colors to rearrange the colormap. The numbers shown are the " "original indices. Right-click for a menu with sort options." @@ -1311,174 +1423,323 @@ msgstr "" "mostren són els índexs originals. Feu clic amb el botó dret per a veure les " "opcions d'ordenació." -#: plug-ins/common/colormap-remap.c:843 +#: plug-ins/common/colormap-remap.c:833 msgid "Rearrange Colors" msgstr "Reordena els colors" #. Decompositions availables. #. * All the following values have to be kept in sync with those of #. decompose.c -#: plug-ins/common/compose.c:204 +#: plug-ins/common/compose.c:206 msgid "_Red:" msgstr "Ve_rmell:" -#: plug-ins/common/compose.c:205 +#: plug-ins/common/compose.c:207 msgid "_Green:" msgstr "_Verd:" -#: plug-ins/common/compose.c:206 +#: plug-ins/common/compose.c:208 msgid "_Blue:" msgstr "_Blau:" -#: plug-ins/common/compose.c:207 +#: plug-ins/common/compose.c:209 msgid "_Alpha:" msgstr "_Alfa:" -#: plug-ins/common/compose.c:209 plug-ins/common/compose.c:213 +#: plug-ins/common/compose.c:211 plug-ins/common/compose.c:215 msgid "_Hue:" msgstr "_To:" -#: plug-ins/common/compose.c:210 plug-ins/common/compose.c:214 +#: plug-ins/common/compose.c:212 plug-ins/common/compose.c:216 msgid "_Saturation:" msgstr "_Saturació:" -#: plug-ins/common/compose.c:211 +#: plug-ins/common/compose.c:213 msgid "_Value:" msgstr "_Valor:" -#: plug-ins/common/compose.c:215 +#: plug-ins/common/compose.c:217 msgid "_Lightness:" msgstr "_Lluminositat:" -#: plug-ins/common/compose.c:217 +#: plug-ins/common/compose.c:219 msgid "_Cyan:" msgstr "_Cian:" -#: plug-ins/common/compose.c:218 +#: plug-ins/common/compose.c:220 msgid "_Magenta:" msgstr "_Magenta:" -#: plug-ins/common/compose.c:219 +#: plug-ins/common/compose.c:221 msgid "_Yellow:" msgstr "_Groc:" -#: plug-ins/common/compose.c:220 +#: plug-ins/common/compose.c:222 msgid "_Black:" msgstr "_Negre:" -#: plug-ins/common/compose.c:222 +#: plug-ins/common/compose.c:224 msgid "_L:" msgstr "_L:" -#: plug-ins/common/compose.c:223 +#: plug-ins/common/compose.c:225 msgid "_A:" msgstr "_A:" -#: plug-ins/common/compose.c:224 +#: plug-ins/common/compose.c:226 msgid "_B:" msgstr "_B:" -#: plug-ins/common/compose.c:226 +#: plug-ins/common/compose.c:228 msgid "_L" msgstr "_L" -#: plug-ins/common/compose.c:227 +#: plug-ins/common/compose.c:229 msgid "_C" msgstr "_C" -#: plug-ins/common/compose.c:228 +#: plug-ins/common/compose.c:230 msgid "_H" msgstr "_H" -#: plug-ins/common/compose.c:230 +#: plug-ins/common/compose.c:232 msgid "_Luma y470:" msgstr "_Luma y470:" -#: plug-ins/common/compose.c:231 +#: plug-ins/common/compose.c:233 msgid "_Blueness cb470:" msgstr "_Blavor cb470:" -#: plug-ins/common/compose.c:232 +#: plug-ins/common/compose.c:234 msgid "_Redness cr470:" msgstr "Ve_rmellor cr470:" -#: plug-ins/common/compose.c:234 +#: plug-ins/common/compose.c:236 msgid "_Luma y709:" msgstr "_Luma y709:" -#: plug-ins/common/compose.c:235 +#: plug-ins/common/compose.c:237 msgid "_Blueness cb709:" msgstr "_Blavor cb709:" -#: plug-ins/common/compose.c:236 +#: plug-ins/common/compose.c:238 msgid "_Redness cr709:" msgstr "Ve_rmellor cr709:" -#: plug-ins/common/compose.c:242 plug-ins/common/decompose.c:193 -#: plug-ins/common/file-heif.c:2517 +#: 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 msgid "RGB" msgstr "RGB" -#: plug-ins/common/compose.c:249 plug-ins/common/decompose.c:194 +#: plug-ins/common/compose.c:251 plug-ins/common/compose.c:439 +#: plug-ins/common/compose.c:502 plug-ins/common/decompose.c:194 msgid "RGBA" msgstr "RGBA" -#: plug-ins/common/compose.c:257 plug-ins/common/decompose.c:201 +#: plug-ins/common/compose.c:259 plug-ins/common/compose.c:440 +#: plug-ins/common/compose.c:503 plug-ins/common/decompose.c:201 msgid "HSV" msgstr "HSV" -#: plug-ins/common/compose.c:264 plug-ins/common/decompose.c:206 +#: plug-ins/common/compose.c:266 plug-ins/common/compose.c:441 +#: plug-ins/common/compose.c:504 plug-ins/common/decompose.c:206 msgid "HSL" msgstr "HSL" -#: plug-ins/common/compose.c:271 plug-ins/common/decompose.c:211 -#: plug-ins/common/file-jp2-load.c:1014 +#: plug-ins/common/compose.c:273 plug-ins/common/compose.c:442 +#: plug-ins/common/compose.c:505 plug-ins/common/decompose.c:211 +#: plug-ins/common/file-jp2-load.c:1000 msgid "CMYK" msgstr "CMYK" -#: plug-ins/common/compose.c:279 plug-ins/common/decompose.c:217 +#: plug-ins/common/compose.c:281 plug-ins/common/compose.c:443 +#: plug-ins/common/compose.c:506 plug-ins/common/decompose.c:217 msgid "LAB" msgstr "LAB" -#: plug-ins/common/compose.c:286 plug-ins/common/decompose.c:219 +#: plug-ins/common/compose.c:288 plug-ins/common/compose.c:444 +#: plug-ins/common/compose.c:507 plug-ins/common/decompose.c:219 msgid "LCH" msgstr "LCH" -#: plug-ins/common/compose.c:293 plug-ins/common/decompose.c:221 +#: plug-ins/common/compose.c:295 plug-ins/common/decompose.c:221 msgid "YCbCr_ITU_R470" msgstr "YCbCr_ITU_R470" -#: plug-ins/common/compose.c:300 plug-ins/common/decompose.c:224 +#: plug-ins/common/compose.c:302 plug-ins/common/decompose.c:224 msgid "YCbCr_ITU_R709" msgstr "YCbCr_ITU_R709" -#: plug-ins/common/compose.c:307 plug-ins/common/decompose.c:222 +#: plug-ins/common/compose.c:309 plug-ins/common/decompose.c:222 msgid "YCbCr_ITU_R470_256" msgstr "YCbCr_ITU_R470_256" -#: plug-ins/common/compose.c:314 plug-ins/common/decompose.c:225 +#: plug-ins/common/compose.c:316 plug-ins/common/decompose.c:225 msgid "YCbCr_ITU_R709_256" msgstr "YCbCr_ITU_R709_256" -#: plug-ins/common/compose.c:401 +#: plug-ins/common/compose.c:403 msgid "C_ompose..." msgstr "C_ompon..." -#: plug-ins/common/compose.c:405 +#: plug-ins/common/compose.c:407 msgid "Create an image using multiple gray images as color channels" msgstr "" "Crea una imatge utilitzant imatges diverses amb escala de grisos com a " "canals de color" -#: plug-ins/common/compose.c:508 +#: 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 "" +"Crea una imatge utilitzant imatges diverses amb escala de grisos com a " +"canals de color" + +#: plug-ins/common/compose.c:418 +#, fuzzy +#| msgid "Image" +msgid "Image 2" +msgstr "Imatge" + +#: plug-ins/common/compose.c:419 +#, fuzzy +#| msgid "Reload the image" +msgid "Second input image" +msgstr "Torna a carregar la imatge" + +#: plug-ins/common/compose.c:424 +#, fuzzy +#| msgid "Image" +msgid "Image 3" +msgstr "Imatge" + +#: plug-ins/common/compose.c:425 +#, fuzzy +#| msgid "Print the image" +msgid "Third input image" +msgstr "Imprimeix la imatge" + +#: plug-ins/common/compose.c:430 +#, fuzzy +#| msgid "Image" +msgid "Image 4" +msgstr "Imatge" + +#: plug-ins/common/compose.c:431 +#, fuzzy +#| msgid "Photoshop image" +msgid "Fourth input image" +msgstr "Imatge del Photoshop" + +#: plug-ins/common/compose.c:436 plug-ins/common/compose.c:499 +#, fuzzy +#| msgid "Color _model:" +msgid "Color _model" +msgstr "_Model de color:" + +#: plug-ins/common/compose.c:445 plug-ins/common/compose.c:508 +#, fuzzy +#| msgid "YCbCr_ITU_R470" +msgid "YCbCr ITU R470" +msgstr "YCbCr_ITU_R470" + +#: plug-ins/common/compose.c:446 plug-ins/common/compose.c:509 +#, fuzzy +#| msgid "YCbCr_ITU_R709" +msgid "YCbCr ITU R709" +msgstr "YCbCr_ITU_R709" + +#: plug-ins/common/compose.c:447 plug-ins/common/compose.c:510 +#, fuzzy +#| 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 +#, fuzzy +#| 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 "Imatge PNG" + +#: plug-ins/common/compose.c:455 plug-ins/common/compose.c:518 +#: plug-ins/common/smooth-palette.c:160 +#, fuzzy +#| msgid "Output" +msgid "Output image" +msgstr "Sortida" + +#: plug-ins/common/compose.c:470 +#, fuzzy +msgid "Compose an image from multiple drawables of gray images" +msgstr "Redacta una imatge a partir de múltiples dibuixables d'imatges grises" + +#: plug-ins/common/compose.c:472 +#, fuzzy +msgid "" +"This function creates a new image from multiple drawables of gray images" +msgstr "" +"Aquesta funció crea una imatge nova a partir de múltiples dibuixables " +"d'imatges grises" + +#: plug-ins/common/compose.c:481 +#, fuzzy +msgid "Drawable 2" +msgstr "Dibuixable 2" + +#: plug-ins/common/compose.c:482 +#, fuzzy +msgid "Second input drawable" +msgstr "Segona entrada dibuixable" + +#: plug-ins/common/compose.c:487 +#, fuzzy +msgid "Drawable 3" +msgstr "Dibuixable 3" + +#: plug-ins/common/compose.c:488 +#, fuzzy +msgid "Third input drawable" +msgstr "Tercera entrada dibuixable" + +#: plug-ins/common/compose.c:493 +#, fuzzy +msgid "Drawable 4" +msgstr "Dibuixable 4" + +#: plug-ins/common/compose.c:494 +#, fuzzy +msgid "Fourth input drawable" +msgstr "Quarta entrada dibuixable" + +#: plug-ins/common/compose.c:534 msgid "R_ecompose" msgstr "R_ecompon" -#: plug-ins/common/compose.c:512 +#: plug-ins/common/compose.c:538 msgid "Recompose an image that was previously decomposed" msgstr "Recompon una imatge que estava descomposta" -#: plug-ins/common/compose.c:577 +#: plug-ins/common/compose.c:540 +#, fuzzy +msgid "" +"This function recombines the grayscale layers produced by Decompose into a " +"single RGB or RGBA layer, and replaces the originally decomposed layer with " +"the result." +msgstr "" +"Aquesta funció recombina les capes d'escala de grisos produïdes per " +"Descompondre en una sola capa RGB o RGBA, i reemplaça la capa originalment " +"descomposta amb el resultat." + +#: plug-ins/common/compose.c:604 msgid "" "You can only run 'Recompose' if the active image was originally produced by " "'Decompose'." @@ -1486,69 +1747,64 @@ msgstr "" "Només podeu executar «Torna a compondre» si la imatge activa s'ha generat " "amb la funció «Descompon»." -#: plug-ins/common/compose.c:608 +#: plug-ins/common/compose.c:635 msgid "Error scanning 'decompose-data' parasite: too few layers found" msgstr "" "S'ha produït un error en analitzar el paràsit «descompon dades»: no té prou " "capes" -#: plug-ins/common/compose.c:623 +#: plug-ins/common/compose.c:650 #, c-format msgid "Cannot recompose: Specified source layer ID %d not found" msgstr "" "No es pot recompondre: no s'ha trobat l'ID %d de la capa d'origen " "especificada" -#: plug-ins/common/compose.c:643 +#: plug-ins/common/compose.c:670 #, c-format msgid "Cannot recompose: Specified layer #%d ID %d not found" msgstr "" "No es pot recompondre: no s'ha trobat el #%d ID %d de la capa especificada" -#: plug-ins/common/compose.c:675 +#: plug-ins/common/compose.c:700 #, c-format msgid "Could not get layers for image %d" msgstr "No s'han pogut obtenir capes per a la imatge %d" -#: plug-ins/common/compose.c:739 +#: plug-ins/common/compose.c:773 msgid "Composing" msgstr "S'està creant la composició" -#: plug-ins/common/compose.c:974 plug-ins/common/compose.c:1419 +#: plug-ins/common/compose.c:1028 plug-ins/common/compose.c:1428 msgid "At least one image is needed to compose" msgstr "Com a mínim cal una imatge per a compondre" -#: plug-ins/common/compose.c:995 +#: plug-ins/common/compose.c:1049 msgid "Drawables have different size" msgstr "Els elements dibuixables tenen una mida diferent" -#: plug-ins/common/compose.c:1023 +#: plug-ins/common/compose.c:1077 msgid "Images have different size" msgstr "Les imatges tenen una mida diferent" -#: plug-ins/common/compose.c:1041 +#: plug-ins/common/compose.c:1095 msgid "Error in getting layer IDs" msgstr "S'ha produït un error en obtenir ID de capa" -#: plug-ins/common/compose.c:1179 +#: plug-ins/common/compose.c:1228 msgid "Compose" msgstr "Compon" -#. Compose type combo -#: plug-ins/common/compose.c:1207 +#: plug-ins/common/compose.c:1243 msgid "Compose Channels" msgstr "Compon els canals" -#: plug-ins/common/compose.c:1217 plug-ins/common/decompose.c:896 -msgid "Color _model:" -msgstr "_Model de color:" - #. Channel representation grid -#: plug-ins/common/compose.c:1249 +#: plug-ins/common/compose.c:1258 msgid "Channel Representations" msgstr "Representacions dels canals" -#: plug-ins/common/compose.c:1308 +#: plug-ins/common/compose.c:1318 msgid "Mask value" msgstr "Valor de màscara" @@ -1606,29 +1862,29 @@ msgstr "Di_nàmic" msgid "Variance value" msgstr "Valor de la variància" -#: plug-ins/common/contrast-retinex.c:297 +#: plug-ins/common/contrast-retinex.c:272 msgid "Retinex" msgstr "Retinex" -#: plug-ins/common/contrast-retinex.c:337 +#: plug-ins/common/contrast-retinex.c:306 msgid "Retinex Image Enhancement" msgstr "Millora de la imatge Retinex" -#: plug-ins/common/contrast-retinex.c:352 +#: plug-ins/common/contrast-retinex.c:321 msgid "Uniform" msgstr "Uniforme" -#: plug-ins/common/contrast-retinex.c:353 -#: plug-ins/metadata/metadata-tags.c:247 +#: plug-ins/common/contrast-retinex.c:322 +#: plug-ins/metadata/metadata-tags.c:254 msgid "Low" msgstr "Baix" -#: plug-ins/common/contrast-retinex.c:354 -#: plug-ins/metadata/metadata-tags.c:247 +#: plug-ins/common/contrast-retinex.c:323 +#: plug-ins/metadata/metadata-tags.c:254 msgid "High" msgstr "Alt" -#: plug-ins/common/contrast-retinex.c:688 +#: plug-ins/common/contrast-retinex.c:658 msgid "Retinex: filtering" msgstr "Retinex: s'està filtrant" @@ -1648,157 +1904,310 @@ msgstr "S'està escapçant en mode Tall intel·ligent" msgid "Nothing to crop." msgstr "Res per a escapçar." -#: plug-ins/common/curve-bend.c:430 +#: plug-ins/common/curve-bend.c:412 msgid "_Curve Bend..." msgstr "_Distorsiona segons la corba..." -#: plug-ins/common/curve-bend.c:435 +#: plug-ins/common/curve-bend.c:417 msgid "Bend the image using two control curves" msgstr "Distorsiona la imatge utilitzant dues corbes de control" -#: plug-ins/common/curve-bend.c:684 +#: plug-ins/common/curve-bend.c:418 +#, fuzzy +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 " +"floating selection. If work_on_copy parameter is TRUE, the curve_bend " +"distortion is done on a copy of the active layer (or floating selection). " +"The upper and lower edges are bent in shape of 2 spline curves. Both (upper " +"and lower) curves are determined by up to 17 points or by 256 Y-Values if " +"curve_type == 1 (freehand mode). If rotation is not 0, the layer is rotated " +"before and rotated back after the bend operation. This enables bending in " +"other directions than vertical. Bending usually changes the size of the " +"handled layer. This plug-in sets the offsets of the handled layer to keep " +"its center at the same position." +msgstr "" +"Aquest connector dobla la capa activa. Si hi ha una selecció actual, es " +"copia a la selecció flotant i la distorsió de corba corba es fa sobre la " +"selecció flotant. Si el paràmetre workoncopy és CERT, la distorsió de " +"corbabend es fa en una còpia de la capa activa (o selecció flotant). Les " +"vores superior i inferior estan doblegades en forma de 2 corbes spline. Les " +"dues corbes (superior i inferior) es determinen per fins a 17 punts o per " +"256 valors Y si el tipus de corba == 1 (mode a mà alçada). Si la rotació no " +"és 0, la capa girarà abans i girarà enrere després de l'operació corba. Això" +" permet doblegar-se en altres direccions que no siguin verticals. La barreja" +" normalment canvia la mida de la capa manejada. Aquest connector estableix " +"els desplaçaments de la capa manejada per a mantenir el seu centre a la " +"mateixa posició." + +#: plug-ins/common/curve-bend.c:442 +#, fuzzy +#| msgid "Rotat_e:" +msgid "Rotat_e" +msgstr "_Gira:" + +#: plug-ins/common/curve-bend.c:443 +#, fuzzy +msgid "Direction {angle 0 to 360 degree } of the bend effect" +msgstr "Direcció {angle 0 a 360 graus } de l'efecte corba" + +#: plug-ins/common/curve-bend.c:449 +msgid "Smoo_thing" +msgstr "Suavi_tza" + +#: plug-ins/common/curve-bend.c:450 +#, fuzzy +#| msgid "Smoo_thing" +msgid "Smoothing" +msgstr "Suavi_tza" + +#: plug-ins/common/curve-bend.c:455 plug-ins/common/qbist.c:997 +#: plug-ins/lighting/lighting-main.c:296 +msgid "_Antialiasing" +msgstr "_Antialiàsing" + +#: plug-ins/common/curve-bend.c:456 +#, fuzzy +#| msgid "Antialiasing" +msgid "Antialias" +msgstr "Antialiàsing" + +#: plug-ins/common/curve-bend.c:461 +msgid "Work on cop_y" +msgstr "Treballa amb la còp_ia" + +#: plug-ins/common/curve-bend.c:462 +#, fuzzy +msgid "Copy the drawable and bend the copy" +msgstr "Copia el dibuixable i doblega la còpia" + +#: plug-ins/common/curve-bend.c:467 +msgid "Curve Type" +msgstr "Tipus de corba" + +#: plug-ins/common/curve-bend.c:468 +#, fuzzy +msgid "{ 0 == smooth (use 17 points), 1 == freehand (use 256 val_y) }" +msgstr "" +"{ 0 == suau (utilitzeu 17 punts), 1 == a mà alçada (utilitzeu 256 valy) }" + +#: plug-ins/common/curve-bend.c:474 +msgid "Curve for Border" +msgstr "Corba per a la vora" + +#: plug-ins/common/curve-bend.c:475 +#, fuzzy +msgid "Choose the active border line to edit" +msgstr "Trieu la línia de vora activa a editar" + +#: plug-ins/common/curve-bend.c:480 plug-ins/common/curve-bend.c:481 +#, fuzzy +msgid "Argc upper point X" +msgstr "Punt superior X de l'argument" + +#: plug-ins/common/curve-bend.c:486 +#, fuzzy +#| msgid "Upper right" +msgid "Upper point X" +msgstr "Superior dret" + +#: plug-ins/common/curve-bend.c:487 plug-ins/common/curve-bend.c:511 +#, fuzzy +msgid "Array of 17 x point coords { 0.0 <= x <= 1.0 or -1 for unused point }" +msgstr "" +"Matriu de 17 coords de punt x { 0.0 == x <= 1.0 o -1 per a un punt no " +"utilitzat }" + +#: plug-ins/common/curve-bend.c:492 plug-ins/common/curve-bend.c:493 +#, fuzzy +msgid "Argc upper point Y" +msgstr "Punt superior Y de l'argument" + +#: plug-ins/common/curve-bend.c:498 +#, fuzzy +#| msgid "Upper right" +msgid "Upper point Y" +msgstr "Superior dret" + +#: plug-ins/common/curve-bend.c:499 plug-ins/common/curve-bend.c:523 +#, fuzzy +msgid "Array of 17 y point coords { 0.0 <= y <= 1.0 or -1 for unused point }" +msgstr "" +"Matriu de 17 coords de punt y { 0.0 == y <= 1.0 o -1 per a un punt no " +"utilitzat }" + +#: plug-ins/common/curve-bend.c:504 plug-ins/common/curve-bend.c:505 +#, fuzzy +msgid "Argc lower point X" +msgstr "Argc punt inferior X" + +#: plug-ins/common/curve-bend.c:510 +#, fuzzy +#| msgid "Lower right" +msgid "Lower point X" +msgstr "Inferior dret" + +#: plug-ins/common/curve-bend.c:516 plug-ins/common/curve-bend.c:517 +#, fuzzy +msgid "Argc lower point Y" +msgstr "Punt inferior Y de l'argument" + +#: plug-ins/common/curve-bend.c:522 +#, fuzzy +#| msgid "Lower right" +msgid "Lower point Y" +msgstr "Inferior dret" + +#: plug-ins/common/curve-bend.c:528 +#, fuzzy +#| msgid "Upper left" +msgid "Upper val Y" +msgstr "Superior esquerra" + +#: plug-ins/common/curve-bend.c:529 plug-ins/common/curve-bend.c:535 +#, fuzzy +msgid "Array of 256 y freehand coords { 0 <= y <= 255 }" +msgstr "Matriu de 256 coords a mà alçada { 0 == y == 255 }" + +#: plug-ins/common/curve-bend.c:534 +#, fuzzy +#| msgid "Lower left" +msgid "Lower val Y" +msgstr "Inferior esquerre" + +#: plug-ins/common/curve-bend.c:540 +#, fuzzy +#| msgid "Selected layer" +msgid "Bent layer" +msgstr "Capa seleccionada" + +#: plug-ins/common/curve-bend.c:541 +#, fuzzy +msgid "The transformed layer" +msgstr "La capa transformada" + +#: plug-ins/common/curve-bend.c:672 msgid "Can operate on layers only (but was called on channel or mask)." msgstr "" "Només es pot operar en les capes (s'estava fent en un canal o una màscara)." -#: plug-ins/common/curve-bend.c:698 +#: plug-ins/common/curve-bend.c:686 msgid "Cannot operate on layers with masks." msgstr "No es pot operar en capes amb màscares." -#: plug-ins/common/curve-bend.c:713 +#: plug-ins/common/curve-bend.c:701 msgid "Cannot operate on empty selections." msgstr "No es pot operar en seleccions buides." -#: plug-ins/common/curve-bend.c:885 +#: plug-ins/common/curve-bend.c:855 #, c-format msgid "Error while reading '%s': %s" msgstr "S'ha produït un error en llegir «%s»: %s" -#. Possibly retrieve data from a previous run -#. The shell and main vbox -#: plug-ins/common/curve-bend.c:1199 plug-ins/common/curve-bend.c:2941 +#: plug-ins/common/curve-bend.c:1113 plug-ins/common/curve-bend.c:2819 msgid "Curve Bend" msgstr "Distorsiona segons la corba" +#: plug-ins/common/curve-bend.c:1129 plug-ins/gfig/gfig-dialog.c:1215 +msgid "Options" +msgstr "Opcions" + +#. GUI-only widgets #. Preview area, top of column #. preview -#: plug-ins/common/curve-bend.c:1236 plug-ins/pikaressionist/orientmap.c:589 +#: plug-ins/common/curve-bend.c:1152 plug-ins/pikaressionist/orientmap.c:589 #: plug-ins/pikaressionist/sizemap.c:458 #: plug-ins/print/print-page-layout.c:180 msgid "Preview" msgstr "Previsualitza" #. The preview button -#: plug-ins/common/curve-bend.c:1263 +#: plug-ins/common/curve-bend.c:1180 msgid "_Preview Once" msgstr "_Previsualitza una vegada" #. The preview toggle -#: plug-ins/common/curve-bend.c:1272 +#: plug-ins/common/curve-bend.c:1189 msgid "Automatic pre_view" msgstr "Pre_visualització automàtica" -#. Options area, bottom of column -#: plug-ins/common/curve-bend.c:1282 plug-ins/gfig/gfig-dialog.c:1215 -msgid "Options" -msgstr "Opcions" - -#. Rotate spinbutton -#: plug-ins/common/curve-bend.c:1296 -msgid "Rotat_e:" -msgstr "_Gira:" - -#. The smoothing toggle -#: plug-ins/common/curve-bend.c:1315 -msgid "Smoo_thing" -msgstr "Suavi_tza" - -#. The antialiasing toggle -#: plug-ins/common/curve-bend.c:1325 plug-ins/common/qbist.c:1009 -msgid "_Antialiasing" -msgstr "_Antialiàsing" - -#. The work_on_copy toggle -#: plug-ins/common/curve-bend.c:1335 -msgid "Work on cop_y" -msgstr "Treballa amb la còp_ia" - #. The curves graph -#: plug-ins/common/curve-bend.c:1345 +#. Config-connected widgets first +#: plug-ins/common/curve-bend.c:1200 +#, fuzzy +#| msgid "Smoot_h" +msgid "Smooth" +msgstr "S_uau" + +#: plug-ins/common/curve-bend.c:1201 +#, fuzzy +#| msgid "_Free" +msgid "Free" +msgstr "_Lliure" + +#: plug-ins/common/curve-bend.c:1208 +#, fuzzy +#| msgctxt "curve-border" +#| msgid "_Upper" +msgid "Upper" +msgstr "S_uperior" + +#: plug-ins/common/curve-bend.c:1209 +#, fuzzy +#| msgid "Lower" +msgctxt "adjective" +msgid "Lower" +msgstr "Inferior" + +#: plug-ins/common/curve-bend.c:1227 msgid "Modify Curves" msgstr "Modifica les corbes" -#: plug-ins/common/curve-bend.c:1374 -msgid "Curve for Border" -msgstr "Corba per a la vora" - -#: plug-ins/common/curve-bend.c:1378 -msgctxt "curve-border" -msgid "_Upper" -msgstr "S_uperior" - -#: plug-ins/common/curve-bend.c:1379 -msgctxt "curve-border" -msgid "_Lower" -msgstr "_Inferior" - -#: plug-ins/common/curve-bend.c:1389 -msgid "Curve Type" -msgstr "Tipus de corba" - -#: plug-ins/common/curve-bend.c:1393 -msgid "Smoot_h" -msgstr "S_uau" - -#: plug-ins/common/curve-bend.c:1394 -msgid "_Free" -msgstr "_Lliure" - #. The Copy button -#: plug-ins/common/curve-bend.c:1409 -#: plug-ins/gradient-flare/gradient-flare.c:3083 +#: plug-ins/common/curve-bend.c:1259 +#: plug-ins/gradient-flare/gradient-flare.c:3047 msgid "_Copy" msgstr "_Copia" -#: plug-ins/common/curve-bend.c:1414 +#: plug-ins/common/curve-bend.c:1264 msgid "Copy the active curve to the other border" msgstr "Copia la corba activa a l'altra vora" #. The CopyInv button -#: plug-ins/common/curve-bend.c:1421 +#: plug-ins/common/curve-bend.c:1271 msgid "_Mirror" msgstr "Re_flecteix" -#: plug-ins/common/curve-bend.c:1426 +#: plug-ins/common/curve-bend.c:1276 msgid "Mirror the active curve to the other border" msgstr "Reflecteix la corba activa a l'altra vora" #. The Swap button -#: plug-ins/common/curve-bend.c:1434 +#: plug-ins/common/curve-bend.c:1284 msgid "S_wap" msgstr "Interca_nvia" -#: plug-ins/common/curve-bend.c:1439 +#: plug-ins/common/curve-bend.c:1289 msgid "Swap the two curves" msgstr "Intercanvia les dues corbes" -#: plug-ins/common/curve-bend.c:1451 +#: plug-ins/common/curve-bend.c:1301 msgid "Reset the active curve" msgstr "Restableix la corba activa" -#: plug-ins/common/curve-bend.c:1468 +#: plug-ins/common/curve-bend.c:1318 msgid "Load the curves from a file" msgstr "Carrega les corbes des d'un fitxer" -#: plug-ins/common/curve-bend.c:1480 +#: plug-ins/common/curve-bend.c:1330 msgid "Save the curves to a file" msgstr "Desa les corbes al fitxer" -#: plug-ins/common/curve-bend.c:1973 +#: plug-ins/common/curve-bend.c:1851 msgid "Load Curve Points from File" msgstr "Carrega els punts de la corba des d'un fitxer" -#: plug-ins/common/curve-bend.c:2008 +#: plug-ins/common/curve-bend.c:1886 msgid "Save Curve Points to File" msgstr "Desa els punts de la corba a un fitxer" @@ -1894,21 +2303,18 @@ msgstr "blavor-cb709" msgid "redness-cr709" msgstr "vermellor-cr709" -#. Redmode radio frame #: plug-ins/common/decompose.c:196 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:985 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:901 msgid "Red" msgstr "Vermell" -#. Greenmode radio frame #: plug-ins/common/decompose.c:197 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1026 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:914 msgid "Green" msgstr "Verd" -#. Bluemode radio frame #: plug-ins/common/decompose.c:198 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1067 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:927 msgid "Blue" msgstr "Blau" @@ -1940,8 +2346,8 @@ msgstr "Magenta" msgid "Yellow" msgstr "Groc" -#: plug-ins/common/decompose.c:215 plug-ins/common/warp.c:617 -#: plug-ins/file-fits/fits.c:1028 plug-ins/flame/flame.c:1223 +#: 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/gfig/gfig-dialog.c:1459 msgid "Black" msgstr "Negre" @@ -1954,31 +2360,35 @@ msgstr "_Descompon..." msgid "Decompose an image into separate colorspace components" msgstr "Descompon una imatge en els seus diversos components de color" -#: plug-ins/common/decompose.c:414 +#: plug-ins/common/decompose.c:403 msgid "Decomposing" msgstr "S'està descomponent" -#: plug-ins/common/decompose.c:549 +#: plug-ins/common/decompose.c:528 msgid "Image not suitable for this decomposition" msgstr "La imatge no és adequada per a aquesta descomposició" -#: plug-ins/common/decompose.c:874 +#: plug-ins/common/decompose.c:853 msgid "Decompose" msgstr "Descompon" -#: plug-ins/common/decompose.c:884 +#: plug-ins/common/decompose.c:863 msgid "Extract Channels" msgstr "Extreu els canals" -#: plug-ins/common/decompose.c:933 +#: plug-ins/common/decompose.c:875 +msgid "Color _model:" +msgstr "_Model de color:" + +#: plug-ins/common/decompose.c:912 msgid "_Decompose to layers" msgstr "Descompon en _capes" -#: plug-ins/common/decompose.c:937 +#: plug-ins/common/decompose.c:916 msgid "_Foreground as registration color" msgstr "_Realça el color del primer pla" -#: plug-ins/common/decompose.c:938 +#: plug-ins/common/decompose.c:917 msgid "" "Pixels in the foreground color will appear black in all output images. This" " can be used for things like crop marks that have to show up on all " @@ -1988,53 +2398,83 @@ msgstr "" " les imatges de sortida. Això es pot utilitzar com a marques de talls que " "han de mostrar-se en tots els canals." -#: plug-ins/common/depth-merge.c:218 +#: plug-ins/common/depth-merge.c:204 msgid "_Depth Merge..." msgstr "Fusió per profun_ditat..." -#: plug-ins/common/depth-merge.c:222 +#: plug-ins/common/depth-merge.c:208 msgid "Combine two images using depth maps (z-buffers)" msgstr "" "Combina dues imatges utilitzant mapes de profunditat (memòries intermèdies " "z)" -#: plug-ins/common/depth-merge.c:470 +#: plug-ins/common/depth-merge.c:223 +#, fuzzy +#| msgid "Source 1:" +msgid "Source _1" +msgstr "Font 1:" + +#: plug-ins/common/depth-merge.c:229 +#, fuzzy +#| msgid "Depth map:" +msgid "_Depth map 1" +msgstr "Mapa de la profunditat:" + +#: plug-ins/common/depth-merge.c:235 +#, fuzzy +#| msgid "Source 2:" +msgid "Source _2" +msgstr "Font 2:" + +#: plug-ins/common/depth-merge.c:241 +#, fuzzy +#| msgid "Depth map:" +msgid "Depth _map 2" +msgstr "Mapa de la profunditat:" + +#: plug-ins/common/depth-merge.c:247 +#, fuzzy +#| msgid "O_verlap:" +msgid "O_verlap" +msgstr "Su_perposa:" + +#: plug-ins/common/depth-merge.c:253 plug-ins/common/file-raw-data.c:365 +#, fuzzy +#| msgid "O_ffset:" +msgid "O_ffset" +msgstr "_Desplaçament:" + +#: plug-ins/common/depth-merge.c:254 +#, fuzzy +#| msgid "Save layer o_ffset" +msgid "Depth relative offset" +msgstr "_Desa el desplaçament de la capa" + +#: plug-ins/common/depth-merge.c:259 +#, fuzzy +#| msgid "Sc_ale 1:" +msgid "Sc_ale 1" +msgstr "Esc_ala 1:" + +#: plug-ins/common/depth-merge.c:265 +#, fuzzy +#| msgid "Scal_e" +msgid "Scal_e 2" +msgstr "_Escala" + +#: plug-ins/common/depth-merge.c:313 +#, fuzzy +msgid "The selection does not intersect with the input drawable." +msgstr "La selecció no s'interseca amb l'entrada dibuixable." + +#: plug-ins/common/depth-merge.c:366 msgid "Depth-merging" msgstr "S'està fusionant segons la profunditat" -#: plug-ins/common/depth-merge.c:730 +#: plug-ins/common/depth-merge.c:617 msgid "Depth Merge" msgstr "Fusió per profunditat" -#: plug-ins/common/depth-merge.c:780 -msgid "Source 1:" -msgstr "Font 1:" - -#: plug-ins/common/depth-merge.c:793 plug-ins/common/depth-merge.c:821 -msgid "Depth map:" -msgstr "Mapa de la profunditat:" - -#: plug-ins/common/depth-merge.c:808 -msgid "Source 2:" -msgstr "Font 2:" - -#. Numeric parameters -#: plug-ins/common/depth-merge.c:837 -msgid "O_verlap:" -msgstr "Su_perposa:" - -#: plug-ins/common/depth-merge.c:846 -msgid "O_ffset:" -msgstr "_Desplaçament:" - -#: plug-ins/common/depth-merge.c:855 -msgid "Sc_ale 1:" -msgstr "Esc_ala 1:" - -#: plug-ins/common/depth-merge.c:864 -msgid "Sca_le 2:" -msgstr "Esca_la 2:" - #: plug-ins/common/despeckle.c:169 msgid "Des_peckle..." msgstr "Elimina els _pics..." @@ -2087,24 +2527,24 @@ msgstr "Nivell de _blanc" msgid "White level" msgstr "Nivell de blanc" -#: plug-ins/common/despeckle.c:408 plug-ins/common/despeckle.c:784 +#: plug-ins/common/despeckle.c:386 plug-ins/common/despeckle.c:762 msgid "Despeckle" msgstr "Elimina els pics" -#: plug-ins/common/despeckle.c:418 +#: plug-ins/common/despeckle.c:396 msgid "Median" msgstr "Mediana" -#: plug-ins/common/despeckle.c:419 plug-ins/pikaressionist/orientation.c:176 +#: plug-ins/common/despeckle.c:397 plug-ins/pikaressionist/orientation.c:176 #: plug-ins/pikaressionist/size.c:183 msgid "Adaptive" msgstr "Adaptable" -#: plug-ins/common/despeckle.c:420 +#: plug-ins/common/despeckle.c:398 msgid "Recursive-Median" msgstr "Mediana - Recursiu" -#: plug-ins/common/despeckle.c:421 +#: plug-ins/common/despeckle.c:399 msgid "Recursive-Adaptive" msgstr "Recursiu - Adaptatiu" @@ -2120,8 +2560,9 @@ msgstr "Elimina les bandes verticals de la imatge" msgid "This plug-in tries to remove vertical stripes from an image." msgstr "Aquest connector intenta eliminar les ratlles verticals d'una imatge." -#: plug-ins/common/destripe.c:141 plug-ins/common/file-html-table.c:194 -#: plug-ins/common/file-ps.c:383 plug-ins/common/file-ps.c:497 +#: plug-ins/common/destripe.c:141 plug-ins/common/file-html-table.c:195 +#: plug-ins/common/file-ps.c:386 plug-ins/common/file-ps.c:500 +#: plug-ins/common/file-raw-data.c:355 plug-ins/common/smooth-palette.c:135 #: plug-ins/imagemap/imap_grid.c:255 msgid "_Width" msgstr "Am_plada" @@ -2138,23 +2579,23 @@ msgstr "Crea un _histograma" msgid "Output a histogram" msgstr "Sortida d'un histograma" -#: plug-ins/common/destripe.c:270 +#: plug-ins/common/destripe.c:239 msgid "Destriping" msgstr "S'estan traient les bandes" -#: plug-ins/common/destripe.c:492 +#: plug-ins/common/destripe.c:461 msgid "Destripe" msgstr "Treu les bandes" -#: plug-ins/common/file-aa.c:131 plug-ins/common/file-aa.c:133 +#: plug-ins/common/file-aa.c:132 plug-ins/common/file-aa.c:134 msgid "ASCII art" msgstr "Art ASCII" -#: plug-ins/common/file-aa.c:136 +#: plug-ins/common/file-aa.c:137 msgid "Saves grayscale image in various text formats" msgstr "Desa la imatge en escala de grisos en diversos formats de text" -#: plug-ins/common/file-aa.c:138 +#: plug-ins/common/file-aa.c:139 msgid "" "This plug-in uses aalib to save grayscale image as ascii art into a variety " "of text formats" @@ -2162,32 +2603,50 @@ msgstr "" "Aquest connector utilitza aalib per a desar la imatge en escala de grisos " "com a art ascii en una varietat de formats de text" -#: plug-ins/common/file-aa.c:155 +#: plug-ins/common/file-aa.c:156 msgid "_Format" msgstr "_Formata" -#: plug-ins/common/file-aa.c:156 +#: plug-ins/common/file-aa.c:157 msgid "File type to use" msgstr "Tipus de fitxer a utilitzar" -#: plug-ins/common/file-aa.c:209 +#: plug-ins/common/file-aa.c:207 msgid "ASCII art does not support multiple layers." msgstr "L'art ASCII no admet múltiples capes." -#: plug-ins/common/file-cel.c:140 plug-ins/common/file-cel.c:172 +#: plug-ins/common/file-cel.c:141 plug-ins/common/file-cel.c:171 msgid "KISS CEL" msgstr "KISS CEL" -#: plug-ins/common/file-cel.c:245 +#: plug-ins/common/file-cel.c:159 +#, fuzzy +#| msgid "_Palette Map" +msgid "_Palette file" +msgstr "Mapa de la _paleta" + +#: plug-ins/common/file-cel.c:160 +#, fuzzy +#| msgid "Error: failed to load parameters" +msgid "KCF file to load palette from" +msgstr "S'ha produït un error: no es poden carregar els paràmetres" + +#. Let user choose KCF palette (cancel ignores) +#: plug-ins/common/file-cel.c:227 msgid "Load KISS Palette" msgstr "Carrega la paleta KISS" -#: plug-ins/common/file-cel.c:310 +#: plug-ins/common/file-cel.c:253 +#, fuzzy +msgid "This KISS CEL image requires a palette file." +msgstr "Aquesta imatge KISS CEL requereix un fitxer de paleta." + +#: plug-ins/common/file-cel.c:317 msgid "CEL format does not support multiple layers." msgstr "El format CEL no admet múltiples capes." -#: plug-ins/common/file-cel.c:364 plug-ins/common/file-cel.c:415 -#: plug-ins/common/file-cel.c:436 +#: plug-ins/common/file-cel.c:362 plug-ins/common/file-cel.c:414 +#: plug-ins/common/file-cel.c:435 msgid "EOF or error while reading image header" msgstr "" "S'ha arribat al final del fitxer (EOF) o s'ha produït un error en llegir la " @@ -2210,38 +2669,38 @@ msgstr "" #. max. rows allocated #. column, highest column ever used #. * Open the file for reading... -#: plug-ins/common/file-cel.c:394 plug-ins/common/file-dicom.c:369 -#: plug-ins/common/file-gegl.c:352 plug-ins/common/file-gif-load.c:402 -#: plug-ins/common/file-heif.c:877 plug-ins/common/file-jp2-load.c:1091 -#: plug-ins/common/file-pcx.c:515 plug-ins/common/file-pcx.c:558 -#: plug-ins/common/file-pdf-load.c:879 plug-ins/common/file-pix.c:381 -#: plug-ins/common/file-png.c:665 plug-ins/common/file-pnm.c:714 -#: plug-ins/common/file-ps.c:1116 plug-ins/common/file-raw-data.c:1665 -#: plug-ins/common/file-sunras.c:450 plug-ins/common/file-tga.c:440 -#: plug-ins/common/file-wbmp.c:176 plug-ins/common/file-wmf.c:1026 -#: plug-ins/common/file-xbm.c:742 plug-ins/common/file-xmc.c:648 -#: plug-ins/common/file-xpm.c:385 plug-ins/common/file-xwd.c:478 -#: plug-ins/file-bmp/bmp-load.c:218 plug-ins/file-exr/file-exr.c:188 -#: plug-ins/file-faxg3/faxg3.c:240 plug-ins/file-fli/fli-pika.c:502 -#: plug-ins/file-icns/file-icns-load.c:507 plug-ins/file-ico/ico-load.c:673 +#: 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-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-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 +#: plug-ins/common/file-xbm.c:741 plug-ins/common/file-xmc.c:646 +#: plug-ins/common/file-xpm.c:384 plug-ins/common/file-xwd.c:484 +#: plug-ins/file-bmp/bmp-load.c:218 plug-ins/file-exr/file-exr.c:193 +#: plug-ins/file-faxg3/faxg3.c:244 plug-ins/file-fli/fli-pika.c:493 +#: plug-ins/file-icns/file-icns-load.c:508 plug-ins/file-ico/ico-load.c:673 #: 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:413 -#: plug-ins/file-raw/file-rawtherapee.c:341 plug-ins/file-sgi/sgi.c:334 +#: 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 #, c-format msgid "Opening '%s'" msgstr "S'està obrint «%s»" -#: plug-ins/common/file-cel.c:445 +#: plug-ins/common/file-cel.c:444 msgid "is not a CEL image file" msgstr "no és un fitxer d'imatge CEL" -#: plug-ins/common/file-cel.c:460 +#: plug-ins/common/file-cel.c:459 #, c-format msgid "illegal bpp value in image: %hhu" msgstr "el valor de bpp no és permès a la imatge: %hhu" -#: plug-ins/common/file-cel.c:475 +#: plug-ins/common/file-cel.c:474 #, c-format msgid "" "illegal image dimensions: width: %d, horizontal offset: %d, height: %d, " @@ -2250,46 +2709,39 @@ msgstr "" "les mides de la imatge no són permeses: amplada: %d, desplaçament " "horitzontal: %d, alçada: %d, desplaçament vertical: %d" -#: plug-ins/common/file-cel.c:489 +#: plug-ins/common/file-cel.c:488 msgid "Can't create a new image" msgstr "No es pot crear una imatge nova" -#: plug-ins/common/file-cel.c:526 plug-ins/common/file-cel.c:563 -#: plug-ins/common/file-cel.c:589 +#: plug-ins/common/file-cel.c:525 plug-ins/common/file-cel.c:562 +#: plug-ins/common/file-cel.c:588 msgid "EOF or error while reading image data" msgstr "" "S'ha arribat al final del fitxer (EOF) o s'ha produït un error en llegir les" " dades de la imatge" -#: plug-ins/common/file-cel.c:607 +#: plug-ins/common/file-cel.c:606 #, c-format msgid "Unsupported bit depth (%d)!" msgstr "No s'accepta aquesta profunditat de bits (%d)" -#: plug-ins/common/file-cel.c:692 plug-ins/common/file-cel.c:704 -#, c-format -msgid "'%s': EOF or error while reading palette header" -msgstr "" -"«%s»: s'ha arribat al final del fitxer (EOF) o s'ha produït un error en " -"llegir la capçalera de la paleta" - -#: plug-ins/common/file-cel.c:713 +#: plug-ins/common/file-cel.c:693 #, c-format msgid "'%s': is not a KCF palette file" msgstr "«%s»: no és un fitxer de paleta KCF" -#: plug-ins/common/file-cel.c:722 +#: plug-ins/common/file-cel.c:703 #, c-format msgid "'%s': illegal bpp value in palette: %hhu" msgstr "«%s»: el valor bpp no és permès a la paleta: %hhu" -#: plug-ins/common/file-cel.c:731 +#: plug-ins/common/file-cel.c:713 #, c-format msgid "'%s': illegal number of colors: %u" msgstr "«%s»: el nombre de colors no és permès: %u" -#: plug-ins/common/file-cel.c:746 plug-ins/common/file-cel.c:763 -#: plug-ins/common/file-cel.c:783 +#: plug-ins/common/file-cel.c:729 plug-ins/common/file-cel.c:757 +#: plug-ins/common/file-cel.c:788 #, c-format msgid "'%s': EOF or error while reading palette data" msgstr "" @@ -2298,393 +2750,393 @@ msgstr "" #. init the progress meter #. * Open the file for writing... -#: plug-ins/common/file-cel.c:840 plug-ins/common/file-farbfeld.c:373 -#: plug-ins/common/file-gif-save.c:917 plug-ins/common/file-html-table.c:364 -#: plug-ins/common/file-jpegxl.c:1383 plug-ins/common/file-pcx.c:1114 -#: plug-ins/common/file-pix.c:560 plug-ins/common/file-png.c:1494 -#: plug-ins/common/file-pnm.c:1635 plug-ins/common/file-ps.c:1338 -#: plug-ins/common/file-qoi.c:375 plug-ins/common/file-sunras.c:629 -#: plug-ins/common/file-tga.c:1230 plug-ins/common/file-xbm.c:1051 -#: plug-ins/common/file-xpm.c:705 plug-ins/common/file-xwd.c:714 -#: plug-ins/file-bmp/bmp-save.c:333 plug-ins/file-fits/fits.c:674 -#: plug-ins/file-fli/fli-pika.c:784 plug-ins/file-icns/file-icns-save.c:612 -#: plug-ins/file-ico/ico-save.c:1333 plug-ins/file-ico/ico-save.c:1542 +#: 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-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 +#: plug-ins/common/file-xpm.c:704 plug-ins/common/file-xwd.c:720 +#: plug-ins/file-bmp/bmp-save.c:333 plug-ins/file-fits/fits.c:673 +#: plug-ins/file-fli/fli-pika.c:775 plug-ins/file-icns/file-icns-save.c:612 +#: plug-ins/file-ico/ico-save.c:1334 plug-ins/file-ico/ico-save.c:1543 #: plug-ins/file-jpeg/jpeg-save.c:272 plug-ins/file-psd/psd-save.c:2160 -#: plug-ins/file-sgi/sgi.c:646 plug-ins/file-tiff/file-tiff-save.c:1074 +#: plug-ins/file-sgi/sgi.c:645 plug-ins/file-tiff/file-tiff-save.c:1074 #, c-format msgid "Exporting '%s'" msgstr "Exportació «%s»" -#: plug-ins/common/file-csource.c:122 +#: plug-ins/common/file-csource.c:123 msgid "C source code" msgstr "Codi font C" -#: plug-ins/common/file-csource.c:125 +#: plug-ins/common/file-csource.c:126 msgid "Dump image data in RGB(A) format for C source" msgstr "Bolca les dades de la imatge en format RGB(A) per a codi en C" -#: plug-ins/common/file-csource.c:127 +#: plug-ins/common/file-csource.c:128 msgid "CSource cannot be run non-interactively." msgstr "CSource no es pot executar de forma no interactiva." -#: plug-ins/common/file-csource.c:135 +#: plug-ins/common/file-csource.c:136 msgid "C-Source" msgstr "Codi font C" -#: plug-ins/common/file-csource.c:144 +#: plug-ins/common/file-csource.c:145 msgid "_Prefixed name" msgstr "Nom _prefixat" -#: plug-ins/common/file-csource.c:145 +#: plug-ins/common/file-csource.c:146 msgid "Prefixed name" msgstr "Nom prefixat" -#: plug-ins/common/file-csource.c:150 +#: plug-ins/common/file-csource.c:151 msgid "Comme_nt" msgstr "_Comentari" -#: plug-ins/common/file-csource.c:151 +#: plug-ins/common/file-csource.c:152 msgid "Comment" msgstr "Comentari" -#: plug-ins/common/file-csource.c:159 +#: plug-ins/common/file-csource.c:160 msgid "Save comment to _file" msgstr "De_sa el comentari al fitxer" -#: plug-ins/common/file-csource.c:160 +#: plug-ins/common/file-csource.c:161 msgid "Save comment" msgstr "Desa el comentari" -#: plug-ins/common/file-csource.c:165 +#: plug-ins/common/file-csource.c:166 msgid "Use GLib types (guint_8*)" msgstr "Utilitza els tipus de la GLib (guint_8*)" -#: plug-ins/common/file-csource.c:166 +#: plug-ins/common/file-csource.c:167 msgid "Use GLib types" msgstr "Utilitza els tipus de la GLib" -#: plug-ins/common/file-csource.c:171 +#: plug-ins/common/file-csource.c:172 msgid "Save alpha channel (RG_BA/RGB)" msgstr "Desa el canal alfa (RG_BA/RGB)" -#: plug-ins/common/file-csource.c:172 +#: plug-ins/common/file-csource.c:173 msgid "Save the alpha channel" msgstr "Desa el canal alfa" -#: plug-ins/common/file-csource.c:177 +#: plug-ins/common/file-csource.c:178 msgid "Save as RGB565 (1_6-bit)" msgstr "Desa com a RGB565 (1_6-bit)" -#: plug-ins/common/file-csource.c:178 +#: plug-ins/common/file-csource.c:179 msgid "Use RGB565 encoding" msgstr "Usa la codificació RGB565" -#: plug-ins/common/file-csource.c:183 +#: plug-ins/common/file-csource.c:184 msgid "_Use macros instead of struct" msgstr "_Utilitza macros en lloc d'estructures" -#: plug-ins/common/file-csource.c:184 +#: plug-ins/common/file-csource.c:185 msgid "Use C macros" msgstr "Utilitza macros C" -#: plug-ins/common/file-csource.c:189 +#: plug-ins/common/file-csource.c:190 msgid "Use _1 bit Run-Length-Encoding" msgstr "U_sa la codificació Run-Length d'1 bit" -#: plug-ins/common/file-csource.c:190 +#: plug-ins/common/file-csource.c:191 msgid "Use run-length-encoding" msgstr "Utilitza la codificació run-length" -#: plug-ins/common/file-csource.c:195 +#: plug-ins/common/file-csource.c:196 plug-ins/pagecurl/pagecurl.c:263 msgid "Opaci_ty" msgstr "O_pacitat" -#: plug-ins/common/file-csource.c:196 +#: plug-ins/common/file-csource.c:197 plug-ins/pagecurl/pagecurl.c:264 msgid "Opacity" msgstr "Opacitat" -#: plug-ins/common/file-csource.c:240 +#: plug-ins/common/file-csource.c:238 msgid "C source does not support multiple layers." msgstr "La font C no admet múltiples capes." -#: plug-ins/common/file-compressor.c:213 +#: plug-ins/common/file-compressor.c:216 msgid "gzip archive" msgstr "arxiu gzip" -#: plug-ins/common/file-compressor.c:232 +#: plug-ins/common/file-compressor.c:235 msgid "bzip archive" msgstr "arxiu bzip" -#: plug-ins/common/file-compressor.c:251 +#: plug-ins/common/file-compressor.c:254 msgid "xz archive" msgstr "arxiu xz" -#: plug-ins/common/file-compressor.c:438 +#: plug-ins/common/file-compressor.c:444 msgid "No sensible file extension, saving as compressed XCF." msgstr "Es desconeix l'extensió del fitxer, es desarà com a XCF comprimit." -#: plug-ins/common/file-compressor.c:462 +#: plug-ins/common/file-compressor.c:468 #, c-format msgid "Compressing '%s'" msgstr "Compressió «%s»" -#: plug-ins/common/file-compressor.c:500 +#: plug-ins/common/file-compressor.c:506 msgid "No sensible file extension, attempting to load with file magic." msgstr "" "Es desconeix l'extensió del fitxer, s'intentarà llegir el fitxer intentant " "detectar-ne el tipus." -#: plug-ins/common/file-desktop-link.c:112 +#: plug-ins/common/file-desktop-link.c:114 msgid "Desktop Link" msgstr "Drecera a l'escriptori" -#: plug-ins/common/file-desktop-link.c:198 +#: plug-ins/common/file-desktop-link.c:202 #, c-format msgid "Error loading desktop file '%s': %s" msgstr "No s'ha pogut obrir el fitxer «%s» de l'escriptori: %s" -#: plug-ins/common/file-dicom.c:173 +#: plug-ins/common/file-dicom.c:176 msgid "DICOM image" msgstr "Imatge DICOM" -#: plug-ins/common/file-dicom.c:205 +#: plug-ins/common/file-dicom.c:208 msgid "Digital Imaging and Communications in Medicine image" msgstr "Imatges digitals i comunicacions en medicina" -#: plug-ins/common/file-dicom.c:301 +#: plug-ins/common/file-dicom.c:307 msgid "Dicom format does not support multiple layers." msgstr "El format Dicom no admet múltiples capes." -#: plug-ins/common/file-dicom.c:403 +#: plug-ins/common/file-dicom.c:409 #, c-format msgid "'%s' is not a DICOM file." msgstr "«%s»: no és un fitxer DICOM." -#: plug-ins/common/file-dicom.c:576 +#: plug-ins/common/file-dicom.c:582 #, c-format msgid "Transfer syntax %s is not supported by PIKA." msgstr "El PIKA no permet la sintaxi de transferència %s." -#: plug-ins/common/file-dicom.c:631 +#: plug-ins/common/file-dicom.c:637 #, c-format msgid "%s is not supported by PIKA in combination with samples per pixel: %d" msgstr "" "%s no és compatible amb el PIKA en combinació amb mostres per píxel: %d" -#: plug-ins/common/file-dicom.c:1523 +#: plug-ins/common/file-dicom.c:1529 msgid "Cannot save images with alpha channel." msgstr "No es poden desar imatges amb canal alfa." -#: plug-ins/common/file-dicom.c:1542 plug-ins/common/file-ps.c:1333 -#: plug-ins/common/file-xwd.c:709 plug-ins/file-fits/fits.c:669 +#: plug-ins/common/file-dicom.c:1548 plug-ins/common/file-ps.c:1316 +#: plug-ins/common/file-xwd.c:715 plug-ins/file-fits/fits.c:668 msgid "Cannot operate on unknown image types." msgstr "No es pot operar en tipus d'imatge desconeguts." -#: plug-ins/common/file-farbfeld.c:135 plug-ins/common/file-farbfeld.c:161 +#: plug-ins/common/file-farbfeld.c:138 plug-ins/common/file-farbfeld.c:164 msgid "Farbfeld" msgstr "Farbfeld" -#: plug-ins/common/file-farbfeld.c:138 plug-ins/common/file-farbfeld.c:140 +#: plug-ins/common/file-farbfeld.c:141 plug-ins/common/file-farbfeld.c:143 msgid "Load file in the Farbfeld file format" msgstr "Carrega el fitxer en el format de fitxer Farbfeld" -#: plug-ins/common/file-farbfeld.c:164 plug-ins/common/file-farbfeld.c:166 +#: plug-ins/common/file-farbfeld.c:167 plug-ins/common/file-farbfeld.c:169 msgid "Export image in the Farbfeld file format" msgstr "Exporta la imatge en el format de fitxer Farbfeld" -#: plug-ins/common/file-farbfeld.c:258 +#: plug-ins/common/file-farbfeld.c:257 msgid "Farbfeld format does not support multiple layers." msgstr "El format Farbfeld no admet múltiples capes." -#: plug-ins/common/file-farbfeld.c:310 +#: plug-ins/common/file-farbfeld.c:309 msgid "Failed to read Farbfeld header" msgstr "No s'ha pogut llegir la capçalera Farbfeld" -#: plug-ins/common/file-farbfeld.c:336 +#: plug-ins/common/file-farbfeld.c:335 msgid "Premature end of Farbfeld pixel data" msgstr "Final prematur de les dades dels píxels de Farbfeld" -#: plug-ins/common/file-gbr.c:125 +#: plug-ins/common/file-gbr.c:126 msgid "PIKA brush" msgstr "Pinzell del PIKA" -#: plug-ins/common/file-gbr.c:127 +#: plug-ins/common/file-gbr.c:128 msgid "Brush" msgstr "Pinzell" -#: plug-ins/common/file-gbr.c:131 plug-ins/common/file-gbr.c:133 +#: plug-ins/common/file-gbr.c:132 plug-ins/common/file-gbr.c:134 msgid "Exports files in the PIKA brush file format" msgstr "Exporta fitxers en el format de fitxer de pinzell del PIKA" -#: plug-ins/common/file-gbr.c:151 +#: plug-ins/common/file-gbr.c:152 msgid "Sp_acing" msgstr "_Espaiat" -#: plug-ins/common/file-gbr.c:152 +#: plug-ins/common/file-gbr.c:153 plug-ins/common/file-gih.c:188 msgid "Spacing of the brush" msgstr "Espaiat del pinzell" -#: plug-ins/common/file-gbr.c:157 plug-ins/common/file-pat.c:136 +#: plug-ins/common/file-gbr.c:158 plug-ins/common/file-gih.c:193 +#: plug-ins/common/file-pat.c:137 msgid "_Description" msgstr "_Descripció" -#: plug-ins/common/file-gbr.c:158 +#: plug-ins/common/file-gbr.c:159 msgid "Short description of the brush" msgstr "Descripció breu del pinzell" -#: plug-ins/common/file-gbr.c:159 +#: plug-ins/common/file-gbr.c:160 msgid "PIKA Brush" msgstr "Pinzell del PIKA" -#: plug-ins/common/file-gbr.c:231 -msgid "GBR format does not support multiple layers." -msgstr "El format GBR no admet múltiples capes." - -#: plug-ins/common/file-gegl.c:114 +#: plug-ins/common/file-gegl.c:117 msgid "Radiance RGBE" msgstr "Radiance RGBE" -#: plug-ins/common/file-gegl.c:130 plug-ins/file-exr/file-exr.c:106 +#: plug-ins/common/file-gegl.c:133 plug-ins/file-exr/file-exr.c:109 msgid "OpenEXR image" msgstr "Obre la imatge EXR" -#: plug-ins/common/file-gegl.c:311 +#: plug-ins/common/file-gegl.c:317 msgid "GEGL export plug-in does not support multiple layers." msgstr "El connector d'exportació GEGL no admet múltiples capes." -#: plug-ins/common/file-gegl.c:375 +#: plug-ins/common/file-gegl.c:381 #, c-format msgid "Could not open '%s'" msgstr "No s'ha pogut obrir «%s»" -#: plug-ins/common/file-gif-load.c:176 plug-ins/common/file-gif-save.c:149 +#: plug-ins/common/file-gif-load.c:178 plug-ins/common/file-gif-save.c:150 msgid "GIF image" msgstr "Imatge GIF" -#: plug-ins/common/file-gif-load.c:417 +#: plug-ins/common/file-gif-load.c:421 msgid "GIF magic code" msgstr "Codi màgic GIF" -#: plug-ins/common/file-gif-load.c:425 +#: plug-ins/common/file-gif-load.c:429 msgid "This is not a GIF file: incorrect magic code" msgstr "Aquest no és un fitxer GIF: codi màgic incorrecte" -#: plug-ins/common/file-gif-load.c:433 +#: plug-ins/common/file-gif-load.c:437 msgid "Incorrect GIF version: not '87a' or '89a'" msgstr "Versió incorrecta del GIF: no és «87a» ni «89a»" -#: plug-ins/common/file-gif-load.c:440 +#: plug-ins/common/file-gif-load.c:444 msgid "screen descriptor" msgstr "descriptor de pantalla" -#: plug-ins/common/file-gif-load.c:458 +#: plug-ins/common/file-gif-load.c:462 msgid "global colormap" msgstr "mapa de colors global" -#: plug-ins/common/file-gif-load.c:466 -msgid "Non-square pixels. Image might look squashed." -msgstr "Els píxels no són quadrats. La imatge pot semblar aixafada." - -#: plug-ins/common/file-gif-load.c:475 plug-ins/common/file-gif-load.c:1060 +#: plug-ins/common/file-gif-load.c:474 plug-ins/common/file-gif-load.c:1080 msgid "image data" msgstr "dades de la imatge" -#: plug-ins/common/file-gif-load.c:492 +#: plug-ins/common/file-gif-load.c:491 msgid "extension data" msgstr "dades de l'extensió" -#: plug-ins/common/file-gif-load.c:512 +#: plug-ins/common/file-gif-load.c:511 msgid "frame info" msgstr "informació del marc" -#: plug-ins/common/file-gif-load.c:525 +#: plug-ins/common/file-gif-load.c:524 msgid "local colormap" msgstr "mapa de colors local" -#: plug-ins/common/file-gif-load.c:586 plug-ins/common/file-gif-load.c:591 +#: plug-ins/common/file-gif-load.c:569 +#, 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 "Els píxels no són quadrats. La imatge pot semblar aixafada." + +#: plug-ins/common/file-gif-load.c:606 plug-ins/common/file-gif-load.c:611 #, c-format msgid "Error reading %s. %s" msgstr "S'ha produït un error en llegir %s. %s" -#: plug-ins/common/file-gif-load.c:587 plug-ins/common/file-gif-load.c:592 -#: plug-ins/common/file-gif-load.c:743 plug-ins/common/file-gif-load.c:751 -#: plug-ins/common/file-gif-load.c:782 plug-ins/common/file-gif-load.c:836 -#: plug-ins/common/file-gif-load.c:926 plug-ins/common/file-gif-load.c:945 -#: plug-ins/common/file-gif-load.c:1046 plug-ins/common/file-gif-load.c:1050 -#: plug-ins/common/file-gif-load.c:1195 +#: 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 msgid "Image may be corrupt!" msgstr "La imatge pot estar malmesa!" -#: plug-ins/common/file-gif-load.c:743 +#: plug-ins/common/file-gif-load.c:763 msgid "Error reading data size" msgstr "Error en llegir la mida de les dades" -#: plug-ins/common/file-gif-load.c:751 +#: plug-ins/common/file-gif-load.c:771 msgid "Error reading data" msgstr "S'ha produït un error en llegir les dades" -#: plug-ins/common/file-gif-load.c:782 +#: plug-ins/common/file-gif-load.c:802 msgid "Not enough compressed data" msgstr "No hi ha prou dades comprimides" -#: plug-ins/common/file-gif-load.c:836 +#: plug-ins/common/file-gif-load.c:856 msgid "Value out of range for code size" msgstr "Valor fora de rang per a la mida del codi" -#: plug-ins/common/file-gif-load.c:925 +#: plug-ins/common/file-gif-load.c:945 msgid "Invalid code, expecting end of data marker" msgstr "Codi no vàlid, s'espera el final del marcador de dades" -#: plug-ins/common/file-gif-load.c:945 +#: plug-ins/common/file-gif-load.c:965 msgid "Unexpected extra data" msgstr "Dades extres inesperades" -#: plug-ins/common/file-gif-load.c:964 +#: plug-ins/common/file-gif-load.c:984 msgid "Invalid table entry" msgstr "Entrada de taula no vàlida" -#: plug-ins/common/file-gif-load.c:964 plug-ins/common/file-gif-load.c:970 +#: plug-ins/common/file-gif-load.c:984 plug-ins/common/file-gif-load.c:990 msgid "Image is corrupt!" msgstr "La imatge està malmesa!" -#: plug-ins/common/file-gif-load.c:970 +#: plug-ins/common/file-gif-load.c:990 msgid "Circular table entry" msgstr "Entrada de taula circular" -#: plug-ins/common/file-gif-load.c:1045 +#: plug-ins/common/file-gif-load.c:1065 #, c-format msgid "%s. %s" msgstr "%s. %s" -#: plug-ins/common/file-gif-load.c:1046 plug-ins/common/file-gif-load.c:1050 +#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 msgid "Invalid frame dimensions" msgstr "Dimensions no vàlides del marc" -#: plug-ins/common/file-gif-load.c:1066 +#: plug-ins/common/file-gif-load.c:1086 msgid "compressed image data" msgstr "dades d'imatge comprimides" -#: plug-ins/common/file-gif-load.c:1099 +#: plug-ins/common/file-gif-load.c:1119 #, c-format msgid "Background (%d%s)" msgstr "Fons (%d%s)" -#: plug-ins/common/file-gif-load.c:1126 +#: plug-ins/common/file-gif-load.c:1146 #, c-format msgid "Opening '%s' (frame %d)" msgstr "S'està obrint «%s» (marc %d)" -#: plug-ins/common/file-gif-load.c:1155 +#: plug-ins/common/file-gif-load.c:1175 #, c-format msgid "Frame %d" msgstr "Marc %d" -#: plug-ins/common/file-gif-load.c:1157 +#: plug-ins/common/file-gif-load.c:1177 #, c-format msgid "Frame %d (%d%s)" msgstr "Marc %d (%d%s)" -#: plug-ins/common/file-gif-load.c:1188 +#: plug-ins/common/file-gif-load.c:1208 #, c-format msgid "" "GIF: Undocumented GIF composite type %d is not handled. Animation might not" @@ -2693,12 +3145,12 @@ msgstr "" "GIF: No es pot gestionar el tipus de composició GIF %d no documentat. Pot " "ser que l'animació no es reprodueixi o no es torni a desar perfectament." -#: plug-ins/common/file-gif-load.c:1194 +#: plug-ins/common/file-gif-load.c:1214 #, c-format msgid "Unknown composite type %d. %s" msgstr "Tipus de composició %d. %s desconeguda" -#: plug-ins/common/file-gif-load.c:1237 +#: plug-ins/common/file-gif-load.c:1257 msgid "" "Can't handle non-alpha RGB frames.\n" "Please file a bug report at https://gitlab.gnome.org/GNOME/pika/issues" @@ -2706,19 +3158,19 @@ msgstr "" "No es poden gestionar fotogrames RGB no alfa.\n" "Informeu de l'error a https://gitlab.gnome.org/GNOME/pika/issues" -#: plug-ins/common/file-gif-load.c:1360 +#: plug-ins/common/file-gif-load.c:1380 msgid "Too much compressed data, ignoring extra..." msgstr "Hi ha massa dades comprimides, s'ignoraran les extres..." -#: plug-ins/common/file-gif-save.c:151 +#: plug-ins/common/file-gif-save.c:152 msgid "GIF" msgstr "GIF" -#: plug-ins/common/file-gif-save.c:154 +#: plug-ins/common/file-gif-save.c:155 msgid "exports files in GIF file format" msgstr "exporta fitxers en format de fitxer GIF" -#: plug-ins/common/file-gif-save.c:157 +#: plug-ins/common/file-gif-save.c:158 #, no-c-format msgid "" "Export a file in GIF format, with possible animation, transparency, and " @@ -2729,102 +3181,102 @@ msgid "" msgstr "" "Exporta un fitxer en format GIF, amb una possible animació, transparència i " "comentari. Per a exportar una animació, opera en un fitxer multicapa i dona " -"el paràmetre «com a animació» coem a CERT. El connector interpretarà un " -"alfa menor del 50% com a transparent. Quan s'executa de forma no " -"interactiva, el valor del comentari es pren del paràsit «pika-comment»." +"el paràmetre «com a animació» coem a CERT. El connector interpretarà un alfa" +" menor del 50% com a transparent. Quan s'executa de forma no interactiva, el" +" valor del comentari es pren del paràsit «pika-comment»." -#: plug-ins/common/file-gif-save.c:183 plug-ins/common/file-mng.c:277 +#: plug-ins/common/file-gif-save.c:184 plug-ins/common/file-mng.c:278 msgid "_Interlace" msgstr "_Entrellaça" -#: plug-ins/common/file-gif-save.c:184 +#: plug-ins/common/file-gif-save.c:185 msgid "Try to export as interlaced" msgstr "Intenta exportar com a entrellaçat" -#: plug-ins/common/file-gif-save.c:189 +#: plug-ins/common/file-gif-save.c:190 msgid "Loop _Forever" msgstr "_Bucle sense fi" -#: plug-ins/common/file-gif-save.c:190 +#: plug-ins/common/file-gif-save.c:191 msgid "(animated gif) Loop infinitely" msgstr "(gif animat) Bucle infinit" -#: plug-ins/common/file-gif-save.c:195 +#: plug-ins/common/file-gif-save.c:196 msgid "_Number of repeats" msgstr "_Nombre de repeticions" -#: plug-ins/common/file-gif-save.c:196 +#: plug-ins/common/file-gif-save.c:197 msgid "(animated gif) Number of repeats (Ignored if 'loop' is TRUE)" msgstr "(gif animat) Nombre de repeticions (s'ignora si «loop» és CERT)" -#: plug-ins/common/file-gif-save.c:202 +#: plug-ins/common/file-gif-save.c:203 msgid "_Delay between frames when unspecified" msgstr "_Retard entre fotogrames no especificats" -#: plug-ins/common/file-gif-save.c:203 +#: plug-ins/common/file-gif-save.c:204 msgid "(animated gif) Default delay between frames in milliseconds" msgstr "(gif animat) Retard predeterminat entre fotogrames en mil·lisegons" -#: plug-ins/common/file-gif-save.c:209 +#: plug-ins/common/file-gif-save.c:210 msgid "Frame disposal _when unspecified" msgstr "Disposició dels _fotogrames quan no s'especifiqui" -#: plug-ins/common/file-gif-save.c:210 +#: plug-ins/common/file-gif-save.c:211 msgid "" "(animated gif) Default disposal type (0=`don't care`, 1=combine, 2=replace)" msgstr "" "(gif animat) Tipus de disposició predeterminat (0=`no importa`, 1=combina, " "2=substitueix)" -#: plug-ins/common/file-gif-save.c:218 +#: plug-ins/common/file-gif-save.c:219 msgid "_As animation" msgstr "Com una _animació" -#: plug-ins/common/file-gif-save.c:219 +#: plug-ins/common/file-gif-save.c:220 msgid "Export GIF as animation?" msgstr "Voleu exportar la imatge com una animació?" -#: plug-ins/common/file-gif-save.c:224 +#: plug-ins/common/file-gif-save.c:225 msgid "_Use delay entered above for all frames" msgstr "_Utilitza el retard per a tots els fotogrames" -#: plug-ins/common/file-gif-save.c:225 +#: plug-ins/common/file-gif-save.c:226 msgid "(animated gif) Use specified delay for all frames" msgstr "(gif animat) Usa el retard especificat per a tots els fotogrames" -#: plug-ins/common/file-gif-save.c:230 +#: plug-ins/common/file-gif-save.c:231 msgid "Use dis_posal entered above for all frames" msgstr "Us_a la disposició introduïda anteriorment per a tots els fotogrames" -#: plug-ins/common/file-gif-save.c:232 +#: plug-ins/common/file-gif-save.c:233 msgid "(animated gif) Use specified disposal for all frames" msgstr "(gif animat) Usa la disposició especificada per a tots els fotogrames" -#: plug-ins/common/file-gif-save.c:237 +#: plug-ins/common/file-gif-save.c:238 msgid "Sa_ve comment" msgstr "De_sa el comentari" -#: plug-ins/common/file-gif-save.c:238 +#: plug-ins/common/file-gif-save.c:239 msgid "Save the image comment in the GIF file" msgstr "Desa el comentari d'imatge al fitxer GIF" -#: plug-ins/common/file-gif-save.c:243 +#: plug-ins/common/file-gif-save.c:244 msgid "Commen_t" msgstr "C_omentari" -#: plug-ins/common/file-gif-save.c:244 +#: plug-ins/common/file-gif-save.c:245 msgid "Image comment" msgstr "Comentari d'imatge" -#: plug-ins/common/file-gif-save.c:350 +#: plug-ins/common/file-gif-save.c:348 msgid "GIF format does not support multiple layers." msgstr "El format GIF no admet múltiples capes." -#: plug-ins/common/file-gif-save.c:558 +#: plug-ins/common/file-gif-save.c:553 msgid "Couldn't simply reduce colors further. Exporting as opaque." msgstr "No s'ha pogut reduir més els colors. S'exporta com a opac." -#: plug-ins/common/file-gif-save.c:677 +#: plug-ins/common/file-gif-save.c:672 #, c-format msgid "" "Unable to export '%s'. The GIF file format does not support images that are" @@ -2833,7 +3285,7 @@ msgstr "" "No s'ha pogut exportar «%s». El format de fitxer GIF no permet imatges de " "més de %d píxels d'amplada o alçada." -#: plug-ins/common/file-gif-save.c:803 +#: plug-ins/common/file-gif-save.c:798 msgid "" "The GIF format only supports comments in 7bit ASCII encoding. No comment is " "saved." @@ -2841,19 +3293,19 @@ msgstr "" "El format GIF només accepta comentaris codificats en ASCII 7 bits. No s'ha " "desat cap comentari." -#: plug-ins/common/file-gif-save.c:890 +#: plug-ins/common/file-gif-save.c:885 msgid "" "Cannot export RGB color images. Convert to indexed color or grayscale first." msgstr "" "No es poden exportar les imatges de color RGB. Convertiu-les primer a color " "indexat o a escala de grisos." -#: plug-ins/common/file-gif-save.c:1110 +#: plug-ins/common/file-gif-save.c:1105 msgid "Delay inserted to prevent evil CPU-sucking animation." msgstr "" "Retard inserit en l'animació per a prevenir sobresaturacions a la CPU." -#: plug-ins/common/file-gif-save.c:1159 +#: plug-ins/common/file-gif-save.c:1154 msgid "" "The image you are trying to export as a GIF contains layers which extend " "beyond the actual borders of the image." @@ -2861,11 +3313,11 @@ msgstr "" "La imatge que esteu intentant exportar en format GIF conté capes que " "s'estenen més enllà de les vores de la imatge." -#: plug-ins/common/file-gif-save.c:1165 +#: plug-ins/common/file-gif-save.c:1160 msgid "Cr_op" msgstr "_Escapça" -#: plug-ins/common/file-gif-save.c:1176 +#: plug-ins/common/file-gif-save.c:1171 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." @@ -2874,19 +3326,19 @@ msgstr "" "totes les capes d'acord amb les vores de la imatge o cancel·lar " "l'exportació." -#: plug-ins/common/file-gif-save.c:1266 plug-ins/common/file-mng.c:1642 +#: plug-ins/common/file-gif-save.c:1261 plug-ins/common/file-mng.c:1638 msgid "milliseconds" msgstr "mil·lisegons" -#: plug-ins/common/file-gif-save.c:1271 +#: plug-ins/common/file-gif-save.c:1267 msgid "I don't care" msgstr "No importa" -#: plug-ins/common/file-gif-save.c:1306 +#: plug-ins/common/file-gif-save.c:1303 msgid "Animated GIF" msgstr "GIF animat" -#: plug-ins/common/file-gif-save.c:1312 +#: plug-ins/common/file-gif-save.c:1310 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." @@ -2894,79 +3346,132 @@ msgstr "" "Només podeu exportar com a animació quan la imatge tingui més d'una capa.\n" "La imatge que intenteu exportar només en té una." -#: plug-ins/common/file-gih.c:178 +#: plug-ins/common/file-gih.c:157 msgid "PIKA brush (animated)" msgstr "Pinzell del PIKA (animat)" -#: plug-ins/common/file-gih.c:632 +#: plug-ins/common/file-gih.c:180 msgid "Brush Pipe" msgstr "Conducte del pinzell" -#: plug-ins/common/file-gih.c:650 plug-ins/imagemap/imap_settings.c:105 -msgid "_Description:" -msgstr "_Descripció:" - -#: plug-ins/common/file-gih.c:664 -msgid "_Spacing (percent):" +#: plug-ins/common/file-gih.c:187 +#, fuzzy +#| msgid "_Spacing (percent):" +msgid "Spacing (_percent)" msgstr "E_spaiat (percentatge):" -#: plug-ins/common/file-gih.c:718 -msgid "Pixels" -msgstr "Píxels" +#: plug-ins/common/file-gih.c:194 +#, fuzzy +#| msgid "Short description of the brush" +msgid "Short description of the GIH brush pipe" +msgstr "Descripció breu del pinzell" -#: plug-ins/common/file-gih.c:723 -msgid "Ce_ll size:" -msgstr "Mida de la ce_l·la:" +#: plug-ins/common/file-gih.c:199 +#, fuzzy +#| msgid "Ho_le width:" +msgid "Cell _width" +msgstr "Amp_lada del forat:" -#: plug-ins/common/file-gih.c:735 -msgid "_Number of cells:" +#: plug-ins/common/file-gih.c:200 +#, fuzzy +msgid "Width of the brush cells in pixels" +msgstr "Amplada de les cel·les del pinzell en píxels" + +#: plug-ins/common/file-gih.c:205 +#, fuzzy +#| msgid "Image _height:" +msgid "Cell _height" +msgstr "A_lçada de la imatge:" + +#: plug-ins/common/file-gih.c:206 +#, fuzzy +msgid "Height of the brush cells in pixels" +msgstr "Alçada de les cel·les del pinzell en píxels" + +#: plug-ins/common/file-gih.c:211 +#, fuzzy +#| msgid "_Number of cells:" +msgid "_Number of cells" msgstr "_Nombre de cel·les:" -#: plug-ins/common/file-gih.c:760 -msgid " Rows of " -msgstr " Files de " +#: plug-ins/common/file-gih.c:212 +#, fuzzy +#| msgid "_Number of cells:" +msgid "Number of cells to cut up" +msgstr "_Nombre de cel·les:" -#: plug-ins/common/file-gih.c:772 -msgid " Columns on each layer" -msgstr " Columnes en cada capa" +#: plug-ins/common/file-gih.c:217 +#, fuzzy +#| msgid "Ranks:" +msgid "_Rank" +msgstr "Rangs:" -#: plug-ins/common/file-gih.c:776 -msgid " (Width Mismatch!) " -msgstr " (L'amplada no coincideix) " +#: plug-ins/common/file-gih.c:218 +#, fuzzy +#| msgid "Invalid frame dimensions" +msgid "Ranks of the dimensions" +msgstr "Dimensions no vàlides del marc" -#: plug-ins/common/file-gih.c:780 -msgid " (Height Mismatch!) " -msgstr " (L'alçada no coincideix) " - -#: plug-ins/common/file-gih.c:785 -msgid "Display as:" +#: plug-ins/common/file-gih.c:229 +#, fuzzy +#| msgid "Display as:" +msgid "Display as" msgstr "Mostra com a:" -#: plug-ins/common/file-gih.c:796 -msgid "Di_mension:" -msgstr "Di_mensió:" +#: plug-ins/common/file-gih.c:230 +#, fuzzy +msgid "Describe how the layers will be split" +msgstr "Descriviu com es dividiran les capes" -#: plug-ins/common/file-gih.c:869 +#: plug-ins/common/file-gih.c:234 +#, fuzzy +#| msgid "Dimensions" +msgid "D_imension" +msgstr "Dimensions" + +#: plug-ins/common/file-gih.c:235 +#, fuzzy +msgid "How many dimensions the animated brush has" +msgstr "Quantes dimensions té el pinzell animat" + +#: plug-ins/common/file-gih.c:475 +#, fuzzy +#| msgid " (Width Mismatch!) " +msgid "Width Mismatch!" +msgstr " (L'amplada no coincideix) " + +#: plug-ins/common/file-gih.c:476 +#, fuzzy +#| msgid " (Height Mismatch!) " +msgid "Height Mismatch!" +msgstr " (L'alçada no coincideix) " + +#: plug-ins/common/file-gih.c:523 +#, c-format, fuzzy +msgid "Displays as a %d × %d grid on each layer" +msgstr "Es mostra com una graella de %d × %d a cada capa" + +#: plug-ins/common/file-gih.c:709 msgid "Ranks:" msgstr "Rangs:" -#: plug-ins/common/file-header.c:117 +#: plug-ins/common/file-header.c:118 msgid "C source code header" msgstr "Capçalera del codi font C" -#: plug-ins/common/file-header.c:179 +#: plug-ins/common/file-header.c:181 msgid "Header plug-in does not support multiple layers." msgstr "El connector de capçalera no admet múltiples capes." -#: plug-ins/common/file-heif.c:190 plug-ins/common/file-heif.c:230 +#: plug-ins/common/file-heif.c:194 plug-ins/common/file-heif.c:234 msgid "HEIF/HEIC" msgstr "HEIF/HEIC" -#: plug-ins/common/file-heif.c:193 +#: plug-ins/common/file-heif.c:197 msgid "Loads HEIF images" msgstr "Carrega imatges HEIF" -#: plug-ins/common/file-heif.c:194 +#: plug-ins/common/file-heif.c:198 msgid "" "Load image stored in HEIF format (High Efficiency Image File Format). " "Typical suffices for HEIF files are .heif, .heic." @@ -2975,248 +3480,250 @@ msgstr "" "d'alta eficiència). Les terminacions típiques per als fitxers HEIF són: " ".heif, .heic." -#: plug-ins/common/file-heif.c:235 +#: plug-ins/common/file-heif.c:239 msgid "Exports HEIF images" msgstr "Exporta imatges HEIF" -#: plug-ins/common/file-heif.c:236 +#: plug-ins/common/file-heif.c:240 msgid "Save image in HEIF format (High Efficiency Image File Format)." msgstr "" "Deseu la imatge en format HEIF (format de fitxer d'imatge d'alta " "eficiència)." -#: plug-ins/common/file-heif.c:252 plug-ins/common/file-heif.c:362 +#: plug-ins/common/file-heif.c:256 plug-ins/common/file-heif.c:366 +#: plug-ins/file-jpeg/jpeg.c:206 msgid "_Quality" msgstr "_Qualitat" -#: plug-ins/common/file-heif.c:253 plug-ins/common/file-heif.c:363 +#: plug-ins/common/file-heif.c:257 plug-ins/common/file-heif.c:367 msgid "Quality factor (0 = worst, 100 = best)" msgstr "Factor de qualitat (0 = pitjor, 100 = millor)" -#: plug-ins/common/file-heif.c:258 plug-ins/common/file-heif.c:368 -#: plug-ins/common/file-jpegxl.c:185 plug-ins/file-webp/file-webp.c:175 +#: plug-ins/common/file-heif.c:262 plug-ins/common/file-heif.c:372 +#: plug-ins/common/file-jpegxl.c:188 plug-ins/file-webp/file-webp.c:178 msgid "L_ossless" msgstr "_Sense pèrdues" -#: plug-ins/common/file-heif.c:259 plug-ins/common/file-heif.c:369 -#: plug-ins/common/file-jpegxl.c:186 +#: plug-ins/common/file-heif.c:263 plug-ins/common/file-heif.c:373 +#: plug-ins/common/file-jpegxl.c:189 msgid "Use lossless compression" msgstr "Utilitza compressió sense pèrdues" -#: plug-ins/common/file-heif.c:264 plug-ins/common/file-heif.c:374 +#: plug-ins/common/file-heif.c:268 plug-ins/common/file-heif.c:378 msgid "Save color prof_ile" msgstr "Desa el _perfil de color" -#: plug-ins/common/file-heif.c:265 plug-ins/common/file-heif.c:375 +#: plug-ins/common/file-heif.c:269 plug-ins/common/file-heif.c:379 msgid "Save the image's color profile" msgstr "Desa el perfil de color de la imatge" -#: plug-ins/common/file-heif.c:270 plug-ins/common/file-heif.c:380 -#: plug-ins/common/file-jpegxl.c:197 +#: plug-ins/common/file-heif.c:274 plug-ins/common/file-heif.c:384 +#: plug-ins/common/file-jpegxl.c:200 msgid "_Bit depth" msgstr "_Profunditat de bits" -#: plug-ins/common/file-heif.c:271 plug-ins/common/file-heif.c:381 -#: plug-ins/common/file-jpegxl.c:198 +#: plug-ins/common/file-heif.c:275 plug-ins/common/file-heif.c:385 +#: plug-ins/common/file-jpegxl.c:201 msgid "Bit depth of exported image" msgstr "Profunditat de bits de la imatge exportada" -#: plug-ins/common/file-heif.c:276 plug-ins/common/file-heif.c:386 -#: plug-ins/common/file-png.c:283 +#: plug-ins/common/file-heif.c:280 plug-ins/common/file-heif.c:390 +#: plug-ins/common/file-png.c:286 msgid "_Pixel format" msgstr "_Format de píxel" -#: plug-ins/common/file-heif.c:277 plug-ins/common/file-heif.c:387 +#: plug-ins/common/file-heif.c:281 plug-ins/common/file-heif.c:391 msgid "Format of color sub-sampling" msgstr "Format del submostratge de color" -#: plug-ins/common/file-heif.c:283 plug-ins/common/file-heif.c:393 +#: plug-ins/common/file-heif.c:287 plug-ins/common/file-heif.c:397 msgid "Enco_der speed" msgstr "_Velocitat del codificador" -#: plug-ins/common/file-heif.c:284 plug-ins/common/file-heif.c:394 +#: plug-ins/common/file-heif.c:288 plug-ins/common/file-heif.c:398 msgid "Tradeoff between speed and compression" msgstr "Compromís entre velocitat i compressió" -#: plug-ins/common/file-heif.c:290 plug-ins/common/file-heif.c:400 -#: plug-ins/common/file-jpegxl.c:222 +#: plug-ins/common/file-heif.c:294 plug-ins/common/file-heif.c:404 +#: plug-ins/common/file-jpegxl.c:225 msgid "Save Exi_f" msgstr "De_sa Exif" -#: plug-ins/common/file-heif.c:291 plug-ins/common/file-heif.c:401 -#: plug-ins/common/file-jpegxl.c:223 +#: plug-ins/common/file-heif.c:295 plug-ins/common/file-heif.c:405 +#: plug-ins/common/file-jpegxl.c:226 msgid "Toggle saving Exif data" msgstr "Commuta el desat de dades Exif" -#: plug-ins/common/file-heif.c:296 plug-ins/common/file-heif.c:406 -#: plug-ins/common/file-jpegxl.c:228 +#: plug-ins/common/file-heif.c:300 plug-ins/common/file-heif.c:410 +#: plug-ins/common/file-jpegxl.c:231 msgid "Save _XMP" msgstr "Desa _XMP" -#: plug-ins/common/file-heif.c:297 plug-ins/common/file-heif.c:407 -#: plug-ins/common/file-jpegxl.c:229 +#: plug-ins/common/file-heif.c:301 plug-ins/common/file-heif.c:411 +#: plug-ins/common/file-jpegxl.c:232 msgid "Toggle saving XMP data" msgstr "Commuta el desat de dades XMP" -#: plug-ins/common/file-heif.c:311 +#: plug-ins/common/file-heif.c:315 msgid "Loads AVIF images" msgstr "Carrega imatges AVIF" -#: plug-ins/common/file-heif.c:312 +#: plug-ins/common/file-heif.c:316 msgid "Load image stored in AV1 Image File Format (AVIF)" msgstr "" "Carrega la imatge emmagatzemada en format de fitxer d'imatge AV1 (AVIF)" -#: plug-ins/common/file-heif.c:344 +#: plug-ins/common/file-heif.c:348 msgid "Exports AVIF images" msgstr "Exporta imatges AVIF" -#: plug-ins/common/file-heif.c:345 +#: plug-ins/common/file-heif.c:349 msgid "Save image in AV1 Image File Format (AVIF)" msgstr "Desa la imatge en format de fitxer d'imatge AV1 (AVIF)" -#: plug-ins/common/file-heif.c:501 plug-ins/common/file-heif.c:597 +#: plug-ins/common/file-heif.c:504 plug-ins/common/file-heif.c:594 msgid "HEIF format does not support multiple layers." msgstr "El format HEIF no admet múltiples capes." -#: plug-ins/common/file-heif.c:917 plug-ins/common/file-heif.c:950 -#: plug-ins/common/file-heif.c:991 plug-ins/common/file-heif.c:1057 +#: 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 #, c-format msgid "Loading HEIF image failed: %s" msgstr "S'ha produït un error en carregar la imatge HEIF: %s" -#: plug-ins/common/file-heif.c:939 +#: plug-ins/common/file-heif.c:933 msgid "Loading HEIF image failed: Input file contains no readable images" msgstr "" "S'ha produït un error en carregar la imatge HEIF: el fitxer d'entrada no " "conté imatges que es puguin llegir" -#: plug-ins/common/file-heif.c:1183 +#: plug-ins/common/file-heif.c:1177 msgid "image content" msgstr "contingut de la imatge" -#: plug-ins/common/file-heif.c:1535 +#: plug-ins/common/file-heif.c:1529 #, c-format msgid "Exporting '%s' using %s encoder" msgstr "S'està exportant «%s» amb el codificador %s" -#: plug-ins/common/file-heif.c:1585 plug-ins/common/file-heif.c:1992 +#: plug-ins/common/file-heif.c:1579 plug-ins/common/file-heif.c:1986 #, c-format msgid "Encoding HEIF image failed: %s" msgstr "S'ha produït un error en codificar la imatge HEIF: %s" -#: plug-ins/common/file-heif.c:2113 +#: plug-ins/common/file-heif.c:2107 #, c-format msgid "Writing HEIF image failed: %s" msgstr "S'ha produït un error en escriure la imatge HEIF: %s" -#: plug-ins/common/file-heif.c:2202 +#: plug-ins/common/file-heif.c:2196 msgid "primary" msgstr "primari" -#: plug-ins/common/file-heif.c:2347 +#: plug-ins/common/file-heif.c:2341 msgid "Load HEIF Image" msgstr "Carrega la imatge HEIF" -#: plug-ins/common/file-heif.c:2361 +#: plug-ins/common/file-heif.c:2355 msgid "Select Image" msgstr "Seleccioneu la imatge" -#: plug-ins/common/file-heif.c:2518 +#: plug-ins/common/file-heif.c:2512 msgid "YUV444" msgstr "YUV444" -#: plug-ins/common/file-heif.c:2519 +#: plug-ins/common/file-heif.c:2513 msgid "YUV420" msgstr "YUV420" -#: plug-ins/common/file-heif.c:2527 plug-ins/common/file-jpegxl.c:2029 +#: plug-ins/common/file-heif.c:2521 plug-ins/common/file-jpegxl.c:2022 msgid "8 bit/channel" msgstr "8 bits/canal" -#: plug-ins/common/file-heif.c:2528 +#: plug-ins/common/file-heif.c:2522 msgid "10 bit/channel" msgstr "10 bits/canal" -#: plug-ins/common/file-heif.c:2529 +#: plug-ins/common/file-heif.c:2523 msgid "12 bit/channel" msgstr "12 bits/canal" -#: plug-ins/common/file-heif.c:2535 +#: plug-ins/common/file-heif.c:2529 msgid "Slow" msgstr "Lent" -#: plug-ins/common/file-heif.c:2536 +#: plug-ins/common/file-heif.c:2530 msgid "Balanced" msgstr "Equilibrat" -#: plug-ins/common/file-heif.c:2537 +#: plug-ins/common/file-heif.c:2531 msgid "Fast" msgstr "Ràpid" -#: plug-ins/common/file-html-table.c:153 +#: plug-ins/common/file-html-table.c:154 msgid "HTML table" msgstr "Taula HTML" -#: plug-ins/common/file-html-table.c:155 +#: plug-ins/common/file-html-table.c:156 msgid "HTML Table" msgstr "Taula HTML" # N.T.: Nom del connector -#: plug-ins/common/file-html-table.c:158 +#: plug-ins/common/file-html-table.c:159 msgid "PIKA Table Magic" msgstr "PIKA Table Magic" -#: plug-ins/common/file-html-table.c:159 +#: plug-ins/common/file-html-table.c:160 msgid "Allows you to draw an HTML table in PIKA. See help for more info." msgstr "" "Permet dibuixar una taula HTML en el PIKA. Vegeu l'ajuda per a més " "informació." -#: plug-ins/common/file-html-table.c:175 +#: plug-ins/common/file-html-table.c:176 msgid "Use c_aption" msgstr "_Utilitza la llegenda" -#: plug-ins/common/file-html-table.c:176 +#: plug-ins/common/file-html-table.c:177 msgid "Enable if you would like to have the table captioned." msgstr "Habiliteu-ho si voleu la taula amb títol." -#: plug-ins/common/file-html-table.c:182 +#: plug-ins/common/file-html-table.c:183 msgid "Capt_ion" msgstr "_Llegenda" -#: plug-ins/common/file-html-table.c:183 +#: plug-ins/common/file-html-table.c:184 msgid "The text for the table caption." msgstr "Text del títol de la taula." -#: plug-ins/common/file-html-table.c:188 +#: plug-ins/common/file-html-table.c:189 msgid "Cell con_tent" msgstr "Contingut de la c_el·la" -#: plug-ins/common/file-html-table.c:189 +#: plug-ins/common/file-html-table.c:190 msgid "The text to go into each cell." msgstr "Text que ha d'anar en cada cel·la." -#: plug-ins/common/file-html-table.c:195 +#: plug-ins/common/file-html-table.c:196 msgid "The width for each table cell. Can be a number or a percent." msgstr "" "Amplada de cada cel·la de la taula. Pot ser un nombre o un percentatge." -#: plug-ins/common/file-html-table.c:201 plug-ins/common/file-ps.c:389 -#: plug-ins/common/file-ps.c:504 plug-ins/imagemap/imap_grid.c:261 +#: plug-ins/common/file-html-table.c:202 plug-ins/common/file-ps.c:392 +#: plug-ins/common/file-ps.c:507 plug-ins/common/file-raw-data.c:360 +#: plug-ins/common/smooth-palette.c:141 plug-ins/imagemap/imap_grid.c:261 msgid "_Height" msgstr "A_lçada" -#: plug-ins/common/file-html-table.c:202 +#: plug-ins/common/file-html-table.c:203 msgid "The height for each table cell. Can be a number or a percent." msgstr "" "Alçada de cada cel·la de la taula. Pot ser un nombre o un percentatge." -#: plug-ins/common/file-html-table.c:208 +#: plug-ins/common/file-html-table.c:209 msgid "_Generate full HTML document" msgstr "_Genera un document HTML sencer" -#: plug-ins/common/file-html-table.c:209 +#: plug-ins/common/file-html-table.c:210 msgid "" "If enabled GTM will output a full HTML document with , , etc. " "tags instead of just the table html." @@ -3224,19 +3731,19 @@ msgstr "" "Si es marca l'opció GTM, es generarà un document HTML sencer amb les " "etiquetes , , etc. en comptes de només la taula html." -#: plug-ins/common/file-html-table.c:216 +#: plug-ins/common/file-html-table.c:217 msgid "_Border" msgstr "_Vora" -#: plug-ins/common/file-html-table.c:217 +#: plug-ins/common/file-html-table.c:218 msgid "The number of pixels in the table border." msgstr "Nombre de píxels a la vora de la taula." -#: plug-ins/common/file-html-table.c:222 +#: plug-ins/common/file-html-table.c:223 msgid "_Use cellspan" msgstr "Utilitza atrib_uts de la cel·la" -#: plug-ins/common/file-html-table.c:223 +#: plug-ins/common/file-html-table.c:224 msgid "" "If enabled GTM will replace any rectangular sections of identically colored " "blocks with one large cell with ROWSPAN and COLSPAN values." @@ -3244,11 +3751,11 @@ msgstr "" "Si es marca l'opció GTM, substituirà qualsevol secció rectangular de blocs " "de colors idèntics per una cel·la gran amb valors ROWSPAN i COLSPAN." -#: plug-ins/common/file-html-table.c:231 +#: plug-ins/common/file-html-table.c:232 msgid "Co_mpress TD tags" msgstr "Co_mprimeix les etiquetes TD" -#: plug-ins/common/file-html-table.c:232 +#: plug-ins/common/file-html-table.c:233 msgid "" "Enabling this will cause GTM to leave no whitespace between the TD tags and " "the cell content. This is only necessary for pixel level positioning " @@ -3258,27 +3765,27 @@ msgstr "" "el contingut de la cel·la. Només és necessari per al control de " "posicionament a nivell de píxels." -#: plug-ins/common/file-html-table.c:241 +#: plug-ins/common/file-html-table.c:242 msgid "Cell-pa_dding" msgstr "Far_ciment en les cel·les" -#: plug-ins/common/file-html-table.c:242 +#: plug-ins/common/file-html-table.c:243 msgid "The amount of cell padding." msgstr "Quantitat de farciment en les cel·les." -#: plug-ins/common/file-html-table.c:247 +#: plug-ins/common/file-html-table.c:248 msgid "Cell spaci_ng" msgstr "E_spaiat de les cel·les" -#: plug-ins/common/file-html-table.c:248 +#: plug-ins/common/file-html-table.c:249 msgid "The amount of cell spacing." msgstr "La quantitat d'espaiat de les cel·les." -#: plug-ins/common/file-html-table.c:289 +#: plug-ins/common/file-html-table.c:287 msgid "HTML table plug-in does not support multiple layers." msgstr "El connector de la taula HTML no admet múltiples capes." -#: plug-ins/common/file-html-table.c:614 +#: plug-ins/common/file-html-table.c:609 msgid "" "You are about to create a huge\n" "HTML file which will most likely\n" @@ -3288,55 +3795,55 @@ msgstr "" "fitxer HTML que molt probablement\n" "farà que el vostre navegador deixi de funcionar." -#: plug-ins/common/file-html-table.c:631 +#: plug-ins/common/file-html-table.c:627 msgid "Warning" msgstr "Avís" -#: plug-ins/common/file-html-table.c:644 +#: plug-ins/common/file-html-table.c:641 msgid "HTML Page Options" msgstr "Opcions de la pàgina HTML" -#: plug-ins/common/file-html-table.c:654 +#: plug-ins/common/file-html-table.c:652 msgid "Table Creation Options" msgstr "Opcions de creació d'una taula" -#: plug-ins/common/file-html-table.c:673 +#: plug-ins/common/file-html-table.c:672 msgid "Table Options" msgstr "Opcions de la taula" -#: plug-ins/common/file-iff.c:145 +#: plug-ins/common/file-iff.c:147 msgid "Amiga IFF" msgstr "Amiga IFF" -#: plug-ins/common/file-iff.c:148 plug-ins/common/file-iff.c:149 +#: plug-ins/common/file-iff.c:150 plug-ins/common/file-iff.c:151 msgid "Load file in the IFF file format" msgstr "Carrega fitxers en el format de fitxer IFF" -#: plug-ins/common/file-iff.c:260 +#: plug-ins/common/file-iff.c:252 msgid "Invalid or missing ILBM image" msgstr "Imatge ILBM no és vàlida o falta" -#: plug-ins/common/file-iff.c:265 +#: plug-ins/common/file-iff.c:257 msgid "ILBM contains no image data - likely a palette file" msgstr "ILBM no conté dades d'imatge - probablement un fitxer de paleta" -#: plug-ins/common/file-jp2-load.c:187 +#: plug-ins/common/file-jp2-load.c:189 msgid "JPEG 2000 image" msgstr "Imatge JPEG 2000" -#: plug-ins/common/file-jp2-load.c:189 plug-ins/common/file-jp2-load.c:223 +#: plug-ins/common/file-jp2-load.c:191 plug-ins/common/file-jp2-load.c:225 msgid "JPEG 2000" msgstr "JPEG 2000" -#: plug-ins/common/file-jp2-load.c:221 +#: plug-ins/common/file-jp2-load.c:223 msgid "JPEG 2000 codestream" msgstr "Flux de codis JPEG 2000" -#: plug-ins/common/file-jp2-load.c:226 +#: plug-ins/common/file-jp2-load.c:228 msgid "Loads JPEG 2000 codestream." msgstr "Carrega un flux de codis JPEG 2000." -#: plug-ins/common/file-jp2-load.c:227 +#: plug-ins/common/file-jp2-load.c:229 msgid "" "Loads JPEG 2000 codestream. If the color space is set to UNKNOWN (0), we " "will try to guess, which is only possible for few spaces (such as " @@ -3348,11 +3855,11 @@ msgstr "" "(com ara l'escala de grisos). La majoria d'aquestes trucades fracassaran. " "S'espera que conegueu l'espai de color de les vostres dades." -#: plug-ins/common/file-jp2-load.c:247 +#: plug-ins/common/file-jp2-load.c:249 msgid "Color s_pace" msgstr "_Espai de color" -#: plug-ins/common/file-jp2-load.c:248 +#: plug-ins/common/file-jp2-load.c:250 msgid "" "Color space { UNKNOWN (0), GRAYSCALE (1), RGB (2), CMYK (3), YCbCr (4), " "xvYCC (5) }" @@ -3362,102 +3869,102 @@ msgstr "" #. Can be RGB, YUV and YCC. #. Can be RGB, YUV and YCC with alpha or CMYK. -#: plug-ins/common/file-jp2-load.c:1003 plug-ins/common/file-jp2-load.c:1011 +#: plug-ins/common/file-jp2-load.c:989 plug-ins/common/file-jp2-load.c:997 msgid "sRGB" msgstr "sRGB" -#: plug-ins/common/file-jp2-load.c:1004 plug-ins/common/file-jp2-load.c:1012 +#: plug-ins/common/file-jp2-load.c:990 plug-ins/common/file-jp2-load.c:998 msgid "YCbCr" msgstr "YCbCr" -#: plug-ins/common/file-jp2-load.c:1005 plug-ins/common/file-jp2-load.c:1013 +#: plug-ins/common/file-jp2-load.c:991 plug-ins/common/file-jp2-load.c:999 msgid "xvYCC" msgstr "xvYCC" -#: plug-ins/common/file-jp2-load.c:1020 +#: plug-ins/common/file-jp2-load.c:1006 #, c-format msgid "Unsupported JPEG 2000%s '%s' with %d components." msgstr "JPEG 2000%s «%s» sense suport amb %d components." -#: plug-ins/common/file-jp2-load.c:1099 plug-ins/common/file-wmf.c:1007 +#: plug-ins/common/file-jp2-load.c:1085 plug-ins/common/file-wmf.c:762 #, c-format msgid "Could not open '%s' for reading" msgstr "No s'ha pogut obrir «%s» per a llegir-lo" -#: plug-ins/common/file-jp2-load.c:1108 +#: plug-ins/common/file-jp2-load.c:1094 #, c-format msgid "Failed to initialize decoder for '%s', out of memory?" msgstr "" "No s'ha pogut inicialitzar el descodificador per a «%s», potser no hi ha " "memòria?" -#: plug-ins/common/file-jp2-load.c:1124 +#: plug-ins/common/file-jp2-load.c:1110 #, c-format msgid "Couldn't set parameters on decoder for '%s'." msgstr "No s'ha pogut establir els paràmetres en el descodificador per «%s»." -#: plug-ins/common/file-jp2-load.c:1132 +#: plug-ins/common/file-jp2-load.c:1118 #, c-format msgid "Couldn't read JP2 header from '%s'." msgstr "No s'ha pogut llegir la capçalera JP2 des de «%s»." -#: plug-ins/common/file-jp2-load.c:1140 +#: plug-ins/common/file-jp2-load.c:1126 #, c-format msgid "Couldn't decode JP2 image in '%s'." msgstr "No s'ha pogut descodificar la imatge JP2 a «%s»." -#: plug-ins/common/file-jp2-load.c:1148 +#: plug-ins/common/file-jp2-load.c:1134 #, c-format msgid "Couldn't decompress JP2 image in '%s'." msgstr "No s'ha pogut descomprimir la imatge JP2 a «%s»." -#: plug-ins/common/file-jp2-load.c:1179 +#: plug-ins/common/file-jp2-load.c:1165 #, c-format msgid "Couldn't decode CIELAB JP2 image in '%s'." msgstr "No s'ha pogut descodificar la imatge CIELAB JP2 a «%s»." -#: plug-ins/common/file-jp2-load.c:1236 +#: plug-ins/common/file-jp2-load.c:1222 #, c-format msgid "Unknown color space in JP2 codestream '%s'." msgstr "Espai de color desconegut en el flux de codis JP2 «%s»." -#: plug-ins/common/file-jp2-load.c:1247 +#: plug-ins/common/file-jp2-load.c:1233 #, c-format msgid "Couldn't convert YCbCr JP2 image '%s' to RGB." msgstr "No es pot convertir la imatge YCbCr JP2 «%s» a RGB." -#: plug-ins/common/file-jp2-load.c:1257 +#: plug-ins/common/file-jp2-load.c:1243 #, c-format msgid "Couldn't convert CMYK JP2 image in '%s' to RGB." msgstr "No es pot convertir la imatge CMYK JP2 en «%s» a RGB." -#: plug-ins/common/file-jp2-load.c:1267 +#: plug-ins/common/file-jp2-load.c:1253 #, c-format msgid "Couldn't convert xvYCC JP2 image in '%s' to RGB." msgstr "No es pot convertir la imatge xvYCC JP2 en «%s» a RGB." -#: plug-ins/common/file-jp2-load.c:1294 +#: plug-ins/common/file-jp2-load.c:1280 #, c-format msgid "Unsupported color space in JP2 image '%s'." msgstr "Espai de color no compatible en la imatge JP2 «%s»." -#: plug-ins/common/file-jpegxl.c:139 plug-ins/common/file-jpegxl.c:166 +#: plug-ins/common/file-jpegxl.c:142 plug-ins/common/file-jpegxl.c:169 msgid "JPEG XL image" msgstr "Imatge JPEG-XL" -#: plug-ins/common/file-jpegxl.c:142 plug-ins/common/file-jpegxl.c:143 +#: plug-ins/common/file-jpegxl.c:145 plug-ins/common/file-jpegxl.c:146 msgid "Loads files in the JPEG XL file format" msgstr "Carrega fitxers en el format de fitxer JPEG-XL" -#: plug-ins/common/file-jpegxl.c:169 plug-ins/common/file-jpegxl.c:170 +#: plug-ins/common/file-jpegxl.c:172 plug-ins/common/file-jpegxl.c:173 msgid "Saves files in the JPEG XL file format" msgstr "Desa els fitxers en el format de fitxer JPEG-XL" -#: plug-ins/common/file-jpegxl.c:191 +#: plug-ins/common/file-jpegxl.c:194 msgid "Co_mpression/maxError" msgstr "_Compressió/maxError" -#: plug-ins/common/file-jpegxl.c:192 +#: plug-ins/common/file-jpegxl.c:195 msgid "" "Max. butteraugli distance, lower = higher quality. Range: 0 .. 15. 1.0 = " "visually lossless." @@ -3465,90 +3972,102 @@ msgstr "" "Màx. distància de butteraugli, menor = millor qualitat. Interval: 0 .. 15. " "1.0 = sense pèrdua visual." -#: plug-ins/common/file-jpegxl.c:203 +#: plug-ins/common/file-jpegxl.c:206 msgid "Effort/S_peed" msgstr "Esforç/V_elocitat" -#: plug-ins/common/file-jpegxl.c:204 +#: plug-ins/common/file-jpegxl.c:207 msgid "Encoder effort setting" msgstr "Ajustament de l'esforç del codificador" -#: plug-ins/common/file-jpegxl.c:210 +#: plug-ins/common/file-jpegxl.c:213 msgid "Save ori_ginal profile" msgstr "D_esa el perfil original" -#: plug-ins/common/file-jpegxl.c:211 +#: plug-ins/common/file-jpegxl.c:214 msgid "Store ICC profile to exported JXL file" msgstr "Desa el perfil ICC per a exportar el fitxer JXL" -#: plug-ins/common/file-jpegxl.c:2015 +#: plug-ins/common/file-jpegxl.c:219 plug-ins/file-tiff/file-tiff.c:241 +#, fuzzy +#| msgid "Export as _CMYK" +msgid "Export as CMY_K" +msgstr "Exporta com a _CMYK" + +#: plug-ins/common/file-jpegxl.c:220 +#, fuzzy +#| msgid "Export a CMYK PSD image using the soft-proofing color profile" +msgid "Create a CMYK JPEG XL image using the soft-proofing color profile" +msgstr "Exporta una imatge PSD CMYK usant el perfil de color de prova" + +#: plug-ins/common/file-jpegxl.c:2008 msgid "lightning (fastest)" msgstr "llampec (més ràpid)" -#: plug-ins/common/file-jpegxl.c:2016 +#: plug-ins/common/file-jpegxl.c:2009 msgid "thunder" msgstr "tro" -#: plug-ins/common/file-jpegxl.c:2017 +#: plug-ins/common/file-jpegxl.c:2010 msgid "falcon (faster)" msgstr "falcon (més ràpid)" -#: plug-ins/common/file-jpegxl.c:2018 +#: plug-ins/common/file-jpegxl.c:2011 msgid "cheetah" msgstr "cheetah" -#: plug-ins/common/file-jpegxl.c:2019 +#: plug-ins/common/file-jpegxl.c:2012 msgid "hare" msgstr "hare" -#: plug-ins/common/file-jpegxl.c:2020 +#: plug-ins/common/file-jpegxl.c:2013 msgid "wombat" msgstr "wombat" -#: plug-ins/common/file-jpegxl.c:2021 +#: plug-ins/common/file-jpegxl.c:2014 msgid "squirrel" msgstr "squirrel" -#: plug-ins/common/file-jpegxl.c:2022 +#: plug-ins/common/file-jpegxl.c:2015 msgid "kitten" msgstr "kitten" -#: plug-ins/common/file-jpegxl.c:2023 +#: plug-ins/common/file-jpegxl.c:2016 msgid "tortoise (slower)" msgstr "tortoise (més lent)" -#: plug-ins/common/file-jpegxl.c:2030 +#: plug-ins/common/file-jpegxl.c:2023 msgid "16 bit/channel" msgstr "16 bits/canal" -#: plug-ins/common/file-jpegxl.c:2038 +#: plug-ins/common/file-jpegxl.c:2031 msgid "CMYK profile required for export" msgstr "Cal un perfil CMYK per a exportar" -#: plug-ins/common/file-jpegxl.c:2045 plug-ins/file-jpeg/jpeg-save.c:898 -#: plug-ins/file-psd/psd-save.c:2458 plug-ins/file-tiff/file-tiff-save.c:1369 +#: plug-ins/common/file-jpegxl.c:2039 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 "Nom del perfil de color utilitzat per a l'exportació CMYK." -#: plug-ins/common/file-jpegxl.c:2064 plug-ins/file-jpeg/jpeg-save.c:909 -#: plug-ins/file-psd/psd-save.c:2469 plug-ins/file-tiff/file-tiff-save.c:1381 +#: plug-ins/common/file-jpegxl.c:2058 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" msgstr "Perfil: %s" -#: plug-ins/common/file-mng.c:254 +#: plug-ins/common/file-mng.c:255 msgid "MNG animation" msgstr "Animació MNG" -#: plug-ins/common/file-mng.c:256 +#: plug-ins/common/file-mng.c:257 msgid "MNG" msgstr "MNG" -#: plug-ins/common/file-mng.c:259 +#: plug-ins/common/file-mng.c:260 msgid "Saves images in the MNG file format" msgstr "Desa les imatges en el format de fitxer MNG" -#: plug-ins/common/file-mng.c:260 +#: plug-ins/common/file-mng.c:261 msgid "" "This plug-in saves images in the Multiple-image Network Graphics (MNG) " "format which can be used as a replacement for animated GIFs, and more." @@ -3556,58 +4075,58 @@ msgstr "" "Aquest connector desa les imatges en el format MNG (Multiple-image Network " "Graphics) que es pot utilitzar com a substitut dels GIF animats, i més." -#: plug-ins/common/file-mng.c:278 +#: plug-ins/common/file-mng.c:279 msgid "Use interlacing" msgstr "Utilitza entrellaçat" -#: plug-ins/common/file-mng.c:283 +#: plug-ins/common/file-mng.c:284 msgid "_PNG compression level" msgstr "Nivell de compressió _PNG" -#: plug-ins/common/file-mng.c:284 +#: plug-ins/common/file-mng.c:285 msgid "" "PNG compression level, choose a high compression level for small file size" msgstr "" "Nivell de compressió PNG, trieu un nivell alt de compressió per a una mida " "de fitxer petita" -#: plug-ins/common/file-mng.c:290 +#: plug-ins/common/file-mng.c:291 msgid "JPEG compression _quality" msgstr "_Qualitat de compressió JPEG" -#: plug-ins/common/file-mng.c:291 +#: plug-ins/common/file-mng.c:292 msgid "JPEG quality factor" msgstr "Factor de qualitat JPEG" -#: plug-ins/common/file-mng.c:296 +#: plug-ins/common/file-mng.c:297 msgid "_JPEG smoothing factor" msgstr "_Factor de suavitzat JPEG" -#: plug-ins/common/file-mng.c:297 +#: plug-ins/common/file-mng.c:298 msgid "JPEG smoothing factor" msgstr "Factor de suavitzat JPEG" -#: plug-ins/common/file-mng.c:302 +#: plug-ins/common/file-mng.c:303 msgid "L_oop" msgstr "_Bucle" -#: plug-ins/common/file-mng.c:303 +#: plug-ins/common/file-mng.c:304 msgid "(ANIMATED MNG) Loop infinitely" msgstr "(MNG animat) Bucle infinit" -#: plug-ins/common/file-mng.c:308 +#: plug-ins/common/file-mng.c:309 msgid "Default fra_me delay" msgstr "_Retard per defecte del fotograma" -#: plug-ins/common/file-mng.c:309 +#: plug-ins/common/file-mng.c:310 msgid "(ANIMATED MNG) Default delay between frames in milliseconds" msgstr "(MNG animat) Retard predeterminat entre fotogrames en mil·lisegons" -#: plug-ins/common/file-mng.c:315 +#: plug-ins/common/file-mng.c:316 msgid "Default chunks t_ype" msgstr "_Tipus de fragments per defecte" -#: plug-ins/common/file-mng.c:316 +#: plug-ins/common/file-mng.c:317 msgid "" "(ANIMATED MNG) Default chunks type (0 = PNG + Delta PNG; 1 = JNG + Delta " "PNG; 2 = All PNG; 3 = All JNG)" @@ -3615,96 +4134,96 @@ msgstr "" "(MNG animat) Tipus de trossos per defecte (0 = PNG + Delta PNG; 1 = JNG + " "Delta PNG; 2 = Tot PNG; 3 = Tot JNG)" -#: plug-ins/common/file-mng.c:323 +#: plug-ins/common/file-mng.c:324 msgid "De_fault frame disposal" msgstr "D_isposició per defecte dels marcs" -#: plug-ins/common/file-mng.c:324 +#: plug-ins/common/file-mng.c:325 msgid "(ANIMATED MNG) Default dispose type (0 = combine; 1 = replace)" msgstr "" "(MNG animat) Tipus d'eliminació predeterminat (0 = combinació; 1 = " "substitució)" -#: plug-ins/common/file-mng.c:330 plug-ins/common/file-png.c:245 +#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:248 msgid "Save _background color" msgstr "Desa el color de _fons" -#: plug-ins/common/file-mng.c:331 +#: plug-ins/common/file-mng.c:332 msgid "Write bKGd (background color) chunk" msgstr "Escriu el fragment bKGd (color de fons)" -#: plug-ins/common/file-mng.c:336 +#: plug-ins/common/file-mng.c:337 msgid "Save _gamma" msgstr "Desa la _gamma" -#: plug-ins/common/file-mng.c:337 +#: plug-ins/common/file-mng.c:338 msgid "Write gAMA (gamma) chunk" msgstr "Escriu el fragment gAMA (gamma)" -#: plug-ins/common/file-mng.c:342 +#: plug-ins/common/file-mng.c:343 msgid "Sa_ve resolution" msgstr "_Desa la resolució" -#: plug-ins/common/file-mng.c:343 +#: plug-ins/common/file-mng.c:344 msgid "Write pHYs (image resolution) chunk" msgstr "Escriu el fragment pHY» (resolució d'imatge)" -#: plug-ins/common/file-mng.c:348 plug-ins/common/file-png.c:263 +#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:266 msgid "Save creation _time" msgstr "Desa la da_ta de creació" -#: plug-ins/common/file-mng.c:349 +#: plug-ins/common/file-mng.c:350 msgid "Write tIME (creation time) chunk" msgstr "Escriu el fragment tIME (data de creació)" #. Inform the user that we couldn't losslessly save the #. * transparency & just use the full palette -#: plug-ins/common/file-mng.c:729 plug-ins/common/file-png.c:2254 +#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2240 msgid "Couldn't losslessly save transparency, saving opacity instead." msgstr "" "No s'ha pogut desar la transparència sense pèrdues. Es desarà l'opacitat." -#: plug-ins/common/file-mng.c:1596 +#: plug-ins/common/file-mng.c:1591 msgid "MNG Options" msgstr "Opcions del MNG" -#: plug-ins/common/file-mng.c:1604 plug-ins/common/file-png.c:226 +#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:229 msgid "PNG" msgstr "PNG" -#: plug-ins/common/file-mng.c:1605 +#: plug-ins/common/file-mng.c:1601 msgid "JNG" msgstr "JNG" -#: plug-ins/common/file-mng.c:1608 +#: plug-ins/common/file-mng.c:1604 msgid "PNG + delta PNG" msgstr "PNG + Delta PNG" -#: plug-ins/common/file-mng.c:1609 +#: plug-ins/common/file-mng.c:1605 msgid "JNG + delta PNG" msgstr "JNG + Delta PNG" -#: plug-ins/common/file-mng.c:1610 +#: plug-ins/common/file-mng.c:1606 msgid "All PNG" msgstr "Tots els PNG" -#: plug-ins/common/file-mng.c:1611 +#: plug-ins/common/file-mng.c:1607 msgid "All JNG" msgstr "Tots els JNG" -#: plug-ins/common/file-mng.c:1619 +#: plug-ins/common/file-mng.c:1615 msgid "Combine" msgstr "Combina" -#: plug-ins/common/file-mng.c:1620 +#: plug-ins/common/file-mng.c:1616 msgid "Replace" msgstr "Reemplaça" -#: plug-ins/common/file-mng.c:1655 +#: plug-ins/common/file-mng.c:1651 msgid "Animated MNG Options" msgstr "Opcions de l'MNG animat" -#: plug-ins/common/file-mng.c:1665 +#: plug-ins/common/file-mng.c:1661 msgid "" "These options are only available when the exported image has more than one " "layer. The image you are exporting only has one layer." @@ -3712,15 +4231,15 @@ msgstr "" "Aquestes opcions requereixen que la imatge exportada contingui més d'una " "capa. La imatge que voleu exportar només en conté una." -#: plug-ins/common/file-pat.c:112 +#: plug-ins/common/file-pat.c:113 msgid "PIKA pattern" msgstr "Patró del PIKA" -#: plug-ins/common/file-pat.c:116 +#: plug-ins/common/file-pat.c:117 msgid "Exports PIKA pattern file (.PAT)" msgstr "Exporta el fitxer de patrons del PIKA (.PAT)" -#: plug-ins/common/file-pat.c:117 +#: plug-ins/common/file-pat.c:118 msgid "" "New PIKA patterns can be created by exporting them in the appropriate place " "with this plug-in." @@ -3728,181 +4247,220 @@ msgstr "" "Es poden crear nous patrons del PIKA exportant-los al lloc adequat amb " "aquest connector." -#: plug-ins/common/file-pat.c:127 plug-ins/common/qbist.c:980 +#: plug-ins/common/file-pat.c:128 plug-ins/common/qbist.c:968 msgid "Pattern" msgstr "Patró" -#: plug-ins/common/file-pat.c:137 +#: plug-ins/common/file-pat.c:138 msgid "Short description of the pattern" msgstr "Descripció breu del patró" -#: plug-ins/common/file-pat.c:138 +#: plug-ins/common/file-pat.c:139 msgid "PIKA Pattern" msgstr "Patró del PIKA" -#: plug-ins/common/file-pcx.c:207 plug-ins/common/file-pcx.c:271 +#: plug-ins/common/file-pcx.c:212 plug-ins/common/file-pcx.c:276 msgid "ZSoft PCX image" msgstr "Imatge PCX de ZSoft" -#: plug-ins/common/file-pcx.c:210 +#: plug-ins/common/file-pcx.c:215 msgid "Loads files in Zsoft PCX file format" msgstr "Carrega fitxers en el format de fitxer DCX de ZSoft" -#: plug-ins/common/file-pcx.c:219 plug-ins/common/file-pcx.c:250 +#: plug-ins/common/file-pcx.c:224 plug-ins/common/file-pcx.c:255 msgid "Palette Options" msgstr "Opcions de la paleta" -#: plug-ins/common/file-pcx.c:220 plug-ins/common/file-pcx.c:251 +#: plug-ins/common/file-pcx.c:225 plug-ins/common/file-pcx.c:256 msgid "Use built-in palette (0) or override with black/white (1)" msgstr "Utilitza la paleta integrada (0) o substitueix amb blanc/negre (1)" -#: plug-ins/common/file-pcx.c:238 +#: plug-ins/common/file-pcx.c:243 msgid "ZSoft DCX image" msgstr "Imatge DCX de ZSoft" -#: plug-ins/common/file-pcx.c:241 +#: plug-ins/common/file-pcx.c:246 msgid "Loads files in Zsoft DCX file format" msgstr "Carrega fitxers en el format de fitxer DCX de ZSoft" -#: plug-ins/common/file-pcx.c:413 +#: plug-ins/common/file-pcx.c:399 msgid "PCX format does not support multiple layers." msgstr "El format PCX no admet múltiples capes." -#: plug-ins/common/file-pcx.c:535 +#: plug-ins/common/file-pcx.c:521 msgid "Could not load PCX image" msgstr "No s'ha pogut carregar una imatge PCX" -#: plug-ins/common/file-pcx.c:582 +#: plug-ins/common/file-pcx.c:568 msgid "DCX image offset exceeds the file size" msgstr "El desplaçament de la imatge DCX excedeix la mida del fitxer" -#: plug-ins/common/file-pcx.c:593 +#: plug-ins/common/file-pcx.c:579 msgid "Could not load DCX image" msgstr "No s'ha pogut carregar una imatge DCX" -#: plug-ins/common/file-pcx.c:616 +#: plug-ins/common/file-pcx.c:602 #, c-format msgid "%s: DCX image offset exceeds the file size: %s\n" msgstr "%s: el desplaçament de la imatge DCX excedeix la mida del fitxer: %s\n" -#: plug-ins/common/file-pcx.c:633 +#: plug-ins/common/file-pcx.c:619 msgid "Mixed-mode DCX image not loaded" msgstr "No s'ha carregat la imatge DCX de mode mixt" -#: plug-ins/common/file-pcx.c:640 +#: plug-ins/common/file-pcx.c:626 #, c-format msgid "%s: Could not load all DCX images: %s\n" msgstr "%s: No s'han pogut carregar totes les imatges DCX: %s\n" -#: plug-ins/common/file-pcx.c:680 +#: plug-ins/common/file-pcx.c:666 #, c-format msgid "Could not read header from '%s'" msgstr "No s'ha pogut llegir la capçalera de «%s»" -#: plug-ins/common/file-pcx.c:691 +#: plug-ins/common/file-pcx.c:677 #, c-format msgid "'%s' is not a PCX file" msgstr "«%s»: no és un fitxer PCX" -#: plug-ins/common/file-pcx.c:707 plug-ins/common/file-wbmp.c:259 +#: 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 #, c-format msgid "Unsupported or invalid image width: %d" msgstr "No s'accepten imatges d'aquesta amplada: %d" -#: plug-ins/common/file-pcx.c:713 plug-ins/common/file-wbmp.c:265 +#: 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 #, c-format msgid "Unsupported or invalid image height: %d" msgstr "No s'accepten imatges d'aquesta alçada: %d" -#: plug-ins/common/file-pcx.c:719 +#: plug-ins/common/file-pcx.c:705 msgid "Invalid number of bytes per line in PCX header" msgstr "El nombre de bytes per línia de la capçalera PCX no és vàlid" -#: plug-ins/common/file-pcx.c:726 +#: plug-ins/common/file-pcx.c:712 msgid "Resolution out of bounds in XCX header, using 72x72" msgstr "Resolució fora dels límits en la capçalera XCX, utilitzant 72x72" -#: plug-ins/common/file-pcx.c:734 +#: plug-ins/common/file-pcx.c:720 #, c-format msgid "Image dimensions too large: width %d x height %d" msgstr "Les dimensions de la imatge són massa grans: amplada %d x alçada %d" -#: plug-ins/common/file-pcx.c:861 +#: plug-ins/common/file-pcx.c:847 msgid "Unusual PCX flavour, giving up" msgstr "No es pot reconèixer el format del fitxer PCX, es deixarà estar" -#: plug-ins/common/file-pcx.c:887 +#: plug-ins/common/file-pcx.c:873 msgid "Import from PCX" msgstr "Importa des de PCX" -#: plug-ins/common/file-pcx.c:896 +#: plug-ins/common/file-pcx.c:882 msgid "Use PCX image's built-in palette" msgstr "Utilitza la paleta integrada de la imatge PCX" -#: plug-ins/common/file-pcx.c:897 +#: plug-ins/common/file-pcx.c:883 msgid "Use black and white palette" msgstr "Utilitza la paleta en blanc i negre" -#: plug-ins/common/file-pcx.c:1181 plug-ins/common/file-pnm.c:1631 +#: plug-ins/common/file-pcx.c:1167 plug-ins/common/file-pnm.c:1630 msgid "Cannot export images with alpha channel." msgstr "No es poden exportar imatges amb canal alfa." -#: plug-ins/common/file-pcx.c:1201 +#: plug-ins/common/file-pcx.c:1187 #, c-format msgid "Invalid X offset: %d" msgstr "La coordenada X no és vàlida: %d" -#: plug-ins/common/file-pcx.c:1207 +#: plug-ins/common/file-pcx.c:1193 #, c-format msgid "Invalid Y offset: %d" msgstr "La coordenada Y no és vàlida: %d" -#: plug-ins/common/file-pcx.c:1213 +#: plug-ins/common/file-pcx.c:1199 #, c-format msgid "Right border out of bounds (must be < %d): %d" msgstr "La vora dreta surt fora dels límits (ha de ser < %d): %d" -#: plug-ins/common/file-pcx.c:1220 +#: plug-ins/common/file-pcx.c:1206 #, c-format msgid "Bottom border out of bounds (must be < %d): %d" msgstr "La vora inferior surt fora dels límits (ha de ser < %d): %d" -#: plug-ins/common/file-pcx.c:1296 plug-ins/common/file-qoi.c:394 +#: plug-ins/common/file-pcx.c:1282 plug-ins/common/file-qoi.c:393 #, c-format msgid "Writing to file '%s' failed: %s" msgstr "No s'ha pogut escriure al fitxer «%s» : %s" -#: plug-ins/common/file-pdf-load.c:317 plug-ins/common/file-pdf-save.c:314 +#: plug-ins/common/file-pdf-load.c:319 plug-ins/common/file-pdf-save.c:315 msgid "Portable Document Format" msgstr "Format de document portable" -#: plug-ins/common/file-pdf-load.c:367 +#: plug-ins/common/file-pdf-load.c:345 +#, fuzzy +msgid "PDF password" +msgstr "Contrasenya PDF" + +#: plug-ins/common/file-pdf-load.c:346 +#, fuzzy +msgid "The password to decrypt the encrypted PDF file" +msgstr "La contrasenya per a desencriptar el fitxer PDF xifrat" + +#: plug-ins/common/file-pdf-load.c:351 +#, fuzzy +#| msgid "Lo_wer border" +msgid "Load in re_verse order" +msgstr "Marge _inferior" + +#: plug-ins/common/file-pdf-load.c:352 +#, fuzzy +msgid "Load PDF pages in reverse order" +msgstr "Carrega les pàgines PDF en ordre invers" + +#: plug-ins/common/file-pdf-load.c:369 msgid "Open pages as" msgstr "Obre pàgines com a" -#: plug-ins/common/file-pdf-load.c:368 +#: plug-ins/common/file-pdf-load.c:370 plug-ins/common/file-pdf-load.c:377 msgid "Number of pages to load (0 for all)" msgstr "Nombre de pàgines a carregar (0 per a totes)" -#: plug-ins/common/file-pdf-load.c:392 +#: plug-ins/common/file-pdf-load.c:376 +#, fuzzy +#| msgid "%s-pages" +msgid "N pages" +msgstr "%s-pàgines" + +#: plug-ins/common/file-pdf-load.c:389 +#, fuzzy +#| msgid "_Pages" +msgid "Pages" +msgstr "_Pàgines" + +#: plug-ins/common/file-pdf-load.c:390 +#, fuzzy +#| msgid "The average color of the specified border." +msgid "The pages to load in the expected order" +msgstr "El color mitjà de la vora especificada." + +#: plug-ins/common/file-pdf-load.c:394 msgid "Use _Anti-aliasing" msgstr "Utilitza _antialiàsing" -#: plug-ins/common/file-pdf-load.c:393 +#: plug-ins/common/file-pdf-load.c:395 msgid "Render texts with anti-aliasing" msgstr "Renderitza els textos amb antialiàsing" -#: plug-ins/common/file-pdf-load.c:398 +#: plug-ins/common/file-pdf-load.c:400 msgid "_Fill transparent areas with white" msgstr "_Omple les àrees transparents amb blanc" -#: plug-ins/common/file-pdf-load.c:399 +#: plug-ins/common/file-pdf-load.c:401 msgid "Render all pages as opaque by filling the background in white" msgstr "Renderitza totes les pàgines com a opaques emplenant el fons en blanc" -#: plug-ins/common/file-pdf-load.c:407 plug-ins/common/file-pdf-load.c:408 +#: plug-ins/common/file-pdf-load.c:409 plug-ins/common/file-pdf-load.c:410 msgid "Resolution" msgstr "Resolució" @@ -3910,7 +4468,7 @@ msgstr "Resolució" #. * second is out-of-range page number, #. * third is number of pages. #. * Specify order as in English if needed. -#: plug-ins/common/file-pdf-load.c:531 +#: plug-ins/common/file-pdf-load.c:517 #, c-format msgid "PDF document '%1$s' has %3$d page. Page %2$d is out of range." msgid_plural "PDF document '%1$s' has %3$d pages. Page %2$d is out of range." @@ -3920,72 +4478,71 @@ msgstr[0] "" msgstr[1] "" "El document PDF '%1$s' té %3$d pàgines. La pàgina %2$d està fora de l'abast." -#: plug-ins/common/file-pdf-load.c:696 +#: plug-ins/common/file-pdf-load.c:673 msgid "PDF is password protected, please input the password:" msgstr "El PDF està protegit per contrasenya, introduïu la contrasenya:" -#: plug-ins/common/file-pdf-load.c:706 +#: plug-ins/common/file-pdf-load.c:683 msgid "Encrypted PDF" msgstr "PDF xifrat" -#: plug-ins/common/file-pdf-load.c:733 +#: plug-ins/common/file-pdf-load.c:710 msgid "Wrong password! Please input the right one:" msgstr "Contrasenya incorrecta! Introduïu la correcta:" -#: plug-ins/common/file-pdf-load.c:751 +#: plug-ins/common/file-pdf-load.c:728 #, c-format msgid "Could not load '%s': %s" msgstr "No s'ha pogut carregar «%s»: %s" -#: plug-ins/common/file-pdf-load.c:1166 +#: plug-ins/common/file-pdf-load.c:1143 msgid "Import from PDF" msgstr "Importa d'un PDF" -#: plug-ins/common/file-pdf-load.c:1195 +#: plug-ins/common/file-pdf-load.c:1172 msgid "Error getting number of pages from the given PDF file." msgstr "S'ha produït un error obtenint el nombre de pàgines del fitxer PDF." #. Resolution -#: plug-ins/common/file-pdf-load.c:1244 +#: plug-ins/common/file-pdf-load.c:1221 msgid "_Width (pixels):" msgstr "A_mplada (píxels):" -#: plug-ins/common/file-pdf-load.c:1245 +#: plug-ins/common/file-pdf-load.c:1222 msgid "_Height (pixels):" msgstr "A_lçada (píxels):" -#: plug-ins/common/file-pdf-load.c:1247 +#: plug-ins/common/file-pdf-load.c:1224 msgid "_Resolution:" msgstr "_Resolució:" -#: plug-ins/common/file-pdf-load.c:1538 plug-ins/common/file-pdf-load.c:1539 -#: plug-ins/common/file-svg.c:1017 plug-ins/common/file-wmf.c:722 +#: plug-ins/common/file-pdf-load.c:1515 plug-ins/common/file-pdf-load.c:1516 #: plug-ins/print/print-page-layout.c:307 #, c-format msgid "pixels/%a" msgstr "píxels/%a" -#: plug-ins/common/file-pdf-save.c:330 +#: plug-ins/common/file-pdf-save.c:331 msgid "PDF" msgstr "PDF" -#: plug-ins/common/file-pdf-save.c:380 plug-ins/common/file-pdf-save.c:452 -#: plug-ins/common/file-pdf-save.c:1165 +#: plug-ins/common/file-pdf-save.c:381 plug-ins/common/file-pdf-save.c:453 +#: plug-ins/common/file-pdf-save.c:1153 msgid "_Fill transparent areas with background color" msgstr "_Omple les àrees transparents amb el color de fons" -#: plug-ins/common/file-pdf-save.c:381 plug-ins/common/file-pdf-save.c:453 +#: plug-ins/common/file-pdf-save.c:382 plug-ins/common/file-pdf-save.c:454 msgid "" "Fill transparent areas with background color if layer has an alpha channel" msgstr "" "Omple les àrees transparents amb el color de fons si la capa té un canal " "alfa" -#: plug-ins/common/file-pdf-save.c:394 +#: plug-ins/common/file-pdf-save.c:395 msgid "_Create multipage PDF..." msgstr "_Crea un PDF amb múltiples pàgines..." -#: plug-ins/common/file-pdf-save.c:731 +#: plug-ins/common/file-pdf-save.c:719 #, c-format msgid "" "An error occurred while creating the PDF file:\n" @@ -3996,7 +4553,7 @@ msgstr "" "%s\n" "Assegureu-vos que heu introduït un nom de fitxer vàlid i que la ubicació no és només de lectura." -#: plug-ins/common/file-pdf-save.c:1006 +#: plug-ins/common/file-pdf-save.c:994 #, c-format msgid "" "The following fonts cannot be found: %s.\n" @@ -4005,123 +4562,139 @@ msgstr "" "No es poden trobar les següents lletres tipogràfiques: %s.\n" "Es recomana convertir les capes de text en imatge o instal·lar les lletres tipogràfiques que falten abans d'exportar-lo, altrament pot ser que el disseny no sembli correcte." -#: plug-ins/common/file-pdf-save.c:1104 +#: plug-ins/common/file-pdf-save.c:1092 msgid "Save to:" msgstr "Desa-ho a:" -#: plug-ins/common/file-pdf-save.c:1108 +#: plug-ins/common/file-pdf-save.c:1096 msgid "Browse..." msgstr "Navega..." -#: plug-ins/common/file-pdf-save.c:1109 +#: plug-ins/common/file-pdf-save.c:1097 msgid "Multipage PDF export" msgstr "Exporta com a PDF amb pàgines" -#: plug-ins/common/file-pdf-save.c:1145 +#: plug-ins/common/file-pdf-save.c:1133 msgid "Remove the selected pages" msgstr "Suprimeix les pàgines seleccionades" -#: plug-ins/common/file-pdf-save.c:1155 +#: plug-ins/common/file-pdf-save.c:1143 msgid "Add this image" msgstr "Afegeix aquesta Imatge" -#: plug-ins/common/file-pdf-save.c:1160 +#: plug-ins/common/file-pdf-save.c:1148 msgid "_Omit hidden layers and layers with zero opacity" msgstr "_Omet les capes i capes ocultes amb opacitat zero" -#: plug-ins/common/file-pdf-save.c:1170 +#: plug-ins/common/file-pdf-save.c:1158 msgid "Convert _bitmaps to vector graphics where possible" msgstr "" "Converteix els mapes de _bits en gràfics vectorials quan sigui possible" -#: plug-ins/common/file-pdf-save.c:1175 +#: plug-ins/common/file-pdf-save.c:1163 msgid "_Apply layer masks before saving" msgstr "_Aplica les màscares de la capa abans de desar" -#: plug-ins/common/file-pdf-save.c:1179 +#: plug-ins/common/file-pdf-save.c:1167 msgid "Keeping the masks will not change the output" msgstr "Si es conserven les màscares no afectarà la sortida" -#: plug-ins/common/file-pdf-save.c:1268 plug-ins/common/file-pdf-save.c:1341 -#: plug-ins/common/file-pdf-save.c:1439 plug-ins/common/file-ps.c:2115 +#: 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 #, c-format msgid "Page %d" msgstr "Pàgina %d" -#: plug-ins/common/file-pdf-save.c:1308 +#: plug-ins/common/file-pdf-save.c:1296 msgid "Error! In order to save the file, at least one image should be added!" msgstr "Error: per tal de desar el fitxer, cal afegir com a mínim una imatge." -#: plug-ins/common/file-pdf-save.c:1486 plug-ins/print/print-draw-page.c:125 +#: plug-ins/common/file-pdf-save.c:1474 plug-ins/print/print-draw-page.c:125 msgid "Cannot handle the size (either width or height) of the image." msgstr "No es pot gestionar la mida (amplada o alçada) de la imatge." -#: plug-ins/common/file-pix.c:169 plug-ins/common/file-pix.c:196 +#: plug-ins/common/file-pix.c:174 plug-ins/common/file-pix.c:205 msgid "Alias Pix image" msgstr "Imatge Alias Pix" -#: plug-ins/common/file-pix.c:285 +#: plug-ins/common/file-pix.c:297 msgid "PIX format does not support multiple layers." msgstr "El format PIX no admet múltiples capes." -#: plug-ins/common/file-png.c:180 plug-ins/common/file-png.c:210 +#: plug-ins/common/file-pix.c:589 +#, fuzzy, c-format +#| msgid "" +#| "Error trying to open temporary file '%s' for parasite loading: %s" +msgid "" +"Error trying to open temporary JPEG file '%s' for Esm Software pix loading: " +"%s" +msgstr "" +"S'ha produït un error en obrir el fitxer temporal «%s» per a carregar el " +"paràsit: %s" + +#: plug-ins/common/file-pix.c:607 +#, fuzzy +msgid "Invalid Esm Software PIX file" +msgstr "Fitxer PIX de programari Esm no vàlid" + +#: plug-ins/common/file-png.c:183 plug-ins/common/file-png.c:213 msgid "PNG image" msgstr "Imatge PNG" -#: plug-ins/common/file-png.c:233 +#: plug-ins/common/file-png.c:236 msgid "_Interlacing (Adam7)" msgstr "_Entrellaçat (Adam7)" -#: plug-ins/common/file-png.c:234 +#: plug-ins/common/file-png.c:237 msgid "Use Adam7 interlacing" msgstr "Utilitza entrellaçat Adam7" -#: plug-ins/common/file-png.c:239 +#: plug-ins/common/file-png.c:242 msgid "Co_mpression level" msgstr "_Nivell de compressió" -#: plug-ins/common/file-png.c:240 +#: plug-ins/common/file-png.c:243 msgid "Deflate Compression factor (0..9)" msgstr "Factor de compressió de deflació (0..9)" -#: plug-ins/common/file-png.c:246 +#: plug-ins/common/file-png.c:249 msgid "Write bKGD chunk (PNG metadata)" msgstr "Escriu el fragment bKGD (metadades PNG)" -#: plug-ins/common/file-png.c:251 +#: plug-ins/common/file-png.c:254 msgid "Save layer o_ffset" msgstr "_Desa el desplaçament de la capa" -#: plug-ins/common/file-png.c:252 +#: plug-ins/common/file-png.c:255 msgid "Write oFFs chunk (PNG metadata)" msgstr "Escriu el fragment oFFs (metadades PNG)" -#: plug-ins/common/file-png.c:257 +#: plug-ins/common/file-png.c:260 msgid "Save resol_ution" msgstr "D_esa la resolució" -#: plug-ins/common/file-png.c:258 +#: plug-ins/common/file-png.c:261 msgid "Write pHYs chunk (PNG metadata)" msgstr "Escriu un fragment de pHYs (metadades PNG)" -#: plug-ins/common/file-png.c:264 +#: plug-ins/common/file-png.c:267 msgid "Write tIME chunk (PNG metadata)" msgstr "Escriu el fragment tIME (metadades PNG)" -#: plug-ins/common/file-png.c:269 +#: plug-ins/common/file-png.c:272 plug-ins/file-tiff/file-tiff.c:234 msgid "Save color _values from transparent pixels" msgstr "_Desa els valors de color dels píxels transparents" -#: plug-ins/common/file-png.c:270 +#: plug-ins/common/file-png.c:273 msgid "Preserve color of completely transparent pixels" msgstr "Conserva el color dels píxels completament transparents" -#: plug-ins/common/file-png.c:275 +#: plug-ins/common/file-png.c:278 msgid "_Optimize for smallest possible palette size" msgstr "_Optimitza per a la mida més petita possible de la paleta" -#: plug-ins/common/file-png.c:276 +#: plug-ins/common/file-png.c:279 msgid "" "When checked, save as 1, 2, 4, or 8-bit depending on number of colors used. " "When unchecked, always save as 8-bit" @@ -4129,49 +4702,86 @@ msgstr "" "Quan està marcada, es desarà com a 1, 2, 4 o 8 bits depenent del nombre de " "colors utilitzats. Quan no estigui marcat, sempre es desarà com a 8 bits" -#: plug-ins/common/file-png.c:284 +#: plug-ins/common/file-png.c:287 msgid "PNG export format" msgstr "Format d'exportació PNG" -#: plug-ins/common/file-png.c:423 +#: plug-ins/common/file-png.c:288 plug-ins/common/file-ps.c:3723 +#: plug-ins/file-fits/fits.c:1035 +msgid "Automatic" +msgstr "Automàtic" + +#: plug-ins/common/file-png.c:289 +msgid "8 bpc RGB" +msgstr "8 bpc RGB" + +#: plug-ins/common/file-png.c:290 +msgid "8 bpc GRAY" +msgstr "8 bpc GRAY" + +#: plug-ins/common/file-png.c:291 +msgid "8 bpc RGBA" +msgstr "8 bpc RGBA" + +#: plug-ins/common/file-png.c:292 +msgid "8 bpc GRAYA" +msgstr "8 bpc GRAYA" + +#: plug-ins/common/file-png.c:293 +msgid "16 bpc RGB" +msgstr "16 bpc RGB" + +#: plug-ins/common/file-png.c:294 +msgid "16 bpc GRAY" +msgstr "16 bpc GRAY" + +#: plug-ins/common/file-png.c:295 +msgid "16 bpc RGBA" +msgstr "16 bpc RGBA" + +#: plug-ins/common/file-png.c:296 +msgid "16 bpc GRAYA" +msgstr "16 bpc GRAYA" + +#: plug-ins/common/file-png.c:411 msgid "PNG format does not support multiple layers." msgstr "El format PNG no admet múltiples capes." -#: plug-ins/common/file-png.c:499 +#: plug-ins/common/file-png.c:484 #, c-format msgid "Error loading PNG file: %s\n" msgstr "No s'ha pogut carregar el fitxer PNG: %s\n" -#: plug-ins/common/file-png.c:630 +#: plug-ins/common/file-png.c:615 #, c-format msgid "Error creating PNG read struct while loading '%s'." msgstr "" "S'ha produït un error en la lectura de l'estructura del PNG mentre es " "carregava «%s»." -#: plug-ins/common/file-png.c:639 +#: plug-ins/common/file-png.c:624 #, c-format msgid "Error while reading '%s'. Could not create PNG header info structure." msgstr "" "S'ha produït un error en la lectura de «%s». No s'ha pogut crear " "l'estructura d'informació a la capçalera PNG." -#: plug-ins/common/file-png.c:647 +#: plug-ins/common/file-png.c:632 #, c-format msgid "Error while reading '%s'. File corrupted?" msgstr "S'ha produït un error en llegir «%s». Potser el fitxer està malmès." -#: plug-ins/common/file-png.c:902 +#: plug-ins/common/file-png.c:887 #, c-format msgid "Unknown color model in PNG file '%s'." msgstr "Es desconeix el model de color del fitxer PNG «%s»." -#: plug-ins/common/file-png.c:915 plug-ins/file-exr/file-exr.c:254 +#: plug-ins/common/file-png.c:900 plug-ins/file-exr/file-exr.c:260 #, c-format msgid "Could not create new image for '%s': %s" msgstr "No s'ha pogut crear una imatge nova per a «%s»: %s" -#: plug-ins/common/file-png.c:983 +#: plug-ins/common/file-png.c:968 msgid "" "The PNG file specifies an offset that caused the layer to be positioned " "outside the image." @@ -4179,19 +4789,19 @@ msgstr "" "El fitxer PNG especifica un desplaçament que ha causat que la capa es " "posicioni fora de la imatge." -#: plug-ins/common/file-png.c:1217 +#: plug-ins/common/file-png.c:1202 msgid "Apply PNG Offset" msgstr "Aplica el desplaçament PNG" -#: plug-ins/common/file-png.c:1221 +#: plug-ins/common/file-png.c:1206 msgid "Ignore PNG offset" msgstr "Ignora el desplaçament PNG" -#: plug-ins/common/file-png.c:1222 +#: plug-ins/common/file-png.c:1207 msgid "Apply PNG offset to layer" msgstr "Aplica el desplaçament PNG a la capa" -#: plug-ins/common/file-png.c:1247 +#: plug-ins/common/file-png.c:1232 #, c-format msgid "" "The PNG image you are importing specifies an offset of %d, %d. Do you want " @@ -4200,14 +4810,14 @@ msgstr "" "La imatge PNG que esteu important té un desplaçament de %d, %d. Voleu " "aplicar aquest desplaçament a la capa?" -#: plug-ins/common/file-png.c:1459 +#: plug-ins/common/file-png.c:1445 #, c-format msgid "Error creating PNG write struct while exporting '%s'." msgstr "" "S'ha produït un error en l'escriptura de l'estructura del PNG mentre " "s'exportava «%s»." -#: plug-ins/common/file-png.c:1468 +#: plug-ins/common/file-png.c:1454 #, c-format msgid "" "Error while exporting '%s'. Could not create PNG header info structure." @@ -4215,388 +4825,456 @@ msgstr "" "S'ha produït un error en l'exportació de «%s». No s'ha pogut crear " "l'estructura d'informació a la capçalera PNG." -#: plug-ins/common/file-png.c:1476 +#: plug-ins/common/file-png.c:1462 #, c-format msgid "Error while exporting '%s'. Could not export image." msgstr "" "S'ha produït un error en l'exportació «%s». No s'ha pogut exportar la " "imatge." -#: plug-ins/common/file-png.c:2296 plug-ins/common/file-ps.c:3739 -#: plug-ins/file-fits/fits.c:1036 -msgid "Automatic" -msgstr "Automàtic" - -#: plug-ins/common/file-png.c:2297 -msgid "8 bpc RGB" -msgstr "8 bpc RGB" - -#: plug-ins/common/file-png.c:2298 -msgid "8 bpc GRAY" -msgstr "8 bpc GRAY" - -#: plug-ins/common/file-png.c:2299 -msgid "8 bpc RGBA" -msgstr "8 bpc RGBA" - -#: plug-ins/common/file-png.c:2300 -msgid "8 bpc GRAYA" -msgstr "8 bpc GRAYA" - -#: plug-ins/common/file-png.c:2301 -msgid "16 bpc RGB" -msgstr "16 bpc RGB" - -#: plug-ins/common/file-png.c:2302 -msgid "16 bpc GRAY" -msgstr "16 bpc GRAY" - -#: plug-ins/common/file-png.c:2303 -msgid "16 bpc RGBA" -msgstr "16 bpc RGBA" - -#: plug-ins/common/file-png.c:2304 -msgid "16 bpc GRAYA" -msgstr "16 bpc GRAYA" - -#: plug-ins/common/file-pnm.c:315 +#: plug-ins/common/file-pnm.c:318 msgid "PNM Image" msgstr "Imatge PNM" -#: plug-ins/common/file-pnm.c:318 +#: plug-ins/common/file-pnm.c:321 msgid "Loads files in the PNM file format" msgstr "Carrega fitxers en el format de fitxer PNM" -#: plug-ins/common/file-pnm.c:319 +#: plug-ins/common/file-pnm.c:322 msgid "This plug-in loads files in the various Netpbm portable file formats." msgstr "" "Aquest connector carrega fitxers en els diversos formats de fitxer portables" " Netpbm." -#: plug-ins/common/file-pnm.c:348 +#: plug-ins/common/file-pnm.c:351 msgid "PNM image" msgstr "Imatge PNM" -#: plug-ins/common/file-pnm.c:350 +#: plug-ins/common/file-pnm.c:353 msgid "PNM" msgstr "PNM" -#: plug-ins/common/file-pnm.c:353 +#: plug-ins/common/file-pnm.c:356 msgid "Exports files in the PNM file format" msgstr "Exporta fitxers en el format de fitxer PNM" -#: plug-ins/common/file-pnm.c:354 +#: plug-ins/common/file-pnm.c:357 msgid "PNM export handles all image types without transparency." msgstr "" "L'exportació PNM gestiona tots els tipus d'imatge sense transparència." -#: plug-ins/common/file-pnm.c:370 plug-ins/common/file-pnm.c:406 -#: plug-ins/common/file-pnm.c:442 +#: plug-ins/common/file-pnm.c:373 plug-ins/common/file-pnm.c:409 +#: plug-ins/common/file-pnm.c:445 msgid "Data formatting" msgstr "S'estan formatant les dades" -#: plug-ins/common/file-pnm.c:371 plug-ins/common/file-pnm.c:407 -#: plug-ins/common/file-pnm.c:443 plug-ins/common/file-pnm.c:479 +#: plug-ins/common/file-pnm.c:374 plug-ins/common/file-pnm.c:410 +#: plug-ins/common/file-pnm.c:446 plug-ins/common/file-pnm.c:482 msgid "TRUE for raw output, FALSE for ascii output" msgstr "CERT per a la sortida sense format, FALS per a la sortida ascii" -#: plug-ins/common/file-pnm.c:385 +#: plug-ins/common/file-pnm.c:388 msgid "PBM" msgstr "PBM" -#: plug-ins/common/file-pnm.c:386 +#: plug-ins/common/file-pnm.c:389 msgid "PBM image" msgstr "Imatge PBM" -#: plug-ins/common/file-pnm.c:389 +#: plug-ins/common/file-pnm.c:392 msgid "Exports files in the PBM file format" msgstr "Exporta fitxers en el format de fitxer PBM" -#: plug-ins/common/file-pnm.c:390 +#: plug-ins/common/file-pnm.c:393 msgid "PBM exporting produces mono images without transparency." msgstr "L'exportació de PBM produeix imatges mono sense transparència." -#: plug-ins/common/file-pnm.c:421 +#: plug-ins/common/file-pnm.c:424 msgid "PGM image" msgstr "Imatge PGM" -#: plug-ins/common/file-pnm.c:423 +#: plug-ins/common/file-pnm.c:426 msgid "PGM" msgstr "PGM" -#: plug-ins/common/file-pnm.c:425 +#: plug-ins/common/file-pnm.c:428 msgid "Exports files in the PGM file format" msgstr "Exporta fitxers en el format de fitxer PGM" -#: plug-ins/common/file-pnm.c:426 +#: plug-ins/common/file-pnm.c:429 msgid "PGM exporting produces grayscale images without transparency." msgstr "" "L'exportació de PGM produeix imatges en escala de grisos sense " "transparència." -#: plug-ins/common/file-pnm.c:457 +#: plug-ins/common/file-pnm.c:460 msgid "PPM image" msgstr "Imatge PPM" -#: plug-ins/common/file-pnm.c:459 +#: plug-ins/common/file-pnm.c:462 msgid "PPM" msgstr "PPM" -#: plug-ins/common/file-pnm.c:461 +#: plug-ins/common/file-pnm.c:464 msgid "Exports files in the PPM file format" msgstr "Exporta fitxers en el format de fitxer PPM" -#: plug-ins/common/file-pnm.c:462 +#: plug-ins/common/file-pnm.c:465 msgid "PPM export handles RGB images without transparency." msgstr "L'exportació PPM gestiona imatges RGB sense transparència." -#: plug-ins/common/file-pnm.c:493 +#: plug-ins/common/file-pnm.c:496 msgid "PAM image" msgstr "Imatge PAM" -#: plug-ins/common/file-pnm.c:496 +#: plug-ins/common/file-pnm.c:499 msgid "Exports files in the PAM file format" msgstr "Exporta fitxers en el format de fitxer PAM" -#: plug-ins/common/file-pnm.c:497 +#: plug-ins/common/file-pnm.c:500 msgid "PAM export handles RGB images with or without transparency." msgstr "L'exportació PAM gestiona imatges RGB amb transparència o sense." -#: plug-ins/common/file-pnm.c:522 +#: plug-ins/common/file-pnm.c:525 msgid "PFM image" msgstr "Imatge PFM" -#: plug-ins/common/file-pnm.c:525 +#: plug-ins/common/file-pnm.c:528 msgid "Exports files in the PFM file format" msgstr "Exporta fitxers en el format de fitxer PFM" -#: plug-ins/common/file-pnm.c:526 +#: plug-ins/common/file-pnm.c:529 msgid "PFM export handles all images without transparency." msgstr "L'exportació PFM gestiona totes les imatges sense transparència." -#: plug-ins/common/file-pnm.c:661 +#: plug-ins/common/file-pnm.c:663 #, c-format msgid "%s format does not support multiple layers." msgstr "%s el format no admet múltiples capes." -#: plug-ins/common/file-pnm.c:747 plug-ins/common/file-pnm.c:779 -#: plug-ins/common/file-pnm.c:788 plug-ins/common/file-pnm.c:803 -#: plug-ins/common/file-pnm.c:818 plug-ins/common/file-pnm.c:1016 -#: plug-ins/common/file-pnm.c:1111 plug-ins/common/file-pnm.c:1196 -#: plug-ins/common/file-pnm.c:1257 +#: plug-ins/common/file-pnm.c:746 plug-ins/common/file-pnm.c:778 +#: plug-ins/common/file-pnm.c:787 plug-ins/common/file-pnm.c:802 +#: plug-ins/common/file-pnm.c:817 plug-ins/common/file-pnm.c:1015 +#: plug-ins/common/file-pnm.c:1110 plug-ins/common/file-pnm.c:1195 +#: plug-ins/common/file-pnm.c:1256 msgid "Premature end of file." msgstr "El fitxer acaba prematurament." -#: plug-ins/common/file-pnm.c:749 +#: plug-ins/common/file-pnm.c:748 msgid "Invalid file." msgstr "El fitxer no és vàlid." -#: plug-ins/common/file-pnm.c:767 +#: plug-ins/common/file-pnm.c:766 msgid "File not in a supported format." msgstr "El format del fitxer no és compatible." -#: plug-ins/common/file-pnm.c:782 +#: plug-ins/common/file-pnm.c:781 msgid "Invalid X resolution." msgstr "La resolució X no és vàlida." -#: plug-ins/common/file-pnm.c:784 plug-ins/common/file-pnm.c:950 +#: plug-ins/common/file-pnm.c:783 plug-ins/common/file-pnm.c:949 msgid "Image width is larger than PIKA can handle." msgstr "El PIKA no pot gestionar imatges d'aquesta amplada." -#: plug-ins/common/file-pnm.c:791 +#: plug-ins/common/file-pnm.c:790 msgid "Invalid Y resolution." msgstr "La resolució Y no és vàlida." -#: plug-ins/common/file-pnm.c:793 +#: plug-ins/common/file-pnm.c:792 msgid "Image height is larger than PIKA can handle." msgstr "El PIKA no pot gestionar imatges d'aquesta alçada." -#: plug-ins/common/file-pnm.c:807 +#: plug-ins/common/file-pnm.c:806 msgid "Bogus scale factor." msgstr "Factor d'escala fals." -#: plug-ins/common/file-pnm.c:809 +#: plug-ins/common/file-pnm.c:808 msgid "Unsupported scale factor." msgstr "El factor d'escala no és compatible." -#: plug-ins/common/file-pnm.c:823 +#: plug-ins/common/file-pnm.c:822 msgid "Unsupported maximum value." msgstr "El valor màxim no és compatible." -#: plug-ins/common/file-pnm.c:944 +#: plug-ins/common/file-pnm.c:943 msgid "PAM: Unsupported inofficial PNM variant." msgstr "PAM: Variant PNM no oficial no suportada." -#: plug-ins/common/file-pnm.c:948 +#: plug-ins/common/file-pnm.c:947 msgid "PAM: Premature end of file." msgstr "PAM: el fitxer acaba prematurament." -#: plug-ins/common/file-pnm.c:952 +#: plug-ins/common/file-pnm.c:951 msgid "PAM: Invalid X resolution." msgstr "PAM: la resolució X no és vàlida." -#: plug-ins/common/file-pnm.c:954 +#: plug-ins/common/file-pnm.c:953 msgid "PAM: Invalid Y resolution." msgstr "PAM: la resolució Y no és vàlida." -#: plug-ins/common/file-pnm.c:956 +#: plug-ins/common/file-pnm.c:955 msgid "PAM: Invalid maximum value." msgstr "PAM: valor màxim no vàlid." -#: plug-ins/common/file-pnm.c:958 +#: plug-ins/common/file-pnm.c:957 msgid "PAM: Invalid depth." msgstr "PAM: Profunditat no vàlida." -#: plug-ins/common/file-pnm.c:960 +#: plug-ins/common/file-pnm.c:959 msgid "PAM: Unsupported tupltype." msgstr "PAM: el tupltype no és compatible." #. file save type -#: plug-ins/common/file-pnm.c:2028 +#: plug-ins/common/file-pnm.c:2027 msgid "_ASCII" msgstr "_ASCII" -#: plug-ins/common/file-pnm.c:2029 +#: plug-ins/common/file-pnm.c:2028 msgid "_Raw" msgstr "_Sense format" -#: plug-ins/common/file-ps.c:336 plug-ins/common/file-ps.c:449 +#: plug-ins/common/file-ps.c:339 plug-ins/common/file-ps.c:452 msgid "PostScript document" msgstr "Document PostScript" -#: plug-ins/common/file-ps.c:353 +#: plug-ins/common/file-ps.c:356 msgid "Encapsulated PostScript image" msgstr "Imatge PostScript encapsulada" -#: plug-ins/common/file-ps.c:377 +#: plug-ins/common/file-ps.c:380 msgid "Resol_ution" msgstr "R_esolució" -#: plug-ins/common/file-ps.c:395 +#: plug-ins/common/file-ps.c:381 +#, fuzzy +msgid "Resolution to interpret image (dpi)" +msgstr "Resolució per a interpretar la imatge (ppp)" + +#: plug-ins/common/file-ps.c:387 +#, fuzzy +#| msgid "_Blend width" +msgid "Desired width" +msgstr "_Amplada de la barreja" + +#: plug-ins/common/file-ps.c:393 +#, fuzzy +#| msgid "_Number height:" +msgid "Desired height" +msgstr "Alçada del _número:" + +#: plug-ins/common/file-ps.c:398 msgid "Try _Bounding Box" msgstr "_Prova la caixa contenidora" -#: plug-ins/common/file-ps.c:401 +#: plug-ins/common/file-ps.c:399 +#, fuzzy +msgid "FALSE: Use width/height, TRUE: Use BoundingBox" +msgstr "FALS: usa amplada/alçada, CERT: usa el BoundingBox" + +#: plug-ins/common/file-ps.c:404 msgid "_Pages" msgstr "_Pàgines" -#: plug-ins/common/file-ps.c:407 +#: plug-ins/common/file-ps.c:405 +#, fuzzy +#| msgid "Pages to load (e.g.: 1-4 or 1,3,5-7)" +msgid "Pages to load (e.g.: 1,3,5-7)" +msgstr "Pàgines a carregar (p. ex. 1-4 o 1,3,5-7)" + +#: plug-ins/common/file-ps.c:410 msgid "Coloring" msgstr "S'està acolorint" -#: plug-ins/common/file-ps.c:413 +#: plug-ins/common/file-ps.c:411 +#, fuzzy +msgid "4: b/w, 5: grey, 6: color image, 7: automatic" +msgstr "4: b/w, 5: gris, 6: imatge de color, 7: automàtic" + +#: plug-ins/common/file-ps.c:416 msgid "Text antialiasing" msgstr "Antialiàsing del text" -#: plug-ins/common/file-ps.c:419 +#: plug-ins/common/file-ps.c:417 plug-ins/common/file-ps.c:423 +#, fuzzy +msgid "1, 2 or 4" +msgstr "1, 2 o 4" + +#: plug-ins/common/file-ps.c:422 msgid "Graphic antialiasing" msgstr "Antialiàsing gràfic" -#: plug-ins/common/file-ps.c:459 +#: plug-ins/common/file-ps.c:462 msgid "PS" msgstr "PS" -#: plug-ins/common/file-ps.c:468 +#: plug-ins/common/file-ps.c:471 msgid "Encapsulated PostScript" msgstr "PostScript encapsulat" -#: plug-ins/common/file-ps.c:479 +#: plug-ins/common/file-ps.c:482 msgid "EPS" msgstr "GPS" -#: plug-ins/common/file-ps.c:511 +#: plug-ins/common/file-ps.c:501 +#, fuzzy +msgid "Width of the image in PostScript file (0: use input image size)" +msgstr "" +"Amplada de la imatge al fitxer PostScript (0: usa la mida de la imatge " +"d'entrada)" + +#: plug-ins/common/file-ps.c:508 +#, fuzzy +msgid "Height of the image in PostScript file (0: use input image size)" +msgstr "" +"Alçada de la imatge al fitxer PostScript (0: usa la mida de la imatge " +"d'entrada)" + +#: plug-ins/common/file-ps.c:514 msgid "_X offset" msgstr "Desplaçament en _X" -#: plug-ins/common/file-ps.c:517 +#: plug-ins/common/file-ps.c:515 +#, fuzzy +msgid "X-offset to image from lower left corner" +msgstr "Desplaçament X a la imatge des de la cantonada inferior esquerra" + +#: plug-ins/common/file-ps.c:520 msgid "Y o_ffset" msgstr "Desplaçament en _Y" -#: plug-ins/common/file-ps.c:523 +#: plug-ins/common/file-ps.c:521 +#, fuzzy +msgid "Y-offset to image from lower left corner" +msgstr "Desplaçament Y de la imatge des de la cantonada inferior esquerra" + +#: plug-ins/common/file-ps.c:526 msgid "Unit" msgstr "Unitat" -#: plug-ins/common/file-ps.c:530 +#: plug-ins/common/file-ps.c:527 +#, fuzzy +msgid "Unit for width/height/offset. 0: inches, 1: millimeters" +msgstr "" +"Unitat per a l'amplada/alçada/desplaçament. 0: polzades, 1: mil·límetres" + +#: plug-ins/common/file-ps.c:533 msgid "_Keep aspect ratio" msgstr "_Conserva la relació d'aspecte" -#: plug-ins/common/file-ps.c:536 plug-ins/map-object/map-object-ui.c:1013 +#: plug-ins/common/file-ps.c:534 +#, fuzzy +msgid "FALSE: use width/height, TRUE: keep aspect ratio" +msgstr "FALS: usa amplada/alçada, CERT: manté la relació d'aspecte" + +#: plug-ins/common/file-ps.c:539 plug-ins/map-object/map-object-ui.c:738 msgid "Rotation" msgstr "Rotació" -#: plug-ins/common/file-ps.c:542 +#: plug-ins/common/file-ps.c:545 msgid "PostScript Level _2" msgstr "PostScript nivell _2" -#: plug-ins/common/file-ps.c:554 plug-ins/imagemap/imap_grid.c:298 +#: plug-ins/common/file-ps.c:546 +#, fuzzy +msgid "FALSE: PostScript Level 1, TRUE: PostScript Level 2" +msgstr "FALS: PostScript nivell 1, CERT: PostScript nivell 2" + +#: plug-ins/common/file-ps.c:551 +#, fuzzy +#| msgid "Encapsulated PostScript" +msgid "Encapsula_ted PostScript" +msgstr "PostScript encapsulat" + +#: plug-ins/common/file-ps.c:552 +#, fuzzy +#| msgid "Encapsulated PostScript" +msgid "FALSE: PostScript, TRUE: Encapsulated PostScript" +msgstr "PostScript encapsulat" + +#: plug-ins/common/file-ps.c:557 plug-ins/imagemap/imap_grid.c:298 msgid "_Preview" msgstr "_Previsualitza" -#: plug-ins/common/file-ps.c:560 +#: plug-ins/common/file-ps.c:558 +#, fuzzy +#| msgid "Show Previous" +msgid "Show Preview" +msgstr "Mostra anterior" + +#: plug-ins/common/file-ps.c:563 msgid "Preview Si_ze" msgstr "Mida de previ_sualització" -#: plug-ins/common/file-ps.c:722 +#: plug-ins/common/file-ps.c:564 +#, fuzzy +msgid "0: no preview, >0: max. size of preview" +msgstr "0: sense vista prèvia, 00: màxima mida de la vista prèvia" + +#: plug-ins/common/file-ps.c:708 msgid "PostScript plug-in does not support multiple layers." msgstr "El connector PostScript no admet múltiples capes." -#: plug-ins/common/file-ps.c:1136 +#: plug-ins/common/file-ps.c:1119 #, c-format msgid "Could not interpret PostScript file '%s'" msgstr "No s'ha pogut interpretar el fitxer PostScript «%s»" -#: plug-ins/common/file-ps.c:1220 +#: plug-ins/common/file-ps.c:1203 msgid "Rendered EPS" msgstr "EPS renderitzat" -#: plug-ins/common/file-ps.c:1248 +#: plug-ins/common/file-ps.c:1231 #, c-format msgid "%s-pages" msgstr "%s-pàgines" -#: plug-ins/common/file-ps.c:1320 +#: plug-ins/common/file-ps.c:1303 msgid "PostScript export cannot handle images with alpha channels" msgstr "L'exportació a PostScript no pot gestionar imatges amb canals alfa" -#: plug-ins/common/file-ps.c:3729 +#: plug-ins/common/file-ps.c:3712 msgid "Rendering" msgstr "S'està generant la imatge" #. Coloring -#: plug-ins/common/file-ps.c:3736 +#: plug-ins/common/file-ps.c:3720 msgid "B/W" msgstr "B/N" -#: plug-ins/common/file-ps.c:3737 +#: plug-ins/common/file-ps.c:3721 plug-ins/imagemap/imap-menu.ui:101 msgid "Gray" msgstr "Gris" -#: plug-ins/common/file-ps.c:3738 plug-ins/common/file-xpm.c:511 +#: plug-ins/common/file-ps.c:3722 plug-ins/common/file-xpm.c:510 #: plug-ins/pikaressionist/color.c:65 plug-ins/pikaressionist/general.c:169 +#: plug-ins/imagemap/imap-menu.ui:96 plug-ins/lighting/lighting-main.c:209 +#: plug-ins/lighting/lighting-main.c:332 plug-ins/lighting/lighting-main.c:391 +#: plug-ins/lighting/lighting-main.c:450 plug-ins/lighting/lighting-main.c:509 +#: plug-ins/lighting/lighting-main.c:568 plug-ins/lighting/lighting-ui.c:327 msgid "Color" msgstr "Color" -#: plug-ins/common/file-ps.c:3746 plug-ins/common/file-ps.c:3754 +#: plug-ins/common/file-ps.c:3730 plug-ins/common/file-ps.c:3738 msgid "Weak" msgstr "Feble" -#: plug-ins/common/file-ps.c:3747 plug-ins/common/file-ps.c:3755 +#: plug-ins/common/file-ps.c:3731 plug-ins/common/file-ps.c:3739 msgid "Strong" msgstr "Fort" -#: plug-ins/common/file-ps.c:3781 +#: plug-ins/common/file-ps.c:3765 msgid "Pages:" msgstr "Pàgines:" -#: plug-ins/common/file-ps.c:3785 +#: plug-ins/common/file-ps.c:3769 msgid "Pages to load (e.g.: 1-4 or 1,3,5-7)" msgstr "Pàgines a carregar (p. ex. 1-4 o 1,3,5-7)" -#: plug-ins/common/file-ps.c:3791 +#: plug-ins/common/file-ps.c:3775 msgid "Open as" msgstr "Obre com a" -#: plug-ins/common/file-ps.c:3884 +#: plug-ins/common/file-ps.c:3868 msgid "" "When toggled, the resulting image will be scaled to fit into the given size " "without changing the aspect ratio." @@ -4604,49 +5282,49 @@ msgstr "" "Si es marca l'opció, la imatge resultant es reduirà per a encaixar en la " "mida donada sense canviar la relació d'aspecte." -#: plug-ins/common/file-ps.c:3890 +#: plug-ins/common/file-ps.c:3874 msgid "Image Size" msgstr "Mida de la imatge" #. Unit -#: plug-ins/common/file-ps.c:3901 +#: plug-ins/common/file-ps.c:3886 msgid "_Inch" msgstr "_Polzada" -#: plug-ins/common/file-ps.c:3902 +#: plug-ins/common/file-ps.c:3887 msgid "_Millimeter" msgstr "_Mil·límetre" #. Rotation -#: plug-ins/common/file-ps.c:3915 +#: plug-ins/common/file-ps.c:3900 msgid "_0" msgstr "_0" -#: plug-ins/common/file-ps.c:3916 +#: plug-ins/common/file-ps.c:3901 msgid "_90" msgstr "_90" -#: plug-ins/common/file-ps.c:3917 +#: plug-ins/common/file-ps.c:3902 msgid "_180" msgstr "_180" -#: plug-ins/common/file-ps.c:3918 +#: plug-ins/common/file-ps.c:3903 msgid "_270" msgstr "_270" -#: plug-ins/common/file-ps.c:3925 +#: plug-ins/common/file-ps.c:3910 msgid "Output" msgstr "Sortida" -#: plug-ins/common/file-psp.c:664 plug-ins/common/file-psp.c:694 +#: plug-ins/common/file-psp.c:667 plug-ins/common/file-psp.c:697 msgid "Paint Shop Pro image" msgstr "Imatge del Paint Shop Pro" -#: plug-ins/common/file-psp.c:667 +#: plug-ins/common/file-psp.c:670 msgid "Loads images from the Paint Shop Pro PSP file format" msgstr "Carrega imatges en el format de fitxer Paint Shop Pro PSP" -#: plug-ins/common/file-psp.c:669 +#: plug-ins/common/file-psp.c:672 msgid "" "This plug-in loads and exports images in Paint Shop Pro's native PSP format." " Vector layers aren't handled. Exporting isn't yet implemented." @@ -4655,193 +5333,397 @@ msgstr "" "Shop Pro. Les capes vectorials no es gestionen. L'exportació encara no està " "implementada." -#: plug-ins/common/file-psp.c:841 +#: plug-ins/common/file-psp.c:840 msgid "RLE" msgstr "RLE" -#: plug-ins/common/file-psp.c:842 +#: plug-ins/common/file-psp.c:841 msgid "LZ77" msgstr "LZ77" -#: plug-ins/common/file-psp.c:934 +#: plug-ins/common/file-psp.c:933 msgid "Error reading block header" msgstr "S'ha produït un error en llegir la capçalera del bloc" -#: plug-ins/common/file-psp.c:941 +#: plug-ins/common/file-psp.c:940 #, c-format msgid "Invalid block header at %ld" msgstr "La capçalera del bloc no és vàlida a %ld" -#: plug-ins/common/file-psp.c:944 +#: plug-ins/common/file-psp.c:943 msgid "Invalid block header" msgstr "La capçalera del bloc no és vàlid" -#: plug-ins/common/file-psp.c:976 +#: plug-ins/common/file-psp.c:975 #, c-format msgid "Seek error: %s" msgstr "Error de cerca: «%s»" -#: plug-ins/common/file-psp.c:999 +#: plug-ins/common/file-psp.c:998 msgid "Invalid general image attribute chunk size." msgstr "La mida del bloc d'atributs de la imatge general no és vàlida." -#: plug-ins/common/file-psp.c:1021 +#: plug-ins/common/file-psp.c:1020 msgid "Error reading general image attribute block." msgstr "S'ha perdut el bloc d'atributs de la imatge general." -#: plug-ins/common/file-psp.c:1036 +#: plug-ins/common/file-psp.c:1035 #, c-format msgid "Unknown compression type %d" msgstr "Tipus %d de compressió desconeguda" -#: plug-ins/common/file-psp.c:1072 plug-ins/common/file-psp.c:1079 +#: plug-ins/common/file-psp.c:1071 plug-ins/common/file-psp.c:1078 #, c-format msgid "Unsupported bit depth %d" msgstr "Profunditat de bits no admesa %d" -#: plug-ins/common/file-psp.c:1126 +#: plug-ins/common/file-psp.c:1125 msgid "Error reading creator keyword chunk" msgstr "" "S'ha produït un error en llegir el fragment de la paraula clau del creador" -#: plug-ins/common/file-psp.c:1132 +#: plug-ins/common/file-psp.c:1131 msgid "Invalid keyword chunk header" msgstr "La capçalera del fragment de la paraula clau no és vàlida" -#: plug-ins/common/file-psp.c:1147 plug-ins/common/file-psp.c:1174 +#: plug-ins/common/file-psp.c:1146 plug-ins/common/file-psp.c:1173 msgid "Error reading creator keyword data" msgstr "Error en llegir les dades del creador de paraules clau" -#: plug-ins/common/file-psp.c:1258 plug-ins/common/file-psp.c:1267 -#: plug-ins/common/file-psp.c:1276 +#: plug-ins/common/file-psp.c:1257 plug-ins/common/file-psp.c:1266 +#: plug-ins/common/file-psp.c:1275 msgid "Error reading color block" msgstr "S'ha produït un error en llegir el bloc de color" -#: plug-ins/common/file-psp.c:1289 +#: plug-ins/common/file-psp.c:1286 +#, fuzzy +#| msgid "Error reading palette. " +msgid "Error: Unsupported palette size" +msgstr "S'ha produït un error en llegir la paleta. " + +#: plug-ins/common/file-psp.c:1297 msgid "Error reading color palette" msgstr "S'ha produït un error en llegir la paleta de colors" -#: plug-ins/common/file-psp.c:1715 plug-ins/common/file-psp.c:1729 +#: plug-ins/common/file-psp.c:1723 plug-ins/common/file-psp.c:1737 msgid "zlib error" msgstr "error zlib" -#: plug-ins/common/file-psp.c:1792 plug-ins/common/file-psp.c:1826 -#: plug-ins/common/file-psp.c:1836 +#: plug-ins/common/file-psp.c:1800 plug-ins/common/file-psp.c:1834 +#: plug-ins/common/file-psp.c:1844 msgid "Error reading layer extension information" msgstr "" "S'ha produït un error en llegir la informació de l'extensió de la capa" -#: plug-ins/common/file-psp.c:1813 +#: plug-ins/common/file-psp.c:1821 msgid "Error reading block information" msgstr "S'ha produït un error en llegir la informació del bloc" -#: plug-ins/common/file-psp.c:1893 +#: plug-ins/common/file-psp.c:1901 #, c-format msgid "Invalid layer sub-block %s, should be LAYER" msgstr "La capa sub-block %s no és vàlida, ha de ser una CAPA" -#: plug-ins/common/file-psp.c:1924 plug-ins/common/file-psp.c:1981 +#: plug-ins/common/file-psp.c:1932 plug-ins/common/file-psp.c:1989 msgid "Error reading layer information chunk" msgstr "" "S'ha produït un error en llegir el fragment de la informació de la capa" -#: plug-ins/common/file-psp.c:2023 +#: plug-ins/common/file-psp.c:2031 #, c-format msgid "Invalid layer dimensions: %dx%d" msgstr "Dimensions de la capa no vàlides: %dx%d" -#: plug-ins/common/file-psp.c:2084 +#: plug-ins/common/file-psp.c:2092 msgid "Error creating layer" msgstr "S'ha produït un error en crear la capa" -#: plug-ins/common/file-psp.c:2129 +#: plug-ins/common/file-psp.c:2137 #, c-format msgid "Invalid layer sub-block %s, should be CHANNEL" msgstr "La capa sub-block %s no és vàlida, ha de ser un CANAL" -#: plug-ins/common/file-psp.c:2145 +#: plug-ins/common/file-psp.c:2153 msgid "Error reading channel information chunk" msgstr "Error en llegir el fragment d'informació del canal" -#: plug-ins/common/file-psp.c:2168 +#: plug-ins/common/file-psp.c:2176 #, c-format msgid "Invalid channel type %d in channel information chunk" msgstr "El tipus de canal %d no és vàlid al fragment d'informació del canal" -#: plug-ins/common/file-psp.c:2272 plug-ins/common/file-psp.c:2289 +#: plug-ins/common/file-psp.c:2280 plug-ins/common/file-psp.c:2297 msgid "Error reading tube data chunk" msgstr "S'ha produït un error en llegir el fragment de dada del tub" -#: plug-ins/common/file-psp.c:2394 +#: plug-ins/common/file-psp.c:2384 plug-ins/common/file-psp.c:2400 +#, fuzzy +#| msgid "Error reading layer information chunk" +msgid "Error reading selection chunk" +msgstr "" +"S'ha produït un error en llegir el fragment de la informació de la capa" + +#: plug-ins/common/file-psp.c:2393 +#, fuzzy +#| msgid "invalid block size" +msgid "Invalid selection chunk size" +msgstr "la mida del bloc no és vàlida" + +#: plug-ins/common/file-psp.c:2417 +#, fuzzy +#| msgid "Error reading layer information chunk" +msgid "Error reading end of selection chunk" +msgstr "" +"S'ha produït un error en llegir el fragment de la informació de la capa" + +#: plug-ins/common/file-psp.c:2442 +#, fuzzy +#| msgid "Error reading block header" +msgid "Error reading extended block chunk header" +msgstr "S'ha produït un error en llegir la capçalera del bloc" + +#: plug-ins/common/file-psp.c:2450 +#, fuzzy +#| msgid "Invalid keyword chunk header" +msgid "Invalid extended block chunk header" +msgstr "La capçalera del fragment de la paraula clau no és vàlida" + +#: plug-ins/common/file-psp.c:2461 +#, fuzzy +#| msgid "invalid block size" +msgid "Invalid extended block chunk size" +msgstr "la mida del bloc no és vàlida" + +#: plug-ins/common/file-psp.c:2482 +#, fuzzy +#| msgid "Error reading creator keyword data" +msgid "Error reading extended chunk grid data" +msgstr "Error en llegir les dades del creador de paraules clau" + +#: plug-ins/common/file-psp.c:2508 +#, fuzzy +#| msgid "Error reading tube data chunk" +msgid "Error reading extended chunk guide data" +msgstr "S'ha produït un error en llegir el fragment de dada del tub" + +#: plug-ins/common/file-psp.c:2526 +#, fuzzy +#| msgid "Invalid frame dimensions" +msgid "Invalid guide orientation" +msgstr "Dimensions no vàlides del marc" + +#: plug-ins/common/file-psp.c:2540 +#, fuzzy +#| msgid "Error reading tube data chunk" +msgid "Error reading extended block chunk" +msgstr "S'ha produït un error en llegir el fragment de dada del tub" + +#: 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 "S'ha produït un error en llegir el bloc de color" + +#: plug-ins/common/file-psp.c:2642 msgid "Error reading file header." msgstr "S'ha produït un error en llegir la capçalera del fitxer." -#: plug-ins/common/file-psp.c:2401 +#: plug-ins/common/file-psp.c:2649 msgid "Incorrect file signature." msgstr "La signatura del fitxer no és correcta." -#: plug-ins/common/file-psp.c:2415 +#: plug-ins/common/file-psp.c:2663 #, c-format msgid "Unsupported PSP file format version %d.%d." msgstr "No s'accepten fitxers amb aquesta versió del format PSP: %d.%d." -#: plug-ins/common/file-psp.c:2435 +#: plug-ins/common/file-psp.c:2683 msgid "invalid block size" msgstr "la mida del bloc no és vàlida" -#: plug-ins/common/file-psp.c:2444 +#: plug-ins/common/file-psp.c:2692 msgid "Duplicate General Image Attributes block." msgstr "Bloc duplicat d'atributs d'imatge general." -#: plug-ins/common/file-psp.c:2472 +#: plug-ins/common/file-psp.c:2720 msgid "Missing General Image Attributes block." msgstr "S'ha perdut el bloc d'atributs d'imatge general." -#: plug-ins/common/file-psp.c:2588 +#: plug-ins/common/file-psp.c:2845 msgid "Exporting not implemented yet." msgstr "No s'ha implementat l'exportació." -#: plug-ins/common/file-qoi.c:137 plug-ins/common/file-qoi.c:164 +#: plug-ins/common/file-qoi.c:140 plug-ins/common/file-qoi.c:167 msgid "Quite OK Image" msgstr "Imatge Quite OK" -#: plug-ins/common/file-qoi.c:140 +#: plug-ins/common/file-qoi.c:143 msgid "Load file in the QOI file format" msgstr "Carrega fitxer en el format de fitxer QOI" -#: plug-ins/common/file-qoi.c:141 +#: plug-ins/common/file-qoi.c:144 msgid "Load file in the QOI file format (Quite OK Image)" msgstr "Carrega fitxer en el format de fitxer QOI (Quite OK Image)" -#: plug-ins/common/file-qoi.c:167 +#: plug-ins/common/file-qoi.c:170 msgid "Export image in the QOI file format" msgstr "Exporta imatge en el format de fitxer QOI" -#: plug-ins/common/file-qoi.c:168 +#: plug-ins/common/file-qoi.c:171 msgid "Export image in the QOI file format (Quite OK Image)" msgstr "Exporta imatge en el format de fitxer QOI (Quite OK Image)" -#: plug-ins/common/file-qoi.c:262 +#: plug-ins/common/file-qoi.c:261 msgid "QOI format does not support multiple layers." msgstr "El format QOI no admet múltiples capes." -#: plug-ins/common/file-qoi.c:312 +#: plug-ins/common/file-qoi.c:311 msgid "Failed to read QOI file" msgstr "No s'ha pogut llegir el fitxer QOI" -#: plug-ins/common/file-raw-data.c:333 plug-ins/common/file-raw-data.c:452 +#: plug-ins/common/file-raw-data.c:336 plug-ins/common/file-raw-data.c:455 msgid "Raw image data" msgstr "Dades d'imatge sense format" -#: plug-ins/common/file-raw-data.c:414 plug-ins/common/file-raw-data.c:2802 +#: plug-ins/common/file-raw-data.c:356 +#, fuzzy +#| msgid "Adjust the number of spikes" +msgid "Image width in number of pixels" +msgstr "Ajusta el nombre de puntes" + +#: plug-ins/common/file-raw-data.c:361 +#, fuzzy +#| msgid "Adjust the number of spikes" +msgid "Image height in number of pixels" +msgstr "Ajusta el nombre de puntes" + +#: plug-ins/common/file-raw-data.c:366 +#, fuzzy +msgid "Offset to beginning of image in raw data" +msgstr "Desplaçament a l'inici de la imatge en dades RAW" + +#: plug-ins/common/file-raw-data.c:371 +#, fuzzy +#| msgid "_Pixel format" +msgid "Pixel _format" +msgstr "_Format de píxel" + +#: plug-ins/common/file-raw-data.c:372 +#, fuzzy +msgid "The layout of pixel data, such as components and their order" +msgstr "" +"La disposició de les dades dels píxels, com els components i el seu ordre" + +#: plug-ins/common/file-raw-data.c:376 +#, fuzzy +#| msgid "Default chunks t_ype" +msgid "Data t_ype" +msgstr "_Tipus de fragments per defecte" + +#: plug-ins/common/file-raw-data.c:377 +#, fuzzy +msgid "" +"Data type used to represent pixel values { RAW_ENCODING_UNSIGNED (0), " +"RAW_ENCODING_SIGNED (1), RAW_ENCODING_FLOAT (2) }" +msgstr "" +"Tipus de dades utilitzades per representar els valors dels píxels { " +"RAWENCODINGUNSIGNED (0), RAWENCODINGSIGNED (1), RAWENCODINGFLOAT (2) }" + +#: plug-ins/common/file-raw-data.c:381 +#, fuzzy +#| msgid "Big Endian" +msgid "Endianness" +msgstr "Ordre dels bytes gran-petit" + +#: plug-ins/common/file-raw-data.c:382 +#, fuzzy +msgid "" +"Order of sequences of bytes { RAW_LITTLE_ENDIAN (0), RAW_BIG_ENDIAN (1) }" +msgstr "" +"Ordre de les seqüències de bytes { RAWLITTLEENDIAN (0), RAWBIGENDIAN (1) }" + +#: plug-ins/common/file-raw-data.c:386 plug-ins/common/file-raw-data.c:470 +#, fuzzy +#| msgid "invalid configuration" +msgid "Planar configuration" +msgstr "configuració invàlida" + +#: plug-ins/common/file-raw-data.c:387 plug-ins/common/file-raw-data.c:471 +#, fuzzy +msgid "" +"How color pixel data are stored { RAW_PLANAR_CONTIGUOUS (0), " +"RAW_PLANAR_SEPARATE (1) }" +msgstr "" +"Com s'emmagatzemen les dades dels píxels de color { RAWPLANARCONTIGUOUS (0)," +" RAWPLANARSEPARATE (1) }" + +#: plug-ins/common/file-raw-data.c:395 +#, fuzzy +#| msgid "Palette Options" +msgid "Palette Offse_t" +msgstr "Opcions de la paleta" + +#: plug-ins/common/file-raw-data.c:396 +#, fuzzy +msgid "Offset to beginning of data in the palette file" +msgstr "Desplaçament al començament de les dades en el fitxer de paleta" + +#: plug-ins/common/file-raw-data.c:400 +#, fuzzy +#| msgid "Palette Map" +msgid "Palette's la_yout" +msgstr "Mapa de la 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) }" +msgstr "" +"La disposició dels canals de color de la paleta { RAWPALETTERGB (0), " +"RAWPALETTEBGR (1) }" + +#: plug-ins/common/file-raw-data.c:406 +#, fuzzy +#| msgid "_Palette Map" +msgid "_Palette File" +msgstr "Mapa de la _paleta" + +#: plug-ins/common/file-raw-data.c:407 +#, fuzzy +msgid "The file containing palette data" +msgstr "El fitxer que conté les dades de la paleta" + +#: plug-ins/common/file-raw-data.c:417 plug-ins/common/file-raw-data.c:2804 msgid "Digital Elevation Model data" msgstr "Dades del model d'elevació digital" -#: plug-ins/common/file-raw-data.c:481 +#: plug-ins/common/file-raw-data.c:441 +#, fuzzy +#| msgid "Hole sp_acing:" +msgid "_Sample spacing" +msgstr "Espai_at del forat:" + +#: plug-ins/common/file-raw-data.c:442 +#, fuzzy +msgid "" +"The sample spacing of the data. (0: auto-detect, 1: SRTM-1, 2: SRTM-3 data)" +msgstr "" +"L'espaiat de la mostra de les dades. (0: detecció automàtica, 1: SRTM-1, 2: " +"SRTM-3 data)" + +#: plug-ins/common/file-raw-data.c:476 +#, fuzzy +#| msgid "Palette Map" +msgid "Palette's layout" +msgstr "Mapa de la paleta" + +#: plug-ins/common/file-raw-data.c:484 msgid "Raw Data" msgstr "Dades sense format" -#: plug-ins/common/file-raw-data.c:550 +#: plug-ins/common/file-raw-data.c:551 #, c-format msgid "" "%d is not a valid sample spacing. Valid values are: 0 (auto-detect), 1 and " @@ -4850,7 +5732,7 @@ msgstr "" "%d no és una mostra d'espaiat vàlida. Els valors vàlids són: 0 (detecció " "automàtica), 1 i 3." -#: plug-ins/common/file-raw-data.c:563 +#: plug-ins/common/file-raw-data.c:564 #, c-format msgid "" "Auto-detection of sample spacing failed. \"%s\" does not appear to be a " @@ -4862,16 +5744,16 @@ msgstr "" "HGT suportats són: SRTM-1 i SRTM-3. Si coneixeu la variant, executeu amb els" " arguments 1 o 3." -#: plug-ins/common/file-raw-data.c:654 +#: plug-ins/common/file-raw-data.c:649 msgid "RAW export does not support multiple layers." msgstr "L'exportació RAW no admet múltiples capes." -#: plug-ins/common/file-raw-data.c:1555 +#: plug-ins/common/file-raw-data.c:1547 #, c-format msgid "Could not open '%s' for size verification: %s" msgstr "No s'ha pogut obrir «%s» per a verificar-ne la mida: %s" -#: plug-ins/common/file-raw-data.c:2631 +#: plug-ins/common/file-raw-data.c:2633 msgid "Load Image from Raw Data" msgstr "Carrega una imatge des de dades sense format" @@ -4883,218 +5765,218 @@ msgstr "Carrega una imatge des de dades sense format" #. * [...] #. * SRTM-3 data are sampled at three arc-seconds and contain 1201 lines and #. * 1201 samples with similar overlapping rows and columns." -#: plug-ins/common/file-raw-data.c:2690 +#: plug-ins/common/file-raw-data.c:2692 msgid "SRTM-1 (1 arc-second)" msgstr "SRTM-1 (1 arc de segon)" -#: plug-ins/common/file-raw-data.c:2691 +#: plug-ins/common/file-raw-data.c:2693 msgid "SRTM-3 (3 arc-seconds)" msgstr "SRTM-3 (3 arcs de segon)" #. Generic case for any data. Let's leave choice to select the #. * right type of raw data. -#: plug-ins/common/file-raw-data.c:2702 +#: plug-ins/common/file-raw-data.c:2704 msgid "RGB 8-bit" msgstr "RGB de 8 bits" -#: plug-ins/common/file-raw-data.c:2703 +#: plug-ins/common/file-raw-data.c:2705 msgid "RGB 16-bit" msgstr "RGB de 16 bits" -#: plug-ins/common/file-raw-data.c:2704 +#: plug-ins/common/file-raw-data.c:2706 msgid "RGB 32-bit" msgstr "RGB de 32 bits" -#: plug-ins/common/file-raw-data.c:2706 +#: plug-ins/common/file-raw-data.c:2708 msgid "RGBA 8-bit" msgstr "RGBA de 8 bits" -#: plug-ins/common/file-raw-data.c:2707 +#: plug-ins/common/file-raw-data.c:2709 msgid "RGBA 16-bit" msgstr "RGBA de 16 bits" -#: plug-ins/common/file-raw-data.c:2708 +#: plug-ins/common/file-raw-data.c:2710 msgid "RGBA 32-bit" msgstr "RGBA de 32 bits" -#: plug-ins/common/file-raw-data.c:2710 +#: plug-ins/common/file-raw-data.c:2712 msgid "RGB565" msgstr "RGB565" -#: plug-ins/common/file-raw-data.c:2711 +#: plug-ins/common/file-raw-data.c:2713 msgid "BGR565" msgstr "BGR565" -#: plug-ins/common/file-raw-data.c:2713 +#: plug-ins/common/file-raw-data.c:2715 msgid "B&W 1 bit" msgstr "B&N 1 bit" -#: plug-ins/common/file-raw-data.c:2714 +#: plug-ins/common/file-raw-data.c:2716 msgid "Grayscale 2-bit" msgstr "Escala de grisos de 2 bits" -#: plug-ins/common/file-raw-data.c:2715 +#: plug-ins/common/file-raw-data.c:2717 msgid "Grayscale 4-bit" msgstr "Escala de grisos de 4 bits" -#: plug-ins/common/file-raw-data.c:2716 +#: plug-ins/common/file-raw-data.c:2718 msgid "Grayscale 8-bit" msgstr "Escala de grisos de 8 bits" -#: plug-ins/common/file-raw-data.c:2717 +#: plug-ins/common/file-raw-data.c:2719 msgid "Grayscale 16-bit" msgstr "Escala de grisos de 16 bits" -#: plug-ins/common/file-raw-data.c:2718 +#: plug-ins/common/file-raw-data.c:2720 msgid "Grayscale 32-bit" msgstr "Escala de grisos de 32 bits" -#: plug-ins/common/file-raw-data.c:2720 +#: plug-ins/common/file-raw-data.c:2722 msgid "Grayscale-Alpha 8-bit" msgstr "Escala de grisos alfa de 8 bits" -#: plug-ins/common/file-raw-data.c:2721 +#: plug-ins/common/file-raw-data.c:2723 msgid "Grayscale-Alpha 16-bit" msgstr "Escala de grisos alfa de 16 bits" -#: plug-ins/common/file-raw-data.c:2722 +#: plug-ins/common/file-raw-data.c:2724 msgid "Grayscale-Alpha 32-bit" msgstr "Escala de grisos alfa de 32 bits" -#: plug-ins/common/file-raw-data.c:2724 +#: plug-ins/common/file-raw-data.c:2726 msgid "Indexed" msgstr "Indexat" -#: plug-ins/common/file-raw-data.c:2725 +#: plug-ins/common/file-raw-data.c:2727 msgid "Indexed Alpha" msgstr "Indexat amb alfa" -#: plug-ins/common/file-raw-data.c:2731 +#: plug-ins/common/file-raw-data.c:2733 msgid "Unsigned Integer" msgstr "Enter sense signe" -#: plug-ins/common/file-raw-data.c:2732 +#: plug-ins/common/file-raw-data.c:2734 msgid "Signed Integer" msgstr "Enter amb signe" -#: plug-ins/common/file-raw-data.c:2733 +#: plug-ins/common/file-raw-data.c:2735 msgid "Floating Point" msgstr "Punt flotant" -#: plug-ins/common/file-raw-data.c:2739 +#: plug-ins/common/file-raw-data.c:2741 msgid "Little Endian" msgstr "Ordre dels bytes petit-gran" -#: plug-ins/common/file-raw-data.c:2740 +#: plug-ins/common/file-raw-data.c:2742 msgid "Big Endian" msgstr "Ordre dels bytes gran-petit" -#: plug-ins/common/file-raw-data.c:2746 +#: plug-ins/common/file-raw-data.c:2748 msgid "Contiguous" msgstr "Contigua" -#: plug-ins/common/file-raw-data.c:2747 +#: plug-ins/common/file-raw-data.c:2749 msgid "Planar" msgstr "Planar" #. Translators: Digital Elevation Model (DEM) is a technical term #. * used for 3D surface modeling or relief maps; so it must be #. * translated by the proper technical term in your language. -#: plug-ins/common/file-raw-data.c:2796 +#: plug-ins/common/file-raw-data.c:2798 msgid "Digital Elevation Model data (1 arc-second)" msgstr "Dades del model d'elevació digital (1 arc de segon)" -#: plug-ins/common/file-raw-data.c:2799 +#: plug-ins/common/file-raw-data.c:2801 msgid "Digital Elevation Model data (3 arc-seconds)" msgstr "Dades del model d'elevació digital (3 arcs de segon)" -#: plug-ins/common/file-raw-data.c:2806 +#: plug-ins/common/file-raw-data.c:2808 msgid "Image" msgstr "Imatge" -#: plug-ins/common/file-raw-data.c:2809 +#: plug-ins/common/file-raw-data.c:2811 msgid "R, G, B (normal)" msgstr "R, G, B (normal)" -#: plug-ins/common/file-raw-data.c:2810 +#: plug-ins/common/file-raw-data.c:2812 msgid "B, G, R, X (BMP style)" msgstr "B, G, R, X (estil BMP)" -#: plug-ins/common/file-raw-data.c:2825 +#: plug-ins/common/file-raw-data.c:2827 msgid "Palette" msgstr "Paleta" #. TRANSLATORS: %s is a sample to describe the planar configuration #. * (e.g. RGB,RGB,RGB vs RRR,GGG,BBB). -#: plug-ins/common/file-raw-data.c:2896 +#: plug-ins/common/file-raw-data.c:2898 #, c-format msgid "_Contiguous (%s)" msgstr "C_ontigua (%s)" -#: plug-ins/common/file-raw-data.c:2898 +#: plug-ins/common/file-raw-data.c:2900 msgid "_Contiguous" msgstr "Co_ntigua" #. TRANSLATORS: %s is a sample to describe the planar configuration #. * (e.g. RGB,RGB,RGB vs RRR,GGG,BBB). -#: plug-ins/common/file-raw-data.c:2904 +#: plug-ins/common/file-raw-data.c:2906 #, c-format msgid "_Planar (%s)" msgstr "_Planar (%s)" -#: plug-ins/common/file-raw-data.c:2906 +#: plug-ins/common/file-raw-data.c:2908 msgid "_Planar" msgstr "_Planar" #. Palette type combo -#: plug-ins/common/file-raw-data.c:2928 +#: plug-ins/common/file-raw-data.c:2930 msgid "_R, G, B (normal)" msgstr "_R, G, B (normal)" -#: plug-ins/common/file-raw-data.c:2929 +#: plug-ins/common/file-raw-data.c:2931 msgid "_B, G, R, X (BMP style)" msgstr "_B, G, R, X (estil BMP)" -#: plug-ins/common/file-sunras.c:274 plug-ins/common/file-sunras.c:300 +#: plug-ins/common/file-sunras.c:277 plug-ins/common/file-sunras.c:303 msgid "SUN Rasterfile image" msgstr "Imatge de trama de SUN" -#: plug-ins/common/file-sunras.c:315 +#: plug-ins/common/file-sunras.c:318 msgid "SUNRAS" msgstr "SUNRAS" -#: plug-ins/common/file-sunras.c:322 +#: plug-ins/common/file-sunras.c:325 msgid "Data Formatting" msgstr "S'estan formatant les dades" -#: plug-ins/common/file-sunras.c:323 +#: plug-ins/common/file-sunras.c:326 msgid "Use standard (0) or Run-Length Encoded (1) output" msgstr "Usa la sortida estàndard (0) o Run-Length codificada (1)" -#: plug-ins/common/file-sunras.c:407 +#: plug-ins/common/file-sunras.c:409 msgid "SUNRAS format does not support multiple layers." msgstr "El format SUNRAS no admet múltiples capes." -#: plug-ins/common/file-sunras.c:469 +#: plug-ins/common/file-sunras.c:468 #, c-format msgid "Could not open '%s' as SUN-raster-file" msgstr "No s'ha pogut obrir «%s» com a fitxer de trama de SUN" -#: plug-ins/common/file-sunras.c:479 +#: plug-ins/common/file-sunras.c:478 msgid "The type of this SUN-rasterfile is not supported" msgstr "El tipus de fitxer-trama de SUN no és compatible" -#: plug-ins/common/file-sunras.c:508 +#: plug-ins/common/file-sunras.c:507 #, c-format msgid "Could not read color entries from '%s'" msgstr "No s'han pogut llegir les entrades de color de «%s»" -#: plug-ins/common/file-sunras.c:517 +#: plug-ins/common/file-sunras.c:516 msgid "Type of colormap not supported" msgstr "El tipus de mapa de colors no és compatible" -#: plug-ins/common/file-sunras.c:524 plug-ins/common/file-xbm.c:838 -#: plug-ins/common/file-xwd.c:590 +#: plug-ins/common/file-sunras.c:523 plug-ins/common/file-xbm.c:837 +#: plug-ins/common/file-xwd.c:596 #, c-format msgid "" "'%s':\n" @@ -5103,8 +5985,8 @@ msgstr "" "«%s»\n" "No s'ha especificat l'amplada de la imatge" -#: plug-ins/common/file-sunras.c:532 plug-ins/common/file-xbm.c:846 -#: plug-ins/common/file-xwd.c:599 +#: plug-ins/common/file-sunras.c:531 plug-ins/common/file-xbm.c:845 +#: plug-ins/common/file-xwd.c:605 #, c-format msgid "" "'%s':\n" @@ -5113,8 +5995,8 @@ msgstr "" "«%s»:\n" "El PIKA no pot gestionar imatges d'aquesta amplada" -#: plug-ins/common/file-sunras.c:540 plug-ins/common/file-xbm.c:854 -#: plug-ins/common/file-xwd.c:607 +#: plug-ins/common/file-sunras.c:539 plug-ins/common/file-xbm.c:853 +#: plug-ins/common/file-xwd.c:613 #, c-format msgid "" "'%s':\n" @@ -5123,8 +6005,8 @@ msgstr "" "«%s»\n" "No s'ha especificat l'alçada de la imatge" -#: plug-ins/common/file-sunras.c:548 plug-ins/common/file-xbm.c:862 -#: plug-ins/common/file-xwd.c:615 +#: plug-ins/common/file-sunras.c:547 plug-ins/common/file-xbm.c:861 +#: plug-ins/common/file-xwd.c:621 #, c-format msgid "" "'%s':\n" @@ -5133,60 +6015,91 @@ msgstr "" "«%s»:\n" "El PIKA no pot gestionar imatges d'aquesta alçada" -#: plug-ins/common/file-sunras.c:584 +#: plug-ins/common/file-sunras.c:583 msgid "This image depth is not supported" msgstr "La profunditat d'imatge no és compatible" -#: plug-ins/common/file-sunras.c:613 +#: plug-ins/common/file-sunras.c:612 msgid "SUNRAS export cannot handle images with alpha channels" msgstr "L'exportació a SUNRAS no pot gestionar les imatges amb canals alfa" -#: plug-ins/common/file-sunras.c:624 +#: plug-ins/common/file-sunras.c:623 msgid "Can't operate on unknown image types" msgstr "No es pot operar en tipus d'imatge desconeguts" -#: plug-ins/common/file-sunras.c:1193 plug-ins/common/file-sunras.c:1288 -#: plug-ins/common/file-sunras.c:1372 plug-ins/common/file-sunras.c:1472 -#: plug-ins/common/file-xwd.c:1513 plug-ins/common/file-xwd.c:1627 -#: plug-ins/common/file-xwd.c:1798 plug-ins/common/file-xwd.c:2038 -#: plug-ins/common/file-xwd.c:2227 plug-ins/common/file-xwd.c:2503 +#: plug-ins/common/file-sunras.c:1192 plug-ins/common/file-sunras.c:1287 +#: plug-ins/common/file-sunras.c:1371 plug-ins/common/file-sunras.c:1471 +#: plug-ins/common/file-xwd.c:1519 plug-ins/common/file-xwd.c:1633 +#: plug-ins/common/file-xwd.c:1804 plug-ins/common/file-xwd.c:2044 +#: plug-ins/common/file-xwd.c:2233 plug-ins/common/file-xwd.c:2509 msgid "EOF encountered on reading" msgstr "S'ha arribat al fi de fitxer en llegir" -#: plug-ins/common/file-sunras.c:1651 plug-ins/common/file-sunras.c:1772 +#: plug-ins/common/file-sunras.c:1650 plug-ins/common/file-sunras.c:1771 msgid "Write error occurred" msgstr "S'ha produït un error d'escriptura" -#: plug-ins/common/file-sunras.c:1795 +#: plug-ins/common/file-sunras.c:1794 msgid "S_tandard" msgstr "_Estàndard" -#: plug-ins/common/file-sunras.c:1796 +#: plug-ins/common/file-sunras.c:1795 msgid "R_un-Length Encoded" msgstr "Codificació _Run-Lenght" -#: plug-ins/common/file-svg.c:163 +#: plug-ins/common/file-svg.c:160 msgid "SVG image" msgstr "Imatge SVG" -#: plug-ins/common/file-svg.c:367 plug-ins/common/file-svg.c:827 +#: plug-ins/common/file-svg.c:205 +#, fuzzy +msgid "_Paths" +msgstr "Camins" + +#: plug-ins/common/file-svg.c:206 +#, fuzzy +#| msgid "" +#| "Import path elements of the SVG so they can be used with the PIKA path tool" +msgid "" +"Whether and how to import paths so that they can be used with the path tool" +msgstr "" +"Importa els elements de camins SVG perquè es puguin utilitzar amb l'eina de " +"camí del PIKA" + +#: plug-ins/common/file-svg.c:207 +#, fuzzy +#| msgid "Import _paths" +msgid "Don't import paths" +msgstr "Im_porta camins" + +#: plug-ins/common/file-svg.c:208 +#, fuzzy +#| msgid "Import _paths" +msgid "Import paths individually" +msgstr "Im_porta camins" + +#: plug-ins/common/file-svg.c:209 +msgid "Merge imported paths" +msgstr "Fusiona els camins importats" + +#: plug-ins/common/file-svg.c:382 plug-ins/common/file-svg.c:811 msgid "Unknown reason" msgstr "Raó desconeguda" -#: plug-ins/common/file-svg.c:373 +#: plug-ins/common/file-svg.c:388 msgid "Rendering SVG" msgstr "S'està renderitzant l'SVG" -#: plug-ins/common/file-svg.c:384 +#: plug-ins/common/file-svg.c:398 msgid "Rendered SVG" msgstr "SVG renderitzat" -#: plug-ins/common/file-svg.c:581 plug-ins/common/file-wmf.c:401 +#: plug-ins/common/file-svg.c:601 plug-ins/common/file-wmf.c:398 #, c-format msgid "%d × %d" msgstr "%d × %d" -#: plug-ins/common/file-svg.c:589 +#: plug-ins/common/file-svg.c:609 msgid "" "SVG file does not\n" "specify a size!" @@ -5198,15 +6111,15 @@ msgstr "" #. * option (XML_PARSE_HUGE in libxml) because it is considered #. * unsafe, possibly consumming too much memory with malicious XML #. * files. -#: plug-ins/common/file-svg.c:753 +#: plug-ins/common/file-svg.c:736 msgid "Disable safety size limits?" msgstr "Voleu desactivar els límits de seguretat de la mida?" -#: plug-ins/common/file-svg.c:758 +#: plug-ins/common/file-svg.c:741 msgid "_No" msgstr "_No" -#: plug-ins/common/file-svg.c:759 +#: plug-ins/common/file-svg.c:742 msgid "_Yes" msgstr "_Sí" @@ -5219,7 +6132,7 @@ msgstr "_Sí" #. * just directly return from the plug-in as a failure run in other #. * cases. Instead of this, we need to ask each and every time, in #. * case it might be the huge data error. -#: plug-ins/common/file-svg.c:783 +#: plug-ins/common/file-svg.c:766 msgid "" "A parsing error occurred.\n" "Disabling safety limits may help. Malicious SVG files may use this to consume too much memory." @@ -5227,144 +6140,100 @@ msgstr "" "S'ha produït un error d'anàlisi.\n" "Inhabilitar els límits de seguretat pot ajudar. Els fitxers SVG maliciosos poden utilitzar-los per a consumir massa memòria." -#: plug-ins/common/file-svg.c:795 +#: plug-ins/common/file-svg.c:778 msgid "For security reasons, this should only be used for trusted input!" msgstr "" "Per raons de seguretat, això només s'hauria d'utilitzar per a entrades de " "confiança!" -#: plug-ins/common/file-svg.c:802 +#: plug-ins/common/file-svg.c:785 msgid "Retry without limits preventing to parse huge data?" msgstr "" "Voleu tornar-ho a intentar sense límits i evitar analitzar dades enormes?" -#. Scalable Vector Graphics is SVG, should perhaps not be translated -#: plug-ins/common/file-svg.c:834 +#: plug-ins/common/file-svg.c:820 msgid "Render Scalable Vector Graphics" msgstr "Compon el gràfic de vectors escalables (SVG)" -#. Width and Height -#: plug-ins/common/file-svg.c:893 plug-ins/common/file-wmf.c:606 -#: plug-ins/common/grid.c:844 -msgid "Width:" -msgstr "Amplada:" - -#: plug-ins/common/file-svg.c:899 plug-ins/common/file-wmf.c:611 -msgid "Height:" -msgstr "Alçada:" - -#: plug-ins/common/file-svg.c:971 plug-ins/common/file-wmf.c:679 -msgid "_X ratio:" -msgstr "Ràtio _X:" - -#: plug-ins/common/file-svg.c:992 plug-ins/common/file-wmf.c:699 -msgid "_Y ratio:" -msgstr "Ràtio _Y:" - -#: plug-ins/common/file-svg.c:1006 plug-ins/common/file-wmf.c:712 -msgid "Constrain aspect ratio" -msgstr "Restringeix la relació d'aspecte" - -#. Resolution -#: plug-ins/common/file-svg.c:1011 plug-ins/common/file-wmf.c:717 -msgid "Resolution:" -msgstr "Resolució:" - -#. Path Import -#: plug-ins/common/file-svg.c:1037 -msgid "Import _paths" -msgstr "Im_porta camins" - -#: plug-ins/common/file-svg.c:1044 -msgid "" -"Import path elements of the SVG so they can be used with the PIKA path tool" -msgstr "" -"Importa els elements de camins SVG perquè es puguin utilitzar amb l'eina de " -"camí del PIKA" - -#: plug-ins/common/file-svg.c:1052 -msgid "Merge imported paths" -msgstr "Fusiona els camins importats" - -#: plug-ins/common/file-tga.c:260 plug-ins/common/file-tga.c:286 +#: plug-ins/common/file-tga.c:263 plug-ins/common/file-tga.c:289 msgid "TarGA image" msgstr "Imatge TarGA" -#: plug-ins/common/file-tga.c:298 +#: plug-ins/common/file-tga.c:301 msgid "TGA" msgstr "TGA" -#: plug-ins/common/file-tga.c:305 +#: plug-ins/common/file-tga.c:308 msgid "_Use RLE compression" msgstr "_Usa compressió RLE" -#: plug-ins/common/file-tga.c:306 +#: plug-ins/common/file-tga.c:309 msgid "Use RLE compression" msgstr "U_sa compressió RLE" -#: plug-ins/common/file-tga.c:311 +#: plug-ins/common/file-tga.c:314 msgid "Ori_gin" msgstr "_Origen" -#: plug-ins/common/file-tga.c:312 +#: plug-ins/common/file-tga.c:315 msgid "Image origin (0 = top-left, 1 = bottom-left)" msgstr "Origen de la imatge (0 = superior esquerra, 1 = inferior esquerra)" -#: plug-ins/common/file-tga.c:394 plug-ins/common/file-xwd.c:447 +#: plug-ins/common/file-tga.c:396 plug-ins/common/file-xwd.c:453 msgid "TGA format does not support multiple layers." msgstr "El format TGA no admet múltiples capes." -#: plug-ins/common/file-tga.c:458 +#: plug-ins/common/file-tga.c:457 #, c-format msgid "Cannot read footer from '%s'" msgstr "No es pot llegir el peu de pàgina de «%s»" -#: plug-ins/common/file-tga.c:477 +#: plug-ins/common/file-tga.c:476 #, c-format msgid "Cannot read extension from '%s'" msgstr "No es pot llegir l'extensió de «%s»" -#: plug-ins/common/file-tga.c:490 +#: plug-ins/common/file-tga.c:489 #, c-format msgid "Cannot read header from '%s'" msgstr "No es pot llegir la capçalera de «%s»" -#: plug-ins/common/file-tga.c:1453 +#: plug-ins/common/file-tga.c:1452 msgid "Bottom left" msgstr "Inferior esquerre" -#: plug-ins/common/file-tga.c:1454 +#: plug-ins/common/file-tga.c:1453 msgid "Top left" msgstr "Superior esquerre" -#: plug-ins/common/file-wbmp.c:116 +#: plug-ins/common/file-wbmp.c:118 msgid "Wireless BMP image" msgstr "Imatge BMP sense fil" -#: plug-ins/common/file-wbmp.c:119 plug-ins/common/file-wbmp.c:120 +#: plug-ins/common/file-wbmp.c:121 plug-ins/common/file-wbmp.c:122 msgid "Loads files of Wireless BMP file format" msgstr "Carrega els fitxers del format de fitxer BMP sense fil" -#: plug-ins/common/file-wbmp.c:193 +#: plug-ins/common/file-wbmp.c:197 #, c-format msgid "'%s': Invalid WBMP type value" msgstr "«%s»: no és un valor de tipus WBMP vàlid" -#: plug-ins/common/file-wbmp.c:202 +#: plug-ins/common/file-wbmp.c:206 #, c-format msgid "'%s': Unsupported WBMP fixed header value" msgstr "«%s»: el valor de la capçalera fixa WBMP no és compatible" -#: plug-ins/common/file-wbmp.c:224 +#: plug-ins/common/file-wbmp.c:228 #, c-format msgid "'%s' is not a valid WBMP file" msgstr "«%s» no és un fitxer WBMP vàlid" -#: plug-ins/common/file-wmf.c:153 +#: plug-ins/common/file-wmf.c:155 msgid "Microsoft WMF file" msgstr "Fitxer WMF de Microsoft" -#: plug-ins/common/file-wmf.c:395 +#: plug-ins/common/file-wmf.c:392 msgid "" "WMF file does not\n" "specify a size!" @@ -5372,23 +6241,23 @@ msgstr "" "El fitxer WMF no\n" "especifica una mida!" -#: plug-ins/common/file-wmf.c:542 +#: plug-ins/common/file-wmf.c:443 msgid "Render Windows Metafile" msgstr "Compon un metafitxer del Windows" -#: plug-ins/common/file-wmf.c:1039 +#: plug-ins/common/file-wmf.c:797 msgid "Rendered WMF" msgstr "S'ha compost el WMF" -#: plug-ins/common/file-xbm.c:159 plug-ins/common/file-xbm.c:187 +#: plug-ins/common/file-xbm.c:162 plug-ins/common/file-xbm.c:190 msgid "X BitMap image" msgstr "Mapa de bits X" -#: plug-ins/common/file-xbm.c:162 +#: plug-ins/common/file-xbm.c:165 msgid "Load a file in X10 or X11 bitmap (XBM) file format" msgstr "Carrega un fitxer en format X10 o X11 bitmap (XBM)" -#: plug-ins/common/file-xbm.c:164 +#: plug-ins/common/file-xbm.c:167 msgid "" "Load a file in X10 or X11 bitmap (XBM) file format. XBM is a lossless format" " for flat black-and-white (two color indexed) images." @@ -5396,11 +6265,11 @@ msgstr "" "Carrega un fitxer en format X10 o X11 bitmap (XBM). XBM és un format sense " "pèrdua per a imatges planes en blanc i negre (dos colors indexats)." -#: plug-ins/common/file-xbm.c:190 +#: plug-ins/common/file-xbm.c:193 msgid "Export a file in X10 or X11 bitmap (XBM) file format" msgstr "Exporta un fitxer en format X10 o X11 bitmap (XBM)" -#: plug-ins/common/file-xbm.c:192 +#: plug-ins/common/file-xbm.c:195 msgid "" "X10 or X11 bitmap (XBM) file format. XBM is a lossless format for flat " "black-and-white (two color indexed) images." @@ -5408,87 +6277,87 @@ msgstr "" "Format de fitxer X10 o X11 bitmap (XBM). XBM és un format sense pèrdua per a" " imatges planes en blanc i negre (dos colors indexats)." -#: plug-ins/common/file-xbm.c:203 +#: plug-ins/common/file-xbm.c:206 msgid "XBM" msgstr "XBM" -#: plug-ins/common/file-xbm.c:212 +#: plug-ins/common/file-xbm.c:215 msgid "_Write comment" msgstr "_Escriu un Comentari" -#: plug-ins/common/file-xbm.c:213 +#: plug-ins/common/file-xbm.c:216 msgid "Write a comment at the beginning of the file." msgstr "Escriu un comentari al començament del fitxer." -#: plug-ins/common/file-xbm.c:218 plug-ins/common/mail.c:235 +#: plug-ins/common/file-xbm.c:221 plug-ins/common/mail.c:235 msgid "Co_mment" msgstr "Co_mentari" -#: plug-ins/common/file-xbm.c:219 +#: plug-ins/common/file-xbm.c:222 msgid "Image description (maximum 72 bytes)" msgstr "Descripció de la imatge (màxim 72 bytes)" -#: plug-ins/common/file-xbm.c:227 +#: plug-ins/common/file-xbm.c:230 msgid "_X10 format bitmap" msgstr "Format del mapa de bits _X10" -#: plug-ins/common/file-xbm.c:228 +#: plug-ins/common/file-xbm.c:231 msgid "Export in X10 format" msgstr "Exporta en format X10" -#: plug-ins/common/file-xbm.c:233 +#: plug-ins/common/file-xbm.c:236 msgid "Write hot spot _values" msgstr "Escriu els _valors del punt calent" -#: plug-ins/common/file-xbm.c:234 +#: plug-ins/common/file-xbm.c:237 msgid "Write hotspot information" msgstr "Escriu la informació del punt calent" -#: plug-ins/common/file-xbm.c:239 +#: plug-ins/common/file-xbm.c:242 msgid "Hot s_pot X" msgstr "Punt calent _X" -#: plug-ins/common/file-xbm.c:240 +#: plug-ins/common/file-xbm.c:243 msgid "X coordinate of hotspot" msgstr "Coordenada X del punt calent" -#: plug-ins/common/file-xbm.c:245 +#: plug-ins/common/file-xbm.c:248 msgid "Hot spot _Y" msgstr "Punt calent _Y" -#: plug-ins/common/file-xbm.c:246 +#: plug-ins/common/file-xbm.c:249 msgid "Y coordinate of hotspot" msgstr "Coordenada Y del punt calent" -#: plug-ins/common/file-xbm.c:251 +#: plug-ins/common/file-xbm.c:254 msgid "I_dentifier prefix" msgstr "Prefix de l'_identificador" -#: plug-ins/common/file-xbm.c:252 +#: plug-ins/common/file-xbm.c:255 msgid "Identifier prefix [determined from filename]" msgstr "Prefix d'identificador [determinat des del nom de fitxer]" -#: plug-ins/common/file-xbm.c:257 +#: plug-ins/common/file-xbm.c:260 msgid "Write extra mask _file" msgstr "Esc_riu el fitxer de màscara extra" -#: plug-ins/common/file-xbm.c:258 +#: plug-ins/common/file-xbm.c:261 msgid "Write extra mask file" msgstr "Escriu el fitxer de màscara extra" -#: plug-ins/common/file-xbm.c:263 +#: plug-ins/common/file-xbm.c:266 msgid "Mas_k file extensions" msgstr "_Extensions de fitxer de màscara" -#: plug-ins/common/file-xbm.c:264 +#: plug-ins/common/file-xbm.c:267 msgid "Suffix of the mask file" msgstr "Sufix del fitxer de màscara" -#: plug-ins/common/file-xbm.c:376 +#: plug-ins/common/file-xbm.c:378 msgid "XBM format does not support multiple layers." msgstr "El format XBM no admet múltiples capes." -#: plug-ins/common/file-xbm.c:830 +#: plug-ins/common/file-xbm.c:829 #, c-format msgid "" "'%s':\n" @@ -5497,7 +6366,7 @@ msgstr "" "«%s»:\n" "No s'ha pogut llegir la capçalera (ftell == %ld)" -#: plug-ins/common/file-xbm.c:870 +#: plug-ins/common/file-xbm.c:869 #, c-format msgid "" "'%s':\n" @@ -5507,7 +6376,7 @@ msgstr "" "No s'ha especificat el tipus de dades de la imatge" #. The image is not black-and-white. -#: plug-ins/common/file-xbm.c:1015 +#: plug-ins/common/file-xbm.c:1014 msgid "" "The image which you are trying to export as an XBM contains more than two colors.\n" "\n" @@ -5517,7 +6386,7 @@ msgstr "" "\n" "Convertiu-la en una imatge indexada en blanc i negre (1-bit) i torneu-ho a provar." -#: plug-ins/common/file-xbm.c:1027 +#: plug-ins/common/file-xbm.c:1026 msgid "" "You cannot save a cursor mask for an image\n" "which has no alpha channel." @@ -5525,7 +6394,7 @@ msgstr "" "No podeu desar una màscara del cursor d'una imatge\n" "que no té un canal alfa." -#: plug-ins/common/file-xbm.c:1259 +#: plug-ins/common/file-xbm.c:1258 msgid "" "Writing a comment will make the XBM file unreadable by some applications.\n" "The comment will not affect embedding the XBM in C source code." @@ -5533,11 +6402,11 @@ msgstr "" "En escriure un comentari, el fitxer XBM serà il·legible per algunes aplicacions.\n" "El comentari no afectarà la incrustació de la XBM en codi font C." -#: plug-ins/common/file-xmc.c:299 plug-ins/common/file-xmc.c:348 +#: plug-ins/common/file-xmc.c:301 plug-ins/common/file-xmc.c:350 msgid "X11 Mouse Cursor" msgstr "Cursor de ratolí X11" -#: plug-ins/common/file-xmc.c:537 +#: plug-ins/common/file-xmc.c:541 msgid "" "Cannot set the hot spot!\n" "You must arrange layers so that all of them have an intersection." @@ -5545,69 +6414,69 @@ msgstr "" "No s'ha pogut determinar el punt calent.\n" "Hauríeu de disposar les capes de manera que totes elles tinguin una intersecció." -#: plug-ins/common/file-xmc.c:665 +#: plug-ins/common/file-xmc.c:663 #, c-format msgid "'%s' is not a valid X cursor." msgstr "«%s» no és un cursor X vàlid." -#: plug-ins/common/file-xmc.c:678 +#: plug-ins/common/file-xmc.c:676 #, c-format msgid "Frame %d of '%s' is too wide for an X cursor." msgstr "L'amplada del marc %d de «%s» és massa gran pel cursor X." -#: plug-ins/common/file-xmc.c:686 +#: plug-ins/common/file-xmc.c:684 #, c-format msgid "Frame %d of '%s' is too high for an X cursor." msgstr "L'alçada del marc %d de «%s» és massa gran pel cursor X." -#: plug-ins/common/file-xmc.c:957 +#: plug-ins/common/file-xmc.c:955 #, c-format msgid "there is no image chunk in \"%s\"." msgstr "manca un fragment de la imatge a «%s»." -#: plug-ins/common/file-xmc.c:998 +#: plug-ins/common/file-xmc.c:996 #, c-format msgid "'%s' is too wide for an X cursor." msgstr "L'amplada de «%s» és massa gran pel cursor X." -#: plug-ins/common/file-xmc.c:1007 +#: plug-ins/common/file-xmc.c:1005 #, c-format msgid "'%s' is too high for an X cursor." msgstr "L'alçada de «%s» és massa gran pel cursor X." -#: plug-ins/common/file-xmc.c:1071 +#: plug-ins/common/file-xmc.c:1069 msgid "A read error occurred." msgstr "S'ha produït un error de lectura." -#: plug-ins/common/file-xmc.c:1111 +#: plug-ins/common/file-xmc.c:1109 msgid "Export Image as X11 Mouse Cursor" msgstr "Exporta la imatge com a cursor del ratolí X11" -#: plug-ins/common/file-xmc.c:1130 plug-ins/file-ico/ico-dialog.c:583 +#: plug-ins/common/file-xmc.c:1128 plug-ins/file-ico/ico-dialog.c:584 msgid "Hot spot _X:" msgstr "Punt calent _X:" -#: plug-ins/common/file-xmc.c:1134 +#: plug-ins/common/file-xmc.c:1132 msgid "Enter the X coordinate of the hot spot. The origin is top left corner." msgstr "" "Introduïu el valor de la coordenada X del punt calent. L'origen és a la " "cantonada de dalt a l'esquerra." -#: plug-ins/common/file-xmc.c:1144 plug-ins/file-ico/ico-dialog.c:596 +#: plug-ins/common/file-xmc.c:1142 plug-ins/file-ico/ico-dialog.c:597 msgid "Hot spot _Y:" msgstr "Punt calent _Y:" -#: plug-ins/common/file-xmc.c:1148 +#: plug-ins/common/file-xmc.c:1146 msgid "Enter the Y coordinate of the hot spot. The origin is top left corner." msgstr "" "Introduïu el valor de la coordenada Y del punt calent. L'origen és a la " "cantonada de dalt a l'esquerra." -#: plug-ins/common/file-xmc.c:1154 +#: plug-ins/common/file-xmc.c:1152 msgid "_Auto-Crop all frames" msgstr "Esc_apça automàticament tots els marcs" -#: plug-ins/common/file-xmc.c:1158 +#: plug-ins/common/file-xmc.c:1156 msgid "" "Remove the empty borders of all frames.\n" "This reduces the file size and may fix the problem that some large cursors disorder the screen.\n" @@ -5617,7 +6486,7 @@ msgstr "" "Això reduirà la mida del fitxer i hauria de solucionar el problema que alguns cursors grans causen a la pantalla.\n" "Desmarqueu aquesta opció si penseu editar el cursor exportat amb alguna altra aplicació." -#: plug-ins/common/file-xmc.c:1177 +#: plug-ins/common/file-xmc.c:1175 msgid "" "_Size where\n" "unspecified:" @@ -5625,7 +6494,7 @@ msgstr "" "_Mida on\n" "no especificada:" -#: plug-ins/common/file-xmc.c:1181 +#: plug-ins/common/file-xmc.c:1179 msgid "" "Choose the nominal size of frames.\n" "If you don't have plans to make multi-sized cursor, or you have no idea, leave it \"32px\".\n" @@ -5637,11 +6506,11 @@ msgstr "" "La mida nominal no té relació amb la mida real (amb l'amplada o amb l'alçada).\n" "Només s'utilitza per a determinar quin fotograma depèn amb quina seqüència de l'animació i quina seqüència s'utilitza en cada cas basant-se en el valor de «gtk-cursor-theme-size»." -#: plug-ins/common/file-xmc.c:1194 +#: plug-ins/common/file-xmc.c:1192 msgid "Use size entered above for all frames" msgstr "Utilitza la mida introduïda a dalt per a tots els marcs" -#: plug-ins/common/file-xmc.c:1201 +#: plug-ins/common/file-xmc.c:1199 msgid "" "_Delay where\n" "unspecified:" @@ -5649,36 +6518,36 @@ msgstr "" "_Retard on\n" "no especificat:" -#: plug-ins/common/file-xmc.c:1206 +#: plug-ins/common/file-xmc.c:1204 msgid "Enter time span in milliseconds in which each frame is rendered." msgstr "" "Introduïu el temps en mil·lisegons durant el qual es renderitzarà cada marc." -#: plug-ins/common/file-xmc.c:1220 +#: plug-ins/common/file-xmc.c:1218 msgid "Use delay entered above for all frames" msgstr "Utilitza el retard introduït anteriorment per a tots els marcs" -#: plug-ins/common/file-xmc.c:1227 +#: plug-ins/common/file-xmc.c:1225 msgid "_Copyright:" msgstr "_Copyright:" -#: plug-ins/common/file-xmc.c:1231 +#: plug-ins/common/file-xmc.c:1229 msgid "Enter copyright information." msgstr "Introduïu la informació del copyright." -#: plug-ins/common/file-xmc.c:1237 +#: plug-ins/common/file-xmc.c:1235 msgid "_License:" msgstr "_Llicència:" -#: plug-ins/common/file-xmc.c:1241 +#: plug-ins/common/file-xmc.c:1239 msgid "Enter license information." msgstr "Introduïu la informació de la llicència." -#: plug-ins/common/file-xmc.c:1251 +#: plug-ins/common/file-xmc.c:1249 msgid "_Other:" msgstr "Al_tres:" -#: plug-ins/common/file-xmc.c:1265 +#: plug-ins/common/file-xmc.c:1263 msgid "Enter other comment if you want." msgstr "Introduïu comentaris addicionals si voleu." @@ -5686,28 +6555,28 @@ msgstr "Introduïu comentaris addicionals si voleu." # init the progress meter # Set up progress display #. Begin displaying export progress -#: plug-ins/common/file-xmc.c:1370 plug-ins/file-webp/file-webp-save.c:198 +#: plug-ins/common/file-xmc.c:1368 plug-ins/file-webp/file-webp-save.c:198 #: plug-ins/file-webp/file-webp-save.c:597 #, c-format msgid "Saving '%s'" msgstr "S'està desant «%s»" -#: plug-ins/common/file-xmc.c:1445 +#: plug-ins/common/file-xmc.c:1443 #, c-format msgid "Frame '%s' is too wide. Please reduce to no more than %dpx." msgstr "El marc «%s» és massa ample. Reduïu-lo en més de %dpx." -#: plug-ins/common/file-xmc.c:1455 +#: plug-ins/common/file-xmc.c:1453 #, c-format msgid "Frame '%s' is too high. Please reduce to no more than %dpx." msgstr "El marc «%s» és massa alt. Reduïu-lo en més de %dpx." -#: plug-ins/common/file-xmc.c:1465 +#: plug-ins/common/file-xmc.c:1463 #, c-format msgid "Width and/or height of frame '%s' is zero!" msgstr "L'amplada i/o l'alçada del marc «%s» és zero." -#: plug-ins/common/file-xmc.c:1507 +#: plug-ins/common/file-xmc.c:1505 #, c-format msgid "" "Cannot export the cursor because the hot spot is not on frame '%s'.\n" @@ -5716,7 +6585,7 @@ msgstr "" "No s'ha pogut exportar el cursor perquè el punt calent no és a «%s».\n" "Intenteu canviar la posició del punt calent, la geometria de la capa o exporteu la capa sense l'escapçat automàtic." -#: plug-ins/common/file-xmc.c:1681 +#: plug-ins/common/file-xmc.c:1679 #, c-format msgid "" "Your cursor was successfully exported but it contains one or more frames whose width or height is more than %ipx, a historical max dimension value for X bitmap cursors.\n" @@ -5725,7 +6594,7 @@ msgstr "" "El cursor s'ha exportat correctament però conté un o més marcs que excedeixen l'alçada o l'amplada en %ipx , un valor de dimensió màxima històrica per als cursors de mapa de bits X.\n" "Alguns entorns podrien no suportar-ho." -#: plug-ins/common/file-xmc.c:1689 +#: plug-ins/common/file-xmc.c:1687 msgid "" "Your cursor was successfully exported but it contains one or more frames whose nominal size is not supported by GNOME settings.\n" "You can satisfy it by checking \"Replace the size of all frames...\" in the export dialog, or your cursor may not appear in GNOME settings." @@ -5733,7 +6602,7 @@ msgstr "" "El cursor s'ha exportat amb èxit però conté un o més marcs dels quals la grandària nominal no és compatible amb la configuració del GNOME.\n" "Es pot satisfer mitjançant la comprovació «Substituir la mida de tots els marcs...» al diàleg d'exportació, o el cursor no pot aparèixer en la configuració del GNOME." -#: plug-ins/common/file-xmc.c:1971 +#: plug-ins/common/file-xmc.c:1969 #, c-format msgid "" "Your cursor was successfully exported but it contains one or more frames whose size is over 8 digits.\n" @@ -5743,7 +6612,7 @@ msgstr "" "L'hem fixat a %dpx. Heu de comprovar el cursor exportat." #. translators: the %i is *always* 8 here -#: plug-ins/common/file-xmc.c:2068 +#: plug-ins/common/file-xmc.c:2066 #, c-format msgid "" "Sorry, this plug-in cannot handle a cursor which contains over %i different " @@ -5752,50 +6621,49 @@ msgstr "" "Aquest connector no pot treballar amb cursors amb més de %i mides nominals " "diferents." -#: plug-ins/common/file-xpm.c:196 plug-ins/common/file-xpm.c:231 +#: plug-ins/common/file-xpm.c:199 plug-ins/common/file-xpm.c:234 msgid "X PixMap image" msgstr "Imatge X PixMap" -#: plug-ins/common/file-xpm.c:252 +#: plug-ins/common/file-xpm.c:255 msgid "XPM" msgstr "XPM" -#: plug-ins/common/file-xpm.c:259 -#: plug-ins/gradient-flare/gradient-flare.c:3014 +#: plug-ins/common/file-xpm.c:262 msgid "_Threshold" msgstr "_Llindar" -#: plug-ins/common/file-xpm.c:260 +#: plug-ins/common/file-xpm.c:263 msgid "Alpha threshold" msgstr "Llindar alfa" -#: plug-ins/common/file-xpm.c:342 +#: plug-ins/common/file-xpm.c:344 msgid "XPM format does not support multiple layers." msgstr "El format XPM no admet múltiples capes." -#: plug-ins/common/file-xpm.c:396 plug-ins/common/file-xpm.c:854 +#: plug-ins/common/file-xpm.c:395 plug-ins/common/file-xpm.c:853 #, c-format msgid "Error opening file '%s'" msgstr "S'ha produït un error en obrir el fitxer «%s»" -#: plug-ins/common/file-xpm.c:402 plug-ins/common/file-xpm.c:860 +#: plug-ins/common/file-xpm.c:401 plug-ins/common/file-xpm.c:859 msgid "XPM file invalid" msgstr "El fitxer XPM no és vàlid" -#: plug-ins/common/file-xpm.c:695 +#: plug-ins/common/file-xpm.c:694 msgid "Unsupported drawable type" msgstr "El tipus dibuixable no és compatible" -#: plug-ins/common/file-xwd.c:324 plug-ins/common/file-xwd.c:354 +#: plug-ins/common/file-xwd.c:327 plug-ins/common/file-xwd.c:357 msgid "X window dump" msgstr "Bolcat de la finestra X" -#: plug-ins/common/file-xwd.c:517 +#: plug-ins/common/file-xwd.c:523 #, c-format msgid "Could not read XWD header from '%s'" msgstr "No s'ha pogut llegir la capçalera XWD de «%s»" -#: plug-ins/common/file-xwd.c:535 +#: plug-ins/common/file-xwd.c:541 #, c-format msgid "" "'%s':\n" @@ -5804,7 +6672,7 @@ msgstr "" "«%s»:\n" "Error de cerca" -#: plug-ins/common/file-xwd.c:545 +#: plug-ins/common/file-xwd.c:551 #, c-format msgid "" "'%s':\n" @@ -5813,7 +6681,7 @@ msgstr "" "«%s»:\n" "El nombre d'entrades al mapa de colors no és permès: %u" -#: plug-ins/common/file-xwd.c:556 +#: plug-ins/common/file-xwd.c:562 #, c-format msgid "" "'%s':\n" @@ -5822,11 +6690,11 @@ msgstr "" "«%s»:\n" "El nombre d'entrades al mapa de colors és menor al nombre de colors" -#: plug-ins/common/file-xwd.c:582 +#: plug-ins/common/file-xwd.c:588 msgid "Can't read color entries" msgstr "No es poden llegir les entrades de color" -#: plug-ins/common/file-xwd.c:667 +#: plug-ins/common/file-xwd.c:673 #, c-format msgid "" "XWD-file %s has format %d, depth %d and bits per pixel %d. Currently this is" @@ -5835,32 +6703,32 @@ msgstr "" "El fitxer XWD %s que té el format %d, la profunditat %d i %d bits per píxel." " No és compatible actualment." -#: plug-ins/common/file-xwd.c:698 +#: plug-ins/common/file-xwd.c:704 msgid "Cannot export images with alpha channels." msgstr "No es poden exportar imatges amb canals alfa." -#: plug-ins/common/file-xwd.c:721 +#: plug-ins/common/file-xwd.c:727 #, c-format msgid "Could not open '%s' for writing: " msgstr "No s'ha pogut obrir «%s» per a escriptura: " -#: plug-ins/common/file-xwd.c:748 +#: plug-ins/common/file-xwd.c:754 #, c-format msgid "Error exporting '%s': " msgstr "S'ha produït un error d'exportació «%s»: " -#: plug-ins/common/file-xwd.c:955 plug-ins/common/file-xwd.c:989 -#: plug-ins/common/file-xwd.c:1026 +#: plug-ins/common/file-xwd.c:961 plug-ins/common/file-xwd.c:995 +#: plug-ins/common/file-xwd.c:1032 msgid "Seek error" msgstr "Error de cerca" -#: plug-ins/common/file-xwd.c:1878 plug-ins/common/file-xwd.c:2129 -#: plug-ins/common/file-xwd.c:2324 +#: plug-ins/common/file-xwd.c:1884 plug-ins/common/file-xwd.c:2135 +#: plug-ins/common/file-xwd.c:2330 #, c-format msgid "XWD-file %s is corrupt." msgstr "El fitxer XWD %s està malmès." -#: plug-ins/common/file-xwd.c:2077 +#: plug-ins/common/file-xwd.c:2083 #, c-format msgid "" "'%s':\n" @@ -5869,136 +6737,159 @@ msgstr "" "«%s»:\n" "Mapa de color no vàlid" -#: plug-ins/common/film.c:241 +#: plug-ins/common/film.c:180 msgid "_Filmstrip..." msgstr "_Pel·lícula..." -#: plug-ins/common/film.c:245 +#: plug-ins/common/film.c:184 msgid "Combine several images on a film strip" msgstr "Combina imatges diverses en un paper de pel·lícula" -#: plug-ins/common/film.c:384 +#: plug-ins/common/film.c:245 +#, fuzzy +#| msgid "Image _height:" +msgid "Image _height" +msgstr "A_lçada de la imatge:" + +#: plug-ins/common/film.c:246 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +msgid "As fraction of the strip height" +msgstr "Tots els valors són fraccions de l'alçada de la pel·lícula" + +#: plug-ins/common/film.c:251 +#, fuzzy +#| msgid "Image spac_ing:" +msgid "Image s_pacing" +msgstr "Espa_iat de la imatge:" + +#: plug-ins/common/film.c:252 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +msgid "The spacing between 2 images, as fraction of the strip height" +msgstr "Tots els valors són fraccions de l'alçada de la pel·lícula" + +#: plug-ins/common/film.c:257 +#, fuzzy +#| msgid "_Hole offset:" +msgid "Hole offse_t" +msgstr "Desplaçament del _forat:" + +#: plug-ins/common/film.c:258 +#, fuzzy +#| msgid "" +#| "The distance from the center of the image determines the direction of the " +#| "stroke" +msgid "The offset from the edge of film, as fraction of the strip height" +msgstr "" +"La distància des del centre de la imatge determina la direcció del traç" + +#: plug-ins/common/film.c:263 +#, fuzzy +#| msgid "Ho_le width:" +msgid "Hole _width" +msgstr "Amp_lada del forat:" + +#: plug-ins/common/film.c:264 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +msgid "The width of the holes, as fraction of the strip height" +msgstr "Tots els valors són fraccions de l'alçada de la pel·lícula" + +#: plug-ins/common/film.c:269 +#, fuzzy +#| msgid "Hol_e height:" +msgid "Hole hei_ght" +msgstr "Alçada d_el forat:" + +#: plug-ins/common/film.c:270 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +msgid "The height of the holes, as fraction of the strip height" +msgstr "Tots els valors són fraccions de l'alçada de la pel·lícula" + +#: plug-ins/common/film.c:275 +#, fuzzy +#| msgid "Distance:" +msgid "Hole _distance" +msgstr "Distància:" + +#: plug-ins/common/film.c:276 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +msgid "The distance between holes, as fraction of the strip height" +msgstr "Tots els valors són fraccions de l'alçada de la pel·lícula" + +#: plug-ins/common/film.c:281 +#, fuzzy +#| msgid "_Number height:" +msgid "_Number height" +msgstr "Alçada del _número:" + +#: plug-ins/common/film.c:282 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +msgid "The height of drawn numbers, as fraction of the strip height" +msgstr "Tots els valors són fraccions de l'alçada de la pel·lícula" + +#: plug-ins/common/film.c:289 +#, fuzzy +#| msgid "_Fit height to images" +msgid "F_it height to images" +msgstr "_Ajusta l'alçada a les imatges" + +#: plug-ins/common/film.c:365 msgid "Composing images" msgstr "S'estan component les imatges" -#: plug-ins/common/film.c:937 +#: plug-ins/common/film.c:700 +#, fuzzy +msgid "\"Filmstrip\" cannot be run without any input images" +msgstr "No es pot executar «Filmstrip» sense cap imatge d'entrada" + +#: plug-ins/common/film.c:970 msgid "Available images:" msgstr "Imatges disponibles:" -#: plug-ins/common/film.c:938 +#: plug-ins/common/film.c:971 msgid "On film:" msgstr "En la pel·lícula:" -#: plug-ins/common/film.c:989 plug-ins/common/unit-editor.c:440 +#: plug-ins/common/film.c:1022 plug-ins/common/unit-editor.c:436 msgid "_Add" msgstr "_Afegeix" -#: plug-ins/common/film.c:989 plug-ins/imagemap/imap_polygon.c:531 +#: plug-ins/common/film.c:1022 plug-ins/imagemap/imap_polygon.c:531 msgid "_Remove" msgstr "Sup_rimeix" -#. Create selection -#: plug-ins/common/film.c:1025 plug-ins/imagemap/imap_selection.c:339 -#: plug-ins/selection-to-path/selection-to-path.c:540 -msgid "Selection" -msgstr "Selecció" - -#. Film height/color -#: plug-ins/common/film.c:1036 plug-ins/common/film.c:1319 +#: plug-ins/common/film.c:1053 plug-ins/common/film.c:1119 msgid "Filmstrip" msgstr "Cel·luloide" -#. Keep maximum image height -#: plug-ins/common/film.c:1045 -msgid "_Fit height to images" -msgstr "_Ajusta l'alçada a les imatges" - -#: plug-ins/common/film.c:1066 plug-ins/common/smooth-palette.c:536 -#: plug-ins/common/tile.c:523 plug-ins/imagemap/imap_cmd_guides.c:173 -#: plug-ins/imagemap/imap_rectangle.c:405 -#: plug-ins/print/print-page-layout.c:288 -msgid "_Height:" -msgstr "A_lçada:" - -#. Film color -#: plug-ins/common/film.c:1087 -msgid "Select Film Color" -msgstr "Tria el color de la pel·lícula" - -#: plug-ins/common/film.c:1092 plug-ins/common/film.c:1149 -msgid "Co_lor:" -msgstr "Co_lor:" - -#. Film numbering: Startindex/Font/color -#: plug-ins/common/film.c:1104 +#: plug-ins/common/film.c:1067 msgid "Numbering" msgstr "Numeració" -#: plug-ins/common/film.c:1125 -msgid "Start _index:" -msgstr "_Inicia l'índex:" - -#: plug-ins/common/film.c:1139 -msgid "_Font:" -msgstr "_Lletra:" - -#. Numbering color -#: plug-ins/common/film.c:1144 -msgid "Select Number Color" -msgstr "Tria el color del nombre" - -#: plug-ins/common/film.c:1162 -msgid "At _bottom" -msgstr "A la part _inferior" - -#: plug-ins/common/film.c:1163 -msgid "At _top" -msgstr "A la part _superior" - #. ** The right frame keeps the image selection ** -#: plug-ins/common/film.c:1176 +#: plug-ins/common/film.c:1085 msgid "Image Selection" msgstr "Selecció de la imatge" -#: plug-ins/common/film.c:1209 +#: plug-ins/common/film.c:1135 msgid "All Values are Fractions of the Strip Height" msgstr "Tots els valors són fraccions de l'alçada de la pel·lícula" -#: plug-ins/common/film.c:1212 +#. Fill the notebook. +#: plug-ins/common/film.c:1142 msgid "Ad_vanced" msgstr "A_vançat" -#: plug-ins/common/film.c:1228 -msgid "Image _height:" -msgstr "A_lçada de la imatge:" - -#: plug-ins/common/film.c:1237 -msgid "Image spac_ing:" -msgstr "Espa_iat de la imatge:" - -#: plug-ins/common/film.c:1249 -msgid "_Hole offset:" -msgstr "Desplaçament del _forat:" - -#: plug-ins/common/film.c:1258 -msgid "Ho_le width:" -msgstr "Amp_lada del forat:" - -#: plug-ins/common/film.c:1267 -msgid "Hol_e height:" -msgstr "Alçada d_el forat:" - -#: plug-ins/common/film.c:1276 -msgid "Hole sp_acing:" -msgstr "Espai_at del forat:" - -#: plug-ins/common/film.c:1288 -msgid "_Number height:" -msgstr "Alçada del _número:" - -#: plug-ins/common/film.c:1300 -msgid "Re_set" -msgstr "_Restableix" +#: plug-ins/common/film.c:1143 +#, fuzzy +#| msgid "Selection" +msgid "_Selection" +msgstr "Selecció" #: plug-ins/common/gradient-map.c:132 msgid "_Gradient Map" @@ -6025,20 +6916,20 @@ msgstr "Mapa del degradat" msgid "Palette Map" msgstr "Mapa de la paleta" -#: plug-ins/common/grid.c:173 +#: plug-ins/common/grid.c:157 msgid "_Grid (legacy)..." msgstr "_Quadrícula (antic)..." -#: plug-ins/common/grid.c:178 +#: plug-ins/common/grid.c:162 msgid "Draw a grid on the image" msgstr "Dibuixa una quadrícula en la imatge" -#: plug-ins/common/grid.c:330 +#: plug-ins/common/grid.c:289 msgid "Drawing grid" msgstr "Quadrícula de dibuix" #. attach labels -#: plug-ins/common/grid.c:837 +#: plug-ins/common/grid.c:864 msgid "" "Horizontal\n" "Lines" @@ -6046,7 +6937,7 @@ msgstr "" "Horitzontal\n" "Línies" -#: plug-ins/common/grid.c:839 +#: plug-ins/common/grid.c:866 msgid "" "Vertical\n" "Lines" @@ -6054,30 +6945,34 @@ msgstr "" "Vertical\n" "Línies" -#: plug-ins/common/grid.c:841 +#: plug-ins/common/grid.c:868 msgid "Intersection" msgstr "Intersecció" +#: plug-ins/common/grid.c:871 +msgid "Width:" +msgstr "Amplada:" + #. attach labels -#: plug-ins/common/grid.c:908 +#: plug-ins/common/grid.c:935 msgid "Spacing:" msgstr "Espaiat:" #. attach labels -#: plug-ins/common/grid.c:973 +#: plug-ins/common/grid.c:1000 msgid "Offset:" msgstr "Desplaçament:" #. attach color selectors -#: plug-ins/common/grid.c:1006 +#: plug-ins/common/grid.c:1033 msgid "Horizontal Color" msgstr "Color horitzontal" -#: plug-ins/common/grid.c:1028 +#: plug-ins/common/grid.c:1055 msgid "Vertical Color" msgstr "Color vertical" -#: plug-ins/common/grid.c:1049 +#: plug-ins/common/grid.c:1076 msgid "Intersection Color" msgstr "Color de la intersecció" @@ -6093,7 +6988,7 @@ msgstr "Divideix la imatge en subimatges utilitzant les guies" msgid "Guillotine" msgstr "Guillotina" -#: plug-ins/common/guillotine.c:266 plug-ins/help-browser/dialog.c:892 +#: plug-ins/common/guillotine.c:266 plug-ins/help-browser/dialog.c:821 msgid "Untitled" msgstr "Sense títol" @@ -6117,27 +7012,27 @@ msgstr "Acció" msgid "Create _new layer" msgstr "Crea una capa _nova" -#: plug-ins/common/hot.c:474 plug-ins/common/hot.c:681 +#: plug-ins/common/hot.c:447 plug-ins/common/hot.c:654 msgid "Hot" msgstr "Càlid" -#: plug-ins/common/hot.c:690 +#: plug-ins/common/hot.c:663 msgid "N_TSC" msgstr "N_TSC" -#: plug-ins/common/hot.c:691 +#: plug-ins/common/hot.c:664 msgid "_PAL" msgstr "_PAL" -#: plug-ins/common/hot.c:696 +#: plug-ins/common/hot.c:669 msgid "Reduce _Luminance" msgstr "Redueix la _lluminositat" -#: plug-ins/common/hot.c:697 +#: plug-ins/common/hot.c:670 msgid "Reduce _Saturation" msgstr "Redueix la _saturació" -#: plug-ins/common/hot.c:698 +#: plug-ins/common/hot.c:671 msgid "_Blacken" msgstr "En_negreix" @@ -6153,8 +7048,7 @@ msgstr "Afegeix un patró en forma de puzle a la imatge" msgid "Jigsaw puzzle look" msgstr "Aspecte del trencaclosques Jigsaw" -#: plug-ins/common/jigsaw.c:413 plug-ins/common/tile-small.c:511 -#: plug-ins/pagecurl/pagecurl.c:586 +#: plug-ins/common/jigsaw.c:413 plug-ins/common/tile-small.c:505 msgid "_Horizontal" msgstr "_Horitzontal" @@ -6162,8 +7056,7 @@ msgstr "_Horitzontal" msgid "Number of pieces going across" msgstr "Nombre de peces que passen" -#: plug-ins/common/jigsaw.c:419 plug-ins/common/tile-small.c:521 -#: plug-ins/pagecurl/pagecurl.c:585 +#: plug-ins/common/jigsaw.c:419 plug-ins/common/tile-small.c:515 msgid "_Vertical" msgstr "_Vertical" @@ -6195,32 +7088,32 @@ msgstr "R_essalta" msgid "The amount of highlighting on the edges of each piece" msgstr "Quantitat de realçat de les vores de cada peça" -#: plug-ins/common/jigsaw.c:503 +#: plug-ins/common/jigsaw.c:483 msgid "Assembling jigsaw" msgstr "S'està muntant el puzle" -#: plug-ins/common/jigsaw.c:730 +#: plug-ins/common/jigsaw.c:707 msgid "draw_jigsaw: bad style\n" msgstr "draw_jigsaw: estil incorrecte\n" -#: plug-ins/common/jigsaw.c:2493 +#: plug-ins/common/jigsaw.c:2470 msgid "Jigsaw" msgstr "Puzle" -#: plug-ins/common/jigsaw.c:2518 +#: plug-ins/common/jigsaw.c:2495 msgid "Number of Tiles" msgstr "Nombre de mosaics" -#: plug-ins/common/jigsaw.c:2535 +#: plug-ins/common/jigsaw.c:2513 msgid "Bevel Edges" msgstr "Vores bisellades" #. frame for primitive radio buttons -#: plug-ins/common/jigsaw.c:2544 +#: plug-ins/common/jigsaw.c:2523 msgid "Square" msgstr "Quadrat" -#: plug-ins/common/jigsaw.c:2545 +#: plug-ins/common/jigsaw.c:2524 msgid "Curved" msgstr "Corbat" @@ -6282,19 +7175,19 @@ msgstr "L'assumpte" msgid "The comment" msgstr "El comentari" -#: plug-ins/common/mail.c:563 +#: plug-ins/common/mail.c:543 msgid "Send by Email" msgstr "Envia per correu" -#: plug-ins/common/mail.c:567 +#: plug-ins/common/mail.c:547 msgid "Send" msgstr "Envia" -#: plug-ins/common/mail.c:703 +#: plug-ins/common/mail.c:683 msgid "some sort of error with the file extension or lack thereof" msgstr "hi ha algun error amb l'extensió dels fitxers o l'absència d'aquests" -#: plug-ins/common/mail.c:888 +#: plug-ins/common/mail.c:868 #, c-format msgid "Could not start sendmail (%s)" msgstr "No s'ha pogut executar sendmail (%s)" @@ -6343,19 +7236,19 @@ msgstr "" "El filtre a executar, 0 - mitjana retallada alfa; 1 - estimació òptima " "(variància de soroll de controls alfa); 2 - millora de la vora" -#: plug-ins/common/nl-filter.c:1031 plug-ins/common/nl-filter.c:1129 +#: plug-ins/common/nl-filter.c:1008 plug-ins/common/nl-filter.c:1106 msgid "NL Filter" msgstr "Filtre NL" -#: plug-ins/common/nl-filter.c:1144 +#: plug-ins/common/nl-filter.c:1121 msgid "Alpha trimmed mean" msgstr "_Mitja retallada d'alfa" -#: plug-ins/common/nl-filter.c:1145 +#: plug-ins/common/nl-filter.c:1122 msgid "Optimal estimation" msgstr "Estimació òptima" -#: plug-ins/common/nl-filter.c:1146 +#: plug-ins/common/nl-filter.c:1123 msgid "Edge enhancement" msgstr "Millora de les vores" @@ -6379,37 +7272,37 @@ msgstr "" " arbre dels menús de connectors. També pot ser d'ajuda per trobar on s'han " "instal·lat els nous connectors als menús." -#: plug-ins/common/plugin-browser.c:372 +#: plug-ins/common/plugin-browser.c:373 msgid "Searching by name" msgstr "S'està cercant pel nom" -#: plug-ins/common/plugin-browser.c:387 +#: plug-ins/common/plugin-browser.c:389 #, c-format msgid "%d plug-in" msgid_plural "%d plug-ins" msgstr[0] "%d connector" msgstr[1] "%d connectors" -#: plug-ins/common/plugin-browser.c:396 +#: plug-ins/common/plugin-browser.c:398 msgid "No matches for your query" msgstr "No s'ha trobat cap connector" -#: plug-ins/common/plugin-browser.c:399 +#: plug-ins/common/plugin-browser.c:401 #, c-format msgid "%d plug-in matches your query" msgid_plural "%d plug-ins match your query" msgstr[0] "S'ha trobat %d connector" msgstr[1] "S'han trobat %d connectors" -#: plug-ins/common/plugin-browser.c:530 +#: plug-ins/common/plugin-browser.c:532 msgid "No matches" msgstr "Cap resultat" -#: plug-ins/common/plugin-browser.c:556 +#: plug-ins/common/plugin-browser.c:558 msgid "Plug-in Browser" msgstr "Navegador de connectors" -#: plug-ins/common/plugin-browser.c:601 +#: 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 @@ -6417,23 +7310,23 @@ msgstr "Navegador de connectors" msgid "Name" msgstr "Nom" -#: plug-ins/common/plugin-browser.c:609 plug-ins/common/plugin-browser.c:672 +#: plug-ins/common/plugin-browser.c:611 plug-ins/common/plugin-browser.c:674 msgid "Menu Path" msgstr "Camí del menú" -#: plug-ins/common/plugin-browser.c:617 plug-ins/common/plugin-browser.c:681 +#: plug-ins/common/plugin-browser.c:619 plug-ins/common/plugin-browser.c:683 msgid "Image Types" msgstr "Tipus d'imatge" -#: plug-ins/common/plugin-browser.c:627 plug-ins/common/plugin-browser.c:690 +#: plug-ins/common/plugin-browser.c:629 plug-ins/common/plugin-browser.c:692 msgid "Installation Date" msgstr "Data d'instal·lació" -#: plug-ins/common/plugin-browser.c:651 +#: plug-ins/common/plugin-browser.c:653 msgid "List View" msgstr "Visualització de llista" -#: plug-ins/common/plugin-browser.c:713 +#: plug-ins/common/plugin-browser.c:715 msgid "Tree View" msgstr "Visualització en arbre" @@ -6445,10 +7338,15 @@ msgstr "Navegador de _procediments" msgid "List available procedures in the PDB" msgstr "Llista les funcions disponibles en el PDB" -#: plug-ins/common/procedure-browser.c:165 +#: plug-ins/common/procedure-browser.c:166 msgid "Procedure Browser" msgstr "Navegador de procediments" +#: plug-ins/common/procedure-browser.c:184 +#, c-format, fuzzy +msgid "Procedure %s allows only interactive invocation." +msgstr "El procediment %s només permet la invocació interactiva." + #: plug-ins/common/qbist.c:185 msgid "_Qbist..." msgstr "_Qbist..." @@ -6462,152 +7360,285 @@ msgid "Any file which will be used as source for pattern generation" msgstr "" "Qualsevol fitxer que s'utilitzarà com a font per a la generació de patrons" -#: plug-ins/common/qbist.c:369 +#: plug-ins/common/qbist.c:360 msgid "Qbist" msgstr "Qbist" -#: plug-ins/common/qbist.c:844 +#: plug-ins/common/qbist.c:832 msgid "Load QBE File" msgstr "Carrega el fitxer QBE" -#: plug-ins/common/qbist.c:886 +#: plug-ins/common/qbist.c:874 msgid "Save as QBE File" msgstr "Desa com a fitxer QBE" -#: plug-ins/common/qbist.c:940 +#: plug-ins/common/qbist.c:928 msgid "G-Qbist" msgstr "G-Qbist" -#: plug-ins/common/qbist.c:1024 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:683 +#: plug-ins/common/qbist.c:1012 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:736 msgid "_Undo" msgstr "_Desfés" -#: plug-ins/common/sample-colorize.c:330 +#: plug-ins/common/sample-colorize.c:326 msgid "_Sample Colorize..." msgstr "Acoloreix la mo_stra..." -#: plug-ins/common/sample-colorize.c:334 +#: plug-ins/common/sample-colorize.c:330 msgid "Colorize image using a sample image as a guide" msgstr "Dona color a la imatge utilitzant una imatge d'exemple com a guia" -#: plug-ins/common/sample-colorize.c:1409 +#: plug-ins/common/sample-colorize.c:340 +#, fuzzy +#| msgid "Sample analyze" +msgid "Sample drawable" +msgstr "Analitza la mostra" + +#: plug-ins/common/sample-colorize.c:341 +#, fuzzy +msgid "Sample drawable (should be of Type RGB or RGBA)" +msgstr "Exemple dibuixable (hauria de ser de tipus RGB o RGBA)" + +#: plug-ins/common/sample-colorize.c:346 +msgid "Hold _intensity" +msgstr "Conserva la _intensitat" + +#: plug-ins/common/sample-colorize.c:347 +#, fuzzy +msgid "Hold brightness intensity levels" +msgstr "Mantén els nivells d'intensitat de la brillantor" + +#: plug-ins/common/sample-colorize.c:352 +msgid "Original i_ntensity" +msgstr "I_ntensitat original" + +#: plug-ins/common/sample-colorize.c:353 +#, fuzzy +msgid "" +"TRUE: hold brightness of original intensity levels, FALSE: Hold Intensity of" +" input levels" +msgstr "" +"CERT: mantén la brillantor dels nivells d'intensitat originals, FALS: mantén" +" la intensitat dels nivells d'entrada" + +#: plug-ins/common/sample-colorize.c:360 +msgid "Us_e subcolors" +msgstr "_Utilitza els subcolors" + +#: plug-ins/common/sample-colorize.c:361 +#, fuzzy +msgid "" +"TRUE: Use all subcolors of same intensity, FALSE: Use only one color per " +"intensity" +msgstr "" +"CERT: usa tots els subcolors de la mateixa intensitat, FALS: usa només un " +"color per intensitat" + +#: plug-ins/common/sample-colorize.c:367 +#, fuzzy +#| msgid "S_mooth samples" +msgid "Smooth sam_ples" +msgstr "Suavitza les _mostres" + +#: plug-ins/common/sample-colorize.c:368 +#, fuzzy +msgid "" +"TRUE: guess samplecolors for the missing intensity values, FALSE: use only " +"colors found in the sample" +msgstr "" +"CERT: endevina els colors de mostra per als valors d'intensitat que manquen," +" FALS: només usa els colors trobats a la mostra" + +#: plug-ins/common/sample-colorize.c:375 +#, fuzzy +#| msgctxt "curve-border" +#| msgid "_Lower" +msgid "_Low" +msgstr "_Inferior" + +#: plug-ins/common/sample-colorize.c:376 +#, fuzzy +msgid "Intensity of lowest input" +msgstr "Intensitat de l'entrada més baixa" + +#: plug-ins/common/sample-colorize.c:381 +#, fuzzy +#| msgid "High" +msgid "_High" +msgstr "Alt" + +#: plug-ins/common/sample-colorize.c:382 +#, fuzzy +msgid "Intensity of highest input" +msgstr "Intensitat de l'entrada més alta" + +#: plug-ins/common/sample-colorize.c:387 +#, fuzzy +msgid "Ga_mma" +msgstr "Gamma" + +#: plug-ins/common/sample-colorize.c:388 +#, fuzzy +msgid "Gamma adjustment factor, 1.0 is linear" +msgstr "Factor d'ajust de la gamma, 1.0 és lineal" + +#: plug-ins/common/sample-colorize.c:393 +#, fuzzy +msgid "Lo_w" +msgstr "Baix" + +#: plug-ins/common/sample-colorize.c:394 +#, fuzzy +#| msgid "Adjust the flare intensity" +msgid "Lowest sample color intensity" +msgstr "Ajusta la intensitat de la flamarada" + +#: plug-ins/common/sample-colorize.c:399 +#, fuzzy +#| msgid "Hi_ghlight" +msgid "Hi_gh" +msgstr "R_essalta" + +#: plug-ins/common/sample-colorize.c:400 +#, fuzzy +#| msgid "Light intensity" +msgid "Highest sample color intensity" +msgstr "Intensitat de la llum" + +#: plug-ins/common/sample-colorize.c:1406 msgid "Sample Colorize" msgstr "Acoloreix la mostra" -#: plug-ins/common/sample-colorize.c:1414 -msgid "Get _Sample Colors" -msgstr "Obtén color_s de mostra" - -#: plug-ins/common/sample-colorize.c:1416 plug-ins/common/tile-small.c:635 -#: plug-ins/fractal-explorer/fractal-explorer.c:1225 -#: plug-ins/pikaressionist/orientmap.c:527 -#: plug-ins/pikaressionist/presets.c:1060 -#: plug-ins/pikaressionist/sizemap.c:400 -#: plug-ins/imagemap/imap_default_dialog.c:103 -msgid "_Apply" -msgstr "_Aplica" - #. layer combo_box (Dst) -#: plug-ins/common/sample-colorize.c:1443 +#: plug-ins/common/sample-colorize.c:1418 msgid "Destination:" msgstr "Destinació:" #. layer combo_box (Sample) -#: plug-ins/common/sample-colorize.c:1458 +#: plug-ins/common/sample-colorize.c:1433 msgid "Sample:" msgstr "Mostra:" -#: plug-ins/common/sample-colorize.c:1467 +#: plug-ins/common/sample-colorize.c:1442 msgid "From reverse gradient" msgstr "Des d'un degradat invers" -#: plug-ins/common/sample-colorize.c:1472 +#: plug-ins/common/sample-colorize.c:1447 msgid "From gradient" msgstr "Des d'un degradat" #. check button -#: plug-ins/common/sample-colorize.c:1491 +#: plug-ins/common/sample-colorize.c:1465 msgid "Sho_w selection" msgstr "_Mostra la selecció" #. check button -#: plug-ins/common/sample-colorize.c:1502 +#: plug-ins/common/sample-colorize.c:1476 msgid "Show co_lor" msgstr "Mostra el co_lor" #. check button -#: plug-ins/common/sample-colorize.c:1517 +#: plug-ins/common/sample-colorize.c:1491 msgid "Show selec_tion" msgstr "_Mostra la selecció" #. check button -#: plug-ins/common/sample-colorize.c:1528 +#: plug-ins/common/sample-colorize.c:1502 msgid "Show c_olor" msgstr "Mostra el c_olor" -#: plug-ins/common/sample-colorize.c:1655 +#: plug-ins/common/sample-colorize.c:1626 msgid "Input levels:" msgstr "Nivells d'entrada:" -#: plug-ins/common/sample-colorize.c:1705 +#: plug-ins/common/sample-colorize.c:1653 msgid "Output levels:" msgstr "Nivells de sortida:" -#. check button -#: plug-ins/common/sample-colorize.c:1744 -msgid "Hold _intensity" -msgstr "Conserva la _intensitat" +#: plug-ins/common/sample-colorize.c:1703 +msgid "Get _Sample Colors" +msgstr "Obtén color_s de mostra" -#. check button -#: plug-ins/common/sample-colorize.c:1755 -msgid "Original i_ntensity" -msgstr "I_ntensitat original" - -#. check button -#: plug-ins/common/sample-colorize.c:1772 -msgid "Us_e subcolors" -msgstr "_Utilitza els subcolors" - -#. check button -#: plug-ins/common/sample-colorize.c:1783 -msgid "S_mooth samples" -msgstr "Suavitza les _mostres" - -#: plug-ins/common/sample-colorize.c:2661 +#: plug-ins/common/sample-colorize.c:2577 msgid "Sample analyze" msgstr "Analitza la mostra" -#: plug-ins/common/sample-colorize.c:3061 +#: plug-ins/common/sample-colorize.c:2988 msgid "Remap colorized" msgstr "Aplica mapa de colors" -#: plug-ins/common/smooth-palette.c:134 +#: plug-ins/common/smooth-palette.c:121 msgid "Smoo_th Palette..." msgstr "Pale_ta suau..." -#: plug-ins/common/smooth-palette.c:138 +#: plug-ins/common/smooth-palette.c:125 msgid "Derive a smooth color palette from the image" msgstr "Calcula una paleta de colors suau a partir de la imatge" -#: plug-ins/common/smooth-palette.c:247 +#: plug-ins/common/smooth-palette.c:136 +#, fuzzy +#| msgid "_Width" +msgid "Width" +msgstr "Am_plada" + +#: plug-ins/common/smooth-palette.c:142 +#, fuzzy +#| msgid "_Height" +msgid "Height" +msgstr "A_lçada" + +#: plug-ins/common/smooth-palette.c:147 +#, fuzzy +#| msgid "_Search depth:" +msgid "Search _depth" +msgstr "Profundi_tat de cerca:" + +#: plug-ins/common/smooth-palette.c:148 +#, fuzzy +#| msgid "_Search depth:" +msgid "Search depth" +msgstr "Profundi_tat de cerca:" + +#. "show image" checkbutton at bottom of style frame +#: plug-ins/common/smooth-palette.c:153 plug-ins/common/smooth-palette.c:154 +#: plug-ins/gfig/gfig-dialog.c:600 +msgid "Show image" +msgstr "Mostra la imatge" + +#: plug-ins/common/smooth-palette.c:165 +#, fuzzy +#| msgid "Create new layer" +msgid "New layer" +msgstr "Crea una capa nova" + +#: plug-ins/common/smooth-palette.c:166 +#, fuzzy +#| msgid "Output levels:" +msgid "Output layer" +msgstr "Nivells de sortida:" + +#: plug-ins/common/smooth-palette.c:216 msgid "Deriving smooth palette" msgstr "S'està calculant la paleta suau" -#: plug-ins/common/smooth-palette.c:507 +#: plug-ins/common/smooth-palette.c:486 msgid "Smooth Palette" msgstr "Paleta suau" -#: plug-ins/common/smooth-palette.c:531 plug-ins/common/tile.c:519 +#: plug-ins/common/smooth-palette.c:503 #: plug-ins/imagemap/imap_cmd_guides.c:163 #: plug-ins/imagemap/imap_rectangle.c:398 #: plug-ins/print/print-page-layout.c:286 msgid "_Width:" msgstr "Am_plada:" -#: plug-ins/common/smooth-palette.c:550 -msgid "_Search depth:" -msgstr "Profundi_tat de cerca:" +#: plug-ins/common/smooth-palette.c:508 +#: plug-ins/imagemap/imap_cmd_guides.c:173 +#: plug-ins/imagemap/imap_rectangle.c:405 +#: plug-ins/print/print-page-layout.c:288 +msgid "_Height:" +msgstr "A_lçada:" #: plug-ins/common/sparkle.c:177 msgid "_Sparkle..." @@ -6729,32 +7760,32 @@ msgstr "Tipus de color" msgid "Color of sparkles: { NATURAL (0), FOREGROUND (1), BACKGROUND (2) }" msgstr "Color de les espurnes: { NATURAL (0), PRIMER PLA (1), FONS (2) }" -#: plug-ins/common/sparkle.c:321 +#: plug-ins/common/sparkle.c:314 msgid "Region selected for filter is empty" msgstr "La regió seleccionada per al filtre és buida" -#: plug-ins/common/sparkle.c:353 +#: plug-ins/common/sparkle.c:329 msgid "Sparkling" msgstr "S'estan pintant les espurnes" -#: plug-ins/common/sparkle.c:392 +#: plug-ins/common/sparkle.c:362 msgid "Sparkle" msgstr "Espurnes" -#: plug-ins/common/sparkle.c:447 +#: plug-ins/common/sparkle.c:417 msgid "Additional Options" msgstr "Opcions addicionals" #. colortype -#: plug-ins/common/sparkle.c:453 +#: plug-ins/common/sparkle.c:424 msgid "Natural color" msgstr "Color natural" -#: plug-ins/common/sparkle.c:454 plug-ins/common/warp.c:632 +#: plug-ins/common/sparkle.c:425 plug-ins/common/warp.c:614 msgid "Foreground color" msgstr "Color de primer pla" -#: plug-ins/common/sparkle.c:455 +#: plug-ins/common/sparkle.c:426 msgid "Background color" msgstr "Color de fons" @@ -6787,7 +7818,7 @@ msgid "Wood" msgstr "Fusta" #: plug-ins/common/sphere-designer.c:343 plug-ins/flame/flame.c:820 -#: plug-ins/gfig/gfig-dialog.c:399 +#: plug-ins/gfig/gfig-dialog.c:399 plug-ins/gfig/gfig-menu.ui:79 msgid "Spiral" msgstr "Espiral" @@ -6839,7 +7870,7 @@ msgid "Layers" msgstr "Capes" #: plug-ins/common/sphere-designer.c:2739 -#: plug-ins/gradient-flare/gradient-flare.c:3081 +#: plug-ins/gradient-flare/gradient-flare.c:3045 msgid "_New" msgstr "_Nou" @@ -6848,11 +7879,11 @@ msgid "D_uplicate" msgstr "D_uplica" #: plug-ins/common/sphere-designer.c:2751 -#: plug-ins/fractal-explorer/fractal-explorer.c:875 -#: plug-ins/fractal-explorer/fractal-explorer.c:1236 +#: plug-ins/fractal-explorer/fractal-explorer.c:887 +#: plug-ins/fractal-explorer/fractal-explorer.c:1357 #: plug-ins/pikaressionist/presets.c:1067 -#: plug-ins/gradient-flare/gradient-flare.c:3084 -#: plug-ins/gradient-flare/gradient-flare.c:3367 +#: plug-ins/gradient-flare/gradient-flare.c:3048 +#: plug-ins/gradient-flare/gradient-flare.c:3331 msgid "_Delete" msgstr "_Suprimeix" @@ -6864,8 +7895,7 @@ msgstr "Propietats" msgid "Bump" msgstr "Eleva" -#. row labels -#: plug-ins/common/sphere-designer.c:2784 plug-ins/lighting/lighting-ui.c:414 +#: plug-ins/common/sphere-designer.c:2784 msgid "Type:" msgstr "Tipus:" @@ -6884,7 +7914,7 @@ msgstr "Diàleg de la selecció del color" #. Scale #: plug-ins/common/sphere-designer.c:2833 plug-ins/pikaressionist/paper.c:191 -#: plug-ins/ifs-compose/ifs-compose.c:717 +#: plug-ins/ifs-compose/ifs-compose.c:663 msgid "Scale:" msgstr "Escala:" @@ -6905,7 +7935,6 @@ msgid "Transformations" msgstr "Transformacions" #: plug-ins/common/sphere-designer.c:2877 -#: plug-ins/map-object/map-object-ui.c:1121 msgid "Scale X:" msgstr "Escala X:" @@ -6949,88 +7978,102 @@ msgstr "S'està pintant l'esfera" msgid "Region selected for plug-in is empty" msgstr "La regió seleccionada pel connector està buida" -#: plug-ins/common/tile.c:144 +#: plug-ins/common/tile.c:131 msgid "_Tile..." msgstr "Compon un _mosaic..." -#: plug-ins/common/tile.c:148 +#: plug-ins/common/tile.c:135 msgid "Create an array of copies of the image" msgstr "Crea una quadrícula de còpies de la imatge" -#: plug-ins/common/tile.c:256 plug-ins/common/tile-small.c:377 +#: plug-ins/common/tile.c:254 plug-ins/common/tile-small.c:377 msgid "Tiling" msgstr "S'està creant el mosaic" -#: plug-ins/common/tile.c:488 +#: plug-ins/common/tile.c:478 msgid "Tile" msgstr "Compon un mosaic" -#: plug-ins/common/tile.c:510 +#: plug-ins/common/tile.c:480 msgid "Tile to New Size" msgstr "Fes el mosaic d'una nova mida" -#: plug-ins/common/tile.c:531 -msgid "C_reate new image" -msgstr "C_rea una imatge nova" - -#: plug-ins/common/tile-small.c:265 +#: plug-ins/common/tile-small.c:271 msgid "_Small Tiles..." msgstr "_Redueix i compon un mosaic..." -#: plug-ins/common/tile-small.c:269 +#: plug-ins/common/tile-small.c:275 msgid "Tile image into smaller versions of the original" msgstr "Crea un mosaic de còpies reduïdes de la imatge original" -#: plug-ins/common/tile-small.c:326 +#: plug-ins/common/tile-small.c:285 +#, fuzzy +msgid "_n²" +msgstr "n2" + +#: plug-ins/common/tile-small.c:286 +#, fuzzy +#| msgid "Number of Tiles" +msgid "Number of tiles to make" +msgstr "Nombre de mosaics" + +#: plug-ins/common/tile-small.c:332 msgid "Region selected for filter is empty." msgstr "La regió seleccionada per al filtre és buida." -#. Get the preview image -#: plug-ins/common/tile-small.c:442 +#: plug-ins/common/tile-small.c:443 msgid "Small Tiles" msgstr "Redueix i compon un mosaic" #. Area for buttons etc #. Flip -#: plug-ins/common/tile-small.c:498 plug-ins/ifs-compose/ifs-compose.c:773 +#: plug-ins/common/tile-small.c:492 plug-ins/ifs-compose/ifs-compose.c:719 msgid "Flip" msgstr "Inverteix" -#: plug-ins/common/tile-small.c:547 +#: plug-ins/common/tile-small.c:541 msgid "A_ll tiles" msgstr "Tots e_ls mosaics" -#: plug-ins/common/tile-small.c:560 +#: plug-ins/common/tile-small.c:554 msgid "Al_ternate tiles" msgstr "Al_terna els mosaics" -#: plug-ins/common/tile-small.c:573 +#: plug-ins/common/tile-small.c:567 msgid "_Explicit tile" msgstr "Mosaic _explícit" -#: plug-ins/common/tile-small.c:578 +#: plug-ins/common/tile-small.c:572 msgid "Ro_w:" msgstr "_Fila:" -#: plug-ins/common/tile-small.c:603 +#: plug-ins/common/tile-small.c:597 msgid "Col_umn:" msgstr "Col_umna:" +#: plug-ins/common/tile-small.c:629 +#: plug-ins/fractal-explorer/fractal-explorer.c:1346 +#: plug-ins/pikaressionist/orientmap.c:527 +#: plug-ins/pikaressionist/presets.c:1060 +#: plug-ins/pikaressionist/sizemap.c:400 +#: plug-ins/imagemap/imap_default_dialog.c:103 +msgid "_Apply" +msgstr "_Aplica" + #. Widget for selecting the Opacity -#: plug-ins/common/tile-small.c:651 +#: plug-ins/common/tile-small.c:645 msgid "O_pacity:" msgstr "O_pacitat:" -#. Lower frame saying how many segments -#: plug-ins/common/tile-small.c:661 +#: plug-ins/common/tile-small.c:656 msgid "Number of Segments" msgstr "Nombre de segments" -#: plug-ins/common/unit-editor.c:115 +#: plug-ins/common/unit-editor.c:114 msgid "Saved" msgstr "Desat" -#: plug-ins/common/unit-editor.c:115 +#: plug-ins/common/unit-editor.c:114 msgid "" "A unit definition will only be saved before PIKA exits if this column is " "checked." @@ -7038,30 +8081,30 @@ msgstr "" "Una definició d'unitat només es desarà abans de sortir del PIKA si s'activa " "aquesta columna." -#: plug-ins/common/unit-editor.c:117 +#: plug-ins/common/unit-editor.c:116 msgid "ID" msgstr "Identificador" -#: plug-ins/common/unit-editor.c:117 +#: plug-ins/common/unit-editor.c:116 msgid "" "This string will be used to identify a unit in PIKA's configuration files." msgstr "" "Aquesta cadena s'utilitzarà per a identificar una unitat en els fitxers de " "configuració del PIKA." -#: plug-ins/common/unit-editor.c:119 +#: plug-ins/common/unit-editor.c:118 msgid "Factor" msgstr "Factor" -#: plug-ins/common/unit-editor.c:119 +#: plug-ins/common/unit-editor.c:118 msgid "How many units make up an inch." msgstr "Quantitat d'unitats que fan una polzada." -#: plug-ins/common/unit-editor.c:120 +#: plug-ins/common/unit-editor.c:119 msgid "Digits" msgstr "Dígits" -#: plug-ins/common/unit-editor.c:120 +#: plug-ins/common/unit-editor.c:119 msgid "" "This field is a hint for numerical input fields. It specifies how many " "decimal digits the input field should provide to get approximately the same " @@ -7072,11 +8115,11 @@ msgstr "" "obtenir aproximadament la mateixa precisió que una «polzada» del camp " "d'entrada amb dos dígits decimals." -#: plug-ins/common/unit-editor.c:125 +#: plug-ins/common/unit-editor.c:124 msgid "Symbol" msgstr "Símbol" -#: plug-ins/common/unit-editor.c:125 +#: plug-ins/common/unit-editor.c:124 msgid "" "The unit's symbol if it has one (e.g. \" for inches). The unit's " "abbreviation is used if doesn't have a symbol." @@ -7084,100 +8127,100 @@ msgstr "" "El símbol de la unitat, si en té (p. ex. «\"» per a les polzades). " "S'utilitza l'abreviatura de la unitat si no té un símbol." -#: plug-ins/common/unit-editor.c:128 +#: plug-ins/common/unit-editor.c:127 msgid "Abbreviation" msgstr "Abreviatura" -#: plug-ins/common/unit-editor.c:128 +#: plug-ins/common/unit-editor.c:127 msgid "The unit's abbreviation (e.g. \"cm\" for centimeters)." msgstr "L'abreviatura de la unitat (p. ex. «cm» per centímetres)." -#: plug-ins/common/unit-editor.c:130 +#: plug-ins/common/unit-editor.c:129 msgid "Singular" msgstr "Singular" -#: plug-ins/common/unit-editor.c:130 +#: plug-ins/common/unit-editor.c:129 msgid "The unit's singular form." msgstr "La forma en singular de la unitat." -#: plug-ins/common/unit-editor.c:131 +#: plug-ins/common/unit-editor.c:130 msgid "Plural" msgstr "Plural" -#: plug-ins/common/unit-editor.c:131 +#: plug-ins/common/unit-editor.c:130 msgid "The unit's plural form." msgstr "La forma en plural de la unitat." -#: plug-ins/common/unit-editor.c:175 +#: plug-ins/common/unit-editor.c:174 msgid "U_nits" msgstr "U_nitats" -#: plug-ins/common/unit-editor.c:180 +#: plug-ins/common/unit-editor.c:179 msgid "Create or alter units used in PIKA" msgstr "Crea o modifica les unitats que s'utilitzen al PIKA" -#: plug-ins/common/unit-editor.c:230 plug-ins/common/unit-editor.c:249 +#: plug-ins/common/unit-editor.c:228 plug-ins/common/unit-editor.c:247 msgid "Unit Editor" msgstr "Editor d'unitats" #. destroy model automatically with view #. Put buttons in -#: plug-ins/common/unit-editor.c:253 -#: plug-ins/fractal-explorer/fractal-explorer.c:1214 +#: plug-ins/common/unit-editor.c:251 +#: plug-ins/fractal-explorer/fractal-explorer.c:1335 #: plug-ins/pikaressionist/presets.c:1073 msgid "_Refresh" msgstr "_Actualitza" -#: plug-ins/common/unit-editor.c:260 +#: plug-ins/common/unit-editor.c:258 msgid "_Help" msgstr "_Ajuda" -#: plug-ins/common/unit-editor.c:291 +#: plug-ins/common/unit-editor.c:289 msgid "Create a new unit from scratch" msgstr "Crea una unitat nova des de zero" -#: plug-ins/common/unit-editor.c:298 +#: plug-ins/common/unit-editor.c:296 msgid "Create a new unit using the currently selected unit as template" msgstr "" "Crea una unitat nova utilitzant la unitat seleccionada com a plantilla" -#: plug-ins/common/unit-editor.c:435 +#: plug-ins/common/unit-editor.c:431 msgid "Add a New Unit" msgstr "Afegeix una nova unitat" -#: plug-ins/common/unit-editor.c:464 +#: plug-ins/common/unit-editor.c:460 msgid "_ID:" msgstr "_Identificador:" -#: plug-ins/common/unit-editor.c:476 +#: plug-ins/common/unit-editor.c:472 msgid "_Factor:" msgstr "_Factor:" -#: plug-ins/common/unit-editor.c:487 +#: plug-ins/common/unit-editor.c:483 msgid "_Digits:" msgstr "_Dígits:" -#: plug-ins/common/unit-editor.c:499 +#: plug-ins/common/unit-editor.c:495 msgid "_Symbol:" msgstr "_Símbol:" -#: plug-ins/common/unit-editor.c:511 +#: plug-ins/common/unit-editor.c:507 msgid "_Abbreviation:" msgstr "_Abreviatura:" -#: plug-ins/common/unit-editor.c:523 +#: plug-ins/common/unit-editor.c:519 msgid "Si_ngular:" msgstr "Si_ngular:" -#: plug-ins/common/unit-editor.c:535 +#: plug-ins/common/unit-editor.c:531 msgid "_Plural:" msgstr "_Plural:" -#: plug-ins/common/unit-editor.c:578 +#: plug-ins/common/unit-editor.c:574 msgid "Incomplete input" msgstr "Falten dades" -#: plug-ins/common/unit-editor.c:581 +#: plug-ins/common/unit-editor.c:577 msgid "Please fill in all text fields." msgstr "Ompliu tots els camps." @@ -7253,121 +8296,119 @@ msgstr "_Van Gogh (LIC)..." msgid "Special effects that nobody understands" msgstr "Efectes especials que ningú entén" -#: plug-ins/common/warp.c:250 +#: plug-ins/common/warp.c:219 msgid "_Warp..." msgstr "_Deforma..." -#: plug-ins/common/warp.c:254 +#: plug-ins/common/warp.c:223 msgid "Twist or smear image in many different ways" msgstr "Gira i estira la imatge de diverses formes" -#: plug-ins/common/warp.c:486 +#: plug-ins/common/warp.c:468 msgid "Warp" msgstr "Deforma" -#: plug-ins/common/warp.c:508 +#: plug-ins/common/warp.c:490 msgid "Basic Options" msgstr "Opcions bàsiques" -#: plug-ins/common/warp.c:529 +#: plug-ins/common/warp.c:511 msgid "Step size:" msgstr "Mida del pas:" -#: plug-ins/common/warp.c:543 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:762 -#: plug-ins/ifs-compose/ifs-compose.c:1293 +#: plug-ins/common/warp.c:525 plug-ins/ifs-compose/ifs-compose.c:1239 msgid "Iterations:" msgstr "Iteracions:" #. Displacement map menu -#: plug-ins/common/warp.c:552 +#: plug-ins/common/warp.c:534 msgid "Displacement map:" msgstr "Mapa de desplaçament:" #. ======================================================================= #. Displacement Type -#: plug-ins/common/warp.c:576 +#: plug-ins/common/warp.c:558 msgid "On edges:" msgstr "A les vores:" -#: plug-ins/common/warp.c:587 +#: plug-ins/common/warp.c:569 msgid "Wrap" msgstr "Ajusta" -#: plug-ins/common/warp.c:602 +#: plug-ins/common/warp.c:584 msgid "Smear" msgstr "Taca" #. -------------------------------------------------------------------- #. --------- The secondary grid -------------------------- -#: plug-ins/common/warp.c:652 plug-ins/file-jpeg/jpeg-save.c:968 +#: plug-ins/common/warp.c:634 plug-ins/file-jpeg/jpeg-save.c:970 #: plug-ins/file-webp/file-webp-dialog.c:107 msgid "Advanced Options" msgstr "Opcions avançades" -#: plug-ins/common/warp.c:667 +#: plug-ins/common/warp.c:649 msgid "Dither size:" msgstr "Mida de la trama:" -#: plug-ins/common/warp.c:680 +#: plug-ins/common/warp.c:662 msgid "Rotation angle:" msgstr "Angle de rotació:" -#: plug-ins/common/warp.c:693 +#: plug-ins/common/warp.c:675 msgid "Substeps:" msgstr "Subpassos:" #. Magnitude map menu -#: plug-ins/common/warp.c:702 +#: plug-ins/common/warp.c:684 msgid "Magnitude map:" msgstr "Mapa de magnitud:" -#: plug-ins/common/warp.c:730 +#: plug-ins/common/warp.c:712 msgid "Use magnitude map" msgstr "Utilitza el mapa de magnitud" #. -------------------------------------------------------------------- #. --------- The "other" grid -------------------------- -#: plug-ins/common/warp.c:744 +#: plug-ins/common/warp.c:726 msgid "More Advanced Options" msgstr "Més opcions avançades" -#: plug-ins/common/warp.c:760 +#: plug-ins/common/warp.c:742 msgid "Gradient scale:" msgstr "Escala del degradat:" -#: plug-ins/common/warp.c:783 +#: plug-ins/common/warp.c:765 msgid "Gradient map selection menu" msgstr "Menú de selecció del mapa degradat" -#: plug-ins/common/warp.c:793 +#: plug-ins/common/warp.c:775 msgid "Vector mag:" msgstr "Magnitud del vector:" #. Angle -#: plug-ins/common/warp.c:808 plug-ins/ifs-compose/ifs-compose.c:731 +#: plug-ins/common/warp.c:790 plug-ins/ifs-compose/ifs-compose.c:677 msgid "Angle:" msgstr "Angle:" -#: plug-ins/common/warp.c:831 +#: plug-ins/common/warp.c:813 msgid "Fixed-direction-vector map selection menu" msgstr "Menú de selecció del mapa de vector de direcció fixada" #. make sure layer is visible -#: plug-ins/common/warp.c:1385 +#: plug-ins/common/warp.c:1405 msgid "Smoothing X gradient" msgstr "S'està suavitzant el degradat X" -#: plug-ins/common/warp.c:1388 +#: plug-ins/common/warp.c:1408 msgid "Smoothing Y gradient" msgstr "S'està suavitzant el degradat Y" #. calculate new X,Y Displacement image maps -#: plug-ins/common/warp.c:1432 +#: plug-ins/common/warp.c:1451 msgid "Finding XY gradient" msgstr "S'està cercant el degradat XY" -#: plug-ins/common/warp.c:1450 +#: plug-ins/common/warp.c:1475 #, c-format msgid "Flow step %d" msgstr "Flux de pas %d" @@ -7377,7 +8418,7 @@ msgid "_Wavelet-decompose..." msgstr "_Descomposició de l'oneta..." #: plug-ins/common/wavelet-decompose.c:122 -#: plug-ins/common/wavelet-decompose.c:402 +#: plug-ins/common/wavelet-decompose.c:378 msgid "Wavelet decompose" msgstr "Descomposició de l'oneta" @@ -7393,155 +8434,178 @@ msgstr "_Crea un grup de capes per a emmagatzemar la descomposició" msgid "_Add a layer mask to each scales layer" msgstr "_Afegeix una màscara de capa a cada capa d'escala" -#: plug-ins/common/wavelet-decompose.c:225 +#: plug-ins/common/wavelet-decompose.c:204 msgid "Wavelet-Decompose" msgstr "Descomposició de l'oneta" -#: plug-ins/common/wavelet-decompose.c:235 +#: plug-ins/common/wavelet-decompose.c:214 msgid "Decomposition" msgstr "Descomposició" -#: plug-ins/common/wavelet-decompose.c:302 +#: plug-ins/common/wavelet-decompose.c:281 #, c-format msgid "Scale %d" msgstr "Escala %d" -#: plug-ins/common/wavelet-decompose.c:326 +#: plug-ins/common/wavelet-decompose.c:305 msgid "Residual" msgstr "Residual" -#: plug-ins/common/web-browser.c:175 +#: plug-ins/common/web-browser.c:178 msgid "The operating system is out of memory or resources." msgstr "El sistema operatiu no té prou memòria o recursos." -#: plug-ins/common/web-browser.c:178 +#: plug-ins/common/web-browser.c:181 msgid "The specified file was not found." msgstr "No s'ha trobat el fitxer especificat." -#: plug-ins/common/web-browser.c:181 +#: plug-ins/common/web-browser.c:184 msgid "The specified path was not found." msgstr "No s'ha trobat el camí especificat." -#: plug-ins/common/web-browser.c:184 +#: plug-ins/common/web-browser.c:187 msgid "" "The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image)." msgstr "" "El fitxer .exe no és vàlid (no és un fitxer .exe de Microsoft Win32 o el " "fitxer conté errors)." -#: plug-ins/common/web-browser.c:187 +#: plug-ins/common/web-browser.c:190 msgid "The operating system denied access to the specified file." msgstr "El sistema operatiu impedeix l'accés al fitxer especificat." -#: plug-ins/common/web-browser.c:190 +#: plug-ins/common/web-browser.c:193 msgid "The file name association is incomplete or invalid." msgstr "L'associació del nom del fitxer és incompleta o no és vàlida." -#: plug-ins/common/web-browser.c:193 +#: plug-ins/common/web-browser.c:196 msgid "DDE transaction busy" msgstr "La transacció DDE està ocupada" -#: plug-ins/common/web-browser.c:196 +#: plug-ins/common/web-browser.c:199 msgid "The DDE transaction failed." msgstr "Ha fallat la transacció DDE." -#: plug-ins/common/web-browser.c:199 +#: plug-ins/common/web-browser.c:202 msgid "The DDE transaction timed out." msgstr "La transacció DDE ha esgotat el temps d'espera." -#: plug-ins/common/web-browser.c:202 +#: plug-ins/common/web-browser.c:205 msgid "The specified DLL was not found." msgstr "No s'ha trobat la biblioteca d'enllaç dinàmic (DLL) especificada." -#: plug-ins/common/web-browser.c:205 +#: plug-ins/common/web-browser.c:208 msgid "There is no application associated with the given file name extension." msgstr "" "No hi ha cap aplicació associada a l'extensió que es vol donar al fitxer." -#: plug-ins/common/web-browser.c:208 +#: plug-ins/common/web-browser.c:211 msgid "There was not enough memory to complete the operation." msgstr "No hi ha hagut prou memòria per a finalitzar l'operació." -#: plug-ins/common/web-browser.c:211 +#: plug-ins/common/web-browser.c:214 msgid "A sharing violation occurred." msgstr "S'ha produït una violació en la compartició." -#: plug-ins/common/web-browser.c:214 +#: plug-ins/common/web-browser.c:217 msgid "Unknown Microsoft Windows error." msgstr "Error del Microsoft Windows desconegut." -#: plug-ins/common/web-browser.c:217 +#: plug-ins/common/web-browser.c:220 #, c-format msgid "Failed to open '%s': %s" msgstr "No s'ha pogut obrir «%s»: %s" -#: plug-ins/common/web-page.c:130 +#: plug-ins/common/web-page.c:118 msgid "From _Webpage..." msgstr "Des d'una pàgina _web..." -#: plug-ins/common/web-page.c:134 +#: plug-ins/common/web-page.c:122 msgid "Create an image of a webpage" msgstr "Crea una imatge a partir d'una pàgina web" -#: plug-ins/common/web-page.c:274 +#: plug-ins/common/web-page.c:139 +#, fuzzy +#| msgid "Enter location (URI):" +msgid "Enter location (_URI)" +msgstr "Introduïu la ubicació (URI):" + +#: plug-ins/common/web-page.c:140 +#, fuzzy +msgid "URL of the webpage to screenshot" +msgstr "URL de la pàgina web a captura de pantalla" + +#: plug-ins/common/web-page.c:145 +#, fuzzy +#| msgid "_Width (pixels):" +msgid "_Width (pixels)" +msgstr "A_mplada (píxels):" + +#: 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 les puntes (en píxels)" + +#: plug-ins/common/web-page.c:151 +#, fuzzy +#| msgid "Font size:" +msgid "_Font size" +msgstr "Mida de la lletra:" + +#: plug-ins/common/web-page.c:152 +#, fuzzy +#| msgid "The name of the file to save the image in" +msgid "The font size to use in the page (in pt)" +msgstr "El nom del fitxer on desar la imatge" + +#: plug-ins/common/web-page.c:214 msgid "Create from webpage" msgstr "Crea des d'una pàgina web" -#: plug-ins/common/web-page.c:279 +#: plug-ins/common/web-page.c:216 msgid "Cre_ate" msgstr "Cre_a" -#: plug-ins/common/web-page.c:308 -msgid "Enter location (URI):" -msgstr "Introduïu la ubicació (URI):" - -#: plug-ins/common/web-page.c:331 -msgid "Width (pixels):" -msgstr "Amplada (píxels):" - -#: plug-ins/common/web-page.c:351 -msgid "Font size:" -msgstr "Mida de la lletra:" - -#: plug-ins/common/web-page.c:358 +#: plug-ins/common/web-page.c:217 msgid "Huge" msgstr "Enorme" -#: plug-ins/common/web-page.c:359 +#: plug-ins/common/web-page.c:218 msgid "Large" msgstr "Gran" -#: plug-ins/common/web-page.c:360 +#: plug-ins/common/web-page.c:219 msgctxt "web-page" msgid "Default" msgstr "Per defecte" -#: plug-ins/common/web-page.c:361 +#: plug-ins/common/web-page.c:220 msgid "Small" msgstr "Petit" -#: plug-ins/common/web-page.c:362 +#: plug-ins/common/web-page.c:221 msgid "Tiny" msgstr "Diminut" -#: plug-ins/common/web-page.c:456 +#: plug-ins/common/web-page.c:291 msgid "Webpage" msgstr "Pàgina web" -#: plug-ins/common/web-page.c:503 -#, c-format -msgid "Transferring webpage image for '%s'" -msgstr "S'està transferint la imatge de la pàgina web per «%s»" - -#: plug-ins/common/web-page.c:526 +#: plug-ins/common/web-page.c:334 msgid "No URL was specified" msgstr "No s'ha especificat cap URL" -#: plug-ins/common/web-page.c:588 +#: plug-ins/common/web-page.c:392 #, c-format msgid "Downloading webpage '%s'" msgstr "S'està baixant la pàgina web «%s»" +#: plug-ins/common/web-page.c:401 +#, c-format +msgid "Transferring webpage image for '%s'" +msgstr "S'està transferint la imatge de la pàgina web per «%s»" + #: plug-ins/file-bmp/bmp-load.c:146 msgid "Bad colormap" msgstr "Mapa de color erroni" @@ -7596,7 +8660,7 @@ msgstr "S'ignorarà el canal alfa." msgid "Compatibility" msgstr "Compatibilitat" -#: plug-ins/file-bmp/bmp-save.c:1014 +#: plug-ins/file-bmp/bmp-save.c:1015 msgid "" "Some applications can not read BMP images that include color space " "information. PIKA writes color space information by default. Disabling this " @@ -7608,51 +8672,51 @@ msgstr "" "l'espai de color al fitxer." #. RGB Encoding Options -#: plug-ins/file-bmp/bmp-save.c:1025 +#: plug-ins/file-bmp/bmp-save.c:1026 msgid "16 bit (R5 G6 B5)" msgstr "16 bits (R5 G6 B5)" -#: plug-ins/file-bmp/bmp-save.c:1026 +#: plug-ins/file-bmp/bmp-save.c:1027 msgid "16 bit (A1 R5 G5 B5)" msgstr "16 bits (A1 R5 G5 B5)" -#: plug-ins/file-bmp/bmp-save.c:1027 +#: plug-ins/file-bmp/bmp-save.c:1028 msgid "16 bit (X1 R5 G5 B5)" msgstr "16 bits (X1 R5 G5 B5)" -#: plug-ins/file-bmp/bmp-save.c:1028 +#: plug-ins/file-bmp/bmp-save.c:1029 msgid "24 bit (R8 G8 B8)" msgstr "24 bits (R8 G8 B8)" -#: plug-ins/file-bmp/bmp-save.c:1029 +#: plug-ins/file-bmp/bmp-save.c:1030 msgid "32 bit (A8 R8 G8 B8)" msgstr "32 bits (A8 R8 G8 B8)" -#: plug-ins/file-bmp/bmp-save.c:1030 +#: plug-ins/file-bmp/bmp-save.c:1031 msgid "32 bit (X8 R8 G8 B8)" msgstr "32 bits (X8 R8 G8 B8)" -#: plug-ins/file-bmp/bmp.c:152 plug-ins/file-bmp/bmp.c:178 +#: plug-ins/file-bmp/bmp.c:155 plug-ins/file-bmp/bmp.c:181 msgid "Windows BMP image" msgstr "Imatge BMP del Windows" -#: plug-ins/file-bmp/bmp.c:155 plug-ins/file-bmp/bmp.c:156 +#: plug-ins/file-bmp/bmp.c:158 plug-ins/file-bmp/bmp.c:159 msgid "Loads files of Windows BMP file format" msgstr "Carrega fitxers en el format de fitxer BMP" -#: plug-ins/file-bmp/bmp.c:180 +#: plug-ins/file-bmp/bmp.c:183 msgid "BMP" msgstr "BMP" -#: plug-ins/file-bmp/bmp.c:183 plug-ins/file-bmp/bmp.c:184 +#: plug-ins/file-bmp/bmp.c:186 plug-ins/file-bmp/bmp.c:187 msgid "Saves files in Windows BMP file format" msgstr "Desa els fitxers en el format de fitxer BMP de Windows" -#: plug-ins/file-bmp/bmp.c:197 +#: plug-ins/file-bmp/bmp.c:200 msgid "Ru_n-Length Encoded" msgstr "Codificació _Run-Lenght" -#: plug-ins/file-bmp/bmp.c:198 +#: plug-ins/file-bmp/bmp.c:201 msgid "" "Use run-length-encoding compression (only valid for 4 and 8-bit indexed " "images)" @@ -7660,19 +8724,19 @@ msgstr "" "Usa la compressió run-length-encoding (només vàlida per a imatges indexades " "de 4 i 8 bits)" -#: plug-ins/file-bmp/bmp.c:204 +#: plug-ins/file-bmp/bmp.c:207 msgid "_Write color space information" msgstr "_Escriure informació de l'espai en color" -#: plug-ins/file-bmp/bmp.c:205 +#: plug-ins/file-bmp/bmp.c:208 msgid "Whether or not to write BITMAPV5HEADER color space data" msgstr "Si s'ha d'escriure o no les dades de l'espai de color BITMAPV5HEADER" -#: plug-ins/file-bmp/bmp.c:211 +#: plug-ins/file-bmp/bmp.c:214 msgid "R_GB format" msgstr "Format R_GB" -#: plug-ins/file-bmp/bmp.c:212 +#: plug-ins/file-bmp/bmp.c:215 msgid "" "Export format for RGB images (0=RGB_565, 1=RGBA_5551, 2=RGB_555, 3=RGB_888, " "4=RGBA_8888, 5=RGBX_8888)" @@ -7680,94 +8744,100 @@ msgstr "" "Format d'exportació per a les imatges RGB (0=RGB_565, 1=RGBA_5551, " "2=RGB_555, 3=RGB_888, 4=RGBA_8888, 5=RGBX_8888)" -#: plug-ins/file-bmp/bmp.c:296 +#: plug-ins/file-bmp/bmp.c:298 msgid "BMP format does not support multiple layers." msgstr "El format BMP no admet múltiples capes." -#: plug-ins/file-dds/dds.c:146 plug-ins/file-dds/dds.c:184 +#: plug-ins/file-dds/dds.c:149 plug-ins/file-dds/dds.c:187 msgid "DDS image" msgstr "Imatge DDS" -#: plug-ins/file-dds/dds.c:149 plug-ins/file-dds/dds.c:150 +#: plug-ins/file-dds/dds.c:152 plug-ins/file-dds/dds.c:153 msgid "Loads files in DDS image format" msgstr "Carrega fitxers en el format de fitxer DDS" -#: plug-ins/file-dds/dds.c:165 +#: plug-ins/file-dds/dds.c:168 msgid "Load _mipmaps" msgstr "Carrega e_ls mipmaps" -#: plug-ins/file-dds/dds.c:166 +#: plug-ins/file-dds/dds.c:169 msgid "Load mipmaps if present" msgstr "Carrega els mipmaps si hi són" -#: plug-ins/file-dds/dds.c:171 +#: plug-ins/file-dds/dds.c:174 msgid "Automatically decode YCoCg/AE_xp images when detected" msgstr "Descodifica _automàticament les imatges YCoCg/AExp quan es detectin" -#: plug-ins/file-dds/dds.c:172 +#: plug-ins/file-dds/dds.c:175 msgid "Decode YCoCg/AExp images when detected" msgstr "Descodifica les imatges YCoCg/AExp quan es detectin" -#: plug-ins/file-dds/dds.c:323 +#: plug-ins/file-dds/dds.c:326 msgid "Decode YCoCg" msgstr "Descodifica YCoCg" -#: plug-ins/file-dds/dds.c:327 plug-ins/file-dds/dds.c:328 +#: plug-ins/file-dds/dds.c:330 plug-ins/file-dds/dds.c:331 msgid "Converts YCoCg encoded pixels to RGB" msgstr "Converteix els píxels codificats en YCoCg a RGB" -#: plug-ins/file-dds/dds.c:345 +#: plug-ins/file-dds/dds.c:348 msgid "Decode YCoCg (scaled)" msgstr "Descodifica YCoCg (escalat)" -#: plug-ins/file-dds/dds.c:349 plug-ins/file-dds/dds.c:351 +#: plug-ins/file-dds/dds.c:352 plug-ins/file-dds/dds.c:354 msgid "Converts YCoCg (scaled) encoded pixels to RGB" msgstr "Converteix els píxels codificats de YCoCg (escalats) a RGB" -#: plug-ins/file-dds/dds.c:369 +#: plug-ins/file-dds/dds.c:372 msgid "Decode Alpha exponent" msgstr "Descodifica l'exponent alfa" -#: plug-ins/file-dds/dds.c:375 plug-ins/file-dds/dds.c:373 +#: plug-ins/file-dds/dds.c:378 plug-ins/file-dds/dds.c:376 msgid "Converts alpha exponent encoded pixels to RGB" msgstr "Converteix píxels codificats amb exponent alfa a RGB" -#: plug-ins/file-dds/ddsread.c:366 +#: plug-ins/file-dds/ddsread.c:222 +#, fuzzy +#| msgid "Invalid keyword chunk header" +msgid "Invalid or corrupted DDS header" +msgstr "La capçalera del fragment de la paraula clau no és vàlida" + +#: plug-ins/file-dds/ddsread.c:382 msgid "Could not allocate a new image." msgstr "No s'ha pogut assignar una imatge nova." -#: plug-ins/file-dds/ddsread.c:377 +#: plug-ins/file-dds/ddsread.c:393 msgid "Error reading palette." msgstr "S'ha produït un error en llegir la paleta." -#: plug-ins/file-dds/ddsread.c:660 +#: plug-ins/file-dds/ddsread.c:676 msgid "Invalid DDS format magic number." msgstr "El número màgic del format DDS no és vàlid." -#: plug-ins/file-dds/ddsread.c:739 +#: plug-ins/file-dds/ddsread.c:755 #, c-format msgid "Invalid bpp value for RGB data: %d" msgstr "Valor bpp no vàlid per a les dades RGB: %d" -#: plug-ins/file-dds/ddsread.c:750 +#: plug-ins/file-dds/ddsread.c:766 #, c-format msgid "Invalid bpp value for luminance data: %d" msgstr "Valor bpp no vàlid per a les dades de lluminositat: %d" -#: plug-ins/file-dds/ddsread.c:801 +#: plug-ins/file-dds/ddsread.c:817 msgid "Invalid pixel format." msgstr "Format de píxel no vàlid." -#: plug-ins/file-dds/ddsread.c:970 +#: plug-ins/file-dds/ddsread.c:986 #, c-format msgid "Unsupported DXGI format (%d)" msgstr "El format DXGI no és compatible (%d)" -#: plug-ins/file-dds/ddsread.c:1135 plug-ins/file-dds/ddsread.c:1174 +#: plug-ins/file-dds/ddsread.c:1151 plug-ins/file-dds/ddsread.c:1190 msgid "Unexpected EOF.\n" msgstr "EOF inesperat.\n" -#: plug-ins/file-dds/ddsread.c:1514 +#: plug-ins/file-dds/ddsread.c:1530 msgid "Open DDS" msgstr "Obre DDS" @@ -7867,123 +8937,142 @@ msgstr "Conserva la cober_tura de la prova alfa" msgid "_Alpha test threshold:" msgstr "Llindar de la prova _alfa:" -#: plug-ins/file-exr/file-exr.c:109 +#: plug-ins/file-exr/file-exr.c:112 msgid "Loads files in the OpenEXR file format" msgstr "Carrega fitxers en el format de fitxer OpenEXR" -#: plug-ins/file-exr/file-exr.c:196 +#: plug-ins/file-exr/file-exr.c:201 #, c-format msgid "Error opening file '%s' for reading" msgstr "S'ha produït un error en obrir el fitxer de lectura «%s»" -#: plug-ins/file-exr/file-exr.c:207 +#: plug-ins/file-exr/file-exr.c:212 #, c-format msgid "Error querying image dimensions from '%s'" msgstr "" "S'ha produït un error en la consulta de les dimensions de la imatge «%s»" -#: plug-ins/file-exr/file-exr.c:227 +#: plug-ins/file-exr/file-exr.c:232 #, c-format msgid "Error querying image precision from '%s'" msgstr "S'ha produït un error en la consulta de la precisió de la imatge «%s»" -#: plug-ins/file-exr/file-exr.c:244 +#: plug-ins/file-exr/file-exr.c:250 #, c-format msgid "Error querying image type from '%s'" msgstr "S'ha produït un error en la consulta del tipus d'imatge «%s»" -#: plug-ins/file-exr/file-exr.c:302 +#: plug-ins/file-exr/file-exr.c:312 #, c-format msgid "Error reading pixel data from '%s'" msgstr "S'ha produït un error en llegir les dades del píxel «%s»" -#: plug-ins/file-faxg3/faxg3.c:134 +#: plug-ins/file-exr/file-exr.c:419 +#, fuzzy +msgid "Import OpenEXR" +msgstr "Importa OpenEXR" + +#: plug-ins/file-exr/file-exr.c:433 +#, fuzzy +msgid "Unknown Channel Name" +msgstr "Nom de canal desconegut" + +#: plug-ins/file-exr/file-exr.c:434 +#, fuzzy +msgid "" +"The image contains a single unknown channel.\n" +"It has been converted to grayscale." +msgstr "" +"La imatge conté un únic canal desconegut.\n" +"S'ha convertit en escala de grisos." + +#: plug-ins/file-faxg3/faxg3.c:136 msgid "G3 fax image" msgstr "Imatge de fax G3" -#: plug-ins/file-faxg3/faxg3.c:295 plug-ins/file-faxg3/faxg3.c:593 +#: plug-ins/file-faxg3/faxg3.c:299 plug-ins/file-faxg3/faxg3.c:597 msgid "Could not create buffer to process image data." msgstr "" "No s'ha pogut crear la memòria intermèdia per a processar les dades de la " "imatge." -#: plug-ins/file-faxg3/faxg3.c:560 +#: plug-ins/file-faxg3/faxg3.c:564 #, c-format msgid "Invalid image dimensions (%d x %d). Image may be corrupt." msgstr "" "Dimensions d'imatge no vàlides (%d x %d). La imatge pot estar malmesa." -#: plug-ins/file-faxg3/faxg3.c:570 +#: plug-ins/file-faxg3/faxg3.c:574 msgid "Could not create image." msgstr "No s'ha pogut crear la imatge." -#: plug-ins/file-fits/fits.c:177 plug-ins/file-fits/fits.c:218 +#: plug-ins/file-fits/fits.c:180 plug-ins/file-fits/fits.c:221 msgid "Flexible Image Transport System" msgstr "Sistema de transport d'imatge flexible" -#: plug-ins/file-fits/fits.c:180 +#: plug-ins/file-fits/fits.c:183 msgid "Load file of the FITS file format" msgstr "Carrega fitxers en el format de fitxer FITS" -#: plug-ins/file-fits/fits.c:181 +#: plug-ins/file-fits/fits.c:184 msgid "Load file of the FITS file format (Flexible Image Transport System)" msgstr "" "Carrega el fitxer del format de fitxer FITS (Sistema de transport d'imatges " "flexible)" -#: plug-ins/file-fits/fits.c:198 plug-ins/file-fits/fits.c:199 +#: plug-ins/file-fits/fits.c:201 plug-ins/file-fits/fits.c:202 msgid "Replacement for undefined pixels" msgstr "Recanvi pels píxels indefinits" -#: plug-ins/file-fits/fits.c:204 +#: plug-ins/file-fits/fits.c:207 msgid "Pixel value scaling" msgstr "Escalat del valor dels píxels" -#: plug-ins/file-fits/fits.c:205 +#: plug-ins/file-fits/fits.c:208 msgid "Use DATAMIN/DATAMAX-scaling if possible" msgstr "Usa l'escalat «DATAMIN»/DATAMAX si és possible" -#: plug-ins/file-fits/fits.c:221 +#: plug-ins/file-fits/fits.c:224 msgid "Export file in the FITS file format" msgstr "Exporta el fitxer en el format de fitxer FITS" -#: plug-ins/file-fits/fits.c:222 +#: plug-ins/file-fits/fits.c:225 msgid "" "FITS exporting handles all image types except those with alpha channels." msgstr "" "L'exportació FITS gestiona tots els tipus d'imatge excepte els que tenen " "canals alfa." -#: plug-ins/file-fits/fits.c:326 +#: plug-ins/file-fits/fits.c:325 msgid "FITS format does not support multiple layers." msgstr "El format FITS no admet múltiples capes." -#: plug-ins/file-fits/fits.c:409 +#: plug-ins/file-fits/fits.c:408 msgid "Error during opening of FITS file" msgstr "S'ha produït un error en obrir el fitxer FITS" -#: plug-ins/file-fits/fits.c:422 plug-ins/file-fits/fits.c:634 +#: plug-ins/file-fits/fits.c:421 plug-ins/file-fits/fits.c:633 msgid "FITS file keeps no displayable images" msgstr "El fitxer FITS conserva imatges no visualitzables" -#: plug-ins/file-fits/fits.c:520 +#: plug-ins/file-fits/fits.c:519 msgid "FITS HDU" msgstr "FITS HDU" -#: plug-ins/file-fits/fits.c:658 +#: plug-ins/file-fits/fits.c:657 msgid "FITS export cannot handle images with alpha channels" msgstr "L'exportació a FITS no pot gestionar imatges amb canals alfa" -#: plug-ins/file-fits/fits.c:1024 +#: plug-ins/file-fits/fits.c:1023 msgid "Open FITS File" msgstr "Obre el fitxer FITS" -#: plug-ins/file-fits/fits.c:1029 plug-ins/gfig/gfig-dialog.c:1292 +#: plug-ins/file-fits/fits.c:1028 plug-ins/gfig/gfig-dialog.c:1292 #: plug-ins/gfig/gfig-dialog.c:1460 msgid "White" msgstr "Blanc" -#: plug-ins/file-fits/fits.c:1037 +#: plug-ins/file-fits/fits.c:1036 msgid "By DATAMIN/DATAMAX" msgstr "Per DATAMIN/DATAMAX" @@ -8099,67 +9188,67 @@ msgstr "" "S'ha desbordat la lectura de les dades comprimides. El fitxer possiblement " "està malmès." -#: plug-ins/file-fli/fli-pika.c:181 plug-ins/file-fli/fli-pika.c:218 +#: plug-ins/file-fli/fli-pika.c:184 plug-ins/file-fli/fli-pika.c:221 msgid "AutoDesk FLIC animation" msgstr "Animació FLIC d'Autodesk" -#: plug-ins/file-fli/fli-pika.c:184 +#: plug-ins/file-fli/fli-pika.c:187 msgid "Load FLI-movies" msgstr "Carrega pel·lícules FLI" -#: plug-ins/file-fli/fli-pika.c:185 plug-ins/file-fli/fli-pika.c:223 +#: plug-ins/file-fli/fli-pika.c:188 plug-ins/file-fli/fli-pika.c:226 msgid "This is an experimental plug-in to handle FLI movies" msgstr "Aquest és un connector experimental per a gestionar pel·lícules FLI" -#: plug-ins/file-fli/fli-pika.c:199 plug-ins/file-fli/fli-pika.c:237 +#: plug-ins/file-fli/fli-pika.c:202 plug-ins/file-fli/fli-pika.c:240 msgid "_From frame" msgstr "_Des del fotograma" -#: plug-ins/file-fli/fli-pika.c:200 +#: plug-ins/file-fli/fli-pika.c:203 msgid "Load beginning from this frame" msgstr "Carrega a partir d'aquest fotograma" -#: plug-ins/file-fli/fli-pika.c:205 plug-ins/file-fli/fli-pika.c:243 +#: plug-ins/file-fli/fli-pika.c:208 plug-ins/file-fli/fli-pika.c:246 msgid "_To frame" msgstr "_Al fotograma" -#: plug-ins/file-fli/fli-pika.c:206 +#: plug-ins/file-fli/fli-pika.c:209 msgid "End loading with this frame" msgstr "Atura la càrrega amb aquest fotograma" -#: plug-ins/file-fli/fli-pika.c:220 +#: plug-ins/file-fli/fli-pika.c:223 msgid "FLI Animation" msgstr "Animació FLI" -#: plug-ins/file-fli/fli-pika.c:222 +#: plug-ins/file-fli/fli-pika.c:225 msgid "Export FLI-movies" msgstr "Exporta pel·lícules FLI" -#: plug-ins/file-fli/fli-pika.c:238 +#: plug-ins/file-fli/fli-pika.c:241 msgid "Export beginning from this frame" msgstr "Inici d'exportació des d'aquest fotograma" -#: plug-ins/file-fli/fli-pika.c:244 +#: plug-ins/file-fli/fli-pika.c:247 msgid "End exporting with this frame (or -1 for all frames)" msgstr "" "Finalitza l'exportació amb aquest fotograma (o -1 per a tots els fotogrames)" -#: plug-ins/file-fli/fli-pika.c:587 +#: plug-ins/file-fli/fli-pika.c:578 #, c-format msgid "Frame %d (%ums)" msgstr "Fotograma %d (%ums)" -#: plug-ins/file-fli/fli-pika.c:614 +#: plug-ins/file-fli/fli-pika.c:605 #, c-format msgid "Failed to read frame %d. Possibly corrupt animation.\n" msgstr "" "No s'ha pogut llegir el fotograma %d. Possiblement l'animació és malmesa.\n" -#: plug-ins/file-fli/fli-pika.c:945 +#: plug-ins/file-fli/fli-pika.c:936 msgid "Open FLIC Animation" msgstr "Obre l'animació FLIC" -#: plug-ins/file-icns/file-icns-load.c:431 +#: plug-ins/file-icns/file-icns-load.c:433 #, c-format msgid "Error trying to open temporary %s file '%s' for icns loading: %s" msgstr "" @@ -8167,10 +9256,10 @@ msgstr "" "icns: %s" #. ----- Open PSD file ----- -#: plug-ins/file-icns/file-icns-load.c:558 plug-ins/file-ico/ico-load.c:1011 -#: plug-ins/file-jpeg/jpeg-load.c:600 plug-ins/file-psd/psd-thumb-load.c:72 -#: plug-ins/file-raw/file-darktable.c:513 -#: plug-ins/file-raw/file-rawtherapee.c:455 +#: plug-ins/file-icns/file-icns-load.c:560 plug-ins/file-ico/ico-load.c:1013 +#: plug-ins/file-jpeg/jpeg-load.c:601 plug-ins/file-psd/psd-thumb-load.c:72 +#: plug-ins/file-raw/file-darktable.c:517 +#: plug-ins/file-raw/file-rawtherapee.c:459 #, c-format msgid "Opening thumbnail for '%s'" msgstr "S'està obrint la miniatura per a «%s»" @@ -8191,7 +9280,7 @@ msgstr "" "Mida de la capa duplicada. \n" "No s'exportarà" -#: plug-ins/file-icns/file-icns-save.c:292 plug-ins/file-icns/file-icns.c:175 +#: plug-ins/file-icns/file-icns-save.c:292 plug-ins/file-icns/file-icns.c:178 msgid "Apple Icon Image" msgstr "Imatge d'icona d'Apple" @@ -8235,7 +9324,7 @@ msgstr "" "16x16, 18x18, 24x24, 32x32, 36x36, 48x48,64x64, 128x128, 256x256, 512x512, o" " 1024x1024." -#: plug-ins/file-icns/file-icns.c:131 +#: plug-ins/file-icns/file-icns.c:134 msgid "Icns" msgstr "Icns" @@ -8332,35 +9421,35 @@ msgstr "" "Cridat sense interacció amb les coordenades del punt calent %d i %d amb una " "imatge de %d icones." -#: plug-ins/file-ico/ico.c:168 plug-ins/file-ico/ico.c:291 +#: plug-ins/file-ico/ico.c:175 plug-ins/file-ico/ico.c:298 msgid "Microsoft Windows icon" msgstr "Icona del Microsoft Windows" -#: plug-ins/file-ico/ico.c:196 plug-ins/file-ico/ico.c:316 +#: plug-ins/file-ico/ico.c:203 plug-ins/file-ico/ico.c:323 msgid "Microsoft Windows cursor" msgstr "Cursor del Microsoft Windows" -#: plug-ins/file-ico/ico.c:226 plug-ins/file-ico/ico.c:363 +#: plug-ins/file-ico/ico.c:233 plug-ins/file-ico/ico.c:370 msgid "Microsoft Windows animated cursor" msgstr "Cursor animat del Microsoft Windows" -#: plug-ins/file-ico/ico.c:230 +#: plug-ins/file-ico/ico.c:237 msgid "Loads files of Windows ANI file format" msgstr "Carrega fitxers en el format de fitxer ANI" -#: plug-ins/file-ico/ico.c:272 +#: plug-ins/file-ico/ico.c:279 msgid "Loads a preview from a Windows ANI files" msgstr "Carrega una vista prèvia des d'un fitxer ANI de Windows" -#: plug-ins/file-ico/ico.c:367 plug-ins/file-ico/ico.c:368 +#: plug-ins/file-ico/ico.c:374 plug-ins/file-ico/ico.c:375 msgid "Saves files in Windows ANI file format" msgstr "Desa els fitxers en el format de fitxer ANI" -#: plug-ins/file-ico/ico.c:384 +#: plug-ins/file-ico/ico.c:391 msgid "Cursor Name (Optional)" msgstr "Nom del cursor (opcional)" -#: plug-ins/file-ico/ico.c:390 +#: plug-ins/file-ico/ico.c:397 msgid "Cursor Author (Optional)" msgstr "Autor del cursor (opcional)" @@ -8368,7 +9457,7 @@ msgstr "Autor del cursor (opcional)" msgid "JPEG preview" msgstr "Previsualització del JPEG" -#: plug-ins/file-jpeg/jpeg-load.c:485 +#: plug-ins/file-jpeg/jpeg-load.c:486 #, c-format msgid "" "Error trying to open temporary %s file '%s' for jpeg metadata loading: %s" @@ -8389,76 +9478,198 @@ msgstr "S'està calculant la mida del fitxer..." msgid "File size: unknown" msgstr "Mida del fitxer: desconeguda" -#: plug-ins/file-jpeg/jpeg-save.c:886 +#: plug-ins/file-jpeg/jpeg-save.c:887 msgid "Enable preview to obtain the file size." msgstr "Habilita la previsualització per a obtenir la mida del fitxer." -#: plug-ins/file-jpeg/jpeg-save.c:891 plug-ins/file-psd/psd-save.c:2451 -#: plug-ins/file-tiff/file-tiff-save.c:1362 +#: plug-ins/file-jpeg/jpeg-save.c:892 plug-ins/file-psd/psd-save.c:2451 +#: plug-ins/file-tiff/file-tiff-save.c:1307 msgid "No soft-proofing profile" msgstr "No hi ha cap perfil de prova suau" #. Subsampling -#: plug-ins/file-jpeg/jpeg-save.c:940 +#: plug-ins/file-jpeg/jpeg-save.c:942 msgid "4:4:4 (best quality)" msgstr "4:4:4 (la millor qualitat)" -#: plug-ins/file-jpeg/jpeg-save.c:942 +#: plug-ins/file-jpeg/jpeg-save.c:944 msgid "4:2:2 (chroma halved horizontally)" msgstr "4:2:2 vertical (croma reduït a la meitat)" -#: plug-ins/file-jpeg/jpeg-save.c:944 +#: plug-ins/file-jpeg/jpeg-save.c:946 msgid "4:4:0 (chroma halved vertically)" msgstr "4:4:0 (chroma a la meitat verticalment)" -#: plug-ins/file-jpeg/jpeg-save.c:946 +#: plug-ins/file-jpeg/jpeg-save.c:948 msgid "4:2:0 (chroma quartered)" msgstr "4:2:0 (croma reduït a una quarta part)" #. DCT method -#: plug-ins/file-jpeg/jpeg-save.c:960 +#: plug-ins/file-jpeg/jpeg-save.c:962 msgid "Fast Integer" msgstr "Nombre enter ràpid" -#: plug-ins/file-jpeg/jpeg-save.c:961 +#: plug-ins/file-jpeg/jpeg-save.c:963 msgid "Integer" msgstr "Nombre enter" -#: plug-ins/file-jpeg/jpeg-save.c:962 +#: plug-ins/file-jpeg/jpeg-save.c:964 msgid "Floating-Point" msgstr "Punt flotant" -#: plug-ins/file-jpeg/jpeg.c:133 plug-ins/file-jpeg/jpeg.c:180 +#: plug-ins/file-jpeg/jpeg.c:136 plug-ins/file-jpeg/jpeg.c:183 msgid "JPEG image" msgstr "Imatge JPEG" -#: plug-ins/file-jpeg/jpeg.c:193 plug-ins/file-tiff/file-tiff-save.c:1326 +#: plug-ins/file-jpeg/jpeg.c:196 plug-ins/file-tiff/file-tiff.c:227 msgid "JPEG" msgstr "JPEG" -#: plug-ins/file-jpeg/jpeg.c:233 +#: plug-ins/file-jpeg/jpeg.c:207 +#, fuzzy +#| msgid "Quality of the image" +msgid "Quality of exported image" +msgstr "Qualitat de la imatge" + +#: plug-ins/file-jpeg/jpeg.c:212 +#, fuzzy +#| msgid "Smoo_thing" +msgid "S_moothing" +msgstr "Suavi_tza" + +#: plug-ins/file-jpeg/jpeg.c:213 +#, fuzzy +#| msgid "Bit depth of exported image" +msgid "Smoothing factor for exported image" +msgstr "Profunditat de bits de la imatge exportada" + +#: plug-ins/file-jpeg/jpeg.c:218 +#, fuzzy +#| msgid "_Unoptimize" +msgid "Optimi_ze" +msgstr "_Desoptimitza" + +#: plug-ins/file-jpeg/jpeg.c:219 +#, fuzzy +msgid "Use optimized tables during Huffman coding" +msgstr "Usa taules optimitzades durant la codificació Huffman" + +#: plug-ins/file-jpeg/jpeg.c:224 +#, fuzzy +msgid "_Progressive" +msgstr "Progressista" + +#: plug-ins/file-jpeg/jpeg.c:225 +#, fuzzy +#| msgid "Create new image" +msgid "Create progressive JPEG images" +msgstr "Crea una imatge nova" + +#: plug-ins/file-jpeg/jpeg.c:230 +#, fuzzy +#| msgid "Export as _CMYK" +msgid "Export as CM_YK" +msgstr "Exporta com a _CMYK" + +#: plug-ins/file-jpeg/jpeg.c:231 +#, fuzzy +#| msgid "Export a CMYK PSD image using the soft-proofing color profile" +msgid "Create a CMYK JPEG image using the soft-proofing color profile" +msgstr "Exporta una imatge PSD CMYK usant el perfil de color de prova" + +#: plug-ins/file-jpeg/jpeg.c:236 msgid "Su_bsampling" msgstr "Su_bmostra" -#: plug-ins/file-jpeg/jpeg.c:251 +#: plug-ins/file-jpeg/jpeg.c:237 +#, fuzzy +msgid "" +"Sub-sampling type { 0 == 4:2:0 (chroma quartered), 1 == 4:2:2 (chroma halved" +" horizontally), 2 == 4:4:4 (best quality), 3 == 4:4:0 (chroma halved " +"vertically)" +msgstr "" +"Submostreig de tipus { 0 == 4:2:0 (croma esquarterat), 1 == 4:2:2 (croma a " +"la meitat horitzontalment), 2 == 4:4:4 (millor qualitat), 3 == 4:4:0 (croma " +"a la meitat verticalment)" + +#: plug-ins/file-jpeg/jpeg.c:247 +#, fuzzy +#| msgid "Create line" +msgid "Baseline" +msgstr "Crea una línia" + +#: plug-ins/file-jpeg/jpeg.c:248 +#, fuzzy +msgid "" +"Force creation of a baseline JPEG (non-baseline JPEGs can't be read by all " +"decoders)" +msgstr "" +"Força la creació d'un JPEG de línia base (els JPEG no de línia base no poden" +" ser llegits per tots els descodificadors)" + +#: plug-ins/file-jpeg/jpeg.c:254 msgid "Inter_val (MCU rows):" msgstr "_Interval (files MCU):" -#: plug-ins/file-jpeg/jpeg.c:258 +#: plug-ins/file-jpeg/jpeg.c:255 +#, fuzzy +msgid "Interval of restart markers (in MCU rows, 0 = no restart markers)" +msgstr "" +"Interval de reinici de marcadors (en files MCU, 0 = sense marcadors de " +"reinici)" + +#: plug-ins/file-jpeg/jpeg.c:261 msgid "_DCT method" msgstr "Mètode _DCT" -#: plug-ins/file-jpeg/jpeg.c:296 +#: plug-ins/file-jpeg/jpeg.c:262 +#, fuzzy +msgid "DCT method to use { INTEGER (0), FIXED (1), FLOAT (2) }" +msgstr "Mètode DCT per utilitzar { INTEGER (0), FIX (1), FLOAT (2) }" + +#: plug-ins/file-jpeg/jpeg.c:270 +#, fuzzy +msgid "_Use quality settings from original image" +msgstr "Utilitza els paràmetres de qualitat de la imatge original" + +#: plug-ins/file-jpeg/jpeg.c:271 +#, fuzzy +msgid "" +"If the original image was loaded from a JPEG file using non-standard quality" +" settings (quantization tables), enable this option to get almost the same " +"quality and file size." +msgstr "" +"Si la imatge original s'ha carregat des d'un fitxer JPEG utilitzant " +"paràmetres de qualitat no estàndard (taules dequantització), habiliteu " +"aquesta opció per a obtenir gairebé la mateixa qualitat i mida del fitxer." + +#: plug-ins/file-jpeg/jpeg.c:293 +#, fuzzy +msgid "Sho_w preview in image window" +msgstr "Mostra la vista prèvia a la finestra de la imatge" + +#: plug-ins/file-jpeg/jpeg.c:294 +#, fuzzy +msgid "Creates a temporary layer with an export preview" +msgstr "Crea una capa temporal amb una vista prèvia d'exportació" + +#: plug-ins/file-jpeg/jpeg.c:298 +#, fuzzy +#| msgid "user aborted encoding" +msgid "Use _arithmetic coding" +msgstr "codificació d'usuari avortada" + +#: plug-ins/file-jpeg/jpeg.c:299 msgid "Older software may have trouble opening arithmetic-coded images" msgstr "" "El programari més antic pot tenir problemes per a obrir les imatges " "codificades aritmètiques" -#: plug-ins/file-jpeg/jpeg.c:301 +#: plug-ins/file-jpeg/jpeg.c:304 msgid "Use restart mar_kers" msgstr "Utilitza marcadors de re_inici" -#: plug-ins/file-jpeg/jpeg.c:490 +#: plug-ins/file-jpeg/jpeg.c:476 msgid "JPEG format does not support multiple layers." msgstr "El format JPEG no admet múltiples capes." @@ -8575,7 +9786,7 @@ msgstr "" "S'han desat les dades de l'espai de color del Duotone\n" "i es pot tornar a aplicar en exportar." -#: plug-ins/file-psd/psd-load.c:3572 plug-ins/file-psd/psd-save.c:2662 +#: plug-ins/file-psd/psd-load.c:3572 plug-ins/file-psd/psd-save.c:2665 msgid "Compatibility Notice" msgstr "Avís de compatibilitat" @@ -8614,7 +9825,7 @@ msgstr "" msgid "Export Image as PSD" msgstr "Exporta la imatge com a PSD" -#: plug-ins/file-psd/psd-save.c:2493 +#: plug-ins/file-psd/psd-save.c:2494 msgid "" "Duotone color space information from the original\n" "imported image will be used." @@ -8622,7 +9833,7 @@ msgstr "" "S'utilitzarà la informació de l'espai de color\n" "Duotone de la imatge original importada." -#: plug-ins/file-psd/psd-save.c:2561 +#: plug-ins/file-psd/psd-save.c:2563 msgid "" "PSD files can store up to 998 paths. \n" "The rest will be discarded." @@ -8630,7 +9841,7 @@ msgstr "" "Els fitxers PSD poden emmagatzemar fins a 998 camins. \n" "La resta es descartarà." -#: plug-ins/file-psd/psd-save.c:2663 +#: plug-ins/file-psd/psd-save.c:2666 msgid "" "Legacy layer modes have been reported to have better compatibility with " "Photoshop. If you encounter display issues, consider switching to those " @@ -8650,27 +9861,27 @@ msgstr "" msgid "Unexpected end of file" msgstr "El fitxer acaba de forma inesperada" -#: plug-ins/file-psd/psd.c:131 plug-ins/file-psd/psd.c:211 +#: plug-ins/file-psd/psd.c:136 plug-ins/file-psd/psd.c:216 msgid "Photoshop image" msgstr "Imatge del Photoshop" -#: plug-ins/file-psd/psd.c:160 +#: plug-ins/file-psd/psd.c:165 msgid "Photoshop image (merged)" msgstr "Imatge del Photoshop (fusionada)" -#: plug-ins/file-psd/psd.c:234 +#: plug-ins/file-psd/psd.c:239 msgid "Assign a Clipping _Path" msgstr "_Assigna un camí de retall" -#: plug-ins/file-psd/psd.c:235 +#: plug-ins/file-psd/psd.c:240 msgid "Select a path to be the clipping path" msgstr "Seleccioneu un camí per a ser el camí de retall" -#: plug-ins/file-psd/psd.c:241 +#: plug-ins/file-psd/psd.c:246 msgid "Clipping Path _Name" msgstr "_Nom del camí de retall" -#: plug-ins/file-psd/psd.c:242 +#: plug-ins/file-psd/psd.c:247 msgid "" "Clipping path name\n" "(ignored if no clipping path)" @@ -8678,11 +9889,11 @@ msgstr "" "Nom del camí de retall\n" "(s'ignora si no hi ha cap camí de retall)" -#: plug-ins/file-psd/psd.c:248 +#: plug-ins/file-psd/psd.c:253 msgid "Path _Flatness" msgstr "_Planor del camí" -#: plug-ins/file-psd/psd.c:249 +#: plug-ins/file-psd/psd.c:254 msgid "" "Clipping path flatness in device pixels\n" "(ignored if no clipping path)" @@ -8690,19 +9901,19 @@ msgstr "" "Aplanat del camí retallat en píxels del dispositiu\n" "(s'ignora si no hi ha cap camí de retall)" -#: plug-ins/file-psd/psd.c:255 +#: plug-ins/file-psd/psd.c:260 msgid "Export as _CMYK" msgstr "Exporta com a _CMYK" -#: plug-ins/file-psd/psd.c:256 +#: plug-ins/file-psd/psd.c:261 msgid "Export a CMYK PSD image using the soft-proofing color profile" msgstr "Exporta una imatge PSD CMYK usant el perfil de color de prova" -#: plug-ins/file-psd/psd.c:261 +#: plug-ins/file-psd/psd.c:266 msgid "Export as _Duotone" msgstr "_Exporta com a Duotone" -#: plug-ins/file-psd/psd.c:262 +#: plug-ins/file-psd/psd.c:267 msgid "" "Export as a Duotone PSD file if Duotone color space information was attached" " to the image when originally imported." @@ -8710,15 +9921,15 @@ msgstr "" "Exporta com a fitxer PSD Duotone si s'ha adjuntat informació de l'espai de " "color Duotone a la imatge quan s'importava originalment." -#: plug-ins/file-psd/psd.c:361 +#: plug-ins/file-psd/psd.c:367 msgid "Import PSD" msgstr "Importa d'un PSD" -#: plug-ins/file-psd/psd.c:560 +#: plug-ins/file-psd/psd.c:538 msgid "Import PSD metadata" msgstr "Importa les metadades PSD" -#: plug-ins/file-psd/psd.c:564 +#: plug-ins/file-psd/psd.c:542 msgid "Metadata fill layers are not supported and will be dropped." msgstr "Les capes d'emplenat de metadades no estan admeses i es descartaran." @@ -8822,7 +10033,7 @@ msgstr "Sigma X3F en brut" msgid "Raw Arriflex ARI" msgstr "Arriflex ARI en brut" -#: plug-ins/file-raw/file-raw-placeholder.c:172 +#: plug-ins/file-raw/file-raw-placeholder.c:176 #, c-format msgid "" "There is no RAW loader installed to open '%s' files.\n" @@ -8841,84 +10052,180 @@ msgstr "" "\n" "Instal·leu un d'ells per a carregar fitxers RAW." -#: plug-ins/file-sgi/sgi.c:144 plug-ins/file-sgi/sgi.c:171 +#: plug-ins/file-sgi/sgi.c:147 plug-ins/file-sgi/sgi.c:174 msgid "Silicon Graphics IRIS image" msgstr "Imatge IRIS de Silicon Graphics" -#: plug-ins/file-sgi/sgi.c:147 +#: plug-ins/file-sgi/sgi.c:150 msgid "Loads files in SGI image file format" msgstr "Carrega fitxers en el format de fitxer SGI" -#: plug-ins/file-sgi/sgi.c:148 +#: plug-ins/file-sgi/sgi.c:151 msgid "This plug-in loads SGI image files." msgstr "Aquest connector carrega fitxers d'imatge SGI." -#: plug-ins/file-sgi/sgi.c:177 +#: plug-ins/file-sgi/sgi.c:180 msgid "Exports files in SGI image file format" msgstr "Exporta fitxers en format de fitxer d'imatge SGI" -#: plug-ins/file-sgi/sgi.c:178 +#: plug-ins/file-sgi/sgi.c:181 msgid "This plug-in exports SGI image files." msgstr "Aquest connector exporta fitxers d'imatge SGI." -#: plug-ins/file-sgi/sgi.c:191 +#: plug-ins/file-sgi/sgi.c:194 msgid "Compression _type" msgstr "_Tipus de compressió" -#: plug-ins/file-sgi/sgi.c:192 +#: plug-ins/file-sgi/sgi.c:195 msgid "Compression level (0 = none, 1 = RLE, 2 = ARLE)" msgstr "Nivell de compressió (0 = cap, 1 = RLE, 2 = ARLE)" -#: plug-ins/file-sgi/sgi.c:274 +#: plug-ins/file-sgi/sgi.c:276 msgid "SGI format does not support multiple layers." msgstr "El format SGI no admet múltiples capes." -#: plug-ins/file-sgi/sgi.c:342 +#: plug-ins/file-sgi/sgi.c:341 #, c-format msgid "Could not open '%s' for reading." msgstr "No s'ha pogut obrir «%s» per a escriure-hi." -#: plug-ins/file-sgi/sgi.c:358 +#: plug-ins/file-sgi/sgi.c:357 #, c-format msgid "Invalid width: %hu" msgstr "L'amplada no és vàlida: %hu" -#: plug-ins/file-sgi/sgi.c:366 +#: plug-ins/file-sgi/sgi.c:365 #, c-format msgid "Invalid height: %hu" msgstr "L'alçada no és vàlida: %hu" -#: plug-ins/file-sgi/sgi.c:374 +#: plug-ins/file-sgi/sgi.c:373 #, c-format msgid "Invalid number of channels: %hu" msgstr "El nombre de canals no és vàlid: %hu" -#: plug-ins/file-sgi/sgi.c:655 +#: plug-ins/file-sgi/sgi.c:654 #, c-format msgid "Could not open '%s' for writing." msgstr "No s'ha pogut obrir el fitxer «%s» per a escriure-hi." -#: plug-ins/file-sgi/sgi.c:745 +#: plug-ins/file-sgi/sgi.c:744 msgid "No compression" msgstr "Sense compressió" -#: plug-ins/file-sgi/sgi.c:747 +#: plug-ins/file-sgi/sgi.c:746 msgid "RLE compression" msgstr "Compressió RLE" -#: plug-ins/file-sgi/sgi.c:749 +#: plug-ins/file-sgi/sgi.c:748 msgid "Aggressive RLE (not supported by SGI)" msgstr "RLE agressiu (no funciona amb SGI)" -#: plug-ins/file-tiff/file-tiff.c:159 plug-ins/file-tiff/file-tiff.c:188 +#: plug-ins/file-tiff/file-tiff.c:162 plug-ins/file-tiff/file-tiff.c:191 msgid "TIFF or BigTIFF image" msgstr "Imatge TIFF o BigTIFF" -#: plug-ins/file-tiff/file-tiff.c:204 +#: plug-ins/file-tiff/file-tiff.c:207 msgid "TIFF" msgstr "TIFF" -#: plug-ins/file-tiff/file-tiff.c:459 +#: plug-ins/file-tiff/file-tiff.c:214 +#, fuzzy +#| msgid "Export image in the QOI file format" +msgid "Export in _BigTIFF variant file format" +msgstr "Exporta imatge en el format de fitxer QOI" + +#: plug-ins/file-tiff/file-tiff.c:215 +#, fuzzy +msgid "" +"The BigTIFF variant file format uses 64-bit offsets, hence supporting over " +"4GiB files and bigger" +msgstr "" +"El format de fitxer de variant BigTIFF utilitza desplaçaments de 64 bits, " +"per tant admet més de fitxers 4GiB i més gran" + +#: plug-ins/file-tiff/file-tiff.c:221 +#, fuzzy +#| msgid "_Compression:" +msgid "Co_mpression" +msgstr "_Compressió:" + +#: plug-ins/file-tiff/file-tiff.c:222 +#, fuzzy +#| msgid "Compression _type" +msgid "Compression type" +msgstr "_Tipus de compressió" + +#: plug-ins/file-tiff/file-tiff.c:224 +msgid "LZW" +msgstr "LZW" + +#: plug-ins/file-tiff/file-tiff.c:225 +msgid "Pack Bits" +msgstr "Paquet de bits" + +#: plug-ins/file-tiff/file-tiff.c:226 +msgid "Deflate" +msgstr "Desinfla" + +#: plug-ins/file-tiff/file-tiff.c:228 +msgid "CCITT Group 3 fax" +msgstr "Fax CCITT grup 3" + +#: plug-ins/file-tiff/file-tiff.c:229 +msgid "CCITT Group 4 fax" +msgstr "Fax CCITT grup 4" + +#: plug-ins/file-tiff/file-tiff.c:235 +#, fuzzy +msgid "" +"Keep the color data masked by an alpha channel intact (do not store " +"premultiplied components)" +msgstr "" +"Mantén intactes les dades de color emmascarades per un canal alfa (no " +"emmagatzemi components premultiplicats)" + +#: plug-ins/file-tiff/file-tiff.c:242 +#, 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 "Exporta una imatge PSD CMYK usant el perfil de color de prova" + +#: plug-ins/file-tiff/file-tiff.c:247 +#, fuzzy +#| msgid "Save _as" +msgid "Save La_yers" +msgstr "_Anomena i desa" + +#: plug-ins/file-tiff/file-tiff.c:248 +#, fuzzy +#| msgid "Save _as" +msgid "Save Layers" +msgstr "_Anomena i desa" + +#: plug-ins/file-tiff/file-tiff.c:253 +#, fuzzy +#| msgid "Curl Layer" +msgid "Crop L_ayers" +msgstr "Capa del rínxol" + +#: plug-ins/file-tiff/file-tiff.c:254 +#, fuzzy +#| msgid "Curl Layer" +msgid "Crop Layers" +msgstr "Capa del rínxol" + +#: plug-ins/file-tiff/file-tiff.c:259 +#, fuzzy +msgid "Save _GeoTIFF data" +msgstr "Desa les dades GeoTIFF" + +#: plug-ins/file-tiff/file-tiff.c:260 +#, fuzzy +msgid "Save GeoTIFF data" +msgstr "Desa les dades GeoTIFF" + +#: plug-ins/file-tiff/file-tiff.c:446 msgid "\"Save layers\" option not set while trying to export multiple layers." msgstr "" "L'opció «Desa les capes» no està establerta en intentar exportar múltiples " @@ -9113,8 +10420,8 @@ msgid "No data could be read from TIFF '%s'. The file is probably corrupted." msgstr "" "No es poden llegir dades del TIFF «%s». El fitxer probablement està malmès." -#: plug-ins/file-tiff/file-tiff-load.c:1760 -#: plug-ins/file-tiff/file-tiff-load.c:1802 +#: plug-ins/file-tiff/file-tiff-load.c:1761 +#: plug-ins/file-tiff/file-tiff-load.c:1804 #, c-format msgid "" "Error trying to open temporary %s file '%s' for tiff metadata loading: %s" @@ -9122,39 +10429,39 @@ msgstr "" "S'ha produït un error en intentar obrir el fitxer %s temporal «%s» per a " "carregar les metadades de les diferències: %s" -#: plug-ins/file-tiff/file-tiff-load.c:1878 +#: plug-ins/file-tiff/file-tiff-load.c:1880 #, c-format msgid "%s: Unsupported image format, no RGBA loader available" msgstr "" "%s: el format d'imatge no és compatible, no hi ha cap carregador RGBA " "disponible" -#: plug-ins/file-tiff/file-tiff-load.c:1993 -#: plug-ins/file-tiff/file-tiff-load.c:2190 +#: plug-ins/file-tiff/file-tiff-load.c:1995 +#: plug-ins/file-tiff/file-tiff-load.c:2192 #, c-format msgid "Reading tile failed. Image may be corrupt at line %d." msgstr "" "Ha fallat la lectura de la fitxa. La imatge pot estar malmesa a la línia %d." #. Error reading scanline, stop loading -#: plug-ins/file-tiff/file-tiff-load.c:2002 -#: plug-ins/file-tiff/file-tiff-load.c:2199 +#: plug-ins/file-tiff/file-tiff-load.c:2004 +#: plug-ins/file-tiff/file-tiff-load.c:2201 #, c-format msgid "Reading scanline failed. Image may be corrupt at line %d." msgstr "" "No s'ha pogut llegir l'escanejat per files. La imatge pot estar malmesa a la" " línia %d." -#: plug-ins/file-tiff/file-tiff-load.c:2549 +#: plug-ins/file-tiff/file-tiff-load.c:2551 msgid "Import from TIFF" msgstr "Importa des d'un TIFF" -#: plug-ins/file-tiff/file-tiff-load.c:2554 -#: plug-ins/metadata/metadata-editor.c:5307 +#: plug-ins/file-tiff/file-tiff-load.c:2556 +#: plug-ins/metadata/metadata-editor.c:5533 msgid "_Import" msgstr "_Importa" -#: plug-ins/file-tiff/file-tiff-load.c:2570 +#: plug-ins/file-tiff/file-tiff-load.c:2572 msgid "_Show reduced images" msgstr "_Mostra la imatge reduïda" @@ -9162,23 +10469,23 @@ msgstr "_Mostra la imatge reduïda" #. 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:2604 +#: plug-ins/file-tiff/file-tiff-load.c:2606 msgid "_Keep empty space around imported layers" msgstr "_Manté l'espai buit al voltant de les capes importades" -#: plug-ins/file-tiff/file-tiff-load.c:2621 +#: plug-ins/file-tiff/file-tiff-load.c:2623 msgid "Process extra channel as:" msgstr "Processa un canal addicional com:" -#: plug-ins/file-tiff/file-tiff-load.c:2624 +#: plug-ins/file-tiff/file-tiff-load.c:2626 msgid "_Non-premultiplied alpha" msgstr "Alfa _no premultiplicada" -#: plug-ins/file-tiff/file-tiff-load.c:2625 +#: plug-ins/file-tiff/file-tiff-load.c:2627 msgid "Pre_multiplied alpha" msgstr "Alfa pre_multiplicada" -#: plug-ins/file-tiff/file-tiff-load.c:2626 +#: plug-ins/file-tiff/file-tiff-load.c:2628 msgid "Channe_l" msgstr "Cana_l" @@ -9211,7 +10518,7 @@ msgstr "No s'ha pogut escriure la línia escanejada a la fila %d" msgid "Writing pages with different bit depth is strange." msgstr "És estrany escriure pàgines amb una profunditat de bits diferent." -#: plug-ins/file-tiff/file-tiff-save.c:1310 +#: plug-ins/file-tiff/file-tiff-save.c:1273 msgid "" "Warning: maximum TIFF file size exceeded. Retry as BigTIFF or with a " "different compression algorithm, or cancel." @@ -9219,27 +10526,7 @@ msgstr "" "Avís: s'ha excedit la mida màxima del fitxer TIFF. Reintenteu com a BigTIFF " "o amb un algoritme de compressió diferent, o cancel·leu." -#: plug-ins/file-tiff/file-tiff-save.c:1323 -msgid "LZW" -msgstr "LZW" - -#: plug-ins/file-tiff/file-tiff-save.c:1324 -msgid "Pack Bits" -msgstr "Paquet de bits" - -#: plug-ins/file-tiff/file-tiff-save.c:1325 -msgid "Deflate" -msgstr "Desinfla" - -#: plug-ins/file-tiff/file-tiff-save.c:1327 -msgid "CCITT Group 3 fax" -msgstr "Fax CCITT grup 3" - -#: plug-ins/file-tiff/file-tiff-save.c:1328 -msgid "CCITT Group 4 fax" -msgstr "Fax CCITT grup 4" - -#: plug-ins/file-tiff/file-tiff-save.c:1386 +#: plug-ins/file-tiff/file-tiff-save.c:1332 msgid "" "The assigned soft-proofing profile is not a CMYK profile.\n" "This profile will not be included in the exported image." @@ -9247,19 +10534,19 @@ msgstr "" "El perfil de prova suau assignat no és un perfil CMYK.\n" "Aquest perfil no s'inclourà a la imatge exportada." -#: plug-ins/file-webp/file-webp.c:121 plug-ins/file-webp/file-webp.c:148 +#: plug-ins/file-webp/file-webp.c:124 plug-ins/file-webp/file-webp.c:151 msgid "WebP image" msgstr "Imatge WebP" -#: plug-ins/file-webp/file-webp.c:161 +#: plug-ins/file-webp/file-webp.c:164 msgid "WebP" msgstr "WebP" -#: plug-ins/file-webp/file-webp.c:168 +#: plug-ins/file-webp/file-webp.c:171 msgid "Source _type" msgstr "_Tipus de font" -#: plug-ins/file-webp/file-webp.c:169 +#: plug-ins/file-webp/file-webp.c:172 msgid "" "WebP encoder preset (Default=0, Picture=1, Photo=2, Drawing=3, Icon=4, " "Text=5)" @@ -9267,65 +10554,65 @@ msgstr "" "Preconfiguració del codificador WebP (Per defecte=0, Imatge=1, Foto=2, " "Dibuix=3, Icon=4, Text=5)" -#: plug-ins/file-webp/file-webp.c:176 +#: plug-ins/file-webp/file-webp.c:179 msgid "Use lossless encoding" msgstr "Utilitza la codificació sense pèrdues" -#: plug-ins/file-webp/file-webp.c:181 +#: plug-ins/file-webp/file-webp.c:184 msgid "Image _quality" msgstr "_Qualitat de la imatge" -#: plug-ins/file-webp/file-webp.c:182 +#: plug-ins/file-webp/file-webp.c:185 msgid "Quality of the image" msgstr "Qualitat de la imatge" -#: plug-ins/file-webp/file-webp.c:187 +#: plug-ins/file-webp/file-webp.c:190 msgid "Alpha q_uality" msgstr "_Qualitat alfa" -#: plug-ins/file-webp/file-webp.c:188 +#: plug-ins/file-webp/file-webp.c:191 msgid "Quality of the image's alpha channel" msgstr "Qualitat del canal alfa de la imatge" -#: plug-ins/file-webp/file-webp.c:193 +#: plug-ins/file-webp/file-webp.c:196 msgid "Use Sharp YU_V" msgstr "Utilitza _YUV nítida" #. TRANSLATORS: \xe2\x86\x92 is a Unicode #. * "Rightward Arrow" in UTF-8 encoding. -#: plug-ins/file-webp/file-webp.c:197 +#: plug-ins/file-webp/file-webp.c:200 msgid "Use sharper (but slower) RGB→YUV conversion" msgstr "Usa una conversió RGB→YUV més nítida (però més lenta)" -#: plug-ins/file-webp/file-webp.c:202 +#: plug-ins/file-webp/file-webp.c:205 msgid "Loop _forever" msgstr "_Bucle sense fi" -#: plug-ins/file-webp/file-webp.c:203 +#: plug-ins/file-webp/file-webp.c:206 msgid "Loop animation infinitely" msgstr "Animació en bucle infinitament" -#: plug-ins/file-webp/file-webp.c:208 +#: plug-ins/file-webp/file-webp.c:211 msgid "_Minimize output size (slower)" msgstr "_Minimitza la mida de sortida (més lent)" -#: plug-ins/file-webp/file-webp.c:209 +#: plug-ins/file-webp/file-webp.c:212 msgid "Minimize output file size" msgstr "Minimitza la mida del fitxer sortida" -#: plug-ins/file-webp/file-webp.c:214 +#: plug-ins/file-webp/file-webp.c:217 msgid "Max distance between _key-frames" msgstr "_Distància màxima entre els fotogrames clau" -#: plug-ins/file-webp/file-webp.c:215 +#: plug-ins/file-webp/file-webp.c:218 msgid "Maximum distance between keyframes" msgstr "Distància màxima entre els fotogrames clau" -#: plug-ins/file-webp/file-webp.c:220 +#: plug-ins/file-webp/file-webp.c:223 msgid "_Default delay between frames" msgstr "_Retard per defecte entre fotogrames" -#: plug-ins/file-webp/file-webp.c:221 +#: plug-ins/file-webp/file-webp.c:224 msgid "" "Default delay (in milliseconds) to use when timestamps for frames are not " "available or forced." @@ -9333,19 +10620,19 @@ msgstr "" "Retard predeterminat (en mil·lisegons) a usar quan les marques horàries per " "als fotogrames no estan disponibles o són forçades." -#: plug-ins/file-webp/file-webp.c:227 +#: plug-ins/file-webp/file-webp.c:230 msgid "Use default dela_y for all frames" msgstr "_Usa el retard per defecte per a tots els fotogrames" -#: plug-ins/file-webp/file-webp.c:228 +#: plug-ins/file-webp/file-webp.c:231 msgid "Force default delay on all frames" msgstr "Força el retard per defecte a tots els fotogrames" -#: plug-ins/file-webp/file-webp.c:233 +#: plug-ins/file-webp/file-webp.c:236 msgid "Save a_nimation" msgstr "D_esa l'animació" -#: plug-ins/file-webp/file-webp.c:234 +#: plug-ins/file-webp/file-webp.c:237 msgid "Use layers for animation" msgstr "Utilitza capes per a l'animació" @@ -9365,7 +10652,7 @@ msgstr "(tots els fotogrames són fotogrames clau)" #. Create the combobox containing the presets #: plug-ins/file-webp/file-webp-dialog.c:80 -#: plug-ins/gradient-flare/gradient-flare.c:2623 +#: plug-ins/gradient-flare/gradient-flare.c:2599 msgid "Default" msgstr "Per defecte" @@ -9389,7 +10676,7 @@ msgstr "Icona" msgid "Text" msgstr "Text" -#: plug-ins/file-webp/file-webp-load.c:107 +#: plug-ins/file-webp/file-webp-load.c:106 #, c-format msgid "Invalid WebP file '%s'" msgstr "El fitxer WebP no és vàlid «%s»" @@ -9397,22 +10684,22 @@ msgstr "El fitxer WebP no és vàlid «%s»" # * pika_filename_to_utf8 () and g_strerror () return temporary strings # * that need not and should not be freed. So this call is OK. # * -#: plug-ins/file-webp/file-webp-load.c:202 +#: plug-ins/file-webp/file-webp-load.c:195 #, c-format msgid "Failed to decode animated WebP file '%s'" msgstr "No s'ha pogut descodificar el fitxer WebP animat «%s»" -#: plug-ins/file-webp/file-webp-load.c:210 +#: plug-ins/file-webp/file-webp-load.c:203 #, c-format msgid "Failed to decode animated WebP information from '%s'" msgstr "No s'ha pogut descodificar la informació WebP animada de «%s»" -#: plug-ins/file-webp/file-webp-load.c:229 +#: plug-ins/file-webp/file-webp-load.c:222 #, c-format msgid "Failed to decode animated WebP frame from '%s'" msgstr "No s'ha pogut descodificar el fotograma WebP animat de «%s»" -#: plug-ins/file-webp/file-webp-load.c:234 +#: plug-ins/file-webp/file-webp-load.c:227 #, c-format msgid "Frame %d (%dms)" msgstr "Fotograma %d (%dms)" @@ -9524,15 +10811,15 @@ msgstr "Igual" msgid "Random" msgstr "Aleatori" -#: plug-ins/flame/flame.c:810 plug-ins/lighting/lighting-ui.c:855 +#: plug-ins/flame/flame.c:810 plug-ins/lighting/lighting-main.c:163 msgid "Linear" msgstr "Lineal" -#: plug-ins/flame/flame.c:811 plug-ins/lighting/lighting-ui.c:857 +#: plug-ins/flame/flame.c:811 plug-ins/lighting/lighting-main.c:165 msgid "Sinusoidal" msgstr "Sinusoidal" -#: plug-ins/flame/flame.c:812 plug-ins/lighting/lighting-ui.c:858 +#: plug-ins/flame/flame.c:812 plug-ins/lighting/lighting-main.c:166 msgid "Spherical" msgstr "Esfèric" @@ -9576,8 +10863,7 @@ msgstr "Diamant" msgid "Ex" msgstr "Ex" -#: plug-ins/flame/flame.c:824 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:842 +#: plug-ins/flame/flame.c:824 plug-ins/fractal-explorer/fractal-explorer.c:260 msgid "Julia" msgstr "Julia" @@ -9601,10 +10887,9 @@ msgstr "Exponencial" msgid "Power" msgstr "Potència" -#: plug-ins/flame/flame.c:830 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:991 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1032 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1073 +#: plug-ins/flame/flame.c:830 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 "Cosinus" @@ -9625,7 +10910,7 @@ msgstr "Ull de peix" msgid "Bubble" msgstr "Bombolla" -#: plug-ins/flame/flame.c:835 plug-ins/map-object/map-object-ui.c:465 +#: plug-ins/flame/flame.c:835 plug-ins/map-object/map-object-main.c:140 msgid "Cylinder" msgstr "Cilindre" @@ -9655,7 +10940,7 @@ msgstr "Flama" #: plug-ins/flame/flame.c:1096 plug-ins/pikaressionist/orientation.c:190 #: plug-ins/pikaressionist/size.c:199 -#: plug-ins/gradient-flare/gradient-flare.c:3082 +#: plug-ins/gradient-flare/gradient-flare.c:3046 msgid "_Edit" msgstr "_Edita" @@ -9699,19 +10984,17 @@ msgstr "Càmer_a" msgid "_Zoom:" msgstr "_Ampliació/Reducció:" -#: plug-ins/flame/flame.c:1296 plug-ins/gradient-flare/gradient-flare.c:2890 -#: plug-ins/lighting/lighting-ui.c:491 +#: 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:2894 -#: plug-ins/lighting/lighting-ui.c:508 +#: 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:541 +#: 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:998 +#: plug-ins/gradient-flare/gradient-flare.c:988 #, c-format msgid "" "No %s in pikarc:\n" @@ -9724,329 +11007,385 @@ msgstr "" "(%s «%s»)\n" "al fitxer %s." -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:557 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:633 msgid "Fractal Explorer" msgstr "Explorador de fractals" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:630 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:683 msgid "Re_altime preview" msgstr "Previsualització en temps re_al" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:638 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:691 msgid "If enabled the preview will be redrawn automatically" msgstr "" "Si es marca l'opció, la previsualització es redibuixarà automàticament" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:641 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:694 msgid "R_edraw preview" msgstr "R_edibuixa la previsualització" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:662 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:715 msgid "Zoom _In" msgstr "Ampl_ia" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:670 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:723 msgid "Zoom _Out" msgstr "_Redueix" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:687 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:740 msgid "Undo last zoom change" msgstr "Desfà la darrera ampliació/reducció" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:693 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:746 msgid "_Redo" msgstr "_Refés" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:697 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:750 msgid "Redo last zoom change" msgstr "Refà la darrera ampliació/reducció" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:714 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:758 msgid "_Parameters" msgstr "_Paràmetres" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:717 -msgid "Fractal Parameters" -msgstr "Paràmetres de la fractal" +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:760 +#, fuzzy +#| msgid "Colors" +msgid "_Colors" +msgstr "Colors" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:726 -#: plug-ins/map-object/map-object-ui.c:1078 -msgid "Left:" -msgstr "Esquerra:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:735 -#: plug-ins/map-object/map-object-ui.c:1078 -msgid "Right:" -msgstr "Dreta:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:744 -#: plug-ins/map-object/map-object-ui.c:1077 -msgid "Top:" -msgstr "Part superior:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:753 -#: plug-ins/map-object/map-object-ui.c:1077 -msgid "Bottom:" -msgstr "Part inferior:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:764 -msgid "" -"The higher the number of iterations, the more details will be calculated" -msgstr "Com més alt sigui el nombre d'iteracions, més detalls es calcularan" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:774 -msgid "CX:" -msgstr "CX:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:777 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:788 -msgid "Changes aspect of fractal" -msgstr "Canvia l'aspecte de la fractal" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:785 -msgid "CY:" -msgstr "CY:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:807 -msgid "Load a fractal from file" -msgstr "Carrega una fractal d'un fitxer" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:815 -msgid "Reset parameters to default values" -msgstr "Restableix als paràmetres per defecte" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:824 -msgid "Save active fractal to file" -msgstr "Desa la fractal activa al fitxer" - -#. Fractal type toggle box -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:827 -msgid "Fractal Type" -msgstr "Tipus de fractal" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:840 -msgid "Mandelbrot" -msgstr "Mandelbrot" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:844 -msgid "Barnsley 1" -msgstr "Barnsley 1" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:846 -msgid "Barnsley 2" -msgstr "Barnsley 2" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:848 -msgid "Barnsley 3" -msgstr "Barnsley 3" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:850 -msgid "Spider" -msgstr "Aranya" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:852 -msgid "Man'o'war" -msgstr "Guerrer" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:854 -msgid "Lambda" -msgstr "Lambda" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:856 -msgid "Sierpinski" -msgstr "Sierpinski" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:902 -msgid "Co_lors" -msgstr "Co_lors" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:915 -msgid "Number of colors:" -msgstr "Nombre de colors:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:917 -msgid "Change the number of colors in the mapping" -msgstr "Canvia el nombre de colors en el mapatge" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:926 -msgid "Use loglog smoothing" -msgstr "Utilitza el suavitzat loglog" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:932 -msgid "Use log log smoothing to eliminate \"banding\" in the result" -msgstr "" -"Utilitza el suavitzat log log per a eliminar «les bandes» del resultat" - -#. Color Density frame -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:937 -msgid "Color Density" -msgstr "Densitat del color" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:946 -msgid "Red:" -msgstr "Vermell:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:948 -msgid "Change the intensity of the red channel" -msgstr "Canvia la intensitat del canal vermell" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:956 -msgid "Green:" -msgstr "Verd:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:958 -msgid "Change the intensity of the green channel" -msgstr "Canvia la intensitat del canal verd" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:966 -msgid "Blue:" -msgstr "Blau:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:968 -msgid "Change the intensity of the blue channel" -msgstr "Canvia la intensitat del canal blau" - -#. Color Function frame -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:976 -msgid "Color Function" -msgstr "Funció del color" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:989 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1030 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1071 -msgid "Sine" -msgstr "Sinus" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:993 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1034 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1075 -msgctxt "color-function" -msgid "None" -msgstr "Cap" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:998 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1039 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1080 -msgid "Use sine-function for this color component" -msgstr "Utilitza la funció sinus en l'element d'aquest color" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1001 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1042 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1083 -msgid "Use cosine-function for this color component" -msgstr "Utilitza la funció cosinus en l'element d'aquest color" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1004 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1045 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1086 -msgid "" -"Use linear mapping instead of any trigonometrical function for this color " -"channel" -msgstr "" -"Utilitza un mapatge lineal en comptes d'una funció trigonomètrica en el " -"canal d'aquest color" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1013 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1054 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1095 -msgid "Inversion" -msgstr "Inversió" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1021 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1062 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1103 -msgid "" -"If you enable this option higher color values will be swapped with lower " -"ones and vice versa" -msgstr "" -"Si es marca l'opció, els colors de valors més alts s'intercanviaran amb els " -"de valors més baixos i viceversa" - -#. Colormode toggle box -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1108 -msgid "Color Mode" -msgstr "Mode de color" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1117 -msgid "As specified above" -msgstr "Com s'especifica a sobre" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1129 -msgid "" -"Create a color-map with the options you specified above (color " -"density/function). The result is visible in the preview image" -msgstr "" -"Crea un mapa de color amb les opcions que heu especificat abans " -"(densitat/funció del color). El resultat es pot veure en la previsualització" -" d'imatge" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1139 -msgid "Apply active gradient to final image" -msgstr "Aplica el degradat actual a la imatge final" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1151 -msgid "Create a color-map using a gradient from the gradient editor" -msgstr "Crea un mapa de color utilitzant un degradat de l'editor de degradats" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1162 -msgid "FractalExplorer Gradient" -msgstr "Degradat de l'explorador de fractals" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1192 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:762 msgid "_Fractals" msgstr "_Fractals" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1552 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:780 +msgid "Fractal Parameters" +msgstr "Paràmetres de la fractal" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:793 +msgid "Fractal Type" +msgstr "Tipus de fractal" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:823 +msgid "Load a fractal from file" +msgstr "Carrega una fractal d'un fitxer" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:831 +msgid "Save active fractal to file" +msgstr "Desa la fractal activa al fitxer" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:883 +msgid "Color Density" +msgstr "Densitat del color" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:897 +msgid "Color Function" +msgstr "Funció del color" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:953 +msgid "As specified above" +msgstr "Com s'especifica a sobre" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:954 +msgid "Apply active gradient to final image" +msgstr "Aplica el degradat actual a la imatge final" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:974 +msgid "FractalExplorer Gradient" +msgstr "Degradat de l'explorador de fractals" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1036 +#, fuzzy +#| msgid "_Presets" +msgid "Presets" +msgstr "Valors _predefinits" + +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1455 #, c-format msgid "Could not write '%s': %s" msgstr "No s'ha pogut escriure «%s»: %s" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1627 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1536 msgid "Load Fractal Parameters" msgstr "Carrega els paràmetres de la fractal" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1665 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1574 msgid "Save Fractal Parameters" msgstr "Desa els paràmetres de les fractals" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1863 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1772 #, c-format msgid "'%s' is not a FractalExplorer file" msgstr "El «%s» no és un fitxer explorador de fractals" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1870 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1779 #, c-format msgid "'%s' is corrupt. Line %d Option section incorrect" msgstr "«%s» és corrupte. L'opció de la línia %d és una secció incorrecta" -#: plug-ins/fractal-explorer/fractal-explorer.c:241 +#: plug-ins/fractal-explorer/fractal-explorer.c:242 msgid "_Fractal Explorer..." msgstr "Explorador de _fractals..." -#: plug-ins/fractal-explorer/fractal-explorer.c:245 +#: plug-ins/fractal-explorer/fractal-explorer.c:246 msgid "Render fractal art" msgstr "Compon la fractal artística" -#: plug-ins/fractal-explorer/fractal-explorer.c:489 +#: plug-ins/fractal-explorer/fractal-explorer.c:257 +#, fuzzy +#| msgid "Fractal Type" +msgid "Fr_actal Type" +msgstr "Tipus de fractal" + +#: plug-ins/fractal-explorer/fractal-explorer.c:258 +#, fuzzy +#| msgid "Load Fractal Parameters" +msgid "Type of Fractal Pattern" +msgstr "Carrega els paràmetres de la fractal" + +#: plug-ins/fractal-explorer/fractal-explorer.c:259 +msgid "Mandelbrot" +msgstr "Mandelbrot" + +#: plug-ins/fractal-explorer/fractal-explorer.c:261 +msgid "Barnsley 1" +msgstr "Barnsley 1" + +#: plug-ins/fractal-explorer/fractal-explorer.c:262 +msgid "Barnsley 2" +msgstr "Barnsley 2" + +#: plug-ins/fractal-explorer/fractal-explorer.c:263 +msgid "Barnsley 3" +msgstr "Barnsley 3" + +#: plug-ins/fractal-explorer/fractal-explorer.c:264 +msgid "Spider" +msgstr "Aranya" + +#: plug-ins/fractal-explorer/fractal-explorer.c:265 +#, fuzzy +msgid "Man-o-War" +msgstr "Man-o-War" + +#: plug-ins/fractal-explorer/fractal-explorer.c:266 +msgid "Lambda" +msgstr "Lambda" + +#: plug-ins/fractal-explorer/fractal-explorer.c:267 +msgid "Sierpinski" +msgstr "Sierpinski" + +#: plug-ins/fractal-explorer/fractal-explorer.c:273 +#, fuzzy +msgid "Lef_t" +msgstr "Esquerra" + +#: plug-ins/fractal-explorer/fractal-explorer.c:274 +#, fuzzy +msgid "X min fractal image delimiter" +msgstr "Delimitador d'imatge fractal X min" + +#: plug-ins/fractal-explorer/fractal-explorer.c:279 +#: plug-ins/map-object/map-object-main.c:382 +#, fuzzy +#| msgid "Hi_ghlight" +msgid "Ri_ght" +msgstr "R_essalta" + +#: plug-ins/fractal-explorer/fractal-explorer.c:280 +#, fuzzy +msgid "X max fractal image delimiter" +msgstr "Delimitador d'imatge fractal X max" + +#: plug-ins/fractal-explorer/fractal-explorer.c:285 +#: plug-ins/map-object/map-object-main.c:367 +#, fuzzy +msgid "To_p" +msgstr "A dalt" + +#: plug-ins/fractal-explorer/fractal-explorer.c:286 +#, fuzzy +msgid "Y min fractal image delimiter" +msgstr "Delimitador d'imatge 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 "Part in_ferior:" + +#: plug-ins/fractal-explorer/fractal-explorer.c:292 +#, fuzzy +msgid "Y max fractal image delimiter" +msgstr "Delimitador d'imatge fractal Y max" + +#: plug-ins/fractal-explorer/fractal-explorer.c:297 +#, fuzzy +#| msgid "Iterations:" +msgid "Iteratio_ns" +msgstr "Iteracions:" + +#: plug-ins/fractal-explorer/fractal-explorer.c:298 +#, fuzzy +#| msgid "Iterations:" +msgid "Iteration value" +msgstr "Iteracions:" + +#: plug-ins/fractal-explorer/fractal-explorer.c:303 +#, fuzzy +#| msgid "_X:" +msgid "C_X" +msgstr "_X:" + +#: plug-ins/fractal-explorer/fractal-explorer.c:304 +#, fuzzy +#| msgid "value" +msgid "cx value" +msgstr "valor" + +#: plug-ins/fractal-explorer/fractal-explorer.c:309 +#, fuzzy +#| msgid "_Y:" +msgid "C_Y" +msgstr "_Y:" + +#: plug-ins/fractal-explorer/fractal-explorer.c:310 +#, fuzzy +#| msgid "value" +msgid "cy value" +msgstr "valor" + +#: plug-ins/fractal-explorer/fractal-explorer.c:315 +#, fuzzy +#| msgid "Color Mode" +msgid "Color mode" +msgstr "Mode de color" + +#: plug-ins/fractal-explorer/fractal-explorer.c:316 +#, fuzzy +msgid "" +"0: Apply colormap as specified by the parameters below; 1: Apply active " +"gradient to final image" +msgstr "" +"0: Aplica el mapa de colors tal com s'especifica als paràmetres de sota; 1: " +"Aplica el degradat actiu a la imatge final" + +#: plug-ins/fractal-explorer/fractal-explorer.c:322 +#, fuzzy +#| msgid "Stretch" +msgid "Red stretch" +msgstr "Amplia" + +#: plug-ins/fractal-explorer/fractal-explorer.c:323 +#, fuzzy +#| msgid "JPEG smoothing factor" +msgid "Red stretching factor" +msgstr "Factor de suavitzat JPEG" + +#: plug-ins/fractal-explorer/fractal-explorer.c:328 +#, fuzzy +#| msgid "Stretch" +msgid "Green stretch" +msgstr "Amplia" + +#: plug-ins/fractal-explorer/fractal-explorer.c:329 +#, fuzzy +#| msgid "JPEG smoothing factor" +msgid "Green stretching factor" +msgstr "Factor de suavitzat JPEG" + +#: plug-ins/fractal-explorer/fractal-explorer.c:334 +#, fuzzy +#| msgid "Stretch" +msgid "Blue stretch" +msgstr "Amplia" + +#: plug-ins/fractal-explorer/fractal-explorer.c:335 +#, fuzzy +#| msgid "JPEG smoothing factor" +msgid "Blue stretching factor" +msgstr "Factor de suavitzat JPEG" + +#: plug-ins/fractal-explorer/fractal-explorer.c:340 +#, fuzzy +#| msgid "_Red:" +msgid "_Red" +msgstr "Ve_rmell:" + +#: plug-ins/fractal-explorer/fractal-explorer.c:341 +#, fuzzy +msgid "Red application mode" +msgstr "Mode d'aplicació vermell" + +#: plug-ins/fractal-explorer/fractal-explorer.c:342 +#: plug-ins/fractal-explorer/fractal-explorer.c:352 +#: plug-ins/fractal-explorer/fractal-explorer.c:362 +msgid "Sine" +msgstr "Sinus" + +#: plug-ins/fractal-explorer/fractal-explorer.c:350 +#, fuzzy +#| msgid "_Green:" +msgid "_Green" +msgstr "_Verd:" + +#: plug-ins/fractal-explorer/fractal-explorer.c:351 +#, fuzzy +#| msgid "Gradient map selection menu" +msgid "Green application mode" +msgstr "Menú de selecció del mapa degradat" + +#: plug-ins/fractal-explorer/fractal-explorer.c:360 +#, fuzzy +#| msgid "_Blue:" +msgid "_Blue" +msgstr "_Blau:" + +#: plug-ins/fractal-explorer/fractal-explorer.c:361 +#, fuzzy +msgid "Blue application mode" +msgstr "Mode d'aplicació blau" + +#: plug-ins/fractal-explorer/fractal-explorer.c:370 +#, fuzzy +#| msgid "Inversion" +msgid "In_version" +msgstr "Inversió" + +#: plug-ins/fractal-explorer/fractal-explorer.c:388 +#, fuzzy +#| msgid "Number of colors:" +msgid "_Number of colors" +msgstr "Nombre de colors:" + +#: plug-ins/fractal-explorer/fractal-explorer.c:389 +#, fuzzy +#| msgid "Number of Colors" +msgid "Number of Colors for mapping" +msgstr "Nombre de colors" + +#: plug-ins/fractal-explorer/fractal-explorer.c:493 msgid "Rendering fractal" msgstr "S'està creant la composició fractal" -#: plug-ins/fractal-explorer/fractal-explorer.c:866 -#: plug-ins/gradient-flare/gradient-flare.c:3358 +#: plug-ins/fractal-explorer/fractal-explorer.c:878 +#: plug-ins/gradient-flare/gradient-flare.c:3322 #, c-format msgid "Are you sure you want to delete \"%s\" from the list and from disk?" msgstr "Segur que voleu suprimir «%s» de la llista i del disc?" -#: plug-ins/fractal-explorer/fractal-explorer.c:870 +#: plug-ins/fractal-explorer/fractal-explorer.c:882 msgid "Delete Fractal" msgstr "Suprimeix la fractal" -#: plug-ins/fractal-explorer/fractal-explorer.c:1059 +#: plug-ins/fractal-explorer/fractal-explorer.c:1180 #, c-format msgid "File '%s' is not a FractalExplorer file" msgstr "El fitxer «%s» no és un fitxer explorador de fractals" -#: plug-ins/fractal-explorer/fractal-explorer.c:1069 +#: plug-ins/fractal-explorer/fractal-explorer.c:1190 #, c-format msgid "" "File '%s' is corrupt.\n" @@ -10055,27 +11394,27 @@ msgstr "" "El fitxer «%s» és corrupte.\n" "L'opció de la línia %d és una secció incorrecta" -#: plug-ins/fractal-explorer/fractal-explorer.c:1155 +#: plug-ins/fractal-explorer/fractal-explorer.c:1276 msgid "My first fractal" msgstr "La meva primera fractal" -#: plug-ins/fractal-explorer/fractal-explorer.c:1219 +#: plug-ins/fractal-explorer/fractal-explorer.c:1340 msgid "Select folder and rescan collection" msgstr "Seleccioneu una carpeta i torneu a escanejar la col·lecció" -#: plug-ins/fractal-explorer/fractal-explorer.c:1230 +#: plug-ins/fractal-explorer/fractal-explorer.c:1351 msgid "Apply currently selected fractal" msgstr "Aplica la fractal seleccionada" -#: plug-ins/fractal-explorer/fractal-explorer.c:1241 +#: plug-ins/fractal-explorer/fractal-explorer.c:1362 msgid "Delete currently selected fractal" msgstr "Suprimeix la fractal seleccionada actualment" -#: plug-ins/fractal-explorer/fractal-explorer.c:1264 +#: plug-ins/fractal-explorer/fractal-explorer.c:1385 msgid "Rescan for Fractals" msgstr "Torna a escanejar les fractals" -#: plug-ins/fractal-explorer/fractal-explorer.c:1283 +#: plug-ins/fractal-explorer/fractal-explorer.c:1404 msgid "Add FractalExplorer Path" msgstr "Afegeix el camí explorador de fractals" @@ -10100,7 +11439,7 @@ msgstr "Dibuixa línies entre els punts de control. Només durant la creació" msgid "Gfig" msgstr "Figures (Gfig)" -#: plug-ins/gfig/gfig-dialog.c:385 +#: plug-ins/gfig/gfig-dialog.c:385 plug-ins/gfig/gfig-menu.ui:44 msgid "Line" msgstr "Línia" @@ -10109,7 +11448,8 @@ msgid "Create line" msgstr "Crea una línia" #: plug-ins/gfig/gfig-dialog.c:387 plug-ins/gfig/gfig-dialog.c:1440 -#: plug-ins/imagemap/imap_main.c:1944 +#: plug-ins/gfig/gfig-menu.ui:49 plug-ins/imagemap/imap_main.c:1572 +#: plug-ins/imagemap/imap-menu.ui:171 plug-ins/imagemap/imap-menu.ui:259 msgid "Rectangle" msgstr "Rectangle" @@ -10117,9 +11457,10 @@ msgstr "Rectangle" msgid "Create rectangle" msgstr "Crea un rectangle" -#: plug-ins/gfig/gfig-dialog.c:389 -#: plug-ins/gradient-flare/gradient-flare.c:4021 -#: plug-ins/imagemap/imap_main.c:1946 +#: plug-ins/gfig/gfig-dialog.c:389 plug-ins/gfig/gfig-menu.ui:54 +#: plug-ins/gradient-flare/gradient-flare.c:3987 +#: plug-ins/imagemap/imap_main.c:1574 plug-ins/imagemap/imap-menu.ui:176 +#: plug-ins/imagemap/imap-menu.ui:264 msgid "Circle" msgstr "Cercle" @@ -10127,7 +11468,7 @@ msgstr "Cercle" msgid "Create circle" msgstr "Crea un cercle" -#: plug-ins/gfig/gfig-dialog.c:391 +#: plug-ins/gfig/gfig-dialog.c:391 plug-ins/gfig/gfig-menu.ui:59 msgid "Ellipse" msgstr "El·lipse" @@ -10135,7 +11476,7 @@ msgstr "El·lipse" msgid "Create ellipse" msgstr "Crea una el·lipse" -#: plug-ins/gfig/gfig-dialog.c:393 +#: plug-ins/gfig/gfig-dialog.c:393 plug-ins/gfig/gfig-menu.ui:64 msgid "Arc" msgstr "Arc" @@ -10143,9 +11484,10 @@ msgstr "Arc" msgid "Create arc" msgstr "Crea un arc" -#: plug-ins/gfig/gfig-dialog.c:395 -#: plug-ins/gradient-flare/gradient-flare.c:4038 -#: plug-ins/imagemap/imap_main.c:1948 +#: plug-ins/gfig/gfig-dialog.c:395 plug-ins/gfig/gfig-menu.ui:69 +#: plug-ins/gradient-flare/gradient-flare.c:4004 +#: plug-ins/imagemap/imap_main.c:1576 plug-ins/imagemap/imap-menu.ui:181 +#: plug-ins/imagemap/imap-menu.ui:269 msgid "Polygon" msgstr "Polígon" @@ -10153,7 +11495,7 @@ msgstr "Polígon" msgid "Create reg polygon" msgstr "Crea un polígon regular" -#: plug-ins/gfig/gfig-dialog.c:397 +#: plug-ins/gfig/gfig-dialog.c:397 plug-ins/gfig/gfig-menu.ui:74 msgid "Star" msgstr "Estrella" @@ -10165,7 +11507,7 @@ msgstr "Crea una estrella" msgid "Create spiral" msgstr "Crea una espiral" -#: plug-ins/gfig/gfig-dialog.c:401 +#: plug-ins/gfig/gfig-dialog.c:401 plug-ins/gfig/gfig-menu.ui:84 msgid "Bezier" msgstr "Bézier" @@ -10174,7 +11516,7 @@ msgid "Create bezier curve. Shift + Button ends object creation." msgstr "" "Crea una corba de Bézier. Maj + botó per a acabar la creació de l'objecte." -#: plug-ins/gfig/gfig-dialog.c:404 +#: plug-ins/gfig/gfig-dialog.c:404 plug-ins/gfig/gfig-menu.ui:89 msgid "Move Object" msgstr "Mou objecte" @@ -10182,7 +11524,7 @@ msgstr "Mou objecte" msgid "Move an object" msgstr "Mou un objecte" -#: plug-ins/gfig/gfig-dialog.c:406 +#: plug-ins/gfig/gfig-dialog.c:406 plug-ins/gfig/gfig-menu.ui:94 msgid "Move Point" msgstr "Punt de moviment" @@ -10191,9 +11533,10 @@ msgid "Move a single point" msgstr "Mou només un punt" #: plug-ins/gfig/gfig-dialog.c:408 plug-ins/gfig/gfig-dialog.c:1293 -#: plug-ins/imagemap/imap_cmd_copy.c:53 +#: plug-ins/gfig/gfig-menu.ui:99 plug-ins/imagemap/imap_cmd_copy.c:53 #: plug-ins/imagemap/imap_cmd_copy_object.c:54 -#: plug-ins/imagemap/imap_main.c:1909 +#: plug-ins/imagemap/imap_main.c:1537 plug-ins/imagemap/imap-menu.ui:47 +#: plug-ins/imagemap/imap-menu.ui:330 plug-ins/imagemap/imap-menu.ui:367 msgid "Copy" msgstr "Copia" @@ -10201,7 +11544,8 @@ msgstr "Copia" msgid "Copy an object" msgstr "Copia un objecte" -#: plug-ins/gfig/gfig-dialog.c:410 plug-ins/ifs-compose/ifs-compose.c:1008 +#: 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/imagemap/imap_cmd_delete.c:56 plug-ins/imagemap/imap_menu.c:182 msgid "Delete" msgstr "Suprimeix" @@ -10210,7 +11554,8 @@ msgstr "Suprimeix" msgid "Delete an object" msgstr "Suprimeix un objecte" -#: plug-ins/gfig/gfig-dialog.c:412 plug-ins/imagemap/imap_cmd_select.c:52 +#: plug-ins/gfig/gfig-dialog.c:412 plug-ins/gfig/gfig-menu.ui:109 +#: plug-ins/imagemap/imap_cmd_select.c:52 msgid "Select" msgstr "Selecciona" @@ -10218,7 +11563,7 @@ msgstr "Selecciona" msgid "Select an object" msgstr "Seleccioneu un objecte" -#: plug-ins/gfig/gfig-dialog.c:415 +#: plug-ins/gfig/gfig-dialog.c:415 plug-ins/gfig/gfig-menu.ui:116 msgid "Raise" msgstr "Apuja" @@ -10226,7 +11571,7 @@ msgstr "Apuja" msgid "Raise selected object" msgstr "Apuja l'objecte seleccionat" -#: plug-ins/gfig/gfig-dialog.c:417 +#: plug-ins/gfig/gfig-dialog.c:417 plug-ins/gfig/gfig-menu.ui:120 msgid "Lower" msgstr "Inferior" @@ -10250,7 +11595,7 @@ msgstr "A baix" msgid "Lower selected object to bottom" msgstr "Abaixa l'objecte seleccionat al capdavall" -#: plug-ins/gfig/gfig-dialog.c:424 +#: plug-ins/gfig/gfig-dialog.c:424 plug-ins/gfig/gfig-menu.ui:134 msgid "Show Previous" msgstr "Mostra anterior" @@ -10258,7 +11603,7 @@ msgstr "Mostra anterior" msgid "Show previous object" msgstr "Mostra l'objecte anterior" -#: plug-ins/gfig/gfig-dialog.c:426 +#: plug-ins/gfig/gfig-dialog.c:426 plug-ins/gfig/gfig-menu.ui:138 msgid "Show Next" msgstr "Mostra següent" @@ -10266,7 +11611,7 @@ msgstr "Mostra següent" msgid "Show next object" msgstr "Mostra l'objecte següent" -#: plug-ins/gfig/gfig-dialog.c:428 +#: plug-ins/gfig/gfig-dialog.c:428 plug-ins/gfig/gfig-menu.ui:142 msgid "Show All" msgstr "Mostr_a-ho tot" @@ -10312,11 +11657,6 @@ msgstr "Degradat vertical" msgid "Horizontal gradient" msgstr "Degradat horitzontal" -#. "show image" checkbutton at bottom of style frame -#: plug-ins/gfig/gfig-dialog.c:600 -msgid "Show image" -msgstr "Mostra la imatge" - #. "snap to grid" checkbutton at bottom of style frame #: plug-ins/gfig/gfig-dialog.c:613 msgctxt "checkbutton" @@ -10410,8 +11750,8 @@ msgid "Grid type:" msgstr "Tipus de quadrícula:" #: plug-ins/gfig/gfig-dialog.c:1458 -#: plug-ins/gradient-flare/gradient-flare.c:749 -#: plug-ins/metadata/metadata-tags.c:247 +#: plug-ins/gradient-flare/gradient-flare.c:739 +#: plug-ins/metadata/metadata-tags.c:254 msgid "Normal" msgstr "Normal" @@ -10492,7 +11832,7 @@ msgstr "_Figures (Gfig)..." msgid "Create geometric shapes" msgstr "Crea formes geomètriques" -#: plug-ins/gfig/gfig.c:980 +#: plug-ins/gfig/gfig.c:833 msgid "" "Error trying to save figure as a parasite: can't attach parasite to " "drawable." @@ -10500,13 +11840,70 @@ msgstr "" "S'ha produït un error en desar la figura com a paràsit: no es pot adjuntar " "un paràsit en una imatge." -#: plug-ins/gfig/gfig.c:1010 +#: plug-ins/gfig/gfig.c:863 #, c-format msgid "Error trying to open temporary file '%s' for parasite loading: %s" msgstr "" "S'ha produït un error en obrir el fitxer temporal «%s» per a carregar el " "paràsit: %s" +#: plug-ins/gfig/gfig-menu.ui:6 plug-ins/imagemap/imap-menu.ui:5 +#, fuzzy +#| msgid "File_name" +msgid "File" +msgstr "_Nom de fitxer" + +#: plug-ins/gfig/gfig-menu.ui:8 plug-ins/imagemap/imap_main.c:1522 +#: plug-ins/imagemap/imap-menu.ui:8 +msgid "Open" +msgstr "Obre" + +#: plug-ins/gfig/gfig-menu.ui:12 plug-ins/imagemap/imap_main.c:1524 +#: plug-ins/imagemap/imap-menu.ui:12 +msgid "Save" +msgstr "Desa" + +#: plug-ins/gfig/gfig-menu.ui:16 plug-ins/help-browser/help-menu.ui:58 +#: plug-ins/imagemap/imap-menu.ui:22 +#, fuzzy +#| msgid "_Close" +msgid "Close" +msgstr "_Tanca" + +#: plug-ins/gfig/gfig-menu.ui:21 plug-ins/imagemap/imap-menu.ui:32 +#, fuzzy +#| msgid "_Edit" +msgid "Edit" +msgstr "_Edita" + +#: plug-ins/gfig/gfig-menu.ui:23 plug-ins/ifs-compose/ifs-compose.c:956 +#: plug-ins/ifs-compose/ifs-menus.ui:31 plug-ins/imagemap/imap_main.c:1530 +#: plug-ins/imagemap/imap-menu.ui:35 +msgid "Undo" +msgstr "Desfés" + +#: plug-ins/gfig/gfig-menu.ui:27 plug-ins/imagemap/imap_cmd_clear.c:50 +#: plug-ins/imagemap/imap-menu.ui:55 +msgid "Clear" +msgstr "Buida" + +#: plug-ins/gfig/gfig-menu.ui:35 plug-ins/imagemap/imap_main.c:1527 +#: plug-ins/imagemap/imap-menu.ui:77 +msgid "Preferences" +msgstr "Preferències" + +#: plug-ins/gfig/gfig-menu.ui:124 +#, fuzzy +#| msgid "Top:" +msgid "Top" +msgstr "Part superior:" + +#: plug-ins/gfig/gfig-menu.ui:128 +#, fuzzy +#| msgid "Bottom:" +msgid "Bottom" +msgstr "Part inferior:" + #: plug-ins/pikaressionist/brush.c:261 msgid "Can only save drawables!" msgstr "Només es poden desar imatges!" @@ -10528,7 +11925,7 @@ msgid "Changes the gamma (brightness) of the selected brush" msgstr "Canvia la brillantor del pinzell seleccionat" #: plug-ins/pikaressionist/brush.c:585 -#: plug-ins/metadata/metadata-editor.c:1367 +#: plug-ins/metadata/metadata-editor.c:1371 msgid "Select:" msgstr "Selecciona:" @@ -10585,7 +11982,7 @@ msgid "Adds random noise to the color" msgstr "Afegeix aleatòriament soroll al color" #: plug-ins/pikaressionist/general.c:133 -#: plug-ins/gradient-flare/gradient-flare.c:3677 +#: plug-ins/gradient-flare/gradient-flare.c:3643 msgid "_General" msgstr "_General" @@ -10692,15 +12089,33 @@ msgstr "El _PIKAressionist..." msgid "Performs various artistic operations" msgstr "Genera diversos efectes artístics" -#: plug-ins/pikaressionist/pika.c:449 +#: plug-ins/pikaressionist/pika.c:127 +#, fuzzy +#| msgid "Performs various artistic operations" +msgid "Performs various artistic operations on an image" +msgstr "Genera diversos efectes artístics" + +#: plug-ins/pikaressionist/pika.c:136 +#, fuzzy +#| msgid "_Presets" +msgid "Preset" +msgstr "Valors _predefinits" + +#: plug-ins/pikaressionist/pika.c:137 +#, fuzzy +#| msgid "_Presets" +msgid "Preset Name" +msgstr "Valors _predefinits" + +#: plug-ins/pikaressionist/pika.c:451 msgid "Painting" msgstr "S'està pintant" -#: plug-ins/pikaressionist/pikaressionist.c:138 +#: plug-ins/pikaressionist/pikaressionist.c:123 msgid "PIKAressionist" msgstr "El PIKAressionist" -#: plug-ins/pikaressionist/orientation.c:87 +#: plug-ins/pikaressionist/orientation.c:87 plug-ins/pagecurl/pagecurl.c:249 msgid "Or_ientation" msgstr "Or_ientació" @@ -10844,6 +12259,9 @@ msgid "Delete selected vector" msgstr "Suprimeix el vector seleccionat" #: plug-ins/pikaressionist/orientmap.c:638 +#: plug-ins/lighting/lighting-main.c:198 plug-ins/lighting/lighting-main.c:321 +#: plug-ins/lighting/lighting-main.c:380 plug-ins/lighting/lighting-main.c:439 +#: plug-ins/lighting/lighting-main.c:498 plug-ins/lighting/lighting-main.c:557 msgid "Type" msgstr "Tipus" @@ -11027,7 +12445,7 @@ msgstr "Torna a llegir la carpeta de valors predefinits" #: plug-ins/pikaressionist/preview.c:174 #: plug-ins/pikaressionist/repaint.c:1197 plug-ins/imagemap/imap_polygon.c:513 -#: plug-ins/lighting/lighting-ui.c:1093 +#: plug-ins/lighting/lighting-ui.c:240 msgid "_Update" msgstr "Act_ualitza" @@ -11164,52 +12582,101 @@ msgstr "" "El mode Voronoi farà que només el vector sm més proper al punt donat tingui " "alguna influència" -#: plug-ins/gradient-flare/gradient-flare.c:750 +#: plug-ins/gradient-flare/gradient-flare.c:740 msgid "Addition" msgstr "Suma" -#: plug-ins/gradient-flare/gradient-flare.c:751 +#: plug-ins/gradient-flare/gradient-flare.c:741 msgid "Overlay" msgstr "Superposa" -#: plug-ins/gradient-flare/gradient-flare.c:752 +#: plug-ins/gradient-flare/gradient-flare.c:742 msgid "Screen" msgstr "Pantalla" -#: plug-ins/gradient-flare/gradient-flare.c:819 +#: plug-ins/gradient-flare/gradient-flare.c:809 msgid "_Gradient Flare..." msgstr "_Llum enlluernadora..." -#: plug-ins/gradient-flare/gradient-flare.c:824 +#: plug-ins/gradient-flare/gradient-flare.c:814 msgid "Produce a lense flare effect using gradients" msgstr "Produeix un efecte de punt de llum enlluernador amb degradats" -#. * Dialog Shell -#: plug-ins/gradient-flare/gradient-flare.c:1048 -#: plug-ins/gradient-flare/gradient-flare.c:2513 +#: 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 "Radi" + +#: plug-ins/gradient-flare/gradient-flare.c:859 +#, fuzzy +#| msgid "Ro_tation:" +msgid "Ro_tation" +msgstr "Ro_tació:" + +#: plug-ins/gradient-flare/gradient-flare.c:865 +#, fuzzy +#| msgid "_Hue rotation:" +msgid "_Hue rotation" +msgstr "Rotació del _to:" + +#: plug-ins/gradient-flare/gradient-flare.c:871 +#, fuzzy +#| msgid "Vector _angle:" +msgid "Vector _angle" +msgstr "_Angle del vector:" + +#: plug-ins/gradient-flare/gradient-flare.c:877 +#, fuzzy +#| msgid "Vector _length:" +msgid "Vector len_gth" +msgstr "_Longitud del vector:" + +#: plug-ins/gradient-flare/gradient-flare.c:884 +#, fuzzy +#| msgid "A_daptive supersampling" +msgid "Ada_ptive supersampling" +msgstr "Supermostratge a_daptable" + +#: plug-ins/gradient-flare/gradient-flare.c:890 +#, fuzzy +#| msgid "_Max depth:" +msgid "_Max depth" +msgstr "Profunditat _màxima:" + +#: plug-ins/gradient-flare/gradient-flare.c:896 +#, fuzzy +#| msgid "_Threshold" +msgid "Threshol_d" +msgstr "_Llindar" + +#: plug-ins/gradient-flare/gradient-flare.c:1009 +#: plug-ins/gradient-flare/gradient-flare.c:2499 msgid "Gradient Flare" msgstr "Llum enlluernadora" -#: plug-ins/gradient-flare/gradient-flare.c:1062 +#: plug-ins/gradient-flare/gradient-flare.c:1020 msgid "Cannot operate on indexed color images." msgstr "No es pot operar amb imatges de color indexat." -#: plug-ins/gradient-flare/gradient-flare.c:1375 +#: plug-ins/gradient-flare/gradient-flare.c:1362 #, c-format msgid "Failed to open GFlare file '%s': %s" msgstr "No s'ha pogut obrir el fitxer GFlare «%s»: %s" -#: plug-ins/gradient-flare/gradient-flare.c:1383 +#: plug-ins/gradient-flare/gradient-flare.c:1370 #, c-format msgid "'%s' is not a valid GFlare file." msgstr "«%s» no és un fitxer GFlare vàlid." -#: plug-ins/gradient-flare/gradient-flare.c:1437 +#: plug-ins/gradient-flare/gradient-flare.c:1424 #, c-format msgid "invalid formatted GFlare file: %s\n" msgstr "fitxer del GFlare amb un format no vàlid: %s\n" -#: plug-ins/gradient-flare/gradient-flare.c:1562 +#: plug-ins/gradient-flare/gradient-flare.c:1549 #, c-format msgid "" "GFlare '%s' is not saved. If you add a new entry in '%s', like:\n" @@ -11220,223 +12687,194 @@ msgstr "" "(gflare-path «%s»)\n" "i creeu una carpeta «%s», podeu desar els vostres propis GFlare's en aquesta carpeta." -#: plug-ins/gradient-flare/gradient-flare.c:1597 +#: plug-ins/gradient-flare/gradient-flare.c:1584 #, c-format msgid "Failed to write GFlare file '%s': %s" msgstr "No s'ha pogut escriure el fitxer GFlare «%s»: %s" -#: plug-ins/gradient-flare/gradient-flare.c:2569 +#: plug-ins/gradient-flare/gradient-flare.c:2543 msgid "A_uto update preview" msgstr "Previs_ualització automàtica" -#: plug-ins/gradient-flare/gradient-flare.c:2622 +#: plug-ins/gradient-flare/gradient-flare.c:2598 msgid "'Default' is created." msgstr "S'ha creat «per defecte»." #. * Scales #. * Scales -#: plug-ins/gradient-flare/gradient-flare.c:2910 -#: plug-ins/gradient-flare/gradient-flare.c:3730 -#: plug-ins/gradient-flare/gradient-flare.c:3832 -#: plug-ins/gradient-flare/gradient-flare.c:3963 +#: plug-ins/gradient-flare/gradient-flare.c:2943 +#: plug-ins/gradient-flare/gradient-flare.c:3696 +#: plug-ins/gradient-flare/gradient-flare.c:3798 +#: plug-ins/gradient-flare/gradient-flare.c:3929 msgid "Parameters" msgstr "Paràmetres" -#: plug-ins/gradient-flare/gradient-flare.c:2922 -#: plug-ins/imagemap/imap_circle.c:275 -msgid "_Radius:" -msgstr "_Radi:" - -#: plug-ins/gradient-flare/gradient-flare.c:2933 -msgid "Ro_tation:" -msgstr "Ro_tació:" - -#: plug-ins/gradient-flare/gradient-flare.c:2944 -msgid "_Hue rotation:" -msgstr "Rotació del _to:" - -#: plug-ins/gradient-flare/gradient-flare.c:2955 -msgid "Vector _angle:" -msgstr "_Angle del vector:" - -#: plug-ins/gradient-flare/gradient-flare.c:2966 -msgid "Vector _length:" -msgstr "_Longitud del vector:" - -#: plug-ins/gradient-flare/gradient-flare.c:2987 -msgid "A_daptive supersampling" -msgstr "Supermostratge a_daptable" - -#: plug-ins/gradient-flare/gradient-flare.c:3007 -msgid "_Max depth:" -msgstr "Profunditat _màxima:" - -#: plug-ins/gradient-flare/gradient-flare.c:3023 +#: plug-ins/gradient-flare/gradient-flare.c:2977 msgid "_Settings" msgstr "_Configuració" -#: plug-ins/gradient-flare/gradient-flare.c:3151 +#: plug-ins/gradient-flare/gradient-flare.c:3115 msgid "S_elector" msgstr "S_elector" -#: plug-ins/gradient-flare/gradient-flare.c:3215 +#: plug-ins/gradient-flare/gradient-flare.c:3179 msgid "New Gradient Flare" msgstr "Llum enlluernadora nova" -#: plug-ins/gradient-flare/gradient-flare.c:3218 +#: plug-ins/gradient-flare/gradient-flare.c:3182 msgid "Enter a name for the new GFlare" msgstr "Introduïu un nom per al GFlare nou" -#: plug-ins/gradient-flare/gradient-flare.c:3219 +#: plug-ins/gradient-flare/gradient-flare.c:3183 msgid "Unnamed" msgstr "Sense nom" -#: plug-ins/gradient-flare/gradient-flare.c:3239 -#: plug-ins/gradient-flare/gradient-flare.c:3321 +#: plug-ins/gradient-flare/gradient-flare.c:3203 +#: plug-ins/gradient-flare/gradient-flare.c:3285 #, c-format msgid "The name '%s' is used already!" msgstr "El nom «%s» ja es troba en ús!" -#: plug-ins/gradient-flare/gradient-flare.c:3295 +#: plug-ins/gradient-flare/gradient-flare.c:3259 msgid "Copy Gradient Flare" msgstr "Copia la Llum enlluernadora" -#: plug-ins/gradient-flare/gradient-flare.c:3298 +#: plug-ins/gradient-flare/gradient-flare.c:3262 msgid "Enter a name for the copied GFlare" msgstr "Introduïu un nom per al GFlare copiat" -#: plug-ins/gradient-flare/gradient-flare.c:3352 +#: plug-ins/gradient-flare/gradient-flare.c:3316 msgid "Cannot delete!! There must be at least one GFlare." msgstr "No es pot suprimir. Ha d'haver-hi un GFlare com a mínim." -#: plug-ins/gradient-flare/gradient-flare.c:3362 +#: plug-ins/gradient-flare/gradient-flare.c:3326 msgid "Delete Gradient Flare" msgstr "Suprimeix la Llum enlluernadora" -#: plug-ins/gradient-flare/gradient-flare.c:3434 +#: plug-ins/gradient-flare/gradient-flare.c:3398 #, c-format msgid "not found %s in gflares_list" msgstr "no s'ha trobat %s a gflares_list" -#: plug-ins/gradient-flare/gradient-flare.c:3474 +#: plug-ins/gradient-flare/gradient-flare.c:3440 msgid "Gradient Flare Editor" msgstr "Editor de la Llum enlluernadora" -#: plug-ins/gradient-flare/gradient-flare.c:3478 +#: plug-ins/gradient-flare/gradient-flare.c:3444 msgid "_Rescan Gradients" msgstr "_Torna a escanejar els degradats" #. Glow -#: plug-ins/gradient-flare/gradient-flare.c:3600 +#: plug-ins/gradient-flare/gradient-flare.c:3566 msgid "Glow Paint Options" msgstr "Opcions de pintura fosforescent" -#: plug-ins/gradient-flare/gradient-flare.c:3610 -#: plug-ins/gradient-flare/gradient-flare.c:3636 -#: plug-ins/gradient-flare/gradient-flare.c:3662 +#: plug-ins/gradient-flare/gradient-flare.c:3576 +#: plug-ins/gradient-flare/gradient-flare.c:3602 +#: plug-ins/gradient-flare/gradient-flare.c:3628 msgid "Opacity:" msgstr "Opacitat:" -#: plug-ins/gradient-flare/gradient-flare.c:3622 -#: plug-ins/gradient-flare/gradient-flare.c:3648 -#: plug-ins/gradient-flare/gradient-flare.c:3674 +#: plug-ins/gradient-flare/gradient-flare.c:3588 +#: plug-ins/gradient-flare/gradient-flare.c:3614 +#: plug-ins/gradient-flare/gradient-flare.c:3640 msgid "Paint mode:" msgstr "Mode de pintura:" #. Rays -#: plug-ins/gradient-flare/gradient-flare.c:3626 +#: plug-ins/gradient-flare/gradient-flare.c:3592 msgid "Rays Paint Options" msgstr "Opcions de pintura dels raigs" #. Rays -#: plug-ins/gradient-flare/gradient-flare.c:3652 +#: plug-ins/gradient-flare/gradient-flare.c:3618 msgid "Second Flares Paint Options" msgstr "Opcions de pintura de les flamarades secundàries" #. * Gradient Menus -#: plug-ins/gradient-flare/gradient-flare.c:3703 -#: plug-ins/gradient-flare/gradient-flare.c:3803 -#: plug-ins/gradient-flare/gradient-flare.c:3936 +#: plug-ins/gradient-flare/gradient-flare.c:3669 +#: plug-ins/gradient-flare/gradient-flare.c:3769 +#: plug-ins/gradient-flare/gradient-flare.c:3902 msgid "Gradients" msgstr "Degradats" -#: plug-ins/gradient-flare/gradient-flare.c:3714 -#: plug-ins/gradient-flare/gradient-flare.c:3816 -#: plug-ins/gradient-flare/gradient-flare.c:3947 +#: plug-ins/gradient-flare/gradient-flare.c:3680 +#: plug-ins/gradient-flare/gradient-flare.c:3782 +#: plug-ins/gradient-flare/gradient-flare.c:3913 msgid "Radial gradient:" msgstr "Degradat radial:" -#: plug-ins/gradient-flare/gradient-flare.c:3718 -#: plug-ins/gradient-flare/gradient-flare.c:3820 +#: plug-ins/gradient-flare/gradient-flare.c:3684 +#: plug-ins/gradient-flare/gradient-flare.c:3786 msgid "Angular gradient:" msgstr "Degradat angular:" -#: plug-ins/gradient-flare/gradient-flare.c:3722 -#: plug-ins/gradient-flare/gradient-flare.c:3824 +#: plug-ins/gradient-flare/gradient-flare.c:3688 +#: plug-ins/gradient-flare/gradient-flare.c:3790 msgid "Angular size gradient:" msgstr "Degradat de mida angular:" -#: plug-ins/gradient-flare/gradient-flare.c:3741 -#: plug-ins/gradient-flare/gradient-flare.c:3843 -#: plug-ins/gradient-flare/gradient-flare.c:3974 +#: plug-ins/gradient-flare/gradient-flare.c:3707 +#: plug-ins/gradient-flare/gradient-flare.c:3809 +#: plug-ins/gradient-flare/gradient-flare.c:3940 msgid "Size (%):" msgstr "Mida (%):" -#: plug-ins/gradient-flare/gradient-flare.c:3752 -#: plug-ins/gradient-flare/gradient-flare.c:3854 -#: plug-ins/gradient-flare/gradient-flare.c:3985 +#: plug-ins/gradient-flare/gradient-flare.c:3718 +#: plug-ins/gradient-flare/gradient-flare.c:3820 +#: plug-ins/gradient-flare/gradient-flare.c:3951 msgid "Rotation:" msgstr "Rotació:" -#: plug-ins/gradient-flare/gradient-flare.c:3763 -#: plug-ins/gradient-flare/gradient-flare.c:3865 -#: plug-ins/gradient-flare/gradient-flare.c:3996 +#: plug-ins/gradient-flare/gradient-flare.c:3729 +#: plug-ins/gradient-flare/gradient-flare.c:3831 +#: plug-ins/gradient-flare/gradient-flare.c:3962 msgid "Hue rotation:" msgstr "Rotació del to:" -#: plug-ins/gradient-flare/gradient-flare.c:3777 +#: plug-ins/gradient-flare/gradient-flare.c:3743 msgid "G_low" msgstr "_Lluentor" -#: plug-ins/gradient-flare/gradient-flare.c:3876 +#: plug-ins/gradient-flare/gradient-flare.c:3842 msgid "# of Spikes:" msgstr "Nombre de puntes:" -#: plug-ins/gradient-flare/gradient-flare.c:3887 +#: plug-ins/gradient-flare/gradient-flare.c:3853 msgid "Spike thickness:" msgstr "Gruix de les puntes:" -#: plug-ins/gradient-flare/gradient-flare.c:3901 +#: plug-ins/gradient-flare/gradient-flare.c:3867 msgid "_Rays" msgstr "_Raigs" -#: plug-ins/gradient-flare/gradient-flare.c:3951 +#: plug-ins/gradient-flare/gradient-flare.c:3917 msgid "Size factor gradient:" msgstr "Degradat del factor de mida:" -#: plug-ins/gradient-flare/gradient-flare.c:3955 +#: plug-ins/gradient-flare/gradient-flare.c:3921 msgid "Probability gradient:" msgstr "Degradat de la probabilitat:" #. * Shape Radio Button Frame -#: plug-ins/gradient-flare/gradient-flare.c:4013 +#: plug-ins/gradient-flare/gradient-flare.c:3979 msgid "Shape of Second Flares" msgstr "Forma de les flamarades secundàries" -#: plug-ins/gradient-flare/gradient-flare.c:4072 +#: plug-ins/gradient-flare/gradient-flare.c:4038 msgid "Random seed:" msgstr "Llavor aleatòria:" -#: plug-ins/gradient-flare/gradient-flare.c:4086 +#: plug-ins/gradient-flare/gradient-flare.c:4052 msgid "_Second Flares" msgstr "Flamarades _secundàries" #. the dialog window -#: plug-ins/help-browser/dialog.c:261 plug-ins/help-browser/dialog.c:893 +#: plug-ins/help-browser/dialog.c:261 plug-ins/help-browser/dialog.c:822 msgid "PIKA Help Browser" msgstr "Navegador de l'ajuda del PIKA" -#: plug-ins/help-browser/dialog.c:275 +#: plug-ins/help-browser/dialog.c:275 plug-ins/help-browser/help-menu.ui:14 msgid "_Reload" msgstr "_Actualitza" @@ -11444,7 +12882,7 @@ msgstr "_Actualitza" msgid "Reload current page" msgstr "Actualitza la pàgina actual" -#: plug-ins/help-browser/dialog.c:276 +#: plug-ins/help-browser/dialog.c:276 plug-ins/help-browser/help-menu.ui:18 msgid "_Stop" msgstr "_Atura" @@ -11460,25 +12898,86 @@ msgstr "Ves a la pàgina d'índex" msgid "Visit the PIKA documentation website" msgstr "Visiteu el web de documentació del PIKA" -#: plug-ins/help-browser/dialog.c:1236 +#: plug-ins/help-browser/dialog.c:1165 msgid "Find:" msgstr "Cerca:" -#: plug-ins/help-browser/dialog.c:1252 +#: plug-ins/help-browser/dialog.c:1181 msgctxt "search" msgid "_Previous" msgstr "_Anterior" -#: plug-ins/help-browser/dialog.c:1261 +#: plug-ins/help-browser/dialog.c:1190 msgctxt "search" msgid "_Next" msgstr "_Següent" -#: plug-ins/help-browser/dialog.c:1270 +#: plug-ins/help-browser/dialog.c:1199 msgctxt "search" msgid "_Close" msgstr "Tan_ca" +#: plug-ins/help-browser/help-menu.ui:6 +#, fuzzy +#| msgid "Back:" +msgid "_Back" +msgstr "Endarrere:" + +#: plug-ins/help-browser/help-menu.ui:10 +#, fuzzy +#| msgctxt "search" +#| msgid "_Previous" +msgid "_Previous" +msgstr "_Anterior" + +#: plug-ins/help-browser/help-menu.ui:24 +#, fuzzy +#| msgid "Home" +msgid "_Home" +msgstr "Inici" + +#: plug-ins/help-browser/help-menu.ui:28 +#, fuzzy +#| msgid "Curl Location" +msgid "C_opy location" +msgstr "Ubicació del rínxol" + +#: plug-ins/help-browser/help-menu.ui:32 +#, fuzzy +#| msgid "Show Next" +msgid "S_how index" +msgstr "Mostra següent" + +#: plug-ins/help-browser/help-menu.ui:38 +#, fuzzy +#| msgid "Find:" +msgid "Find" +msgstr "Cerca:" + +#: plug-ins/help-browser/help-menu.ui:42 +#, fuzzy +#| msgid "Finding XY gradient" +msgid "Find _Again" +msgstr "S'està cercant el degradat XY" + +#: plug-ins/help-browser/help-menu.ui:48 +#, fuzzy +#| msgid "Zoom In" +msgid "Zoom in" +msgstr "Amplia" + +#: plug-ins/help-browser/help-menu.ui:52 +#, fuzzy +#| msgid "Zoom Out" +msgid "Zoom out" +msgstr "Redueix" + +#: plug-ins/help-browser/help-menu.ui:66 +#, fuzzy +#| msgid "Sho_w selection" +msgid "Copy selection" +msgstr "_Mostra la selecció" + #: plug-ins/help/pikahelpdomain.c:180 #, c-format msgid "The help pages for '%s' are not available." @@ -11538,171 +13037,161 @@ msgid "Create an Iterated Function System (IFS) fractal" msgstr "Crea una fractal del tipus IFS (Sistema de Funció Iterativa)" #. X -#: plug-ins/ifs-compose/ifs-compose.c:689 plug-ins/lighting/lighting-ui.c:546 -#: plug-ins/map-object/map-object-ui.c:663 -#: plug-ins/map-object/map-object-ui.c:717 -#: plug-ins/map-object/map-object-ui.c:977 -#: plug-ins/map-object/map-object-ui.c:1023 +#: plug-ins/ifs-compose/ifs-compose.c:635 msgid "X:" msgstr "X:" #. Y -#: plug-ins/ifs-compose/ifs-compose.c:703 plug-ins/lighting/lighting-ui.c:561 -#: plug-ins/map-object/map-object-ui.c:677 -#: plug-ins/map-object/map-object-ui.c:730 -#: plug-ins/map-object/map-object-ui.c:989 -#: plug-ins/map-object/map-object-ui.c:1034 -#: plug-ins/map-object/map-object-ui.c:1133 +#: plug-ins/ifs-compose/ifs-compose.c:649 msgid "Y:" msgstr "Y:" #. Asym -#: plug-ins/ifs-compose/ifs-compose.c:745 +#: plug-ins/ifs-compose/ifs-compose.c:691 msgid "Asymmetry:" msgstr "Asimetria:" #. Shear -#: plug-ins/ifs-compose/ifs-compose.c:759 +#: plug-ins/ifs-compose/ifs-compose.c:705 msgid "Shear:" msgstr "Inclina:" #. Simple color control section -#: plug-ins/ifs-compose/ifs-compose.c:804 +#: plug-ins/ifs-compose/ifs-compose.c:750 msgid "Simple" msgstr "Senzill" -#: plug-ins/ifs-compose/ifs-compose.c:813 +#: plug-ins/ifs-compose/ifs-compose.c:759 msgid "IFS Fractal: Target" msgstr "Fractal IFS: destí" -#: plug-ins/ifs-compose/ifs-compose.c:819 +#: plug-ins/ifs-compose/ifs-compose.c:765 msgid "Scale hue by:" msgstr "Escala el to per:" -#: plug-ins/ifs-compose/ifs-compose.c:834 +#: plug-ins/ifs-compose/ifs-compose.c:780 msgid "Scale value by:" msgstr "Escala el valor per:" #. Full color control section -#: plug-ins/ifs-compose/ifs-compose.c:851 +#: plug-ins/ifs-compose/ifs-compose.c:797 msgid "Full" msgstr "Sencer" -#: plug-ins/ifs-compose/ifs-compose.c:859 +#: plug-ins/ifs-compose/ifs-compose.c:805 msgid "IFS Fractal: Red" msgstr "Fractal IFS: vermell" -#: plug-ins/ifs-compose/ifs-compose.c:867 +#: plug-ins/ifs-compose/ifs-compose.c:813 msgid "IFS Fractal: Green" msgstr "Fractal IFS: verd" -#: plug-ins/ifs-compose/ifs-compose.c:875 +#: plug-ins/ifs-compose/ifs-compose.c:821 msgid "IFS Fractal: Blue" msgstr "Fractal IFS: blau" -#: plug-ins/ifs-compose/ifs-compose.c:883 +#: plug-ins/ifs-compose/ifs-compose.c:829 msgid "IFS Fractal: Black" msgstr "Fractal IFS: negre" -#: plug-ins/ifs-compose/ifs-compose.c:955 +#: plug-ins/ifs-compose/ifs-compose.c:901 msgid "IFS Fractal" msgstr "Fractal IFS" -#: plug-ins/ifs-compose/ifs-compose.c:999 plug-ins/imagemap/imap_cmd_move.c:85 +#: plug-ins/ifs-compose/ifs-compose.c:945 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 "Mou" -#: plug-ins/ifs-compose/ifs-compose.c:1001 +#: plug-ins/ifs-compose/ifs-compose.c:947 plug-ins/ifs-compose/ifs-menus.ui:11 msgid "Rotate" msgstr "Gira" -#: plug-ins/ifs-compose/ifs-compose.c:1003 +#: plug-ins/ifs-compose/ifs-compose.c:949 plug-ins/ifs-compose/ifs-menus.ui:16 msgid "Stretch" msgstr "Amplia" -#: plug-ins/ifs-compose/ifs-compose.c:1006 +#: plug-ins/ifs-compose/ifs-compose.c:952 plug-ins/ifs-compose/ifs-menus.ui:23 msgid "New" msgstr "Nou" -#: plug-ins/ifs-compose/ifs-compose.c:1010 plug-ins/imagemap/imap_main.c:1902 -msgid "Undo" -msgstr "Desfés" - -#: plug-ins/ifs-compose/ifs-compose.c:1012 plug-ins/imagemap/imap_main.c:1904 +#: plug-ins/ifs-compose/ifs-compose.c:958 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 "Refés" -#: plug-ins/ifs-compose/ifs-compose.c:1014 +#: plug-ins/ifs-compose/ifs-compose.c:960 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 "Selecciona-ho tot" -#: plug-ins/ifs-compose/ifs-compose.c:1016 +#: plug-ins/ifs-compose/ifs-compose.c:962 plug-ins/ifs-compose/ifs-menus.ui:43 msgid "Recompute Center" msgstr "Torna a calcular el centre" -#: plug-ins/ifs-compose/ifs-compose.c:1019 +#: plug-ins/ifs-compose/ifs-compose.c:965 plug-ins/ifs-compose/ifs-menus.ui:49 msgid "Render Options" msgstr "Opcions de composició" -#: plug-ins/ifs-compose/ifs-compose.c:1078 +#: plug-ins/ifs-compose/ifs-compose.c:1024 msgid "Spatial Transformation" msgstr "Transformació espacial" -#: plug-ins/ifs-compose/ifs-compose.c:1084 +#: plug-ins/ifs-compose/ifs-compose.c:1030 msgid "Color Transformation" msgstr "Transformació de color" -#: plug-ins/ifs-compose/ifs-compose.c:1094 +#: plug-ins/ifs-compose/ifs-compose.c:1040 msgid "Relative probability:" msgstr "Probabilitat relativa:" -#: plug-ins/ifs-compose/ifs-compose.c:1258 +#: plug-ins/ifs-compose/ifs-compose.c:1204 msgid "IFS Fractal Render Options" msgstr "Opcions de composició de la fractal IFS" -#: plug-ins/ifs-compose/ifs-compose.c:1280 +#: plug-ins/ifs-compose/ifs-compose.c:1226 msgid "Max. memory:" msgstr "Memòria màx.:" -#: plug-ins/ifs-compose/ifs-compose.c:1308 +#: plug-ins/ifs-compose/ifs-compose.c:1254 msgid "Subdivide:" msgstr "Subdivideix:" -#: plug-ins/ifs-compose/ifs-compose.c:1322 +#: plug-ins/ifs-compose/ifs-compose.c:1268 msgid "Spot radius:" msgstr "Radi del punt:" -#: plug-ins/ifs-compose/ifs-compose.c:1395 +#: plug-ins/ifs-compose/ifs-compose.c:1341 #, c-format msgid "Rendering IFS (%d/%d)" msgstr "S'està component l'IFS (%d/%d)" -#: plug-ins/ifs-compose/ifs-compose.c:1547 +#: plug-ins/ifs-compose/ifs-compose.c:1493 #, c-format msgid "Transformation %s" msgstr "Transformació %s" -#: plug-ins/ifs-compose/ifs-compose.c:2473 +#: plug-ins/ifs-compose/ifs-compose.c:2419 msgid "Save failed" msgstr "No s'ha pogut desar" -#: plug-ins/ifs-compose/ifs-compose.c:2556 -#: plug-ins/ifs-compose/ifs-compose.c:2569 +#: plug-ins/ifs-compose/ifs-compose.c:2502 +#: plug-ins/ifs-compose/ifs-compose.c:2515 msgid "Open failed" msgstr "No s'ha pogut obrir" -#: plug-ins/ifs-compose/ifs-compose.c:2564 +#: plug-ins/ifs-compose/ifs-compose.c:2510 #, c-format msgid "File '%s' doesn't seem to be an IFS Fractal file." msgstr "El fitxer «%s» no sembla un fitxer fractal IFS." -#: plug-ins/ifs-compose/ifs-compose.c:2604 +#: plug-ins/ifs-compose/ifs-compose.c:2550 msgid "Save as IFS Fractal file" msgstr "Desa com a fitxer fractal IFS" -#: plug-ins/ifs-compose/ifs-compose.c:2641 +#: plug-ins/ifs-compose/ifs-compose.c:2587 msgid "Open IFS Fractal file" msgstr "Obre el fitxer fractal IFS" @@ -11740,9 +13229,9 @@ msgstr "píxels" msgid "Center _y:" msgstr "Centre _y:" -#: plug-ins/imagemap/imap_cmd_clear.c:50 -msgid "Clear" -msgstr "Buida" +#: plug-ins/imagemap/imap_circle.c:275 +msgid "_Radius:" +msgstr "_Radi:" #: plug-ins/imagemap/imap_cmd_create.c:57 #: plug-ins/imagemap/imap_cmd_pika_guides.c:150 @@ -11751,11 +13240,13 @@ msgstr "Crea" #: plug-ins/imagemap/imap_cmd_cut.c:54 #: plug-ins/imagemap/imap_cmd_cut_object.c:50 -#: plug-ins/imagemap/imap_main.c:1907 +#: plug-ins/imagemap/imap_main.c:1535 plug-ins/imagemap/imap-menu.ui:43 +#: plug-ins/imagemap/imap-menu.ui:326 plug-ins/imagemap/imap-menu.ui:363 msgid "Cut" msgstr "Retalla" #: plug-ins/imagemap/imap_cmd_delete_point.c:60 +#: plug-ins/imagemap/imap-menu.ui:343 msgid "Delete Point" msgstr "Suprimeix el punt" @@ -11866,12 +13357,14 @@ msgid "Guides" msgstr "Guies" #: plug-ins/imagemap/imap_cmd_insert_point.c:61 +#: plug-ins/imagemap/imap-menu.ui:339 msgid "Insert Point" msgstr "Insereix un punt" #: plug-ins/imagemap/imap_cmd_move_down.c:52 #: plug-ins/imagemap/imap_cmd_object_down.c:54 -#: plug-ins/imagemap/imap_menu.c:178 +#: plug-ins/imagemap/imap_menu.c:178 plug-ins/imagemap/imap-menu.ui:238 +#: plug-ins/imagemap/imap-menu.ui:322 plug-ins/imagemap/imap-menu.ui:359 msgid "Move Down" msgstr "Mou cap avall" @@ -11889,10 +13382,13 @@ msgstr "Mou cap endavant" #: plug-ins/imagemap/imap_cmd_move_up.c:52 #: plug-ins/imagemap/imap_cmd_object_up.c:54 plug-ins/imagemap/imap_menu.c:176 +#: plug-ins/imagemap/imap-menu.ui:234 plug-ins/imagemap/imap-menu.ui:318 +#: plug-ins/imagemap/imap-menu.ui:355 msgid "Move Up" msgstr "Mou cap a dalt" -#: plug-ins/imagemap/imap_cmd_paste.c:50 plug-ins/imagemap/imap_main.c:1911 +#: plug-ins/imagemap/imap_cmd_paste.c:50 plug-ins/imagemap/imap_main.c:1539 +#: plug-ins/imagemap/imap-menu.ui:51 plug-ins/imagemap/imap-menu.ui:301 msgid "Paste" msgstr "Enganxa" @@ -11920,83 +13416,97 @@ msgstr "No seleccionis" msgid "Unselect All" msgstr "No seleccionis res" -#: plug-ins/imagemap/imap_edit_area_info.c:216 +#: plug-ins/imagemap/imap_edit_area_info.c:219 msgid "Link Type" msgstr "Tipus d'enllaç" -#: plug-ins/imagemap/imap_edit_area_info.c:225 +#: plug-ins/imagemap/imap_edit_area_info.c:228 msgid "_Web Site" msgstr "Lloc _web" -#: plug-ins/imagemap/imap_edit_area_info.c:231 -msgid "_Ftp Site" +#: plug-ins/imagemap/imap_edit_area_info.c:234 +#, fuzzy +#| msgid "_Ftp Site" +msgid "_FTP Site" msgstr "Lloc _FTP" -#: plug-ins/imagemap/imap_edit_area_info.c:237 +#: plug-ins/imagemap/imap_edit_area_info.c:240 msgid "_Gopher" msgstr "_Gopher" -#: plug-ins/imagemap/imap_edit_area_info.c:243 +#: plug-ins/imagemap/imap_edit_area_info.c:246 msgid "Ot_her" msgstr "Al_tres" -#: plug-ins/imagemap/imap_edit_area_info.c:249 +#: plug-ins/imagemap/imap_edit_area_info.c:252 msgid "F_ile" msgstr "F_itxer" -#: plug-ins/imagemap/imap_edit_area_info.c:255 +#: plug-ins/imagemap/imap_edit_area_info.c:258 msgid "WAI_S" msgstr "WAI_S" -#: plug-ins/imagemap/imap_edit_area_info.c:261 +#: plug-ins/imagemap/imap_edit_area_info.c:264 msgid "Tel_net" msgstr "Tel_net" -#: plug-ins/imagemap/imap_edit_area_info.c:267 +#: plug-ins/imagemap/imap_edit_area_info.c:270 msgid "e-_mail" msgstr "_correu electrònic" -#: plug-ins/imagemap/imap_edit_area_info.c:273 +#: plug-ins/imagemap/imap_edit_area_info.c:276 msgid "_URL to activate when this area is clicked: (required)" msgstr "_URL per a activar quan es faci clic en aquesta àrea: (necessari)" -#: plug-ins/imagemap/imap_edit_area_info.c:275 +#: plug-ins/imagemap/imap_edit_area_info.c:278 msgid "Select HTML file" msgstr "Seleccioneu el fitxer HTML" -#: plug-ins/imagemap/imap_edit_area_info.c:284 +#: plug-ins/imagemap/imap_edit_area_info.c:287 msgid "Relati_ve link" msgstr "Enllaç relati_u" -#: plug-ins/imagemap/imap_edit_area_info.c:290 +#: plug-ins/imagemap/imap_edit_area_info.c:293 msgid "_Target frame name/ID: (optional - used for FRAMES only)" msgstr "_Nom del marc/ID: (opcional - només per a pàgines amb marcs)" -#: plug-ins/imagemap/imap_edit_area_info.c:293 +#: plug-ins/imagemap/imap_edit_area_info.c:296 msgid "ALT te_xt: (optional)" msgstr "Te_xt alternatiu: (opcional)" -#: plug-ins/imagemap/imap_edit_area_info.c:296 +#: plug-ins/imagemap/imap_edit_area_info.c:299 +#, fuzzy +#| msgid "ALT te_xt: (optional)" +msgid "Access _Key: (optional)" +msgstr "Te_xt alternatiu: (opcional)" + +#: plug-ins/imagemap/imap_edit_area_info.c:302 +#, fuzzy +#| msgid "ALT te_xt: (optional)" +msgid "Ta_b Index: (optional)" +msgstr "Te_xt alternatiu: (opcional)" + +#: plug-ins/imagemap/imap_edit_area_info.c:305 msgid "_Link" msgstr "En_llaç" -#: plug-ins/imagemap/imap_edit_area_info.c:330 +#: plug-ins/imagemap/imap_edit_area_info.c:339 msgid "Dimensions" msgstr "Dimensions" -#: plug-ins/imagemap/imap_edit_area_info.c:334 +#: plug-ins/imagemap/imap_edit_area_info.c:343 msgid "Pre_view" msgstr "Pre_visualització" -#: plug-ins/imagemap/imap_edit_area_info.c:372 +#: plug-ins/imagemap/imap_edit_area_info.c:385 msgid "_JavaScript" msgstr "_JavaScript" -#: plug-ins/imagemap/imap_edit_area_info.c:471 +#: plug-ins/imagemap/imap_edit_area_info.c:490 msgid "Area Settings" msgstr "Opcions de l'àrea" -#: plug-ins/imagemap/imap_edit_area_info.c:513 +#: plug-ins/imagemap/imap_edit_area_info.c:536 #, c-format msgid "Area #%d Settings" msgstr "Opcions de l'àrea núm.%d" @@ -12061,101 +13571,93 @@ msgstr "Mapa d'_imatge..." msgid "Create a clickable imagemap" msgstr "Crea un mapa d'imatge on es pugui fer clic" -#: plug-ins/imagemap/imap_main.c:1024 plug-ins/imagemap/imap_settings.c:170 +#: plug-ins/imagemap/imap_main.c:652 plug-ins/imagemap/imap_settings.c:170 msgid "" msgstr "" -#: plug-ins/imagemap/imap_main.c:1172 +#: plug-ins/imagemap/imap_main.c:800 msgid "Some data has been changed!" msgstr "Algunes dades han canviat!" -#: plug-ins/imagemap/imap_main.c:1175 +#: plug-ins/imagemap/imap_main.c:803 msgid "Do you really want to discard your changes?" msgstr "Segur que voleu descartar els canvis?" -#: plug-ins/imagemap/imap_main.c:1412 +#: plug-ins/imagemap/imap_main.c:1040 #, c-format msgid "File \"%s\" saved." msgstr "S'ha desat el fitxer «%s»." -#: plug-ins/imagemap/imap_main.c:1416 +#: plug-ins/imagemap/imap_main.c:1044 msgid "Couldn't save file:" msgstr "No s'ha pogut desar el fitxer:" -#: plug-ins/imagemap/imap_main.c:1429 +#: plug-ins/imagemap/imap_main.c:1057 msgid "Image size has changed." msgstr "Ha canviat la mida de la imatge." -#: plug-ins/imagemap/imap_main.c:1430 +#: plug-ins/imagemap/imap_main.c:1058 msgid "Resize area's?" msgstr "Voleu redimensionar l'àrea?" -#: plug-ins/imagemap/imap_main.c:1472 +#: plug-ins/imagemap/imap_main.c:1100 msgid "Couldn't read file:" msgstr "No s'ha pogut llegir el fitxer:" -#: plug-ins/imagemap/imap_main.c:1525 +#: plug-ins/imagemap/imap_main.c:1153 #, c-format msgid "URL: %s" msgstr "URL: %s" -#: plug-ins/imagemap/imap_main.c:1894 -msgid "Open" -msgstr "Obre" - -#: plug-ins/imagemap/imap_main.c:1896 -msgid "Save" -msgstr "Desa" - -#: plug-ins/imagemap/imap_main.c:1899 -msgid "Preferences" -msgstr "Preferències" - -#: plug-ins/imagemap/imap_main.c:1914 +#: plug-ins/imagemap/imap_main.c:1542 plug-ins/imagemap/imap-menu.ui:108 +#: plug-ins/imagemap/imap-menu.ui:279 msgid "Zoom In" msgstr "Amplia" -#: plug-ins/imagemap/imap_main.c:1916 +#: plug-ins/imagemap/imap_main.c:1544 plug-ins/imagemap/imap-menu.ui:112 +#: plug-ins/imagemap/imap-menu.ui:283 msgid "Zoom Out" msgstr "Redueix" -#: plug-ins/imagemap/imap_main.c:1919 +#: plug-ins/imagemap/imap_main.c:1547 msgid "Edit Map Info" msgstr "Edita la informació del mapa" -#: plug-ins/imagemap/imap_main.c:1922 +#: plug-ins/imagemap/imap_main.c:1550 msgid "Move Area to Front" msgstr "Mou l'àrea cap endavant" -#: plug-ins/imagemap/imap_main.c:1924 +#: plug-ins/imagemap/imap_main.c:1552 msgid "Move Area to Bottom" msgstr "Mou l'àrea cap al fons" -#: plug-ins/imagemap/imap_main.c:1942 +#: plug-ins/imagemap/imap_main.c:1570 plug-ins/imagemap/imap-menu.ui:166 +#: plug-ins/imagemap/imap-menu.ui:254 msgid "Arrow" msgstr "Fletxa" -#: plug-ins/imagemap/imap_main.c:1942 +#: plug-ins/imagemap/imap_main.c:1570 msgid "Select Existing Area" msgstr "Selecciona l'àrea existent" -#: plug-ins/imagemap/imap_main.c:1944 +#: plug-ins/imagemap/imap_main.c:1572 msgid "Define Rectangle area" msgstr "Defineix una regió rectangular" -#: plug-ins/imagemap/imap_main.c:1946 +#: plug-ins/imagemap/imap_main.c:1574 msgid "Define Circle/Oval area" msgstr "Defineix una regió circular/oval" -#: plug-ins/imagemap/imap_main.c:1948 +#: plug-ins/imagemap/imap_main.c:1576 msgid "Define Polygon area" msgstr "Defineix una regió poligonal" -#: plug-ins/imagemap/imap_main.c:1951 plug-ins/imagemap/imap_menu.c:180 +#: plug-ins/imagemap/imap_main.c:1579 plug-ins/imagemap/imap_menu.c:180 +#: plug-ins/imagemap/imap-menu.ui:310 plug-ins/imagemap/imap-menu.ui:347 msgid "Edit Area Info..." msgstr "Edita la informació de l'àrea..." -#: plug-ins/imagemap/imap_main.c:1951 plug-ins/imagemap/imap_menu.c:180 +#: plug-ins/imagemap/imap_main.c:1579 plug-ins/imagemap/imap_menu.c:180 msgid "Edit selected area info" msgstr "Edita la informació de la regió seleccionada" @@ -12241,7 +13743,7 @@ msgstr "Nombre d'entrades més _recents (1-16):" msgid "Select Color" msgstr "Selecciona el color" -#: plug-ins/imagemap/imap_preferences.c:453 +#: plug-ins/imagemap/imap_preferences.c:453 plug-ins/pagecurl/pagecurl.c:229 msgid "Colors" msgstr "Colors" @@ -12262,7 +13764,6 @@ msgid "Co_ntiguous Region" msgstr "Regió co_ntigua" #: plug-ins/imagemap/imap_preferences.c:476 -#: plug-ins/map-object/map-object-ui.c:572 msgid "_Threshold:" msgstr "_Llindar:" @@ -12286,6 +13787,12 @@ msgstr "Superior esquerra _x:" msgid "Upper left _y:" msgstr "Superior esquerra _y:" +#. Create selection +#: plug-ins/imagemap/imap_selection.c:339 +#: plug-ins/selection-to-path/selection-to-path.c:535 +msgid "Selection" +msgstr "Selecció" + #: plug-ins/imagemap/imap_selection.c:349 msgid "#" msgstr "#" @@ -12330,6 +13837,10 @@ msgstr "Aut_or:" msgid "Default _URL:" msgstr "_URL per defecte:" +#: plug-ins/imagemap/imap_settings.c:105 +msgid "_Description:" +msgstr "_Descripció:" + #: plug-ins/imagemap/imap_settings.c:127 msgid "Map File Format" msgstr "Format de fitxer del mapa" @@ -12338,7 +13849,147 @@ msgstr "Format de fitxer del mapa" msgid "View Source" msgstr "Mostra la font" -#: plug-ins/lighting/lighting-apply.c:101 plug-ins/lighting/lighting-ui.c:1034 +#: plug-ins/imagemap/imap-menu.ui:16 +#, fuzzy +#| msgid "Save _as" +msgid "Save As" +msgstr "_Anomena i desa" + +#: plug-ins/imagemap/imap-menu.ui:65 +#, fuzzy +#| msgid "Unselect All" +msgid "Deselect All" +msgstr "No seleccionis res" + +#: plug-ins/imagemap/imap-menu.ui:71 +#, fuzzy +#| msgid "Edit Area Info..." +msgid "Edit Area Info" +msgstr "Edita la informació de l'àrea..." + +#: plug-ins/imagemap/imap-menu.ui:83 +#, fuzzy +#| msgid "List View" +msgid "View" +msgstr "Visualització de llista" + +#: plug-ins/imagemap/imap-menu.ui:86 +#, fuzzy +#| msgid "Area Settings" +msgid "Area List" +msgstr "Opcions de l'àrea" + +#: plug-ins/imagemap/imap-menu.ui:90 +#, fuzzy +#| msgid "Source" +msgid "Source..." +msgstr "Font" + +#: plug-ins/imagemap/imap-menu.ui:116 +#, fuzzy +#| msgid "Zoom" +msgid "Zoom To" +msgstr "Ampliació/Reducció" + +#: plug-ins/imagemap/imap-menu.ui:119 +#, fuzzy +msgid "1:1" +msgstr "1:1" + +#: plug-ins/imagemap/imap-menu.ui:124 +#, fuzzy +msgid "1:2" +msgstr "1:2" + +#: plug-ins/imagemap/imap-menu.ui:129 +#, fuzzy +msgid "1:3" +msgstr "1:3" + +#: plug-ins/imagemap/imap-menu.ui:134 +#, fuzzy +msgid "1:4" +msgstr "1:4" + +#: plug-ins/imagemap/imap-menu.ui:139 +#, fuzzy +msgid "1:5" +msgstr "1:5" + +#: plug-ins/imagemap/imap-menu.ui:144 +#, fuzzy +msgid "1:6" +msgstr "1:6" + +#: plug-ins/imagemap/imap-menu.ui:149 +#, fuzzy +msgid "1:7" +msgstr "1:7" + +#: plug-ins/imagemap/imap-menu.ui:154 +#, fuzzy +msgid "1:8" +msgstr "1:8" + +#: plug-ins/imagemap/imap-menu.ui:163 +#, fuzzy +#| msgid "Rings" +msgid "Mappings" +msgstr "Anells" + +#: plug-ins/imagemap/imap-menu.ui:188 plug-ins/imagemap/imap-menu.ui:247 +#, fuzzy +#| msgid "Edit Map Info" +msgid "Edit Map Info..." +msgstr "Edita la informació del mapa" + +#: plug-ins/imagemap/imap-menu.ui:194 plug-ins/imagemap/imap-menu.ui:251 +#, fuzzy +msgid "Tools" +msgstr "Eines" + +#: plug-ins/imagemap/imap-menu.ui:201 plug-ins/imagemap/imap-menu.ui:293 +#, fuzzy +#| msgid "Grid Settings" +msgid "Grid Settings..." +msgstr "Opcions de la quadrícula" + +#: plug-ins/imagemap/imap-menu.ui:207 +#, fuzzy +#| msgid "Use Pika Guides" +msgid "Use PIKA Guides..." +msgstr "Utilitza les guies del PIKA" + +#: plug-ins/imagemap/imap-menu.ui:211 plug-ins/imagemap/imap-menu.ui:297 +#, fuzzy +#| msgid "Create Guides" +msgid "Create Guides..." +msgstr "Crea les guies" + +#: plug-ins/imagemap/imap-menu.ui:217 +#, fuzzy +#| msgid "_Help" +msgid "Help" +msgstr "_Ajuda" + +#: plug-ins/imagemap/imap-menu.ui:220 plug-ins/screenshot/screenshot.c:536 +#, fuzzy +#| msgid "Cell con_tent" +msgid "Contents" +msgstr "Contingut de la c_el·la" + +#: plug-ins/imagemap/imap-menu.ui:224 +#, fuzzy +msgid "About" +msgstr "Quant a" + +#: plug-ins/imagemap/imap-menu.ui:314 plug-ins/imagemap/imap-menu.ui:351 +#, fuzzy +#| msgid "Delete Fractal" +msgid "Delete Area" +msgstr "Suprimeix la fractal" + +#: plug-ins/lighting/lighting-apply.c:101 plug-ins/lighting/lighting-ui.c:202 msgid "Lighting Effects" msgstr "Efectes de llum" @@ -12350,283 +14001,404 @@ msgstr "Efectes de _llum..." msgid "Apply various lighting effects to an image" msgstr "Aplica diversos efectes de llum a la imatge" -#. General options -#: plug-ins/lighting/lighting-ui.c:311 plug-ins/map-object/map-object-ui.c:446 -msgid "General Options" -msgstr "Opcions generals" +#: plug-ins/lighting/lighting-main.c:136 +#, fuzzy +#| msgid "Bumpm_ap image:" +msgid "B_ump map image" +msgstr "M_apa de relleu:" -#: plug-ins/lighting/lighting-ui.c:319 -msgid "T_ransparent background" -msgstr "Fons t_ransparent" +#: plug-ins/lighting/lighting-main.c:137 +#, fuzzy +msgid "Bumpmap drawable (set to NULL if disabled)" +msgstr "Dibuixable amb mapa de relleu (establiu-ho a NULL si està desactivat)" -#: plug-ins/lighting/lighting-ui.c:329 -msgid "Make destination image transparent where bump height is zero" -msgstr "Fes transparent la imatge de destinació on l'alçada sigui zero" +#: plug-ins/lighting/lighting-main.c:142 +#, fuzzy +#| msgid "En_vironment image:" +msgid "Enviro_nment map image" +msgstr "Imatge de l'e_ntorn:" -#: plug-ins/lighting/lighting-ui.c:332 -msgid "Cre_ate new image" -msgstr "Cre_a una imatge nova" +#: plug-ins/lighting/lighting-main.c:143 +#, fuzzy +msgid "Environmentmap drawable (set to NULL if disabled)" +msgstr "" +"Dibuixable amb el mapa d'entorn (establiu-lo a NULL si està desactivat)" -#: plug-ins/lighting/lighting-ui.c:342 plug-ins/map-object/map-object-ui.c:515 -msgid "Create a new image when applying filter" -msgstr "Crearà una imatge nova quan s'apliqui el filtre" +#: plug-ins/lighting/lighting-main.c:149 +#, fuzzy +#| msgid "E_nable bump mapping" +msgid "Enable bump mappi_ng" +msgstr "Ha_bilita el mapa de relleu" -#: plug-ins/lighting/lighting-ui.c:344 -msgid "High _quality preview" -msgstr "Previsualització d'alta _qualitat" +#: plug-ins/lighting/lighting-main.c:150 +#, fuzzy +#| msgid "E_nable bump mapping" +msgid "Enable bumpmapping" +msgstr "Ha_bilita el mapa de relleu" -#: plug-ins/lighting/lighting-ui.c:354 -msgid "Enable/disable high quality preview" -msgstr "Habilita/inhabilita la previsualització d'alta qualitat" +#: plug-ins/lighting/lighting-main.c:155 +#, fuzzy +#| msgid "E_nable environment mapping" +msgid "Enable en_vironment mapping" +msgstr "Habilita el mapat de l'e_ntorn" -#: plug-ins/lighting/lighting-ui.c:356 -msgid "Distance:" -msgstr "Distància:" +#: plug-ins/lighting/lighting-main.c:156 plug-ins/lighting/lighting-main.c:291 +#, fuzzy +#| msgid "E_nable environment mapping" +msgid "Enable envmapping" +msgstr "Habilita el mapat de l'e_ntorn" -#: plug-ins/lighting/lighting-ui.c:389 plug-ins/map-object/map-object-ui.c:606 -msgid "Light Settings" -msgstr "Paràmetres de la llum" +#: plug-ins/lighting/lighting-main.c:161 +#, fuzzy +msgid "Cur_ve" +msgstr "Corba" -#: plug-ins/lighting/lighting-ui.c:399 +#: plug-ins/lighting/lighting-main.c:162 +#: plug-ins/map-object/map-object-main.c:136 +#, fuzzy +msgid "Type of mapping" +msgstr "Tipus de mapatge" + +#: plug-ins/lighting/lighting-main.c:164 +msgid "Logarithmic" +msgstr "Logarítmic" + +#: plug-ins/lighting/lighting-main.c:172 +#, fuzzy +#| msgid "Ma_ximum height:" +msgid "Ma_ximum height" +msgstr "Alçada mà_xima:" + +#: plug-ins/lighting/lighting-main.c:173 +#, fuzzy +#| msgid "Maximum height for bumps" +msgid "The maximum height of the bumpmap" +msgstr "Alçada màxima de les zones elevades" + +#: plug-ins/lighting/lighting-main.c:178 +#, fuzzy +#| msgid "Adaptive" +msgid "Active" +msgstr "Adaptable" + +#: plug-ins/lighting/lighting-main.c:179 +#, fuzzy +msgid "Which light is active in the GUI" +msgstr "Quina llum està activa a la IGU" + +#: plug-ins/lighting/lighting-main.c:180 msgid "Light 1" msgstr "Llum 1" -#: plug-ins/lighting/lighting-ui.c:400 +#: plug-ins/lighting/lighting-main.c:181 msgid "Light 2" msgstr "Llum 2" -#: plug-ins/lighting/lighting-ui.c:401 +#: plug-ins/lighting/lighting-main.c:182 msgid "Light 3" msgstr "Llum 3" -#: plug-ins/lighting/lighting-ui.c:402 +#: plug-ins/lighting/lighting-main.c:183 msgid "Light 4" msgstr "Llum 4" -#: plug-ins/lighting/lighting-ui.c:403 +#: plug-ins/lighting/lighting-main.c:184 msgid "Light 5" msgstr "Llum 5" -#: plug-ins/lighting/lighting-ui.c:404 +#: plug-ins/lighting/lighting-main.c:185 msgid "Light 6" msgstr "Llum 6" -#: plug-ins/lighting/lighting-ui.c:419 -msgid "Color:" -msgstr "Color:" +#: plug-ins/lighting/lighting-main.c:191 +#, fuzzy +#| msgid "I_solate" +msgid "Isolate" +msgstr "Aï_lla" -#: plug-ins/lighting/lighting-ui.c:425 -msgctxt "light-source" -msgid "None" -msgstr "Cap" +#: plug-ins/lighting/lighting-main.c:192 +#, fuzzy +msgid "Only show the active lighting in the preview" +msgstr "Mostra només la il·luminació activa a la vista prèvia" -#: plug-ins/lighting/lighting-ui.c:426 +#: 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 +#: plug-ins/lighting/lighting-main.c:499 plug-ins/lighting/lighting-main.c:558 +#, fuzzy +#| msgid "Type of light source to apply" +msgid "Type of light source" +msgstr "Font del tipus de llum a aplicar" + +#: plug-ins/lighting/lighting-main.c:201 plug-ins/lighting/lighting-main.c:324 +#: plug-ins/lighting/lighting-main.c:383 plug-ins/lighting/lighting-main.c:442 +#: plug-ins/lighting/lighting-main.c:501 plug-ins/lighting/lighting-main.c:560 msgid "Directional" msgstr "Direccional" -#: plug-ins/lighting/lighting-ui.c:427 +#: plug-ins/lighting/lighting-main.c:202 plug-ins/lighting/lighting-main.c:325 +#: plug-ins/lighting/lighting-main.c:384 plug-ins/lighting/lighting-main.c:443 +#: plug-ins/lighting/lighting-main.c:502 plug-ins/lighting/lighting-main.c:561 msgid "Point" msgstr "Punt" -#: plug-ins/lighting/lighting-ui.c:441 plug-ins/map-object/map-object-ui.c:630 -msgid "Type of light source to apply" -msgstr "Font del tipus de llum a aplicar" +#: 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 "Taques" -#: plug-ins/lighting/lighting-ui.c:443 plug-ins/map-object/map-object-ui.c:632 -msgid "Select lightsource color" -msgstr "Seleccioneu el color de la font de llum" +#: 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 la font de llum:" -#: plug-ins/lighting/lighting-ui.c:458 plug-ins/map-object/map-object-ui.c:645 -msgid "Set light source color" -msgstr "Definiu la font de color de la llum" - -#: plug-ins/lighting/lighting-ui.c:468 -msgid "_Intensity:" +#: 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 +#: plug-ins/lighting/lighting-main.c:515 plug-ins/lighting/lighting-main.c:574 +#, fuzzy +#| msgid "_Intensity:" +msgid "Intensity" msgstr "_Intensitat:" -#: plug-ins/lighting/lighting-ui.c:476 -msgid "Light intensity" +#: plug-ins/lighting/lighting-main.c:216 plug-ins/lighting/lighting-main.c:339 +#: plug-ins/lighting/lighting-main.c:398 plug-ins/lighting/lighting-main.c:457 +#: plug-ins/lighting/lighting-main.c:516 plug-ins/lighting/lighting-main.c:575 +#, fuzzy +#| msgid "Light intensity" +msgid "Light source intensity" msgstr "Intensitat de la llum" -#: plug-ins/lighting/lighting-ui.c:479 plug-ins/map-object/map-object-ui.c:647 -#: plug-ins/map-object/map-object-ui.c:967 +#: plug-ins/lighting/lighting-main.c:221 plug-ins/lighting/lighting-main.c:344 +#: 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 "Mostra la posició" + +#: 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 +#: plug-ins/lighting/lighting-main.c:351 plug-ins/lighting/lighting-main.c:357 +#: plug-ins/lighting/lighting-main.c:404 plug-ins/lighting/lighting-main.c:410 +#: plug-ins/lighting/lighting-main.c:416 plug-ins/lighting/lighting-main.c:463 +#: plug-ins/lighting/lighting-main.c:469 plug-ins/lighting/lighting-main.c:475 +#: plug-ins/lighting/lighting-main.c:522 plug-ins/lighting/lighting-main.c:528 +#: plug-ins/lighting/lighting-main.c:534 plug-ins/lighting/lighting-main.c:581 +#: plug-ins/lighting/lighting-main.c:587 plug-ins/lighting/lighting-main.c:593 +#: plug-ins/map-object/map-object-main.c:243 +#: plug-ins/map-object/map-object-main.c:248 +#: plug-ins/map-object/map-object-main.c:253 +#, fuzzy +#| msgid "Light source X position in XYZ space" +msgid "Light source position (x,y,z)" +msgstr "Posició de la font de llum X en l'espai XYZ" + +#: plug-ins/lighting/lighting-main.c:227 plug-ins/lighting/lighting-main.c:350 +#: 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 "Mostra la posició" + +#: 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 "Mostra la posició" + +#: 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 Settings" +msgid "Light direction X" +msgstr "Paràmetres de la llum" + +#: 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 +#: plug-ins/lighting/lighting-main.c:369 plug-ins/lighting/lighting-main.c:375 +#: plug-ins/lighting/lighting-main.c:422 plug-ins/lighting/lighting-main.c:428 +#: plug-ins/lighting/lighting-main.c:434 plug-ins/lighting/lighting-main.c:481 +#: plug-ins/lighting/lighting-main.c:487 plug-ins/lighting/lighting-main.c:493 +#: plug-ins/lighting/lighting-main.c:540 plug-ins/lighting/lighting-main.c:546 +#: plug-ins/lighting/lighting-main.c:552 plug-ins/lighting/lighting-main.c:599 +#: plug-ins/lighting/lighting-main.c:605 plug-ins/lighting/lighting-main.c:611 +#: 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ó de la font de llum X en l'espai XYZ" + +#: 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 Settings" +msgid "Light direction Y" +msgstr "Paràmetres de la llum" + +#: 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 Settings" +msgid "Light direction Z" +msgstr "Paràmetres de la llum" + +#: plug-ins/lighting/lighting-main.c:257 +#, fuzzy +#| msgid "Light intensity" +msgid "Ambient intensity" +msgstr "Intensitat de la llum" + +#: plug-ins/lighting/lighting-main.c:258 +#, fuzzy +msgid "Material ambient intensity (Glowing)" +msgstr "Intensitat ambiental del material (Gluent)" + +#: plug-ins/lighting/lighting-main.c:264 +#, fuzzy +#| msgid "Light intensity" +msgid "Diffuse intensity" +msgstr "Intensitat de la llum" + +#: plug-ins/lighting/lighting-main.c:265 +#, fuzzy +msgid "Material diffuse intensity (Bright)" +msgstr "Intensitat difusa del material (Bright)" + +#: plug-ins/lighting/lighting-main.c:290 +#, fuzzy +#| msgid "_Metallic" +msgid "Metallic" +msgstr "_Metàl·lic" + +#: plug-ins/lighting/lighting-main.c:297 +#: plug-ins/map-object/map-object-main.c:307 +#, fuzzy +#| msgid "Antialiasing" +msgid "Apply antialiasing" +msgstr "Antialiàsing" + +#: plug-ins/lighting/lighting-main.c:302 +#, fuzzy +#| msgid "Create new image" +msgid "Create new ima_ge" +msgstr "Crea una imatge nova" + +#: 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 "Crea una imatge nova" + +#: plug-ins/lighting/lighting-main.c:308 +#, fuzzy +#| msgid "Transparent background" +msgid "Trans_parent background" +msgstr "Fons transparent" + +#: plug-ins/lighting/lighting-main.c:309 +#: plug-ins/map-object/map-object-main.c:343 +#, fuzzy +#| msgid "Background transparent" +msgid "Make background transparent" +msgstr "Fons transparent" + +#: plug-ins/lighting/lighting-main.c:314 +#, fuzzy +#| msgid "Distance:" +msgid "_Distance" +msgstr "Distància:" + +#: plug-ins/lighting/lighting-main.c:315 +#, fuzzy +msgid "Distance of observer from surface" +msgstr "Distància de l'observador des de la superfície" + +#: plug-ins/lighting/lighting-ui.c:247 plug-ins/map-object/map-object-ui.c:394 +msgid "Recompute preview image" +msgstr "Torna a calcular la imatge de previsualització" + +#: plug-ins/lighting/lighting-ui.c:249 +msgid "I_nteractive" +msgstr "I_nteractiu" + +#: plug-ins/lighting/lighting-ui.c:263 +msgid "Enable/disable real time preview of changes" +msgstr "Habilita/inhabilita la previsualització dels canvis" + +#: plug-ins/lighting/lighting-ui.c:268 +msgid "Op_tions" +msgstr "Op_cions" + +#: plug-ins/lighting/lighting-ui.c:270 +msgid "_Light" +msgstr "_Llum" + +#: plug-ins/lighting/lighting-ui.c:272 plug-ins/map-object/map-object-ui.c:437 +msgid "_Material" +msgstr "_Material" + +#: plug-ins/lighting/lighting-ui.c:274 +msgid "_Bump Map" +msgstr "_Mapa de relleu" + +#: plug-ins/lighting/lighting-ui.c:276 +msgid "_Environment Map" +msgstr "Mapa de l'e_ntorn" + +#: plug-ins/lighting/lighting-ui.c:281 plug-ins/map-object/map-object-ui.c:450 +msgid "General Options" +msgstr "Opcions generals" + +#: plug-ins/lighting/lighting-ui.c:313 plug-ins/map-object/map-object-ui.c:486 +msgid "Light Settings" +msgstr "Paràmetres de la llum" + +#: plug-ins/lighting/lighting-ui.c:332 plug-ins/map-object/map-object-ui.c:520 +#: plug-ins/map-object/map-object-ui.c:718 #: plug-ins/print/print-page-layout.c:384 msgid "Position" msgstr "Posició" -#: plug-ins/lighting/lighting-ui.c:499 plug-ins/map-object/map-object-ui.c:671 -msgid "Light source X position in XYZ space" -msgstr "Posició de la font de llum X en l'espai XYZ" - -#: plug-ins/lighting/lighting-ui.c:516 plug-ins/map-object/map-object-ui.c:685 -msgid "Light source Y position in XYZ space" -msgstr "Posició de la font de llum Y en l'espai XYZ" - -#: plug-ins/lighting/lighting-ui.c:525 -msgid "_Z:" -msgstr "_Z:" - -#: plug-ins/lighting/lighting-ui.c:533 plug-ins/map-object/map-object-ui.c:699 -msgid "Light source Z position in XYZ space" -msgstr "Posició de la font de llum Z en l'espai XYZ" - -#: plug-ins/lighting/lighting-ui.c:536 +#: plug-ins/lighting/lighting-ui.c:337 msgid "Direction" msgstr "Direcció" -#: plug-ins/lighting/lighting-ui.c:554 plug-ins/map-object/map-object-ui.c:725 -msgid "Light source X direction in XYZ space" -msgstr "Direcció de la font de llum X en l'espai XYZ" - -#: plug-ins/lighting/lighting-ui.c:569 plug-ins/map-object/map-object-ui.c:738 -msgid "Light source Y direction in XYZ space" -msgstr "Direcció de la font de llum Y en l'espai XYZ" - -#: plug-ins/lighting/lighting-ui.c:576 plug-ins/map-object/map-object-ui.c:691 -#: plug-ins/map-object/map-object-ui.c:743 -#: plug-ins/map-object/map-object-ui.c:1001 -#: plug-ins/map-object/map-object-ui.c:1045 -#: plug-ins/map-object/map-object-ui.c:1145 -msgid "Z:" -msgstr "Z:" - -#: plug-ins/lighting/lighting-ui.c:584 plug-ins/map-object/map-object-ui.c:751 -msgid "Light source Z direction in XYZ space" -msgstr "Direcció de la font de llum Z en l'espai XYZ" - -#: plug-ins/lighting/lighting-ui.c:587 -msgid "I_solate" -msgstr "Aï_lla" - -#: plug-ins/lighting/lighting-ui.c:596 -msgid "Lighting preset:" +#: plug-ins/lighting/lighting-ui.c:478 +#, fuzzy +#| msgid "Lighting preset:" +msgid "Lighting presets: " msgstr "Preconfiguració de llum:" -#: plug-ins/lighting/lighting-ui.c:641 +#: plug-ins/lighting/lighting-ui.c:511 msgid "Material Properties" msgstr "Propietats del material" -#: plug-ins/lighting/lighting-ui.c:660 -msgid "_Glowing:" -msgstr "_Ambient:" - -#: plug-ins/lighting/lighting-ui.c:678 plug-ins/map-object/map-object-ui.c:812 -msgid "Amount of original color to show where no direct light falls" -msgstr "Quantitat de color original per a mostrar on no hi ha llum directa" - -#: plug-ins/lighting/lighting-ui.c:691 -msgid "_Bright:" -msgstr "_Lluentor:" - -#: plug-ins/lighting/lighting-ui.c:709 plug-ins/map-object/map-object-ui.c:839 -msgid "Intensity of original color when lit by a light source" -msgstr "Intensitat del color original quan l'il·lumina una font de llum" - -#: plug-ins/lighting/lighting-ui.c:722 -msgid "_Shiny:" -msgstr "_Brillant:" - -#: plug-ins/lighting/lighting-ui.c:740 plug-ins/map-object/map-object-ui.c:908 -msgid "Controls how intense the highlights will be" -msgstr "Controla la intensitat del realçat" - -#: plug-ins/lighting/lighting-ui.c:752 -msgid "_Polished:" -msgstr "_Polit:" - -#: plug-ins/lighting/lighting-ui.c:770 plug-ins/map-object/map-object-ui.c:935 -msgid "Higher values makes the highlights more focused" -msgstr "Els valors alts fan que el que es realça estigui més enfocat" - -#. Metallic -#: plug-ins/lighting/lighting-ui.c:779 -msgid "_Metallic" -msgstr "_Metàl·lic" - -#: plug-ins/lighting/lighting-ui.c:815 -msgid "E_nable bump mapping" -msgstr "Ha_bilita el mapa de relleu" - -#: plug-ins/lighting/lighting-ui.c:829 -msgid "Enable/disable bump-mapping (image depth)" -msgstr "Habilita/inhabilita el mapa de relleu (profunditat d'imatge)" - -#: plug-ins/lighting/lighting-ui.c:852 -msgid "Bumpm_ap image:" -msgstr "M_apa de relleu:" - -#: plug-ins/lighting/lighting-ui.c:856 -msgid "Logarithmic" -msgstr "Logarítmic" - -#: plug-ins/lighting/lighting-ui.c:868 -msgid "Cu_rve:" -msgstr "Cor_ba:" - -#: plug-ins/lighting/lighting-ui.c:874 -msgid "Ma_ximum height:" -msgstr "Alçada mà_xima:" - -#: plug-ins/lighting/lighting-ui.c:884 -msgid "Maximum height for bumps" -msgstr "Alçada màxima de les zones elevades" - -#: plug-ins/lighting/lighting-ui.c:908 -msgid "E_nable environment mapping" -msgstr "Habilita el mapat de l'e_ntorn" - -#: plug-ins/lighting/lighting-ui.c:922 -msgid "Enable/disable environment-mapping (reflection)" -msgstr "Habilita/inhabilita el mapat de l'entorn (reflexió)" - -#: plug-ins/lighting/lighting-ui.c:940 -msgid "En_vironment image:" -msgstr "Imatge de l'e_ntorn:" - -#: plug-ins/lighting/lighting-ui.c:943 -msgid "Environment image to use" -msgstr "Imatge de l'entorn que s'utilitzarà" - -#: plug-ins/lighting/lighting-ui.c:965 -msgid "Op_tions" -msgstr "Op_cions" - -#: plug-ins/lighting/lighting-ui.c:969 -#: plug-ins/map-object/map-object-ui.c:1267 -msgid "_Light" -msgstr "_Llum" - -#: plug-ins/lighting/lighting-ui.c:973 -#: plug-ins/map-object/map-object-ui.c:1271 -msgid "_Material" -msgstr "_Material" - -#: plug-ins/lighting/lighting-ui.c:977 -msgid "_Bump Map" -msgstr "_Mapa de relleu" - -#: plug-ins/lighting/lighting-ui.c:981 -msgid "_Environment Map" -msgstr "Mapa de l'e_ntorn" - -#: plug-ins/lighting/lighting-ui.c:1100 -#: plug-ins/map-object/map-object-ui.c:1382 -msgid "Recompute preview image" -msgstr "Torna a calcular la imatge de previsualització" - -#: plug-ins/lighting/lighting-ui.c:1102 -msgid "I_nteractive" -msgstr "I_nteractiu" - -#: plug-ins/lighting/lighting-ui.c:1116 -msgid "Enable/disable real time preview of changes" -msgstr "Habilita/inhabilita la previsualització dels canvis" - -#: plug-ins/lighting/lighting-ui.c:1159 +#: plug-ins/lighting/lighting-ui.c:734 msgid "Save Lighting Preset" msgstr "Desa la preconfiguració de la llum" -#: plug-ins/lighting/lighting-ui.c:1303 +#: plug-ins/lighting/lighting-ui.c:878 msgid "Load Lighting Preset" msgstr "Carrega la preconfiguració de la llum" @@ -12658,245 +14430,503 @@ msgstr "Projecta sobre un _objecte..." msgid "Map the image to an object (plane, sphere, box or cylinder)" msgstr "Projecta la imatge sobre un objecte (pla, esfera, cub o cilindre)" -#: plug-ins/map-object/map-object-ui.c:219 -#: plug-ins/map-object/map-object-ui.c:1282 -msgid "_Box" -msgstr "_Quadre" - -#: plug-ins/map-object/map-object-ui.c:236 -#: plug-ins/map-object/map-object-ui.c:1289 -msgid "C_ylinder" -msgstr "C_ilindre" - -#: plug-ins/map-object/map-object-ui.c:458 -msgid "Map to:" +#: plug-ins/map-object/map-object-main.c:135 +#, fuzzy +#| msgid "Map to:" +msgid "Map _to" msgstr "Projecta sobre un:" -#: plug-ins/map-object/map-object-ui.c:462 +#: plug-ins/map-object/map-object-main.c:137 msgid "Plane" msgstr "Pla" -#: plug-ins/map-object/map-object-ui.c:463 +#: plug-ins/map-object/map-object-main.c:138 msgid "Sphere" msgstr "Esfera" -#: plug-ins/map-object/map-object-ui.c:464 +#: plug-ins/map-object/map-object-main.c:139 msgid "Box" msgstr "Quadre" -#: plug-ins/map-object/map-object-ui.c:475 -msgid "Type of object to map to" -msgstr "Tipus d'objecte sobre del qual es vol fer la projecció" +#: 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 +#, fuzzy +#| msgid "X:" +msgid "X" +msgstr "X:" -#: plug-ins/map-object/map-object-ui.c:477 -msgid "Transparent background" -msgstr "Fons transparent" +#: plug-ins/map-object/map-object-main.c:147 +#: plug-ins/map-object/map-object-main.c:152 +#: plug-ins/map-object/map-object-main.c:157 +#, fuzzy +msgid "Position of viewpoint (x,y,z)" +msgstr "Posició del punt de vista (x,y,z)" -#: plug-ins/map-object/map-object-ui.c:488 -msgid "Make image transparent outside object" -msgstr "Fes que la imatge sigui transparent fora de l'objecte" +#: plug-ins/map-object/map-object-main.c:151 +#: plug-ins/map-object/map-object-main.c:199 +#, fuzzy +#| msgid "Y:" +msgid "Y" +msgstr "Y:" -#: plug-ins/map-object/map-object-ui.c:490 -msgid "Tile source image" -msgstr "Compon un mosaic" +#: plug-ins/map-object/map-object-main.c:156 +#: plug-ins/map-object/map-object-main.c:188 +#: plug-ins/map-object/map-object-main.c:204 +#, fuzzy +#| msgid "Z:" +msgid "Z" +msgstr "Z:" -#: plug-ins/map-object/map-object-ui.c:501 -msgid "Tile source image: useful for infinite planes" -msgstr "Compon un mosaic de la imatge: útil per a plans infinits" +#: plug-ins/map-object/map-object-main.c:162 +#, fuzzy +#| msgid "Position X:" +msgid "Position X" +msgstr "Posició X:" -#: plug-ins/map-object/map-object-ui.c:504 -msgid "Create new image" -msgstr "Crea una imatge nova" +#: plug-ins/map-object/map-object-main.c:163 +#: plug-ins/map-object/map-object-main.c:168 +#: plug-ins/map-object/map-object-main.c:173 +#, fuzzy +#| msgid "Object X position in XYZ space" +msgid "Object position (x,y,z)" +msgstr "Posició de l'objecte X en l'espai XYZ" -#: plug-ins/map-object/map-object-ui.c:517 -msgid "Create new layer" -msgstr "Crea una capa nova" +#: plug-ins/map-object/map-object-main.c:167 +#, fuzzy +#| msgid "Position Y:" +msgid "Position Y" +msgstr "Posició Y:" -#: plug-ins/map-object/map-object-ui.c:528 -msgid "Create a new layer when applying filter" -msgstr "Crea una imatge nova quan s'apliqui el filtre" +#: plug-ins/map-object/map-object-main.c:172 +#, fuzzy +#| msgid "Position Z:" +msgid "Position Z" +msgstr "Posició Z:" -#: plug-ins/map-object/map-object-ui.c:536 -msgid "Enable _antialiasing" -msgstr "Habilita l'_antialiàsing" +#: plug-ins/map-object/map-object-main.c:179 +#: plug-ins/map-object/map-object-main.c:184 +#: plug-ins/map-object/map-object-main.c:189 +#, fuzzy +msgid "First axis of object (x,y,z)" +msgstr "Primer eix de l'objecte (x,y,z)" -#: plug-ins/map-object/map-object-ui.c:547 -msgid "Enable/disable jagged edges removal (antialiasing)" -msgstr "Habilita/inhabilita la supressió de vores irregulars (antialiàsing)" +#: plug-ins/map-object/map-object-main.c:183 +#, fuzzy +msgid "y" +msgstr "y" -#: plug-ins/map-object/map-object-ui.c:560 -msgid "_Depth:" +#: 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 +#, fuzzy +msgid "Second axis of object (x,y,z)" +msgstr "Segon eix de l'objecte (x,y,z)" + +#: plug-ins/map-object/map-object-main.c:210 +#, fuzzy +#| msgid "Angle:" +msgid "Angle X" +msgstr "Angle:" + +#: plug-ins/map-object/map-object-main.c:211 +#, fuzzy +#| msgid "Rotation angle about X axis" +msgid "Rotation about X axis in degrees" +msgstr "Rotació de l'angle sobre l'eix X" + +#: plug-ins/map-object/map-object-main.c:215 +#, fuzzy +#| msgid "Angle:" +msgid "Angle Y" +msgstr "Angle:" + +#: plug-ins/map-object/map-object-main.c:216 +#, fuzzy +#| msgid "Rotation angle about Y axis" +msgid "Rotation about Y axis in degrees" +msgstr "Rotació de l'angle sobre l'eix Y" + +#: plug-ins/map-object/map-object-main.c:220 +#, fuzzy +#| msgid "Angle:" +msgid "Angle Z" +msgstr "Angle:" + +#: plug-ins/map-object/map-object-main.c:221 +#, fuzzy +#| msgid "Rotation angle about Z axis" +msgid "Rotation about Z axis in degrees" +msgstr "Rotació de l'angle sobre l'eix Z" + +#: plug-ins/map-object/map-object-main.c:226 +#, fuzzy +#| msgid "Lightsource type:" +msgid "Light source type" +msgstr "Tipus de font de llum:" + +#: plug-ins/map-object/map-object-main.c:227 +#, fuzzy +#| msgid "Type of light source to apply" +msgid "Type of lightsource" +msgstr "Font del tipus de llum a aplicar" + +#: plug-ins/map-object/map-object-main.c:228 +#, fuzzy +#| msgid "Point light" +msgid "Point Light" +msgstr "Punt de llum" + +#: plug-ins/map-object/map-object-main.c:229 +#, fuzzy +#| msgid "Directional light" +msgid "Directional Light" +msgstr "Llum direccional" + +#: plug-ins/map-object/map-object-main.c:230 +#, fuzzy +#| msgid "No light" +msgid "No Light" +msgstr "Sense llum" + +#: plug-ins/map-object/map-object-main.c:236 +#, fuzzy +#| msgid "Lightsource color:" +msgid "Light source _color" +msgstr "Color de la font de llum:" + +#: plug-ins/map-object/map-object-main.c:274 +#, fuzzy +#| msgid "Ambient:" +msgid "Ambie_nt" +msgstr "Ambient:" + +#: plug-ins/map-object/map-object-main.c:275 +#, fuzzy +#| msgid "Material Properties" +msgid "Material ambient intensity" +msgstr "Propietats del material" + +#: plug-ins/map-object/map-object-main.c:280 +#, fuzzy +#| msgid "Diffuse:" +msgid "D_iffuse" +msgstr "Difusió:" + +#: plug-ins/map-object/map-object-main.c:281 +#, fuzzy +#| msgid "Original i_ntensity" +msgid "Material diffuse intensity" +msgstr "I_ntensitat original" + +#: plug-ins/map-object/map-object-main.c:287 +#, fuzzy +#| msgid "Diffuse:" +msgid "Di_ffuse" +msgstr "Difusió:" + +#: plug-ins/map-object/map-object-main.c:288 +#, fuzzy +msgid "Material diffuse reflectivity" +msgstr "Reflexivitat difusa del material" + +#: plug-ins/map-object/map-object-main.c:293 +#, fuzzy +#| msgid "Specular:" +msgid "Spec_ular" +msgstr "Especular:" + +#: plug-ins/map-object/map-object-main.c:294 +#, fuzzy +msgid "Material specular reflectivity" +msgstr "Reflexivitat especular del material" + +#: plug-ins/map-object/map-object-main.c:299 +#, fuzzy +#| msgid "Highlight:" +msgid "Highligh_t" +msgstr "Realçat:" + +#: plug-ins/map-object/map-object-main.c:300 +#, fuzzy +msgid "Material highlight (note, it's exponential)" +msgstr "Ressaltat del material (nota, és exponencial)" + +#: plug-ins/map-object/map-object-main.c:306 +#, fuzzy +#| msgid "Antialiasing" +msgid "Antialia_sing" +msgstr "Antialiàsing" + +#: plug-ins/map-object/map-object-main.c:311 +#, fuzzy +#| msgid "_Depth:" +msgid "_Depth" msgstr "Profun_ditat:" -#: plug-ins/map-object/map-object-ui.c:561 +#: plug-ins/map-object/map-object-main.c:312 msgid "Antialiasing quality. Higher is better, but slower" msgstr "Qualitat d'antialiàsing. Com més alta és millor, però més lenta" -#: plug-ins/map-object/map-object-ui.c:580 +#: plug-ins/map-object/map-object-main.c:317 +#, fuzzy +#| msgid "_Threshold" +msgid "Thr_eshold" +msgstr "_Llindar" + +#: plug-ins/map-object/map-object-main.c:318 msgid "Stop when pixel differences are smaller than this value" msgstr "Atura't quan les diferències de píxels són més altes que aquest valor" -#: plug-ins/map-object/map-object-ui.c:616 -msgid "Point light" -msgstr "Punt de llum" +#: plug-ins/map-object/map-object-main.c:324 +#, fuzzy +#| msgid "Tile source image" +msgid "_Tile source image" +msgstr "Compon un mosaic" -#: plug-ins/map-object/map-object-ui.c:617 -msgid "Directional light" -msgstr "Llum direccional" +#: plug-ins/map-object/map-object-main.c:325 +msgid "Tile source image" +msgstr "Compon un mosaic" -#: plug-ins/map-object/map-object-ui.c:618 -msgid "No light" -msgstr "Sense llum" +#: plug-ins/map-object/map-object-main.c:330 +#, fuzzy +#| msgid "Create new image" +msgid "Create _new image" +msgstr "Crea una imatge nova" -#: plug-ins/map-object/map-object-ui.c:623 -msgid "Lightsource type:" -msgstr "Tipus de font de llum:" +#: plug-ins/map-object/map-object-main.c:336 +#, fuzzy +#| msgid "Create new layer" +msgid "Create ne_w layer" +msgstr "Crea una capa nova" -#: plug-ins/map-object/map-object-ui.c:637 -msgid "Lightsource color:" -msgstr "Color de la font de llum:" +#: plug-ins/map-object/map-object-main.c:337 +msgid "Create a new layer when applying filter" +msgstr "Crea una imatge nova quan s'apliqui el filtre" -#: plug-ins/map-object/map-object-ui.c:702 +#: plug-ins/map-object/map-object-main.c:342 +#, fuzzy +#| msgid "Transparent background" +msgid "Transparent bac_kground" +msgstr "Fons transparent" + +#: plug-ins/map-object/map-object-main.c:350 +#, fuzzy +#| msgid "Spot radius:" +msgid "Sphere radius" +msgstr "Radi del punt:" + +#: plug-ins/map-object/map-object-main.c:356 +#, fuzzy +msgid "Fro_nt" +msgstr "Frontal" + +#: plug-ins/map-object/map-object-main.c:357 +#, fuzzy +msgid "Box front face (set this to NULL if not used)" +msgstr "Quadre frontal (establiu-ho a NULL si no s'utilitza)" + +#: plug-ins/map-object/map-object-main.c:362 +#, fuzzy +msgid "B_ack" +msgstr "Enrere" + +#: plug-ins/map-object/map-object-main.c:363 +#, fuzzy +msgid "Box back face" +msgstr "Cara posterior del quadre" + +#: plug-ins/map-object/map-object-main.c:368 +#, fuzzy +msgid "Box top face" +msgstr "Quadre cara superior" + +#: plug-ins/map-object/map-object-main.c:372 +#, fuzzy +#| msgid "Bottom:" +msgid "Bo_ttom" +msgstr "Part inferior:" + +#: plug-ins/map-object/map-object-main.c:373 +#, fuzzy +#| msgid "Bottom edge" +msgid "Box bottom face" +msgstr "Vora inferior" + +#: plug-ins/map-object/map-object-main.c:377 +#, fuzzy +msgid "Le_ft" +msgstr "Esquerra" + +#: plug-ins/map-object/map-object-main.c:378 +#, fuzzy +msgid "Box left face" +msgstr "Quadre de cara esquerra" + +#: plug-ins/map-object/map-object-main.c:383 +#, fuzzy +#| msgid "Copyright Notice" +msgid "Box right face" +msgstr "Avís de drets d'autor" + +#: plug-ins/map-object/map-object-main.c:388 +#, fuzzy +#| msgid "Scale X:" +msgid "Scale X" +msgstr "Escala X:" + +#: plug-ins/map-object/map-object-main.c:389 +#, fuzzy +#| msgid "Font size:" +msgid "Box X size" +msgstr "Mida de la lletra:" + +#: plug-ins/map-object/map-object-main.c:393 +#, fuzzy +#| msgid "Scale Y:" +msgid "Scale Y" +msgstr "Escala Y:" + +#: plug-ins/map-object/map-object-main.c:394 +#, fuzzy +#| msgid "Font size:" +msgid "Box Y size" +msgstr "Mida de la lletra:" + +#: plug-ins/map-object/map-object-main.c:398 +#, fuzzy +#| msgid "Scale Z:" +msgid "Scale Z" +msgstr "Escala Z:" + +#: plug-ins/map-object/map-object-main.c:399 +#, fuzzy +#| msgid "Font size:" +msgid "Box Z size" +msgstr "Mida de la lletra:" + +#: plug-ins/map-object/map-object-main.c:405 +#, fuzzy +#| msgid "_Top:" +msgid "_Top" +msgstr "Par_t superior:" + +#: plug-ins/map-object/map-object-main.c:406 +#, fuzzy +msgid "Cylinder top face (set this to NULL if not used)" +msgstr "Cara superior del cilindre (establiu-ho a NULL si no s'usa)" + +#: plug-ins/map-object/map-object-main.c:412 +#, fuzzy +msgid "Cylinder bottom face (set this to NULL if not used)" +msgstr "Cara inferior del cilindre (establiu-ho a NULL si no s'utilitza)" + +#: plug-ins/map-object/map-object-main.c:418 +msgid "Cylinder radius" +msgstr "Radi del cilindre" + +#: plug-ins/map-object/map-object-main.c:422 +#, fuzzy +#| msgid "Cylinder length" +msgid "Cylin_der length" +msgstr "Longitud del cilindre" + +#: plug-ins/map-object/map-object-main.c:423 +msgid "Cylinder length" +msgstr "Longitud del cilindre" + +#: plug-ins/map-object/map-object-ui.c:346 +msgid "Map to Object" +msgstr "Mapa a l'objecte" + +#: plug-ins/map-object/map-object-ui.c:382 +msgid "_Preview!" +msgstr "_Previsualitza!" + +#: plug-ins/map-object/map-object-ui.c:412 +msgid "Show _wireframe" +msgstr "Mostra el marc amb _filferros" + +#: plug-ins/map-object/map-object-ui.c:421 +msgid "Update preview _live" +msgstr "Actualitza la previsua_lització" + +#: plug-ins/map-object/map-object-ui.c:431 +msgid "O_ptions" +msgstr "O_pcions" + +#: plug-ins/map-object/map-object-ui.c:433 +#, fuzzy +#| msgid "Hi_ghlight" +msgid "Li_ght" +msgstr "R_essalta" + +#: plug-ins/map-object/map-object-ui.c:435 +#, fuzzy +#| msgid "Spike _points" +msgid "_Viewpoint" +msgstr "_Punts de les puntes" + +#: plug-ins/map-object/map-object-ui.c:439 +#, fuzzy +#| msgid "Orientation" +msgid "Orient_ation" +msgstr "Orientació" + +#: plug-ins/map-object/map-object-ui.c:442 +#, fuzzy +#| msgid "Sphere" +msgid "Sp_here" +msgstr "Esfera" + +#: plug-ins/map-object/map-object-ui.c:444 +msgid "_Box" +msgstr "_Quadre" + +#: plug-ins/map-object/map-object-ui.c:446 +msgid "C_ylinder" +msgstr "C_ilindre" + +#: plug-ins/map-object/map-object-ui.c:506 msgid "Direction Vector" msgstr "Vector de direcció" -#: plug-ins/map-object/map-object-ui.c:778 +#: plug-ins/map-object/map-object-ui.c:563 +#, fuzzy +#| msgid "Position" +msgid "Viewpoint Position" +msgstr "Posició" + +#: plug-ins/map-object/map-object-ui.c:585 +#, fuzzy +#| msgid "First Gfig" +msgid "First Axis" +msgstr "Primer Gfig" + +#: plug-ins/map-object/map-object-ui.c:605 +#, fuzzy +#| msgid "seconds" +msgid "Second Axis" +msgstr "segons" + +#: plug-ins/map-object/map-object-ui.c:661 +#: plug-ins/map-object/map-object-ui.c:675 msgid "Intensity Levels" msgstr "Nivells d'intensitat" -#: plug-ins/map-object/map-object-ui.c:798 -msgid "Ambient:" -msgstr "Ambient:" - -#: plug-ins/map-object/map-object-ui.c:825 -#: plug-ins/map-object/map-object-ui.c:867 -msgid "Diffuse:" -msgstr "Difusió:" - -#: plug-ins/map-object/map-object-ui.c:847 -msgid "Reflectivity" -msgstr "Reflexió" - -#: plug-ins/map-object/map-object-ui.c:881 -msgid "Higher values makes the object reflect more light (appear lighter)" -msgstr "" -"Els valors alts fan que l'objecte es reflecteixi de manera més clara (sembla" -" més clar)" - -#: plug-ins/map-object/map-object-ui.c:894 -msgid "Specular:" -msgstr "Especular:" - -#: plug-ins/map-object/map-object-ui.c:921 -msgid "Highlight:" -msgstr "Realçat:" - -#: plug-ins/map-object/map-object-ui.c:978 -msgid "Object X position in XYZ space" -msgstr "Posició de l'objecte X en l'espai XYZ" - -#: plug-ins/map-object/map-object-ui.c:990 -msgid "Object Y position in XYZ space" -msgstr "Posició de l'objecte Y en l'espai XYZ" - -#: plug-ins/map-object/map-object-ui.c:1002 -msgid "Object Z position in XYZ space" -msgstr "Posició de l'objecte Z en l'espai XYZ" - -#: plug-ins/map-object/map-object-ui.c:1025 -msgid "Rotation angle about X axis" -msgstr "Rotació de l'angle sobre l'eix X" - -#: plug-ins/map-object/map-object-ui.c:1036 -msgid "Rotation angle about Y axis" -msgstr "Rotació de l'angle sobre l'eix Y" - -#: plug-ins/map-object/map-object-ui.c:1047 -msgid "Rotation angle about Z axis" -msgstr "Rotació de l'angle sobre l'eix Z" - -#: plug-ins/map-object/map-object-ui.c:1076 -msgid "Front:" -msgstr "Davant:" - -#: plug-ins/map-object/map-object-ui.c:1076 -msgid "Back:" -msgstr "Endarrere:" - -#: plug-ins/map-object/map-object-ui.c:1084 -msgid "Map Images to Box Faces" -msgstr "Imatges del mapa a les cares del quadre" - -#: plug-ins/map-object/map-object-ui.c:1123 -msgid "X scale (size)" -msgstr "Escala X (mida)" - -#: plug-ins/map-object/map-object-ui.c:1135 -msgid "Y scale (size)" -msgstr "Escala Y (mida)" - -#: plug-ins/map-object/map-object-ui.c:1147 -msgid "Z scale (size)" -msgstr "Escala Z (mida)" - -#: plug-ins/map-object/map-object-ui.c:1173 -#: plug-ins/print/print-page-layout.c:447 -msgid "_Top:" -msgstr "Par_t superior:" - -#: plug-ins/map-object/map-object-ui.c:1173 -#: plug-ins/print/print-page-layout.c:468 -msgid "_Bottom:" -msgstr "Part in_ferior:" - -#: plug-ins/map-object/map-object-ui.c:1178 -msgid "Images for the Cap Faces" -msgstr "Imatges de la part de dalt de les cares" - -#: plug-ins/map-object/map-object-ui.c:1207 +#: plug-ins/map-object/map-object-ui.c:778 +#: plug-ins/map-object/map-object-ui.c:873 #: plug-ins/print/print-page-layout.c:253 msgid "Size" msgstr "Mida" -#: plug-ins/map-object/map-object-ui.c:1217 -msgid "R_adius:" -msgstr "R_adi:" +#: plug-ins/map-object/map-object-ui.c:791 +msgid "Map Images to Box Faces" +msgstr "Imatges del mapa a les cares del quadre" -#: plug-ins/map-object/map-object-ui.c:1218 -msgid "Cylinder radius" -msgstr "Radi del cilindre" - -#: plug-ins/map-object/map-object-ui.c:1229 -msgid "L_ength:" -msgstr "Long_itud:" - -#: plug-ins/map-object/map-object-ui.c:1230 -msgid "Cylinder length" -msgstr "Longitud del cilindre" - -#: plug-ins/map-object/map-object-ui.c:1263 -msgid "O_ptions" -msgstr "O_pcions" - -#: plug-ins/map-object/map-object-ui.c:1275 -msgid "O_rientation" -msgstr "O_rientació" - -#: plug-ins/map-object/map-object-ui.c:1313 -msgid "Map to Object" -msgstr "Mapa a l'objecte" - -#: plug-ins/map-object/map-object-ui.c:1370 -msgid "_Preview!" -msgstr "_Previsualitza!" - -#: plug-ins/map-object/map-object-ui.c:1400 -msgid "Show _wireframe" -msgstr "Mostra el marc amb _filferros" - -#: plug-ins/map-object/map-object-ui.c:1409 -msgid "Update preview _live" -msgstr "Actualitza la previsua_lització" +#: plug-ins/map-object/map-object-ui.c:856 +msgid "Images for the Cap Faces" +msgstr "Imatges de la part de dalt de les cares" #: plug-ins/metadata/metadata-editor.c:484 msgid "Document Title" @@ -12912,7 +14942,7 @@ msgstr "Títol de l'autor" #. Description tab #: plug-ins/metadata/metadata-editor.c:487 -#: plug-ins/metadata/metadata-editor.c:1212 +#: plug-ins/metadata/metadata-editor.c:1216 msgid "Description" msgstr "Descripció" @@ -13298,58 +15328,58 @@ msgstr "_Edita les metadades" msgid "Edit metadata (IPTC, EXIF, XMP)" msgstr "Edita les metadades (IPTC, EXIF, XMP)" -#: plug-ins/metadata/metadata-editor.c:1174 +#: plug-ins/metadata/metadata-editor.c:1178 #, c-format msgid "Metadata Editor: %s" msgstr "Editor de metadades: %s" -#: plug-ins/metadata/metadata-editor.c:1182 +#: plug-ins/metadata/metadata-editor.c:1186 msgid "_Write Metadata" msgstr "_Escriu les metadades" #. IPTC tab -#: plug-ins/metadata/metadata-editor.c:1218 +#: plug-ins/metadata/metadata-editor.c:1222 #: plug-ins/metadata/metadata-viewer.c:401 msgid "IPTC" msgstr "IPTC" #. IPTC Extension tab -#: plug-ins/metadata/metadata-editor.c:1224 +#: plug-ins/metadata/metadata-editor.c:1228 msgid "IPTC Extension" msgstr "Extensió IPTC" #. Categories tab -#: plug-ins/metadata/metadata-editor.c:1330 +#: plug-ins/metadata/metadata-editor.c:1334 msgid "Categories" msgstr "Categories" #. GPS tab -#: plug-ins/metadata/metadata-editor.c:1336 +#: plug-ins/metadata/metadata-editor.c:1340 msgid "GPS" msgstr "GPS" #. DICOM tab -#: plug-ins/metadata/metadata-editor.c:1347 +#: plug-ins/metadata/metadata-editor.c:1351 msgid "DICOM" msgstr "DICOM" -#: plug-ins/metadata/metadata-editor.c:1369 +#: plug-ins/metadata/metadata-editor.c:1373 msgid "Import metadata" msgstr "Importa les metadades" -#: plug-ins/metadata/metadata-editor.c:1371 +#: plug-ins/metadata/metadata-editor.c:1375 msgid "Export metadata" msgstr "Exporta metadades" -#: plug-ins/metadata/metadata-editor.c:1674 +#: plug-ins/metadata/metadata-editor.c:1678 msgid "Choose Date" msgstr "Escolliu la data" -#: plug-ins/metadata/metadata-editor.c:1678 +#: plug-ins/metadata/metadata-editor.c:1682 msgid "Set Date" msgstr "Estableix la data" -#: plug-ins/metadata/metadata-editor.c:2412 +#: plug-ins/metadata/metadata-editor.c:2416 msgid "" "Enter or edit GPS value here.\n" "Valid values consist of 1, 2 or 3 numbers (degrees, minutes, seconds), see the following examples:\n" @@ -13361,7 +15391,7 @@ msgstr "" "10deg 15' 20 \", o 10° 15' 20\", o 10: 15:20.45, o 10 15 20, o 10 15.30, o 10.45\n" "Suprimiu tot el text per a eliminar el valor actual." -#: plug-ins/metadata/metadata-editor.c:2418 +#: plug-ins/metadata/metadata-editor.c:2422 msgid "" "Enter or edit GPS altitude value here.\n" "A valid value consists of one number:\n" @@ -13375,249 +15405,249 @@ msgstr "" "En funció del tipus de mesura seleccionat, el valor s'ha d'introduir en metres (m) o peus (peus)\n" "Suprimiu tot el text per a eliminar el valor actual." -#: plug-ins/metadata/metadata-editor.c:2552 +#: plug-ins/metadata/metadata-editor.c:2556 msgid "Unrated" msgstr "Sense valoració" -#: plug-ins/metadata/metadata-editor.c:4491 +#: plug-ins/metadata/metadata-editor.c:4666 #, c-format msgid "Failed to set metadata tag %s: %s" msgstr "No s'ha pogut establir l'etiqueta de metadades %s: %s" -#: plug-ins/metadata/metadata-editor.c:5303 +#: plug-ins/metadata/metadata-editor.c:5529 msgid "Import Metadata File" msgstr "Importa el fitxer de metadades" -#: plug-ins/metadata/metadata-editor.c:5338 +#: plug-ins/metadata/metadata-editor.c:5564 msgid "Export Metadata File" msgstr "Exporta el fitxer de metadades" -#: plug-ins/metadata/metadata-editor.c:5342 +#: plug-ins/metadata/metadata-editor.c:5568 msgid "_Export" msgstr "_Exporta" -#: plug-ins/metadata/metadata-tags.c:180 plug-ins/metadata/metadata-tags.c:203 -#: plug-ins/metadata/metadata-tags.c:263 plug-ins/metadata/metadata-tags.c:280 +#: plug-ins/metadata/metadata-tags.c:187 plug-ins/metadata/metadata-tags.c:210 +#: plug-ins/metadata/metadata-tags.c:270 plug-ins/metadata/metadata-tags.c:287 msgid "Select a value" msgstr "Seleccioneu un valor" -#: plug-ins/metadata/metadata-tags.c:181 +#: plug-ins/metadata/metadata-tags.c:188 msgid "Original digital capture of a real life scene" msgstr "Captura digital original d'una escena de la vida real" -#: plug-ins/metadata/metadata-tags.c:182 +#: plug-ins/metadata/metadata-tags.c:189 msgid "Digitized from a negative on film" msgstr "Digitalitzat des d'un negatiu a la pel·lícula" -#: plug-ins/metadata/metadata-tags.c:183 +#: plug-ins/metadata/metadata-tags.c:190 msgid "Digitized from a positive on film" msgstr "Digitalitzat des d'un positiu a la pel·lícula" -#: plug-ins/metadata/metadata-tags.c:184 +#: plug-ins/metadata/metadata-tags.c:191 msgid "Digitized from a print on non-transparent medium" msgstr "Digitalitzat des d'una impressió a un medi no transparent" -#: plug-ins/metadata/metadata-tags.c:185 +#: plug-ins/metadata/metadata-tags.c:192 msgid "Original media with minor human edits" msgstr "Medis audiovisuals originals amb edicions humanes menors" -#: plug-ins/metadata/metadata-tags.c:186 +#: plug-ins/metadata/metadata-tags.c:193 msgid "Composite of captured elements" msgstr "Composició d'elements capturats" -#: plug-ins/metadata/metadata-tags.c:187 +#: plug-ins/metadata/metadata-tags.c:194 msgid "Algorithmically-enhanced media" msgstr "Suports millorats algorísmicament" -#: plug-ins/metadata/metadata-tags.c:188 +#: plug-ins/metadata/metadata-tags.c:195 msgid "Data-driven media" msgstr "Suports impulsats per dades" -#: plug-ins/metadata/metadata-tags.c:189 +#: plug-ins/metadata/metadata-tags.c:196 msgid "Digital art" msgstr "Art digital" -#: plug-ins/metadata/metadata-tags.c:190 +#: plug-ins/metadata/metadata-tags.c:197 msgid "Virtual recording" msgstr "Enregistrament virtual" -#: plug-ins/metadata/metadata-tags.c:191 +#: plug-ins/metadata/metadata-tags.c:198 msgid "Composite including synthetic elements" msgstr "Composició incloent elements sintètics" -#: plug-ins/metadata/metadata-tags.c:192 +#: plug-ins/metadata/metadata-tags.c:199 msgid "Trained algorithmic media" msgstr "Medis algorítmics entrenats" -#: plug-ins/metadata/metadata-tags.c:193 +#: plug-ins/metadata/metadata-tags.c:200 msgid "Pure algorithmic media" msgstr "Suport algorítmic pur" -#: plug-ins/metadata/metadata-tags.c:194 +#: plug-ins/metadata/metadata-tags.c:201 msgid "Created by software" msgstr "Creat pel programari" -#: plug-ins/metadata/metadata-tags.c:205 plug-ins/metadata/metadata-tags.c:217 +#: plug-ins/metadata/metadata-tags.c:212 plug-ins/metadata/metadata-tags.c:224 msgid "Not Applicable" msgstr "No aplicable" -#: plug-ins/metadata/metadata-tags.c:206 +#: plug-ins/metadata/metadata-tags.c:213 msgid "Unlimited Model Releases" msgstr "Llançament del model il·limitat" # g: plug-ins/metadata/metadata-tags.c:198 -#: plug-ins/metadata/metadata-tags.c:207 +#: plug-ins/metadata/metadata-tags.c:214 msgid "Limited or Incomplete Model Releases" msgstr "Llançament del model incomplet o limitat" -#: plug-ins/metadata/metadata-tags.c:218 +#: plug-ins/metadata/metadata-tags.c:225 msgid "Unlimited Property Releases" msgstr "Llançament de la propietat il·limitada" -#: plug-ins/metadata/metadata-tags.c:219 +#: plug-ins/metadata/metadata-tags.c:226 msgid "Limited or Incomplete Property Releases" msgstr "Llançament de la propietat incompleta o limitada" -#: plug-ins/metadata/metadata-tags.c:228 +#: plug-ins/metadata/metadata-tags.c:235 msgid "Age Unknown" msgstr "Edat desconeguda" -#: plug-ins/metadata/metadata-tags.c:229 +#: plug-ins/metadata/metadata-tags.c:236 msgid "Age 25 or Over" msgstr "25 anys o més" -#: plug-ins/metadata/metadata-tags.c:230 +#: plug-ins/metadata/metadata-tags.c:237 msgid "Age 24" msgstr "24 anys" -#: plug-ins/metadata/metadata-tags.c:231 +#: plug-ins/metadata/metadata-tags.c:238 msgid "Age 23" msgstr "23 anys" -#: plug-ins/metadata/metadata-tags.c:232 +#: plug-ins/metadata/metadata-tags.c:239 msgid "Age 22" msgstr "22 anys" -#: plug-ins/metadata/metadata-tags.c:233 +#: plug-ins/metadata/metadata-tags.c:240 msgid "Age 21" msgstr "21 anys" -#: plug-ins/metadata/metadata-tags.c:234 +#: plug-ins/metadata/metadata-tags.c:241 msgid "Age 20" msgstr "20 anys" -#: plug-ins/metadata/metadata-tags.c:235 +#: plug-ins/metadata/metadata-tags.c:242 msgid "Age 19" msgstr "19 anys" -#: plug-ins/metadata/metadata-tags.c:236 +#: plug-ins/metadata/metadata-tags.c:243 msgid "Age 18" msgstr "18 anys" -#: plug-ins/metadata/metadata-tags.c:237 +#: plug-ins/metadata/metadata-tags.c:244 msgid "Age 17" msgstr "17 anys" -#: plug-ins/metadata/metadata-tags.c:238 +#: plug-ins/metadata/metadata-tags.c:245 msgid "Age 16" msgstr "16 anys" -#: plug-ins/metadata/metadata-tags.c:239 +#: plug-ins/metadata/metadata-tags.c:246 msgid "Age 15" msgstr "15 anys" -#: plug-ins/metadata/metadata-tags.c:240 +#: plug-ins/metadata/metadata-tags.c:247 msgid "Age 14 or Under" msgstr "14 anys o inferior" -#: plug-ins/metadata/metadata-tags.c:247 +#: plug-ins/metadata/metadata-tags.c:254 msgid "2" msgstr "2" -#: plug-ins/metadata/metadata-tags.c:247 +#: plug-ins/metadata/metadata-tags.c:254 msgid "3" msgstr "3" -#: plug-ins/metadata/metadata-tags.c:247 +#: plug-ins/metadata/metadata-tags.c:254 msgid "4" msgstr "4" -#: plug-ins/metadata/metadata-tags.c:247 +#: plug-ins/metadata/metadata-tags.c:254 msgid "6" msgstr "6" -#: plug-ins/metadata/metadata-tags.c:247 +#: plug-ins/metadata/metadata-tags.c:254 msgid "7" msgstr "7" -#: plug-ins/metadata/metadata-tags.c:254 plug-ins/metadata/metadata-tags.c:290 -#: plug-ins/metadata/metadata-tags.c:297 plug-ins/metadata/metadata-tags.c:304 +#: plug-ins/metadata/metadata-tags.c:261 plug-ins/metadata/metadata-tags.c:297 +#: plug-ins/metadata/metadata-tags.c:304 plug-ins/metadata/metadata-tags.c:311 msgid "Unknown" msgstr "Desconegut" #. DO NOT SAVE -#: plug-ins/metadata/metadata-tags.c:255 +#: plug-ins/metadata/metadata-tags.c:262 msgid "Copyrighted" msgstr "Drets d'autor" #. TRUE -#: plug-ins/metadata/metadata-tags.c:256 +#: plug-ins/metadata/metadata-tags.c:263 msgid "Public Domain" msgstr "Domini públic" -#: plug-ins/metadata/metadata-tags.c:264 +#: plug-ins/metadata/metadata-tags.c:271 msgid "Work" msgstr "Treball" -#: plug-ins/metadata/metadata-tags.c:265 +#: plug-ins/metadata/metadata-tags.c:272 msgid "Cell" msgstr "Cel·la" -#: plug-ins/metadata/metadata-tags.c:266 +#: plug-ins/metadata/metadata-tags.c:273 msgid "Fax" msgstr "Fax" -#: plug-ins/metadata/metadata-tags.c:267 +#: plug-ins/metadata/metadata-tags.c:274 msgid "Home" msgstr "Inici" -#: plug-ins/metadata/metadata-tags.c:268 +#: plug-ins/metadata/metadata-tags.c:275 msgid "Pager" msgstr "Cercapersones" -#: plug-ins/metadata/metadata-tags.c:281 +#: plug-ins/metadata/metadata-tags.c:288 msgid "Male" msgstr "Home" -#: plug-ins/metadata/metadata-tags.c:282 +#: plug-ins/metadata/metadata-tags.c:289 msgid "Female" msgstr "Dona" -#: plug-ins/metadata/metadata-tags.c:283 +#: plug-ins/metadata/metadata-tags.c:290 msgid "Other" msgstr "Altres" -#: plug-ins/metadata/metadata-tags.c:290 +#: plug-ins/metadata/metadata-tags.c:297 msgid "Above sea level" msgstr "Per sobre el nivell del mar" -#: plug-ins/metadata/metadata-tags.c:290 +#: plug-ins/metadata/metadata-tags.c:297 msgid "Below sea level" msgstr "Per sota el nivell del mar" -#: plug-ins/metadata/metadata-tags.c:297 +#: plug-ins/metadata/metadata-tags.c:304 msgid "North" msgstr "Nord" -#: plug-ins/metadata/metadata-tags.c:297 +#: plug-ins/metadata/metadata-tags.c:304 msgid "South" msgstr "Sud" -#: plug-ins/metadata/metadata-tags.c:304 +#: plug-ins/metadata/metadata-tags.c:311 msgid "East" msgstr "Est" -#: plug-ins/metadata/metadata-tags.c:304 +#: plug-ins/metadata/metadata-tags.c:311 msgid "West" msgstr "Oest" @@ -13672,67 +15702,73 @@ msgstr " peus" msgid "(%llu more byte(s))" msgstr "(%llu més byte(s))" -#: plug-ins/pagecurl/pagecurl.c:231 +#: plug-ins/pagecurl/pagecurl.c:216 msgid "_Pagecurl..." msgstr "Rínxol de _pàgina..." -#: plug-ins/pagecurl/pagecurl.c:235 +#: plug-ins/pagecurl/pagecurl.c:220 msgid "Curl up one of the image corners" msgstr "Crea un rínxol de paper en un dels cantons de la imatge" -#: plug-ins/pagecurl/pagecurl.c:492 -msgid "Pagecurl Effect" -msgstr "Efecte rínxol" - -#: plug-ins/pagecurl/pagecurl.c:514 -msgid "Curl Location" -msgstr "Ubicació del rínxol" - -#: plug-ins/pagecurl/pagecurl.c:534 -msgid "Lower right" -msgstr "Inferior dret" - -#: plug-ins/pagecurl/pagecurl.c:535 -msgid "Lower left" -msgstr "Inferior esquerre" - -#: plug-ins/pagecurl/pagecurl.c:536 -msgid "Upper left" -msgstr "Superior esquerra" - -#: plug-ins/pagecurl/pagecurl.c:537 -msgid "Upper right" -msgstr "Superior dret" - -#: plug-ins/pagecurl/pagecurl.c:573 -msgid "Curl Orientation" -msgstr "Orientació del rínxol" - -#: plug-ins/pagecurl/pagecurl.c:617 -msgid "_Shade under curl" -msgstr "Ombra _sota el rínxol" - -#: plug-ins/pagecurl/pagecurl.c:630 -msgid "Current gradient (reversed)" -msgstr "Degradat actual (invertit)" - -#: plug-ins/pagecurl/pagecurl.c:635 -msgid "Current gradient" -msgstr "Degradat actual" - -#: plug-ins/pagecurl/pagecurl.c:640 +#: plug-ins/pagecurl/pagecurl.c:230 msgid "Foreground / background colors" msgstr "Colors de fons i primer pla" -#: plug-ins/pagecurl/pagecurl.c:652 -msgid "_Opacity:" -msgstr "_Opacitat:" +#: plug-ins/pagecurl/pagecurl.c:231 +msgid "Current gradient" +msgstr "Degradat actual" -#: plug-ins/pagecurl/pagecurl.c:760 +#: plug-ins/pagecurl/pagecurl.c:232 +msgid "Current gradient (reversed)" +msgstr "Degradat actual (invertit)" + +#: plug-ins/pagecurl/pagecurl.c:238 +#, fuzzy +#| msgid "Curl Location" +msgid "Locatio_n" +msgstr "Ubicació del rínxol" + +#: plug-ins/pagecurl/pagecurl.c:239 +#, fuzzy +msgid "Corner which is curled" +msgstr "Cantonada que està encorbada" + +#: plug-ins/pagecurl/pagecurl.c:240 +msgid "Upper left" +msgstr "Superior esquerra" + +#: plug-ins/pagecurl/pagecurl.c:241 +msgid "Upper right" +msgstr "Superior dret" + +#: plug-ins/pagecurl/pagecurl.c:242 +msgid "Lower left" +msgstr "Inferior esquerre" + +#: plug-ins/pagecurl/pagecurl.c:243 +msgid "Lower right" +msgstr "Inferior dret" + +#: plug-ins/pagecurl/pagecurl.c:257 +#, fuzzy +msgid "Sh_ade" +msgstr "Ombra" + +#: plug-ins/pagecurl/pagecurl.c:258 +#, fuzzy +#| msgid "_Shade under curl" +msgid "Shade the region under the curl" +msgstr "Ombra _sota el rínxol" + +#: plug-ins/pagecurl/pagecurl.c:456 +msgid "Pagecurl Effect" +msgstr "Efecte rínxol" + +#: plug-ins/pagecurl/pagecurl.c:591 msgid "Curl Layer" msgstr "Capa del rínxol" -#: plug-ins/pagecurl/pagecurl.c:1024 +#: plug-ins/pagecurl/pagecurl.c:862 msgid "Page Curl" msgstr "Rínxol de pàgina" @@ -13765,6 +15801,14 @@ msgstr "_Esquerra:" msgid "_Right:" msgstr "_Dreta:" +#: plug-ins/print/print-page-layout.c:447 +msgid "_Top:" +msgstr "Par_t superior:" + +#: plug-ins/print/print-page-layout.c:468 +msgid "_Bottom:" +msgstr "Part in_ferior:" + #: plug-ins/print/print-page-layout.c:489 msgid "C_enter:" msgstr "C_entre:" @@ -13807,135 +15851,104 @@ msgstr "Ajusta la mida de la pàgina i l'orientació per a imprimir-la" msgid "Image Settings" msgstr "Opcions de la imatge" -#: plug-ins/print/print.c:425 +#: plug-ins/print/print.c:424 msgid "An error occurred while trying to print:" msgstr "S'ha produït un error en imprimir:" -#: plug-ins/print/print.c:452 +#: plug-ins/print/print.c:451 msgid "Printing" msgstr "S'està imprimint" -#: plug-ins/screenshot/screenshot.c:139 +#: plug-ins/screenshot/screenshot.c:124 msgid "_Screenshot..." msgstr "Captura de _pantalla..." -#: plug-ins/screenshot/screenshot.c:144 +#: plug-ins/screenshot/screenshot.c:129 msgid "Create an image from an area of the screen" msgstr "Crea una imatge a partir d'una àrea de la pantalla" -#: plug-ins/screenshot/screenshot.c:509 -#: plug-ins/screenshot/screenshot-x11.c:427 +#: plug-ins/screenshot/screenshot.c:164 +#, fuzzy +msgid "Shoot _area" +msgstr "Àrea de captura" + +#: plug-ins/screenshot/screenshot.c:224 +#, fuzzy +#| msgid "Color Profile" +msgid "Color _Profile" +msgstr "Color de perfil" + +#: plug-ins/screenshot/screenshot.c:264 +#, fuzzy +#| msgid "The DDE transaction failed." +msgid "GDK initialization failed." +msgstr "Ha fallat la transacció DDE." + +#: plug-ins/screenshot/screenshot.c:302 +#, fuzzy +msgid "No screenshot backends available." +msgstr "No hi ha dorsals de captura de pantalla disponibles." + +#: plug-ins/screenshot/screenshot.c:504 +#: plug-ins/screenshot/screenshot-x11.c:443 msgid "Screenshot" msgstr "Captura de pantalla" -#: plug-ins/screenshot/screenshot.c:514 +#: plug-ins/screenshot/screenshot.c:505 msgid "S_nap" msgstr "_Captura" -#. Area -#: plug-ins/screenshot/screenshot.c:541 -msgid "Area" -msgstr "Àrea" - -#: plug-ins/screenshot/screenshot.c:553 -msgid "Take a screenshot of a single _window" +#: plug-ins/screenshot/screenshot.c:507 +#, fuzzy +#| msgid "Take a screenshot of a single _window" +msgid "Take a screenshot of a single window" msgstr "Obtén una captura de pantalla d'una _finestra única" -#: plug-ins/screenshot/screenshot.c:576 -msgid "Include window _decoration" -msgstr "Inclou la _decoració de la finestra" - -#: plug-ins/screenshot/screenshot.c:597 plug-ins/screenshot/screenshot.c:642 -msgid "Include _mouse pointer" -msgstr "Inclou el punter del _ratolí" - -#: plug-ins/screenshot/screenshot.c:619 -msgid "Take a screenshot of the entire _screen" +#: plug-ins/screenshot/screenshot.c:508 +#, fuzzy +#| msgid "Take a screenshot of the entire _screen" +msgid "Take a screenshot of the entire screen" msgstr "Obtén una captura de la pantalla _sencera" -#: plug-ins/screenshot/screenshot.c:670 -msgid "Select a _region to grab" +#: plug-ins/screenshot/screenshot.c:509 +#, fuzzy +#| msgid "Select a _region to grab" +msgid "Select a region to grab" msgstr "Selecciona una _regió" -#: plug-ins/screenshot/screenshot.c:688 +#: plug-ins/screenshot/screenshot.c:595 msgid "Delay" msgstr "Retard" -#: plug-ins/screenshot/screenshot.c:708 -msgid "Selection delay: " -msgstr "Retard en la selecció: " - -#. translators: this is the unit label of a spinbutton -#: plug-ins/screenshot/screenshot.c:724 plug-ins/screenshot/screenshot.c:784 -msgid "seconds" -msgstr "segons" - -#: plug-ins/screenshot/screenshot.c:737 -msgid "" -"After the delay, drag your mouse to select the region for the screenshot." -msgstr "" -"Després del retard arrossegueu el vostre ratolí per a seleccionar la regió " -"de la pantalla que voleu capturar." - -#: plug-ins/screenshot/screenshot.c:741 -msgid "Click in a window to snap it after delay." -msgstr "Feu clic en una finestra perquè hi encaixi després d'un retard." - -#: plug-ins/screenshot/screenshot.c:746 -msgid "At the end of the delay, click in a window to snap it." -msgstr "Al final del retard feu clic a la finestra per a capturar-la." - -#: plug-ins/screenshot/screenshot.c:767 -msgid "Screenshot dela_y: " -msgstr "_Retard en la captura de pantalla: " - -#: plug-ins/screenshot/screenshot.c:795 -msgid "After the delay, the screenshot is taken." -msgstr "Després del retard es farà la captura de pantalla." - -#: plug-ins/screenshot/screenshot.c:797 -msgid "Once the region is selected, it will be captured after this delay." -msgstr "Un cop seleccionada la regió, es capturarà després d'aquest retard." - -#: plug-ins/screenshot/screenshot.c:802 -msgid "Once the window is selected, it will be captured after this delay." -msgstr "" -"Un cop la finestra està seleccionada, es capturarà després d'aquest retard." - -#: plug-ins/screenshot/screenshot.c:808 -msgid "After the delay, the active window will be captured." -msgstr "" -"Després del retard, es farà la captura de pantalla en la finestra activa." - -#: plug-ins/screenshot/screenshot.c:815 -msgid "Color Profile" -msgstr "Color de perfil" - -#: plug-ins/screenshot/screenshot.c:820 -msgid "Tag image with _monitor profile" +#: plug-ins/screenshot/screenshot.c:603 +#, fuzzy +#| msgid "Tag image with _monitor profile" +msgid "Tag image with monitor profile" msgstr "Marca la imatge amb el perfil del _monitor" -#: plug-ins/screenshot/screenshot.c:824 -msgid "Convert image to sR_GB" +#: plug-ins/screenshot/screenshot.c:604 +#, fuzzy +#| msgid "Convert image to sR_GB" +msgid "Convert image with sRGB" msgstr "Converteix la imatge a sR_GB" -#: plug-ins/screenshot/screenshot-win32.c:302 +#: plug-ins/screenshot/screenshot-win32.c:304 msgid "No data captured" msgstr "No s'ha capturat cap dada" -#: plug-ins/screenshot/screenshot-x11.c:95 +#: plug-ins/screenshot/screenshot-x11.c:109 msgid "Error selecting the window" msgstr "S'ha produït un error quan se seleccionava la finestra" -#: plug-ins/screenshot/screenshot-x11.c:415 +#: plug-ins/screenshot/screenshot-x11.c:431 msgid "Importing screenshot" msgstr "Importa la captura de pantalla" -#: plug-ins/screenshot/screenshot-x11.c:468 +#: plug-ins/screenshot/screenshot-x11.c:484 msgid "Mouse Pointer" msgstr "Punter del ratolí" -#: plug-ins/screenshot/screenshot-x11.c:626 +#: plug-ins/screenshot/screenshot-x11.c:662 msgid "Specified window not found" msgstr "No s'ha trobat la finestra especificada" @@ -13945,28 +15958,31 @@ msgstr "No s'ha trobat la finestra especificada" msgid "Selection to Path" msgstr "Selecció a camí" -#: plug-ins/selection-to-path/selection-to-path.c:293 -msgid "No selection to convert" -msgstr "No hi ha cap selecció per a convertir" +#: 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ó a camí" -#: plug-ins/selection-to-path/selection-to-path.c:407 -msgid "Selection to Path Advanced Settings" -msgstr "Opcions avançades de la selecció a camí" - -#: plug-ins/selection-to-path/selection-to-path-dialog.c:114 -msgid "Align Threshold:" +#: plug-ins/selection-to-path/selection-to-path.c:152 +#, fuzzy +#| msgid "Align Threshold:" +msgid "_Align Threshold" msgstr "Alinea el llindar:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:116 +#: 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 extrems són més a prop d'aquest, llavors estan fets per a ser iguals." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:126 -msgid "Corner Always Threshold:" +#: plug-ins/selection-to-path/selection-to-path.c:159 +#, fuzzy +#| msgid "Corner Always Threshold:" +msgid "Corner Al_ways Threshold" msgstr "Llindar del cantó:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:128 +#: plug-ins/selection-to-path/selection-to-path.c:160 msgid "" "If the angle defined by a point and its predecessors and successors is " "smaller than this, it's a corner, even if it's within 'corner_surround' " @@ -13976,22 +15992,26 @@ msgstr "" "petits que aquest, llavors és un cantó, encara que sigui dins dels píxels " "«cantó_envoltat» d'un punt amb un petit angle." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:140 -msgid "Corner Surround:" +#: plug-ins/selection-to-path/selection-to-path.c:168 +#, fuzzy +#| msgid "Corner Surround:" +msgid "Corner _Surround" msgstr "Cantó envoltat:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:142 +#: plug-ins/selection-to-path/selection-to-path.c:169 msgid "" "Number of points to consider when determining if a point is a corner or not." msgstr "" "Nombre de punts per a considerar, quan es determina si un punt és un angle o" " no." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:152 -msgid "Corner Threshold:" +#: plug-ins/selection-to-path/selection-to-path.c:175 +#, fuzzy +#| msgid "Corner Threshold:" +msgid "Cor_ner Threshold" msgstr "Llindar del cantó:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:154 +#: plug-ins/selection-to-path/selection-to-path.c:176 msgid "" "If a point, its predecessors, and its successors define an angle smaller " "than this, it's a corner." @@ -13999,11 +16019,13 @@ msgstr "" "Si els predecessors i els successors d'un punt defineixen un angle més petit" " que aquest, aleshores és un cantó." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:165 -msgid "Error Threshold:" +#: plug-ins/selection-to-path/selection-to-path.c:182 +#, fuzzy +#| msgid "Error Threshold:" +msgid "Error Thres_hold" msgstr "Llindar d'error:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:167 +#: plug-ins/selection-to-path/selection-to-path.c:183 msgid "" "Amount of error at which a fitted spline is unacceptable. If any pixel is " "further away than this from the fitted curve, we try again." @@ -14011,19 +16033,23 @@ msgstr "" "Quantitat d'error en què no s'accepta una corba spline encabida. Si " "qualsevol píxel està més lluny de la corba, intenteu de nou." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:179 -msgid "Filter Alternative Surround:" +#: plug-ins/selection-to-path/selection-to-path.c:190 +#, fuzzy +#| msgid "Filter Alternative Surround:" +msgid "_Filter Alternative Surround" msgstr "Filtre alternatiu envoltant:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:181 +#: plug-ins/selection-to-path/selection-to-path.c:191 msgid "A second number of adjacent points to consider when filtering." msgstr "Quan es filtra, un segon nombre de punts adjacents per a considerar." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:191 -msgid "Filter Epsilon:" +#: plug-ins/selection-to-path/selection-to-path.c:197 +#, fuzzy +#| msgid "Filter Epsilon:" +msgid "Filter E_psilon" msgstr "Filtre Epsilon:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:193 +#: plug-ins/selection-to-path/selection-to-path.c:198 msgid "" "If the angles between the vectors produced by filter_surround and " "filter_alternative_surround points differ by more than this, use the one " @@ -14033,11 +16059,13 @@ msgstr "" "del filtre envoltant alternatiu difereixen més que això, utilitzeu el filtre" " envoltant alternatiu." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:205 -msgid "Filter Iteration Count:" +#: plug-ins/selection-to-path/selection-to-path.c:206 +#, fuzzy +#| msgid "Filter Iteration Count:" +msgid "Filter Iteration Co_unt" msgstr "Compte de la iteració del filtre:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:207 +#: plug-ins/selection-to-path/selection-to-path.c:207 msgid "" "Number of times to smooth original data points. Increasing this number " "dramatically --- to 50 or so --- can produce vastly better results. But if " @@ -14049,21 +16077,25 @@ msgstr "" "molt millors. Però si algun d'aquests punts no hi és, la corba no pot " "funcionar al voltant d'aquest punt." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:220 -msgid "Filter Percent:" +#: plug-ins/selection-to-path/selection-to-path.c:216 +#, fuzzy +#| msgid "Filter Percent:" +msgid "Filt_er Percent" msgstr "Percentatge de filtre:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:222 +#: plug-ins/selection-to-path/selection-to-path.c:217 msgid "" "To produce the new point, use the old point plus this times the neighbors." msgstr "" "Per a produir el nou punt, utilitzeu el punt antic més els dels costats." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:232 -msgid "Filter Secondary Surround:" +#: plug-ins/selection-to-path/selection-to-path.c:223 +#, fuzzy +#| msgid "Filter Secondary Surround:" +msgid "Filter Secondar_y Surround" msgstr "Filtre secundari envoltant:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:234 +#: plug-ins/selection-to-path/selection-to-path.c:224 msgid "" "Number of adjacent points to consider if 'filter_surround' points defines a " "straight line." @@ -14071,27 +16103,33 @@ msgstr "" "Nombre de punts adjacents per a considerar si els punts del " "«filtre_envoltant» defineixen una línia recta." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:245 -msgid "Filter Surround:" +#: plug-ins/selection-to-path/selection-to-path.c:230 +#, fuzzy +#| msgid "Filter Surround:" +msgid "Filter Surroun_d" msgstr "Filtre envoltant:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:247 +#: plug-ins/selection-to-path/selection-to-path.c:231 msgid "Number of adjacent points to consider when filtering." msgstr "Nombre de punts per a considerar quan es filtra." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:257 -msgid "Keep Knees" +#: plug-ins/selection-to-path/selection-to-path.c:236 +#, fuzzy +#| msgid "Keep Knees" +msgid "_Keep Knees" msgstr "Conserva els angles" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:261 +#: plug-ins/selection-to-path/selection-to-path.c:237 msgid "Says whether or not to remove 'knee' points after finding the outline." msgstr "Diu si elimina o no els punts «angle» després de trobar el contorn." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:271 -msgid "Line Reversion Threshold:" +#: plug-ins/selection-to-path/selection-to-path.c:243 +#, fuzzy +#| msgid "Line Reversion Threshold:" +msgid "_Line Reversion Threshold" msgstr "Llindar de reversió de la línia:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:273 +#: plug-ins/selection-to-path/selection-to-path.c:244 msgid "" "If a spline is closer to a straight line than this, it remains a straight " "line, even if it would otherwise be changed back to a curve. This is " @@ -14103,11 +16141,13 @@ msgstr "" " quadrat de la longitud de la corba, per a fer corbes més curtes " "probablement per a ser revertides." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:286 -msgid "Line Threshold:" +#: plug-ins/selection-to-path/selection-to-path.c:253 +#, fuzzy +#| msgid "Line Threshold:" +msgid "L_ine Threshold" msgstr "Llindar de la línia:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:288 +#: plug-ins/selection-to-path/selection-to-path.c:254 msgid "" "How many pixels (on the average) a spline can diverge from the line " "determined by its endpoints before it is changed to a straight line." @@ -14115,11 +16155,13 @@ msgstr "" "Quantitat de píxels (de mitjana) que una corba spline pot divergir de la " "línia determinada pels seus extrems, abans de canviar a una línia recta." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:299 -msgid "Reparametrize Improvement:" +#: plug-ins/selection-to-path/selection-to-path.c:261 +#, fuzzy +#| msgid "Reparametrize Improvement:" +msgid "Reparametri_ze Improvement" msgstr "Millora del canvi de paràmetres:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:301 +#: plug-ins/selection-to-path/selection-to-path.c:262 msgid "" "If reparameterization doesn't improve the fit by this much percent, stop " "doing it. Amount of error at which it is pointless to reparameterize." @@ -14127,11 +16169,13 @@ msgstr "" "Si la revaloració no millora l'ajust amb aquest percentatge, deixa de fer-" "ho. Quantitat d'error en el qual no té sentit valorar." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:312 -msgid "Reparametrize Threshold:" +#: plug-ins/selection-to-path/selection-to-path.c:269 +#, fuzzy +#| msgid "Reparametrize Threshold:" +msgid "Repara_metrize Threshold" msgstr "Llindar del canvi de paràmetres:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:314 +#: plug-ins/selection-to-path/selection-to-path.c:270 msgid "" "Amount of error at which it is pointless to reparameterize. This happens, " "for example, when we are trying to fit the outline of the outside of an 'O' " @@ -14145,21 +16189,25 @@ msgstr "" " iteració Newton-Raphson. Potser seria millor detectar els casos en què no " "hi ha angles." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:328 -msgid "Subdivide Search:" +#: plug-ins/selection-to-path/selection-to-path.c:280 +#, fuzzy +#| msgid "Subdivide Search:" +msgid "Subdi_vide Search" msgstr "Subdivideix la recerca:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:330 +#: plug-ins/selection-to-path/selection-to-path.c:281 msgid "" "Percentage of the curve away from the worst point to look for a better place" " to subdivide." msgstr "Percentatge de la corba, lluny del pitjor punt per a subdividir." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:340 -msgid "Subdivide Surround:" +#: plug-ins/selection-to-path/selection-to-path.c:287 +#, fuzzy +#| msgid "Subdivide Surround:" +msgid "Su_bdivide Surround" msgstr "Subdivisió envoltada:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:342 +#: plug-ins/selection-to-path/selection-to-path.c:288 msgid "" "Number of points to consider when deciding whether a given point is a better" " place to subdivide." @@ -14167,11 +16215,13 @@ msgstr "" "Nombre de punts per a tenir en compte si un punt donat és bo per a " "subdividir." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:353 -msgid "Subdivide Threshold:" +#: plug-ins/selection-to-path/selection-to-path.c:294 +#, fuzzy +#| msgid "Subdivide Threshold:" +msgid "Subdivide Th_reshold" msgstr "Subdivideix el llindar:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:355 +#: plug-ins/selection-to-path/selection-to-path.c:295 msgid "" "How many pixels a point can diverge from a straight line and still be " "considered a better place to subdivide." @@ -14179,11 +16229,13 @@ msgstr "" "Quantitat de píxels en què un punt pot divergir d'una línia recta i encara " "ser considerat un lloc millor per a subdividir." -#: plug-ins/selection-to-path/selection-to-path-dialog.c:366 -msgid "Tangent Surround:" +#: plug-ins/selection-to-path/selection-to-path.c:302 +#, fuzzy +#| msgid "Tangent Surround:" +msgid "_Tangent Surround" msgstr "Tangent envoltada:" -#: plug-ins/selection-to-path/selection-to-path-dialog.c:368 +#: plug-ins/selection-to-path/selection-to-path.c:303 msgid "" "Number of points to look at on either side of a point when computing the " "approximation to the tangent at that point." @@ -14191,6 +16243,14 @@ msgstr "" "Nombre de punts per a veure cada banda del punt, quan es calcula " "l'aproximació a la tangent en aquest punt." +#: plug-ins/selection-to-path/selection-to-path.c:326 +msgid "No selection to convert" +msgstr "No hi ha cap selecció per a convertir" + +#: plug-ins/selection-to-path/selection-to-path.c:363 +msgid "Selection to Path Advanced Settings" +msgstr "Opcions avançades de la selecció a camí" + #: plug-ins/twain/twain.c:86 msgid "Capture an image from a TWAIN datasource" msgstr "Captura una imatge a partir de la font de dades TWAIN" @@ -14209,6 +16269,348 @@ msgstr "E_scàner/càmera..." msgid "Transferring data from scanner/camera" msgstr "S'estan transferint dades de l'escàner/càmera" +#~ msgid "Sca_le 2:" +#~ msgstr "Esca_la 2:" + +#, c-format +#~ msgid "'%s': EOF or error while reading palette header" +#~ msgstr "" +#~ "«%s»: s'ha arribat al final del fitxer (EOF) o s'ha produït un error en " +#~ "llegir la capçalera de la paleta" + +#~ msgid "GBR format does not support multiple layers." +#~ msgstr "El format GBR no admet múltiples capes." + +#~ msgid "Pixels" +#~ msgstr "Píxels" + +#~ msgid "Ce_ll size:" +#~ msgstr "Mida de la ce_l·la:" + +#~ msgid " Rows of " +#~ msgstr " Files de " + +#~ msgid " Columns on each layer" +#~ msgstr " Columnes en cada capa" + +#~ msgid "Di_mension:" +#~ msgstr "Di_mensió:" + +#~ msgid "Height:" +#~ msgstr "Alçada:" + +#~ msgid "_X ratio:" +#~ msgstr "Ràtio _X:" + +#~ msgid "_Y ratio:" +#~ msgstr "Ràtio _Y:" + +#~ msgid "Constrain aspect ratio" +#~ msgstr "Restringeix la relació d'aspecte" + +#~ msgid "Resolution:" +#~ msgstr "Resolució:" + +#~ msgid "Select Film Color" +#~ msgstr "Tria el color de la pel·lícula" + +#~ msgid "Co_lor:" +#~ msgstr "Co_lor:" + +#~ msgid "Start _index:" +#~ msgstr "_Inicia l'índex:" + +#~ msgid "_Font:" +#~ msgstr "_Lletra:" + +#~ msgid "Select Number Color" +#~ msgstr "Tria el color del nombre" + +#~ msgid "At _bottom" +#~ msgstr "A la part _inferior" + +#~ msgid "At _top" +#~ msgstr "A la part _superior" + +#~ msgid "Re_set" +#~ msgstr "_Restableix" + +#~ msgid "C_reate new image" +#~ msgstr "C_rea una imatge nova" + +#~ msgid "Width (pixels):" +#~ msgstr "Amplada (píxels):" + +#~ msgid "Left:" +#~ msgstr "Esquerra:" + +#~ msgid "Right:" +#~ msgstr "Dreta:" + +#~ msgid "" +#~ "The higher the number of iterations, the more details will be calculated" +#~ msgstr "Com més alt sigui el nombre d'iteracions, més detalls es calcularan" + +#~ msgid "CX:" +#~ msgstr "CX:" + +#~ msgid "Changes aspect of fractal" +#~ msgstr "Canvia l'aspecte de la fractal" + +#~ msgid "CY:" +#~ msgstr "CY:" + +#~ msgid "Reset parameters to default values" +#~ msgstr "Restableix als paràmetres per defecte" + +#~ msgid "Man'o'war" +#~ msgstr "Guerrer" + +#~ msgid "Co_lors" +#~ msgstr "Co_lors" + +#~ msgid "Change the number of colors in the mapping" +#~ msgstr "Canvia el nombre de colors en el mapatge" + +#~ msgid "Use loglog smoothing" +#~ msgstr "Utilitza el suavitzat loglog" + +#~ msgid "Use log log smoothing to eliminate \"banding\" in the result" +#~ msgstr "" +#~ "Utilitza el suavitzat log log per a eliminar «les bandes» del resultat" + +#~ msgid "Red:" +#~ msgstr "Vermell:" + +#~ msgid "Change the intensity of the red channel" +#~ msgstr "Canvia la intensitat del canal vermell" + +#~ msgid "Green:" +#~ msgstr "Verd:" + +#~ msgid "Change the intensity of the green channel" +#~ msgstr "Canvia la intensitat del canal verd" + +#~ msgid "Blue:" +#~ msgstr "Blau:" + +#~ msgid "Change the intensity of the blue channel" +#~ msgstr "Canvia la intensitat del canal blau" + +#~ msgctxt "color-function" +#~ msgid "None" +#~ msgstr "Cap" + +#~ msgid "Use sine-function for this color component" +#~ msgstr "Utilitza la funció sinus en l'element d'aquest color" + +#~ msgid "Use cosine-function for this color component" +#~ msgstr "Utilitza la funció cosinus en l'element d'aquest color" + +#~ msgid "" +#~ "Use linear mapping instead of any trigonometrical function for this color " +#~ "channel" +#~ msgstr "" +#~ "Utilitza un mapatge lineal en comptes d'una funció trigonomètrica en el " +#~ "canal d'aquest color" + +#~ msgid "" +#~ "If you enable this option higher color values will be swapped with lower " +#~ "ones and vice versa" +#~ msgstr "" +#~ "Si es marca l'opció, els colors de valors més alts s'intercanviaran amb els " +#~ "de valors més baixos i viceversa" + +#~ msgid "" +#~ "Create a color-map with the options you specified above (color " +#~ "density/function). The result is visible in the preview image" +#~ msgstr "" +#~ "Crea un mapa de color amb les opcions que heu especificat abans " +#~ "(densitat/funció del color). El resultat es pot veure en la previsualització" +#~ " d'imatge" + +#~ msgid "Create a color-map using a gradient from the gradient editor" +#~ msgstr "Crea un mapa de color utilitzant un degradat de l'editor de degradats" + +#~ msgid "T_ransparent background" +#~ msgstr "Fons t_ransparent" + +#~ msgid "Make destination image transparent where bump height is zero" +#~ msgstr "Fes transparent la imatge de destinació on l'alçada sigui zero" + +#~ msgid "Cre_ate new image" +#~ msgstr "Cre_a una imatge nova" + +#~ msgid "Create a new image when applying filter" +#~ msgstr "Crearà una imatge nova quan s'apliqui el filtre" + +#~ msgid "High _quality preview" +#~ msgstr "Previsualització d'alta _qualitat" + +#~ msgid "Enable/disable high quality preview" +#~ msgstr "Habilita/inhabilita la previsualització d'alta qualitat" + +#~ msgid "Color:" +#~ msgstr "Color:" + +#~ msgctxt "light-source" +#~ msgid "None" +#~ msgstr "Cap" + +#~ msgid "Select lightsource color" +#~ msgstr "Seleccioneu el color de la font de llum" + +#~ msgid "Set light source color" +#~ msgstr "Definiu la font de color de la llum" + +#~ msgid "Light source Y position in XYZ space" +#~ msgstr "Posició de la font de llum Y en l'espai XYZ" + +#~ msgid "_Z:" +#~ msgstr "_Z:" + +#~ msgid "Light source Z position in XYZ space" +#~ msgstr "Posició de la font de llum Z en l'espai XYZ" + +#~ msgid "Light source Y direction in XYZ space" +#~ msgstr "Direcció de la font de llum Y en l'espai XYZ" + +#~ msgid "Light source Z direction in XYZ space" +#~ msgstr "Direcció de la font de llum Z en l'espai XYZ" + +#~ msgid "_Glowing:" +#~ msgstr "_Ambient:" + +#~ msgid "Amount of original color to show where no direct light falls" +#~ msgstr "Quantitat de color original per a mostrar on no hi ha llum directa" + +#~ msgid "_Bright:" +#~ msgstr "_Lluentor:" + +#~ msgid "Intensity of original color when lit by a light source" +#~ msgstr "Intensitat del color original quan l'il·lumina una font de llum" + +#~ msgid "_Shiny:" +#~ msgstr "_Brillant:" + +#~ msgid "Controls how intense the highlights will be" +#~ msgstr "Controla la intensitat del realçat" + +#~ msgid "_Polished:" +#~ msgstr "_Polit:" + +#~ msgid "Higher values makes the highlights more focused" +#~ msgstr "Els valors alts fan que el que es realça estigui més enfocat" + +#~ msgid "Enable/disable bump-mapping (image depth)" +#~ msgstr "Habilita/inhabilita el mapa de relleu (profunditat d'imatge)" + +#~ msgid "Cu_rve:" +#~ msgstr "Cor_ba:" + +#~ msgid "Enable/disable environment-mapping (reflection)" +#~ msgstr "Habilita/inhabilita el mapat de l'entorn (reflexió)" + +#~ msgid "Environment image to use" +#~ msgstr "Imatge de l'entorn que s'utilitzarà" + +#~ msgid "Type of object to map to" +#~ msgstr "Tipus d'objecte sobre del qual es vol fer la projecció" + +#~ msgid "Make image transparent outside object" +#~ msgstr "Fes que la imatge sigui transparent fora de l'objecte" + +#~ msgid "Tile source image: useful for infinite planes" +#~ msgstr "Compon un mosaic de la imatge: útil per a plans infinits" + +#~ msgid "Enable _antialiasing" +#~ msgstr "Habilita l'_antialiàsing" + +#~ msgid "Enable/disable jagged edges removal (antialiasing)" +#~ msgstr "Habilita/inhabilita la supressió de vores irregulars (antialiàsing)" + +#~ msgid "Reflectivity" +#~ msgstr "Reflexió" + +#~ msgid "Higher values makes the object reflect more light (appear lighter)" +#~ msgstr "" +#~ "Els valors alts fan que l'objecte es reflecteixi de manera més clara (sembla" +#~ " més clar)" + +#~ msgid "Object Y position in XYZ space" +#~ msgstr "Posició de l'objecte Y en l'espai XYZ" + +#~ msgid "Object Z position in XYZ space" +#~ msgstr "Posició de l'objecte Z en l'espai XYZ" + +#~ msgid "Front:" +#~ msgstr "Davant:" + +#~ msgid "X scale (size)" +#~ msgstr "Escala X (mida)" + +#~ msgid "Y scale (size)" +#~ msgstr "Escala Y (mida)" + +#~ msgid "Z scale (size)" +#~ msgstr "Escala Z (mida)" + +#~ msgid "R_adius:" +#~ msgstr "R_adi:" + +#~ msgid "L_ength:" +#~ msgstr "Long_itud:" + +#~ msgid "O_rientation" +#~ msgstr "O_rientació" + +#~ msgid "Curl Orientation" +#~ msgstr "Orientació del rínxol" + +#~ msgid "_Opacity:" +#~ msgstr "_Opacitat:" + +#~ msgid "Area" +#~ msgstr "Àrea" + +#~ msgid "Include window _decoration" +#~ msgstr "Inclou la _decoració de la finestra" + +#~ msgid "Include _mouse pointer" +#~ msgstr "Inclou el punter del _ratolí" + +#~ msgid "Selection delay: " +#~ msgstr "Retard en la selecció: " + +#~ msgid "" +#~ "After the delay, drag your mouse to select the region for the screenshot." +#~ msgstr "" +#~ "Després del retard arrossegueu el vostre ratolí per a seleccionar la regió " +#~ "de la pantalla que voleu capturar." + +#~ msgid "Click in a window to snap it after delay." +#~ msgstr "Feu clic en una finestra perquè hi encaixi després d'un retard." + +#~ msgid "At the end of the delay, click in a window to snap it." +#~ msgstr "Al final del retard feu clic a la finestra per a capturar-la." + +#~ msgid "Screenshot dela_y: " +#~ msgstr "_Retard en la captura de pantalla: " + +#~ msgid "After the delay, the screenshot is taken." +#~ msgstr "Després del retard es farà la captura de pantalla." + +#~ msgid "Once the region is selected, it will be captured after this delay." +#~ msgstr "Un cop seleccionada la regió, es capturarà després d'aquest retard." + +#~ msgid "Once the window is selected, it will be captured after this delay." +#~ msgstr "" +#~ "Un cop la finestra està seleccionada, es capturarà després d'aquest retard." + +#~ msgid "After the delay, the active window will be captured." +#~ msgstr "" +#~ "Després del retard, es farà la captura de pantalla en la finestra activa." + #~ msgid "Adjustment layers are not yet supported and will be dropped." #~ msgstr "Les capes d'ajust encara no estan admeses i es descartaran." diff --git a/po-plug-ins/es.po b/po-plug-ins/es.po index 3136a11..298e014 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-05-28 03:13+0000\n" -"PO-Revision-Date: 2023-06-02 13:47+0200\n" +"POT-Creation-Date: 2023-10-19 10:06+0000\n" +"PO-Revision-Date: 2023-10-19 19:50+0200\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.3.1\n" +"X-Generator: Poedit 3.4\n" #: extensions/goat-exercises/goat-exercise-c.c:114 msgid "Exercise in _C minor" @@ -37,27 +37,27 @@ msgstr "Ejercitar en _C menor" msgid "Exercise a goat in the C language" msgstr "Ejercitar una cabra en el lenguaje C" -#: extensions/goat-exercises/goat-exercise-c.c:150 plug-ins/common/blinds.c:202 -#: plug-ins/common/border-average.c:195 plug-ins/common/checkerboard.c:184 -#: plug-ins/common/cml-explorer.c:558 plug-ins/common/compose.c:557 -#: plug-ins/common/contrast-retinex.c:253 plug-ins/common/crop-zealous.c:151 -#: plug-ins/common/curve-bend.c:665 plug-ins/common/decompose.c:376 -#: plug-ins/common/depth-merge.c:307 plug-ins/common/despeckle.c:232 -#: plug-ins/common/destripe.c:182 plug-ins/common/gradient-map.c:216 -#: plug-ins/common/grid.c:283 plug-ins/common/hot.c:311 -#: plug-ins/common/jigsaw.c:473 plug-ins/common/nl-filter.c:224 -#: plug-ins/common/qbist.c:253 plug-ins/common/sample-colorize.c:431 -#: plug-ins/common/smooth-palette.c:208 plug-ins/common/sparkle.c:307 -#: plug-ins/common/sphere-designer.c:3179 plug-ins/common/tile.c:220 -#: plug-ins/common/tile-small.c:308 plug-ins/common/van-gogh-lic.c:913 -#: plug-ins/common/warp.c:375 plug-ins/common/wavelet-decompose.c:182 -#: plug-ins/file-dds/dds.c:519 plug-ins/flame/flame.c:241 -#: plug-ins/fractal-explorer/fractal-explorer.c:399 plug-ins/gfig/gfig.c:215 +#: 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/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/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/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/fractal-explorer/fractal-explorer.c:427 plug-ins/gfig/gfig.c:215 #: plug-ins/pikaressionist/pika.c:178 -#: plug-ins/gradient-flare/gradient-flare.c:935 -#: plug-ins/ifs-compose/ifs-compose.c:541 plug-ins/imagemap/imap_main.c:636 -#: plug-ins/lighting/lighting-main.c:404 -#: plug-ins/map-object/map-object-main.c:496 plug-ins/pagecurl/pagecurl.c:302 +#: 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/lighting/lighting-main.c:756 +#: plug-ins/map-object/map-object-main.c:532 plug-ins/pagecurl/pagecurl.c:299 #, c-format msgid "Procedure '%s' only works with one drawable." msgstr "El procedimiento «%s» sólo funciona con un dibujable." @@ -71,52 +71,37 @@ 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/border-average.c:432 plug-ins/common/busy-dialog.c:279 -#: plug-ins/common/checkerboard.c:495 plug-ins/common/cml-explorer.c:1348 -#: plug-ins/common/cml-explorer.c:2114 plug-ins/common/cml-explorer.c:2247 -#: plug-ins/common/colormap-remap.c:704 plug-ins/common/compose.c:1183 -#: plug-ins/common/curve-bend.c:1203 plug-ins/common/curve-bend.c:1977 -#: plug-ins/common/curve-bend.c:2012 plug-ins/common/depth-merge.c:733 -#: plug-ins/common/file-cel.c:1001 plug-ins/common/file-gif-save.c:1163 -#: plug-ins/common/file-heif.c:2351 plug-ins/common/file-pdf-load.c:709 -#: plug-ins/common/file-pdf-save.c:1113 plug-ins/common/file-svg.c:757 -#: plug-ins/common/file-wmf.c:546 plug-ins/common/film.c:1324 -#: plug-ins/common/grid.c:761 plug-ins/common/mail.c:568 -#: plug-ins/common/qbist.c:848 plug-ins/common/qbist.c:890 -#: plug-ins/common/qbist.c:944 plug-ins/common/smooth-palette.c:511 -#: plug-ins/common/sphere-designer.c:2287 -#: plug-ins/common/sphere-designer.c:2632 plug-ins/common/tile.c:492 -#: plug-ins/common/tile-small.c:446 plug-ins/common/unit-editor.c:439 -#: plug-ins/common/van-gogh-lic.c:709 plug-ins/common/warp.c:490 -#: plug-ins/common/web-page.c:278 plug-ins/file-tiff/file-tiff-load.c:2553 -#: plug-ins/flame/flame.c:540 plug-ins/flame/flame.c:716 -#: plug-ins/flame/flame.c:1033 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:561 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1631 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1669 -#: plug-ins/fractal-explorer/fractal-explorer.c:875 -#: plug-ins/fractal-explorer/fractal-explorer.c:1269 +#: 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/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/fractal-explorer/fractal-explorer-dialogs.c:1540 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1578 +#: plug-ins/fractal-explorer/fractal-explorer.c:887 +#: plug-ins/fractal-explorer/fractal-explorer.c:1390 #: plug-ins/gfig/gfig-dialog.c:354 plug-ins/gfig/gfig-dialog.c:781 #: plug-ins/gfig/gfig-dialog.c:831 plug-ins/pikaressionist/brush.c:270 -#: plug-ins/pikaressionist/pikaressionist.c:142 #: plug-ins/pikaressionist/orientmap.c:528 #: plug-ins/pikaressionist/presets.c:642 plug-ins/pikaressionist/sizemap.c:401 -#: plug-ins/gradient-flare/gradient-flare.c:2517 -#: plug-ins/gradient-flare/gradient-flare.c:3367 -#: plug-ins/gradient-flare/gradient-flare.c:3479 -#: plug-ins/ifs-compose/ifs-compose.c:962 -#: plug-ins/ifs-compose/ifs-compose.c:2608 -#: plug-ins/ifs-compose/ifs-compose.c:2645 plug-ins/imagemap/imap_browse.c:80 +#: 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/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:1038 -#: plug-ins/lighting/lighting-ui.c:1163 plug-ins/lighting/lighting-ui.c:1307 -#: plug-ins/map-object/map-object-ui.c:1317 -#: plug-ins/metadata/metadata-editor.c:1181 -#: plug-ins/metadata/metadata-editor.c:1677 -#: plug-ins/metadata/metadata-editor.c:5306 -#: plug-ins/metadata/metadata-editor.c:5341 plug-ins/pagecurl/pagecurl.c:496 -#: plug-ins/screenshot/screenshot.c:513 -#: plug-ins/selection-to-path/selection-to-path.c:413 +#: 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 msgid "_Cancel" msgstr "_Cancelar" @@ -137,9 +122,10 @@ msgstr "_Ejecutar" #. string. You may just use recommended Python format() or #. any style you like in your plug-ins. #: extensions/goat-exercises/goat-exercise-c.c:200 +#: extensions/goat-exercises/goat-exercise-lua.lua:88 #: extensions/goat-exercises/goat-exercise-py3.py:93 #: extensions/goat-exercises/goat-exercise-vala.vala:89 -#, c-format, python-format +#, c-format, python-format, lua-format msgid "" "This plug-in is an exercise in '%s' to demo plug-in creation.\n" "Check out the last version of the source code online by clicking the \"Source" @@ -169,30 +155,19 @@ 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/border-average.c:433 plug-ins/common/checkerboard.c:496 -#: plug-ins/common/cml-explorer.c:1349 plug-ins/common/colormap-remap.c:705 -#: plug-ins/common/compose.c:1184 plug-ins/common/curve-bend.c:1204 -#: plug-ins/common/depth-merge.c:734 plug-ins/common/file-heif.c:2352 -#: plug-ins/common/file-pdf-load.c:710 plug-ins/common/file-svg.c:758 -#: plug-ins/common/file-wmf.c:547 plug-ins/common/film.c:1325 -#: plug-ins/common/grid.c:762 plug-ins/common/qbist.c:945 -#: plug-ins/common/smooth-palette.c:512 plug-ins/common/sphere-designer.c:2633 -#: plug-ins/common/tile.c:493 plug-ins/common/tile-small.c:447 -#: plug-ins/common/unit-editor.c:268 plug-ins/common/van-gogh-lic.c:710 -#: plug-ins/common/warp.c:491 plug-ins/file-psd/psd-load.c:3533 +#: 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/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/fractal-explorer/fractal-explorer-dialogs.c:562 -#: plug-ins/fractal-explorer/fractal-explorer.c:1270 -#: plug-ins/pikaressionist/pikaressionist.c:143 +#: 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:2518 -#: plug-ins/gradient-flare/gradient-flare.c:3480 -#: plug-ins/ifs-compose/ifs-compose.c:963 +#: plug-ins/gradient-flare/gradient-flare.c:3446 +#: plug-ins/ifs-compose/ifs-compose.c:909 #: plug-ins/imagemap/imap_default_dialog.c:109 -#: plug-ins/lighting/lighting-ui.c:1039 -#: plug-ins/map-object/map-object-ui.c:1318 plug-ins/pagecurl/pagecurl.c:497 -#: plug-ins/selection-to-path/selection-to-path.c:414 msgid "_OK" msgstr "_Aceptar" @@ -222,6 +197,15 @@ msgstr "_Aceptar" msgid "Exercise a goat (Lua)" msgstr "Ejercitar una cabra (Lua)" +#. CANCEL, CLOSE, DELETE_EVENT +#: extensions/goat-exercises/goat-exercise-lua.lua:172 +msgid "Exercise a Lua goat" +msgstr "Ejercitar una cabra en Lua" + +#: extensions/goat-exercises/goat-exercise-lua.lua:176 +msgid "Exercise a goat in the Lua language" +msgstr "Ejercitar una cabra en el lenguaje Lua" + #: extensions/goat-exercises/goat-exercise-py3.py:46 msgid "Exercise a goat and a python" msgstr "Ejercitar una cabra y una pitón" @@ -321,8 +305,10 @@ msgstr "Base ver_tical" msgid "_Grid" msgstr "_Rejilla" -#: plug-ins/common/align-layers.c:223 plug-ins/common/grid.c:757 -#: plug-ins/gfig/gfig-dialog.c:1360 plug-ins/imagemap/imap_main.c:1927 +#: plug-ins/common/align-layers.c:223 plug-ins/common/grid.c:782 +#: plug-ins/gfig/gfig-dialog.c:1360 plug-ins/gfig/gfig-menu.ui:31 +#: plug-ins/imagemap/imap_main.c:1555 plug-ins/imagemap/imap-menu.ui:197 +#: plug-ins/imagemap/imap-menu.ui:289 msgid "Grid" msgstr "Rejilla" @@ -342,67 +328,73 @@ msgstr "_Usar la capa inferior (invisible) como base" msgid "Use the (invisible) bottom layer as the base" msgstr "Usar la capa inferior (invisible) como base" -#: plug-ins/common/align-layers.c:291 +#: plug-ins/common/align-layers.c:287 msgid "There are not enough layers to align." msgstr "No hay suficientes capas para alinear." -#: plug-ins/common/align-layers.c:739 +#: plug-ins/common/align-layers.c:731 msgid "Align Visible Layers" msgstr "Alinear capas visibles" #. Text antialiasing #. Graphics antialiasing #. file save type -#: plug-ins/common/align-layers.c:748 plug-ins/common/align-layers.c:766 -#: plug-ins/common/file-ps.c:3745 plug-ins/common/file-ps.c:3753 -#: plug-ins/common/file-psp.c:840 plug-ins/file-tiff/file-tiff-save.c:1322 -#: plug-ins/metadata/metadata-tags.c:195 plug-ins/metadata/metadata-tags.c:207 -#: plug-ins/metadata/metadata-tags.c:238 +#: 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/fractal-explorer/fractal-explorer.c:344 +#: plug-ins/fractal-explorer/fractal-explorer.c:354 +#: plug-ins/fractal-explorer/fractal-explorer.c:364 +#: plug-ins/lighting/lighting-main.c:200 plug-ins/lighting/lighting-main.c:323 +#: plug-ins/lighting/lighting-main.c:382 plug-ins/lighting/lighting-main.c:441 +#: plug-ins/lighting/lighting-main.c:500 plug-ins/lighting/lighting-main.c:559 +#: plug-ins/metadata/metadata-tags.c:211 plug-ins/metadata/metadata-tags.c:223 +#: plug-ins/metadata/metadata-tags.c:254 msgid "None" msgstr "Ninguna" -#: plug-ins/common/align-layers.c:749 plug-ins/common/align-layers.c:767 +#: plug-ins/common/align-layers.c:741 plug-ins/common/align-layers.c:759 msgid "Collect" msgstr "Recolectar" -#: plug-ins/common/align-layers.c:750 +#: plug-ins/common/align-layers.c:742 msgid "Fill (left to right)" msgstr "Rellenar (izq. a der.)" -#: plug-ins/common/align-layers.c:751 +#: plug-ins/common/align-layers.c:743 msgid "Fill (right to left)" msgstr "Rellenar (der. a izq.)" -#: plug-ins/common/align-layers.c:752 plug-ins/common/align-layers.c:770 +#: plug-ins/common/align-layers.c:744 plug-ins/common/align-layers.c:762 msgid "Snap to grid" msgstr "Ajustar a la rejilla" -#: plug-ins/common/align-layers.c:758 +#: plug-ins/common/align-layers.c:750 msgid "Left edge" msgstr "Borde izquierdo" -#: plug-ins/common/align-layers.c:759 plug-ins/common/align-layers.c:777 -#: plug-ins/gradient-flare/gradient-flare.c:2878 +#: plug-ins/common/align-layers.c:751 plug-ins/common/align-layers.c:769 +#: plug-ins/gradient-flare/gradient-flare.c:2919 msgid "Center" msgstr "Centro" -#: plug-ins/common/align-layers.c:760 +#: plug-ins/common/align-layers.c:752 msgid "Right edge" msgstr "Borde derecho" -#: plug-ins/common/align-layers.c:768 +#: plug-ins/common/align-layers.c:760 msgid "Fill (top to bottom)" msgstr "Rellenar (superior a inferior)" -#: plug-ins/common/align-layers.c:769 +#: plug-ins/common/align-layers.c:761 msgid "Fill (bottom to top)" msgstr "Rellenar (inferior a superior)" -#: plug-ins/common/align-layers.c:776 +#: plug-ins/common/align-layers.c:768 msgid "Top edge" msgstr "Borde superior" -#: plug-ins/common/align-layers.c:778 +#: plug-ins/common/align-layers.c:770 msgid "Bottom edge" msgstr "Borde inferior" @@ -455,6 +447,130 @@ msgstr "Buscando el fondo de la animación" msgid "Optimizing animation" msgstr "Optimizando la animación" +#: plug-ins/common/animation-play.c:330 +msgid "_Playback..." +msgstr "_Reproducción…" + +#: plug-ins/common/animation-play.c:335 +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 +msgid "Start playback" +msgstr "Iniciar reproducción" + +# //R :-? +#: plug-ins/common/animation-play.c:371 plug-ins/common/animation-play.c:738 +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 +msgid "Step to next frame" +msgstr "Paso al siguiente fotograma" + +#: plug-ins/common/animation-play.c:373 plug-ins/common/animation-play.c:742 +msgid "Rewind the animation" +msgstr "Rebobinar animación" + +#: plug-ins/common/animation-play.c:378 +msgid "Increase the speed of the animation" +msgstr "Aumentar la velocidad de la animación" + +#: plug-ins/common/animation-play.c:379 +msgid "Decrease the speed of the animation" +msgstr "Reducir la velocidad de la animación" + +#: plug-ins/common/animation-play.c:380 +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 +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 +msgid "Reload the image" +msgstr "Recargar la imagen" + +#: plug-ins/common/animation-play.c:387 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 +#, c-format +msgid "%.1f %%" +msgstr "%.1f %%" + +#. Image Name +#: plug-ins/common/animation-play.c:658 +msgid "Animation Playback:" +msgstr "Reproducir animación:" + +#: plug-ins/common/animation-play.c:738 +msgid "Step _back" +msgstr "_Paso atrás" + +#: plug-ins/common/animation-play.c:740 +msgid "_Step" +msgstr "_Paso" + +#: plug-ins/common/animation-play.c:745 +msgid "Detach" +msgstr "Desprender" + +#. Zoom Options +#: plug-ins/common/animation-play.c:818 +#: 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 +#, c-format +msgid "%d fps" +msgstr "%d fps" + +#: plug-ins/common/animation-play.c:839 +msgid "Default framerate" +msgstr "Frecuencia de cuadros predeterminada" + +#: plug-ins/common/animation-play.c:859 +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 +msgid "Cumulative layers (combine)" +msgstr "Capas acumulativas (combinar)" + +#: plug-ins/common/animation-play.c:875 plug-ins/common/file-gif-save.c:1271 +msgid "One frame per layer (replace)" +msgstr "Un cuadro por capa (reemplazar)" + +#: plug-ins/common/animation-play.c:971 +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 +msgid "Invalid image. Did you close it?" +msgstr "Imagen no válida. ¿La ha cerrado?" + +#: plug-ins/common/animation-play.c:1150 +#, c-format +msgid "Frame %d of %d" +msgstr "Fotograma %d de %d" + +#: plug-ins/common/animation-play.c:1352 +msgid "Stop playback" +msgstr "Detener reproducción" + #: plug-ins/common/blinds.c:140 msgid "_Blinds..." msgstr "_Persianas…" @@ -495,81 +611,103 @@ msgstr "_Transparente" msgid "Background transparent" msgstr "Fondo transparente" -#: plug-ins/common/blinds.c:238 +#: plug-ins/common/blinds.c:221 msgid "Adding blinds" msgstr "Añadiendo persianas" -#: plug-ins/common/blinds.c:279 +#: plug-ins/common/blinds.c:256 msgid "Blinds" msgstr "Persianas" -#: plug-ins/common/blinds.c:294 +#: plug-ins/common/blinds.c:271 plug-ins/pagecurl/pagecurl.c:251 msgid "Horizontal" msgstr "Horizontal" -#: plug-ins/common/blinds.c:295 +#: plug-ins/common/blinds.c:272 plug-ins/pagecurl/pagecurl.c:250 msgid "Vertical" msgstr "Vertical" #. #. * Create the "background" layer to hold the image... #. -#: plug-ins/common/blinds.c:301 plug-ins/common/compose.c:1129 -#: plug-ins/common/decompose.c:666 plug-ins/common/file-cel.c:496 -#: plug-ins/common/file-cel.c:501 plug-ins/common/file-dicom.c:745 -#: plug-ins/common/file-gegl.c:466 plug-ins/common/file-gif-load.c:1097 -#: plug-ins/common/file-iff.c:343 plug-ins/common/file-jp2-load.c:1317 -#: plug-ins/common/file-pcx.c:742 plug-ins/common/file-pcx.c:750 -#: plug-ins/common/file-pcx.c:758 plug-ins/common/file-pix.c:422 -#: plug-ins/common/file-png.c:950 plug-ins/common/file-pnm.c:869 -#: plug-ins/common/file-qoi.c:321 plug-ins/common/file-raw-data.c:1836 -#: plug-ins/common/file-sunras.c:1083 plug-ins/common/file-tga.c:1117 -#: plug-ins/common/file-wbmp.c:270 plug-ins/common/file-xbm.c:912 -#: plug-ins/common/film.c:812 plug-ins/common/smooth-palette.c:332 -#: plug-ins/common/tile.c:405 plug-ins/file-bmp/bmp-load.c:737 -#: plug-ins/file-exr/file-exr.c:271 plug-ins/file-faxg3/faxg3.c:574 -#: plug-ins/file-fits/fits.c:667 plug-ins/file-jpeg/jpeg-load.c:231 +#: plug-ins/common/blinds.c:278 plug-ins/common/compose.c:1183 +#: 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-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-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-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:475 +#: 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-webp/file-webp-load.c:166 plug-ins/gfig/gfig-dialog.c:1290 +#: 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:315 plug-ins/twain/twain.c:661 +#: plug-ins/screenshot/screenshot-win32.c:317 plug-ins/twain/twain.c:661 msgid "Background" msgstr "Fondo" -#: plug-ins/common/border-average.c:139 +#: plug-ins/common/border-average.c:124 msgid "_Border Average..." msgstr "_Promedio del borde…" -#: plug-ins/common/border-average.c:143 +#: plug-ins/common/border-average.c:128 msgid "Set foreground to the average color of the image border" msgstr "Establecer el primer plano al color promedio del borde de la imagen" -#: plug-ins/common/border-average.c:244 plug-ins/common/border-average.c:428 +#: plug-ins/common/border-average.c:137 +msgid "_Thickness" +msgstr "G_rosor" + +#: plug-ins/common/border-average.c:138 +msgid "Border size to take in count" +msgstr "Tamaño del borde a tener en cuenta" + +#: plug-ins/common/border-average.c:142 +msgid "Thickness unit of measure" +msgstr "Unidad de medida del grosor" + +#: plug-ins/common/border-average.c:143 +msgid "Border size unit of measure" +msgstr "Unidad de medida del tamaño del borde" + +# //R ?????? No sé a qué se refiere +#: plug-ins/common/border-average.c:147 +msgid "Bucket Si_ze" +msgstr "Tamaño del _cubo" + +#: plug-ins/common/border-average.c:148 +msgid "Bits for bucket size (default=4: 16 Levels)" +msgstr "Bits para el tamaño del cubo (predeterminado=4: 16 Niveles)" + +#: plug-ins/common/border-average.c:153 plug-ins/common/border-average.c:154 +#, fuzzy +#| msgid "Set foreground to the average color of the image border" +msgid "The average color of the specified border." +msgstr "Establecer el primer plano al color promedio del borde de la imagen" + +#: plug-ins/common/border-average.c:208 plug-ins/common/border-average.c:386 msgid "Border Average" msgstr "Promedio del borde" -#: plug-ins/common/border-average.c:450 +#: plug-ins/common/border-average.c:397 msgid "Border Size" msgstr "Tamaño del borde" -#: plug-ins/common/border-average.c:458 -msgid "_Thickness:" -msgstr "G_rosor:" - -#. Number of Colors frame -#: plug-ins/common/border-average.c:494 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:906 +#: plug-ins/common/border-average.c:424 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:864 msgid "Number of Colors" msgstr "Número de colores" -# //R ?????? No sé a qué se refiere -#: plug-ins/common/border-average.c:502 -msgid "_Bucket size:" -msgstr "Tamaño del _bucket:" - #: plug-ins/common/busy-dialog.c:255 plug-ins/common/busy-dialog.c:271 msgid "Please Wait" msgstr "Espere" @@ -583,27 +721,39 @@ msgstr "Espere a que termine la operación" msgid "Canceling..." msgstr "Cancelando…" -#: plug-ins/common/checkerboard.c:137 +#: plug-ins/common/checkerboard.c:123 msgid "_Checkerboard (legacy)..." msgstr "_Tablero de ajedrez (heredado)…" -#: plug-ins/common/checkerboard.c:142 +#: plug-ins/common/checkerboard.c:128 msgid "Create a checkerboard pattern" msgstr "Crear un patrón de tablero de ajedrez" -#: plug-ins/common/checkerboard.c:366 plug-ins/common/checkerboard.c:491 -msgid "Checkerboard" -msgstr "Tablero de ajedrez" - -#: plug-ins/common/checkerboard.c:556 plug-ins/pikaressionist/sizemap.c:508 -msgid "_Size:" -msgstr "T_amaño:" - # //R ¿¿EEEEEEEEEEEIIIIIIINNNNNNNNNNHHHHHHHHHHHGGG??? -#: plug-ins/common/checkerboard.c:565 +#: plug-ins/common/checkerboard.c:137 msgid "_Psychobilly" msgstr "_Psicobilly" +#: plug-ins/common/checkerboard.c:138 +msgid "Render a psychobilly checkerboard" +msgstr "Renderiza un damero psychobilly" + +#: plug-ins/common/checkerboard.c:143 plug-ins/pikaressionist/size.c:94 +msgid "_Size" +msgstr "Ta_maño" + +#: plug-ins/common/checkerboard.c:144 +msgid "Size of the checks" +msgstr "Tamaño de las casillas" + +#: plug-ins/common/checkerboard.c:149 plug-ins/common/checkerboard.c:150 +msgid "Check size unit of measure" +msgstr "Unidad de medida del tamaño de las casillas" + +#: plug-ins/common/checkerboard.c:347 plug-ins/common/checkerboard.c:477 +msgid "Checkerboard" +msgstr "Tablero de ajedrez" + #: plug-ins/common/cml-explorer.c:130 msgid "Keep image's values" msgstr "Mantener valores de imagen" @@ -830,105 +980,131 @@ msgstr "_Examinador CML…" msgid "Create abstract Coupled-Map Lattice patterns" msgstr "Crea patrones abstractos Coupled-Map-Lattice" -#: plug-ins/common/cml-explorer.c:877 +#: plug-ins/common/cml-explorer.c:515 +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 " +"of a parameter file is passed as the 4th arg. You can control CML_explorer " +"via parameter file." +msgstr "" +"Hacer una imagen de Coupled-Map Lattice (CML). CML es un tipo de autómata " +"celular en un dominio continuo (valor). En PIKA_RUN_NONINTERACTIVE, el " +"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 +#, fuzzy +#| msgid "Parameter k:" +msgid "Parameter URI" +msgstr "Parámetro k:" + +#: plug-ins/common/cml-explorer.c:535 +msgid "" +"The local file:// URI of parameter file. CML_explorer makes an image with " +"its settings." +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 msgid "CML Explorer: evoluting" msgstr "Examinador CML: evolucionando" # //R No tengo ni idea de qué es esto... -#: plug-ins/common/cml-explorer.c:1344 +#: plug-ins/common/cml-explorer.c:1351 msgid "Coupled-Map-Lattice Explorer" msgstr "Examinador Coupled-Map-Lattice" -#: plug-ins/common/cml-explorer.c:1388 +#: plug-ins/common/cml-explorer.c:1395 msgid "New Seed" msgstr "Semilla nueva" -#: plug-ins/common/cml-explorer.c:1399 +#: plug-ins/common/cml-explorer.c:1406 msgid "Fix Seed" msgstr "Fijar semilla" -#: plug-ins/common/cml-explorer.c:1410 +#: plug-ins/common/cml-explorer.c:1417 msgid "Random Seed" msgstr "Semilla aleatoria" #. The Load button -#: plug-ins/common/cml-explorer.c:1425 plug-ins/common/cml-explorer.c:2248 -#: plug-ins/common/curve-bend.c:1463 plug-ins/common/curve-bend.c:1978 -#: plug-ins/common/file-cel.c:1002 plug-ins/common/qbist.c:849 -#: plug-ins/common/qbist.c:1032 plug-ins/common/sphere-designer.c:2290 +#: 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/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/fractal-explorer/fractal-explorer-dialogs.c:801 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1632 -#: plug-ins/gfig/gfig-dialog.c:782 plug-ins/ifs-compose/ifs-compose.c:959 -#: plug-ins/ifs-compose/ifs-compose.c:2646 plug-ins/imagemap/imap_browse.c:81 -#: plug-ins/imagemap/imap_file.c:74 plug-ins/lighting/lighting-ui.c:608 -#: plug-ins/lighting/lighting-ui.c:1308 +#: 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/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:1433 plug-ins/common/cml-explorer.c:2115 -#: plug-ins/common/curve-bend.c:1475 plug-ins/common/curve-bend.c:2013 -#: plug-ins/common/file-pdf-save.c:1112 plug-ins/common/qbist.c:891 -#: plug-ins/common/qbist.c:1040 plug-ins/common/sphere-designer.c:2290 +#: 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/fractal-explorer/fractal-explorer-dialogs.c:818 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1670 +#: 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:960 -#: plug-ins/ifs-compose/ifs-compose.c:2609 plug-ins/imagemap/imap_file.c:129 -#: plug-ins/lighting/lighting-ui.c:601 plug-ins/lighting/lighting-ui.c:1164 +#: 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/lighting/lighting-ui.c:486 plug-ins/lighting/lighting-ui.c:739 msgid "_Save" msgstr "_Guardar" -#: plug-ins/common/cml-explorer.c:1452 plug-ins/common/van-gogh-lic.c:736 +#: plug-ins/common/cml-explorer.c:1459 plug-ins/common/van-gogh-lic.c:736 msgid "_Hue" msgstr "T_ono" -#: plug-ins/common/cml-explorer.c:1456 +#: plug-ins/common/cml-explorer.c:1463 msgid "Sat_uration" msgstr "Sat_uración" -#: plug-ins/common/cml-explorer.c:1460 +#: plug-ins/common/cml-explorer.c:1467 msgid "_Value" msgstr "_Valor" -#: plug-ins/common/cml-explorer.c:1464 +#: plug-ins/common/cml-explorer.c:1471 msgid "_Advanced" msgstr "_Avanzado" # //R :-? -#: plug-ins/common/cml-explorer.c:1479 +#: plug-ins/common/cml-explorer.c:1486 msgid "Channel Independent Parameters" msgstr "Parámetros independientes del canal" -#: plug-ins/common/cml-explorer.c:1501 +#: plug-ins/common/cml-explorer.c:1508 msgid "Initial value:" msgstr "Valor inicial:" -#: plug-ins/common/cml-explorer.c:1506 +#: plug-ins/common/cml-explorer.c:1513 msgid "Zoom scale:" msgstr "Escala de ampliación:" -#: plug-ins/common/cml-explorer.c:1513 +#: plug-ins/common/cml-explorer.c:1520 msgid "Start offset:" msgstr "Desplazamiento de inicio:" -#: plug-ins/common/cml-explorer.c:1521 +#: plug-ins/common/cml-explorer.c:1528 msgid "Seed of Random (only for \"From Seed\" Modes)" msgstr "Semilla aleatoria (sólo para modos «Desde semilla»)" -#: plug-ins/common/cml-explorer.c:1531 +#: plug-ins/common/cml-explorer.c:1538 msgid "Seed:" msgstr "Semilla:" -#: plug-ins/common/cml-explorer.c:1543 +#: plug-ins/common/cml-explorer.c:1550 msgid "Switch to \"From seed\" With the Last Seed" msgstr "Cambiar a «Desde semilla» con la última semilla" -#: plug-ins/common/cml-explorer.c:1555 +#: plug-ins/common/cml-explorer.c:1562 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 " @@ -941,201 +1117,201 @@ msgstr "" "diferente de la vista previa), y (2) todas las tasas de mutación son iguales " "a cero." -#: plug-ins/common/cml-explorer.c:1563 +#: plug-ins/common/cml-explorer.c:1570 msgid "O_thers" msgstr "O_tros" -#: plug-ins/common/cml-explorer.c:1578 +#: plug-ins/common/cml-explorer.c:1585 msgid "Copy Settings" msgstr "Copiar ajustes" -#: plug-ins/common/cml-explorer.c:1597 +#: plug-ins/common/cml-explorer.c:1604 msgid "Source channel:" msgstr "Canal origen:" -#: plug-ins/common/cml-explorer.c:1612 plug-ins/common/cml-explorer.c:1659 +#: plug-ins/common/cml-explorer.c:1619 plug-ins/common/cml-explorer.c:1666 msgid "Destination channel:" msgstr "Canal destino:" -#: plug-ins/common/cml-explorer.c:1616 +#: plug-ins/common/cml-explorer.c:1623 msgid "Copy Parameters" msgstr "Copiar parámetros" -#: plug-ins/common/cml-explorer.c:1624 +#: plug-ins/common/cml-explorer.c:1631 msgid "Selective Load Settings" msgstr "Configuración de carga selectiva" -#: plug-ins/common/cml-explorer.c:1644 +#: plug-ins/common/cml-explorer.c:1651 msgid "Source channel in file:" msgstr "Canal origen en el archivo:" -#: plug-ins/common/cml-explorer.c:1665 +#: plug-ins/common/cml-explorer.c:1672 msgid "_Misc" msgstr "_Varios" -#: plug-ins/common/cml-explorer.c:1724 +#: plug-ins/common/cml-explorer.c:1731 msgid "Function type:" msgstr "Tipo de función:" -#: plug-ins/common/cml-explorer.c:1740 +#: plug-ins/common/cml-explorer.c:1747 msgid "Composition:" msgstr "Composición:" -#: plug-ins/common/cml-explorer.c:1754 +#: plug-ins/common/cml-explorer.c:1761 msgid "Misc arrange:" msgstr "Ordenes variados:" -#: plug-ins/common/cml-explorer.c:1758 +#: plug-ins/common/cml-explorer.c:1765 msgid "Use cyclic range" msgstr "Usar rango cíclico" -#: plug-ins/common/cml-explorer.c:1767 +#: plug-ins/common/cml-explorer.c:1774 msgid "Mod. rate:" msgstr "Tasa de modificación:" -#: plug-ins/common/cml-explorer.c:1774 +#: plug-ins/common/cml-explorer.c:1781 msgid "Env. sensitivity:" msgstr "Sensibilidad de entorno:" -#: plug-ins/common/cml-explorer.c:1781 +#: plug-ins/common/cml-explorer.c:1788 msgid "Diffusion dist.:" msgstr "Distancia de difusión:" -#: plug-ins/common/cml-explorer.c:1788 +#: plug-ins/common/cml-explorer.c:1795 msgid "# of subranges:" msgstr "nº de subrangos:" -#: plug-ins/common/cml-explorer.c:1795 +#: plug-ins/common/cml-explorer.c:1802 msgid "P(ower factor):" msgstr "P (factor de potencia):" -#: plug-ins/common/cml-explorer.c:1803 +#: plug-ins/common/cml-explorer.c:1810 msgid "Parameter k:" msgstr "Parámetro k:" -#: plug-ins/common/cml-explorer.c:1811 +#: plug-ins/common/cml-explorer.c:1818 msgid "Range low:" msgstr "Límite inferior:" # //R |-( -#: plug-ins/common/cml-explorer.c:1818 +#: plug-ins/common/cml-explorer.c:1825 msgid "Range high:" msgstr "Límite superior:" -#: plug-ins/common/cml-explorer.c:1829 +#: plug-ins/common/cml-explorer.c:1836 msgid "Plot a Graph of the Settings" msgstr "Dibujar gráfica de los ajustes" -#: plug-ins/common/cml-explorer.c:1871 +#: plug-ins/common/cml-explorer.c:1878 msgid "Ch. sensitivity:" msgstr "Sensibilidad de canal:" -#: plug-ins/common/cml-explorer.c:1879 +#: plug-ins/common/cml-explorer.c:1886 msgid "Mutation rate:" msgstr "Tasa de mutación:" -#: plug-ins/common/cml-explorer.c:1887 +#: plug-ins/common/cml-explorer.c:1894 msgid "Mutation dist.:" msgstr "Distancia de mutación:" -#: plug-ins/common/cml-explorer.c:1979 +#: plug-ins/common/cml-explorer.c:1986 msgid "Graph of the Current Settings" msgstr "Gráfica de los ajustes actuales" -#: plug-ins/common/cml-explorer.c:1983 plug-ins/common/plugin-browser.c:560 -#: plug-ins/common/procedure-browser.c:168 -#: plug-ins/common/sample-colorize.c:1415 plug-ins/gfig/gfig-dialog.c:355 +#: plug-ins/common/cml-explorer.c:1990 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:1262 +#: plug-ins/ifs-compose/ifs-compose.c:1208 #: plug-ins/metadata/metadata-viewer.c:272 msgid "_Close" msgstr "_Cerrar" -#: plug-ins/common/cml-explorer.c:2051 +#: plug-ins/common/cml-explorer.c:2058 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:2110 +#: plug-ins/common/cml-explorer.c:2117 msgid "Save CML Explorer Parameters" msgstr "Guardar los parámetros del Examinador CML" -#: plug-ins/common/cml-explorer.c:2166 plug-ins/common/curve-bend.c:822 -#: plug-ins/common/file-dicom.c:1558 plug-ins/common/file-mng.c:876 -#: plug-ins/common/file-mng.c:1223 plug-ins/common/file-pcx.c:1230 -#: plug-ins/common/file-pdf-save.c:720 plug-ins/common/file-png.c:1502 -#: plug-ins/common/file-raw-data.c:1345 plug-ins/common/file-raw-data.c:1374 -#: plug-ins/common/file-sunras.c:638 plug-ins/common/file-tga.c:1238 -#: plug-ins/common/file-xmc.c:1383 plug-ins/common/sphere-designer.c:2201 -#: plug-ins/file-bmp/bmp-save.c:341 plug-ins/file-fli/fli-pika.c:817 -#: plug-ins/file-icns/file-icns-save.c:428 plug-ins/file-ico/ico-save.c:1332 -#: plug-ins/file-ico/ico-save.c:1549 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/common/cml-explorer.c:2173 plug-ins/common/curve-bend.c:792 +#: 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-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/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/fractal-explorer/fractal-explorer-dialogs.c:1538 -#: plug-ins/gfig/gfig.c:1044 plug-ins/ifs-compose/ifs-compose.c:2468 -#: plug-ins/lighting/lighting-ui.c:1233 +#: 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/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:2221 +#: plug-ins/common/cml-explorer.c:2228 #, c-format msgid "Parameters were saved to '%s'" msgstr "Los parámetros fueron guardados en «%s»" -#: plug-ins/common/cml-explorer.c:2243 +#: plug-ins/common/cml-explorer.c:2250 msgid "Load CML Explorer Parameters" msgstr "Cargar los parámetros del Examinador CML" -#: plug-ins/common/cml-explorer.c:2339 plug-ins/common/curve-bend.c:875 -#: plug-ins/common/file-cel.c:352 plug-ins/common/file-cel.c:403 -#: plug-ins/common/file-cel.c:641 plug-ins/common/file-dicom.c:377 -#: plug-ins/common/file-gif-load.c:410 plug-ins/common/file-iff.c:227 -#: plug-ins/common/file-mng.c:1407 plug-ins/common/file-pcx.c:523 -#: plug-ins/common/file-pcx.c:566 plug-ins/common/file-png.c:673 -#: plug-ins/common/file-ps.c:1126 plug-ins/common/file-ps.c:3636 -#: plug-ins/common/file-psp.c:2383 plug-ins/common/file-psp.c:2433 -#: plug-ins/common/file-qoi.c:300 plug-ins/common/file-raw-data.c:514 -#: plug-ins/common/file-raw-data.c:1673 plug-ins/common/file-sunras.c:458 -#: plug-ins/common/file-svg.c:365 plug-ins/common/file-svg.c:743 -#: plug-ins/common/file-tga.c:448 plug-ins/common/file-wbmp.c:184 -#: plug-ins/common/file-xbm.c:750 plug-ins/common/file-xmc.c:658 -#: plug-ins/common/file-xmc.c:897 plug-ins/common/file-xwd.c:481 +#: 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:155 plug-ins/file-faxg3/faxg3.c:256 -#: plug-ins/file-fits/fits.c:396 plug-ins/file-fli/fli-pika.c:459 -#: plug-ins/file-fli/fli-pika.c:510 plug-ins/file-icns/file-icns-load.c:515 -#: plug-ins/file-icns/file-icns-load.c:566 plug-ins/file-ico/ico-load.c:682 -#: plug-ins/file-ico/ico-load.c:792 plug-ins/file-ico/ico-load.c:991 -#: plug-ins/file-jpeg/jpeg-load.c:99 plug-ins/file-jpeg/jpeg-load.c:614 +#: 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:1855 -#: plug-ins/fractal-explorer/fractal-explorer.c:1038 plug-ins/gfig/gfig.c:674 +#: 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:1377 +#: 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:2361 +#: plug-ins/common/cml-explorer.c:2368 msgid "Error: it's not CML parameter file." msgstr "Error: no es un archivo de parámetros CML." -#: plug-ins/common/cml-explorer.c:2368 +#: plug-ins/common/cml-explorer.c:2375 #, 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:2372 +#: plug-ins/common/cml-explorer.c:2379 #, 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:2435 +#: plug-ins/common/cml-explorer.c:2442 msgid "Error: failed to load parameters" msgstr "Error: falló al cargar los parámetros" @@ -1147,6 +1323,25 @@ msgstr "R_eordenar el mapa de colores…" msgid "Rearrange the colormap" msgstr "Reordenar el mapa de colores" +#: plug-ins/common/colormap-remap.c:193 +msgid "" +"This procedure takes an indexed image and lets you alter the positions of " +"colors in the colormap without visually changing the image." +msgstr "" +"Este procedimiento toma una imagen indexada y le permite modificar las " +"posiciones de los colores en el mapa de colores sin cambiar visualmente la " +"imagen." + +#: plug-ins/common/colormap-remap.c:204 +msgid "Map" +msgstr "Asignar" + +#: plug-ins/common/colormap-remap.c:205 +#, fuzzy +#| msgid "Rearrange the colormap" +msgid "Remap array for the colormap" +msgstr "Reordenar el mapa de colores" + #: plug-ins/common/colormap-remap.c:220 msgid "_Swap Colors" msgstr "Intercambiar colore_s" @@ -1155,32 +1350,78 @@ msgstr "Intercambiar colore_s" msgid "Swap two colors in the colormap" msgstr "Intercambiar dos colores en el mapa de colores" -#: plug-ins/common/colormap-remap.c:423 plug-ins/common/colormap-remap.c:434 -#: plug-ins/common/colormap-remap.c:445 +#: plug-ins/common/colormap-remap.c:225 +msgid "" +"This procedure takes an indexed image and lets you swap the positions of two " +"colors in the colormap without visually changing the image." +msgstr "" +"Este procedimiento toma una imagen indexada y le permite intercambiar las " +"posiciones de dos colores en el mapa de colores sin cambiar visualmente la " +"imagen." + +#: plug-ins/common/colormap-remap.c:237 +msgid "Index 1" +msgstr "Índice 1" + +#: plug-ins/common/colormap-remap.c:238 +#, fuzzy +#| msgid "Rearranging the colormap" +msgid "First index in the colormap" +msgstr "Reordenando el mapa de colores" + +#: plug-ins/common/colormap-remap.c:243 +msgid "Index 2" +msgstr "Índice 2" + +#: plug-ins/common/colormap-remap.c:244 +#, fuzzy +#| msgid "Swap two colors in the colormap" +msgid "Second (other) index in the colormap" +msgstr "Intercambiar dos colores en el mapa de colores" + +#: plug-ins/common/colormap-remap.c:277 +msgid "Sort on Hue" +msgstr "Ordenar según tonalidad" + +#: plug-ins/common/colormap-remap.c:278 +msgid "Sort on Saturation" +msgstr "Ordenar según la saturación" + +#: plug-ins/common/colormap-remap.c:279 +msgid "Sort on Value" +msgstr "Ordenar según el valor" + +#: plug-ins/common/colormap-remap.c:284 +msgid "Reverse Order" +msgstr "Orden inverso" + +#: plug-ins/common/colormap-remap.c:285 +msgid "Reset Order" +msgstr "Reiniciar el orden" + +#: plug-ins/common/colormap-remap.c:412 plug-ins/common/colormap-remap.c:423 +#: plug-ins/common/colormap-remap.c:434 msgid "Invalid remap array was passed to remap function" msgstr "" "Se ha pasado una matriz de reasignación inválida a la función de reasignación" -#: plug-ins/common/colormap-remap.c:469 +#: plug-ins/common/colormap-remap.c:458 msgid "Rearranging the colormap" msgstr "Reordenando el mapa de colores" -#: plug-ins/common/colormap-remap.c:699 +#: plug-ins/common/colormap-remap.c:689 msgid "Rearrange Colormap" msgstr "Reordenar el mapa de colores" # //R ¿Esto existe? #. The Reset button -#: plug-ins/common/colormap-remap.c:703 plug-ins/common/curve-bend.c:1446 -#: plug-ins/common/sample-colorize.c:1413 -#: plug-ins/common/sphere-designer.c:2631 plug-ins/common/tile-small.c:531 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:809 -#: plug-ins/pikaressionist/preview.c:182 plug-ins/ifs-compose/ifs-compose.c:961 -#: plug-ins/selection-to-path/selection-to-path.c:412 +#: 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 msgid "_Reset" msgstr "_Restablecer" -#: plug-ins/common/colormap-remap.c:805 +#: plug-ins/common/colormap-remap.c:795 msgid "" "Drag and drop colors to rearrange the colormap. The numbers shown are the " "original indices. Right-click for a menu with sort options." @@ -1189,173 +1430,299 @@ msgstr "" "se muestran son los índices originales. Pulse el botón derecho para abrir un " "menú con opciones de ordenación." -#: plug-ins/common/colormap-remap.c:843 +#: plug-ins/common/colormap-remap.c:833 msgid "Rearrange Colors" msgstr "Reorganizar colores" #. Decompositions availables. #. * All the following values have to be kept in sync with those of decompose.c #. -#: plug-ins/common/compose.c:204 +#: plug-ins/common/compose.c:206 msgid "_Red:" msgstr "_Rojo:" -#: plug-ins/common/compose.c:205 +#: plug-ins/common/compose.c:207 msgid "_Green:" msgstr "_Verde:" -#: plug-ins/common/compose.c:206 +#: plug-ins/common/compose.c:208 msgid "_Blue:" msgstr "_Azul:" -#: plug-ins/common/compose.c:207 +#: plug-ins/common/compose.c:209 msgid "_Alpha:" msgstr "_Alfa:" -#: plug-ins/common/compose.c:209 plug-ins/common/compose.c:213 +#: plug-ins/common/compose.c:211 plug-ins/common/compose.c:215 msgid "_Hue:" msgstr "_Tono:" -#: plug-ins/common/compose.c:210 plug-ins/common/compose.c:214 +#: plug-ins/common/compose.c:212 plug-ins/common/compose.c:216 msgid "_Saturation:" msgstr "_Saturación:" -#: plug-ins/common/compose.c:211 +#: plug-ins/common/compose.c:213 msgid "_Value:" msgstr "_Valor:" -#: plug-ins/common/compose.c:215 +#: plug-ins/common/compose.c:217 msgid "_Lightness:" msgstr "_Luminosidad:" -#: plug-ins/common/compose.c:217 +#: plug-ins/common/compose.c:219 msgid "_Cyan:" msgstr "_Cian:" -#: plug-ins/common/compose.c:218 +#: plug-ins/common/compose.c:220 msgid "_Magenta:" msgstr "_Magenta:" -#: plug-ins/common/compose.c:219 +#: plug-ins/common/compose.c:221 msgid "_Yellow:" msgstr "_Amarillo:" -#: plug-ins/common/compose.c:220 +#: plug-ins/common/compose.c:222 msgid "_Black:" msgstr "_Negro:" -#: plug-ins/common/compose.c:222 +#: plug-ins/common/compose.c:224 msgid "_L:" msgstr "_L:" -#: plug-ins/common/compose.c:223 +#: plug-ins/common/compose.c:225 msgid "_A:" msgstr "_A:" -#: plug-ins/common/compose.c:224 +#: plug-ins/common/compose.c:226 msgid "_B:" msgstr "_B:" -#: plug-ins/common/compose.c:226 +#: plug-ins/common/compose.c:228 msgid "_L" msgstr "_L" -#: plug-ins/common/compose.c:227 +#: plug-ins/common/compose.c:229 msgid "_C" msgstr "_C" -#: plug-ins/common/compose.c:228 +#: plug-ins/common/compose.c:230 msgid "_H" msgstr "_H" -#: plug-ins/common/compose.c:230 +#: plug-ins/common/compose.c:232 msgid "_Luma y470:" msgstr "_Luma y470:" -#: plug-ins/common/compose.c:231 +#: plug-ins/common/compose.c:233 msgid "_Blueness cb470:" msgstr "_Blueness cb470:" -#: plug-ins/common/compose.c:232 +#: plug-ins/common/compose.c:234 msgid "_Redness cr470:" msgstr "_Redness cr470:" -#: plug-ins/common/compose.c:234 +#: plug-ins/common/compose.c:236 msgid "_Luma y709:" msgstr "_Luma y709:" -#: plug-ins/common/compose.c:235 +#: plug-ins/common/compose.c:237 msgid "_Blueness cb709:" msgstr "_Blueness cb709:" -#: plug-ins/common/compose.c:236 +#: plug-ins/common/compose.c:238 msgid "_Redness cr709:" msgstr "_Redness cr709:" -#: plug-ins/common/compose.c:242 plug-ins/common/decompose.c:193 -#: plug-ins/common/file-heif.c:2517 +#: 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 msgid "RGB" msgstr "RGB" -#: plug-ins/common/compose.c:249 plug-ins/common/decompose.c:194 +#: plug-ins/common/compose.c:251 plug-ins/common/compose.c:439 +#: plug-ins/common/compose.c:502 plug-ins/common/decompose.c:194 msgid "RGBA" msgstr "RGBA" -#: plug-ins/common/compose.c:257 plug-ins/common/decompose.c:201 +#: plug-ins/common/compose.c:259 plug-ins/common/compose.c:440 +#: plug-ins/common/compose.c:503 plug-ins/common/decompose.c:201 msgid "HSV" msgstr "HSV" -#: plug-ins/common/compose.c:264 plug-ins/common/decompose.c:206 +#: plug-ins/common/compose.c:266 plug-ins/common/compose.c:441 +#: plug-ins/common/compose.c:504 plug-ins/common/decompose.c:206 msgid "HSL" msgstr "HSL" -#: plug-ins/common/compose.c:271 plug-ins/common/decompose.c:211 -#: plug-ins/common/file-jp2-load.c:1014 +#: plug-ins/common/compose.c:273 plug-ins/common/compose.c:442 +#: plug-ins/common/compose.c:505 plug-ins/common/decompose.c:211 +#: plug-ins/common/file-jp2-load.c:1000 msgid "CMYK" msgstr "CMYK" -#: plug-ins/common/compose.c:279 plug-ins/common/decompose.c:217 +#: plug-ins/common/compose.c:281 plug-ins/common/compose.c:443 +#: plug-ins/common/compose.c:506 plug-ins/common/decompose.c:217 msgid "LAB" msgstr "LAB" -#: plug-ins/common/compose.c:286 plug-ins/common/decompose.c:219 +#: plug-ins/common/compose.c:288 plug-ins/common/compose.c:444 +#: plug-ins/common/compose.c:507 plug-ins/common/decompose.c:219 msgid "LCH" msgstr "LCH" -#: plug-ins/common/compose.c:293 plug-ins/common/decompose.c:221 +#: plug-ins/common/compose.c:295 plug-ins/common/decompose.c:221 msgid "YCbCr_ITU_R470" msgstr "YCbCr_ITU_R470" -#: plug-ins/common/compose.c:300 plug-ins/common/decompose.c:224 +#: plug-ins/common/compose.c:302 plug-ins/common/decompose.c:224 msgid "YCbCr_ITU_R709" msgstr "YCbCr_ITU_R709" -#: plug-ins/common/compose.c:307 plug-ins/common/decompose.c:222 +#: plug-ins/common/compose.c:309 plug-ins/common/decompose.c:222 msgid "YCbCr_ITU_R470_256" msgstr "YCbCr_ITU_R470_256" -#: plug-ins/common/compose.c:314 plug-ins/common/decompose.c:225 +#: plug-ins/common/compose.c:316 plug-ins/common/decompose.c:225 msgid "YCbCr_ITU_R709_256" msgstr "YCbCr_ITU_R709_256" -#: plug-ins/common/compose.c:401 +#: plug-ins/common/compose.c:403 msgid "C_ompose..." msgstr "C_omponer…" -#: plug-ins/common/compose.c:405 +#: plug-ins/common/compose.c:407 msgid "Create an image using multiple gray images as color channels" msgstr "" "Crear una imagen usando múltiples imágenes grises como canales de color" -#: plug-ins/common/compose.c:508 +#: 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" + +#: plug-ins/common/compose.c:418 +msgid "Image 2" +msgstr "Imagen 2" + +#: plug-ins/common/compose.c:419 +#, fuzzy +#| msgid "Reload the image" +msgid "Second input image" +msgstr "Recargar la imagen" + +#: plug-ins/common/compose.c:424 +msgid "Image 3" +msgstr "Imagen 3" + +#: plug-ins/common/compose.c:425 +#, fuzzy +#| msgid "Print the image" +msgid "Third input image" +msgstr "Imprimir la imagen" + +#: plug-ins/common/compose.c:430 +msgid "Image 4" +msgstr "Imagen 4" + +#: plug-ins/common/compose.c:431 +#, fuzzy +#| msgid "Photoshop image" +msgid "Fourth input image" +msgstr "Imagen de Photoshop" + +#: plug-ins/common/compose.c:436 plug-ins/common/compose.c:499 +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" + +#: plug-ins/common/compose.c:455 plug-ins/common/compose.c:518 +#: plug-ins/common/smooth-palette.c:160 +msgid "Output image" +msgstr "Imagen de salida" + +#: plug-ins/common/compose.c:470 +msgid "Compose an image from multiple drawables of gray images" +msgstr "" +"Componer una imagen a partir de múltiples dibujables de imágenes grises" + +#: plug-ins/common/compose.c:472 +msgid "" +"This function creates a new image from multiple drawables of gray images" +msgstr "" +"Esta función crea una imagen nueva a partir de múltiples dibujables de " +"imágenes grises" + +#: plug-ins/common/compose.c:481 +msgid "Drawable 2" +msgstr "Dibujable 2" + +#: plug-ins/common/compose.c:482 +msgid "Second input drawable" +msgstr "Entrada del segundo dibujable" + +#: plug-ins/common/compose.c:487 +msgid "Drawable 3" +msgstr "Dibujable 3" + +#: plug-ins/common/compose.c:488 +msgid "Third input drawable" +msgstr "Entrada del tercer dibujable" + +#: plug-ins/common/compose.c:493 +msgid "Drawable 4" +msgstr "Dibujable 4" + +#: plug-ins/common/compose.c:494 +msgid "Fourth input drawable" +msgstr "Entrada del cuarto dibujable" + +#: plug-ins/common/compose.c:534 msgid "R_ecompose" msgstr "R_ecomponer" -#: plug-ins/common/compose.c:512 +#: plug-ins/common/compose.c:538 msgid "Recompose an image that was previously decomposed" msgstr "Recomponer una imagen previamente descompuesta" -#: plug-ins/common/compose.c:577 +#: plug-ins/common/compose.c:540 +msgid "" +"This function recombines the grayscale layers produced by Decompose into a " +"single RGB or RGBA layer, and replaces the originally decomposed layer with " +"the result." +msgstr "" +"Esta función recombina las capas en escala de grises producidas por " +"«Descomponer» en una sola capa RGB o RGBA y reemplaza la capa original " +"descompuesta con el resultado." + +#: plug-ins/common/compose.c:604 msgid "" "You can only run 'Recompose' if the active image was originally produced by " "'Decompose'." @@ -1363,68 +1730,63 @@ msgstr "" "Sólo puede ejecutar «Recomponer» si la imagen activa fue producida " "originalmente por «Descomponer»." -#: plug-ins/common/compose.c:608 +#: plug-ins/common/compose.c:635 msgid "Error scanning 'decompose-data' parasite: too few layers found" msgstr "" "Ocurrió un error analizando el parásito «dato-descompuesto»: se encontraron " "muy pocas capas" -#: plug-ins/common/compose.c:623 +#: plug-ins/common/compose.c:650 #, c-format msgid "Cannot recompose: Specified source layer ID %d not found" msgstr "No se puede recomponer: no se encontró la capa fuente con ID %d" -#: plug-ins/common/compose.c:643 +#: plug-ins/common/compose.c:670 #, c-format msgid "Cannot recompose: Specified layer #%d ID %d not found" msgstr "" "No se puede recomponer: no se ha encontrado la capa especificada #%d con ID " "%d" -#: plug-ins/common/compose.c:675 +#: plug-ins/common/compose.c:700 #, c-format msgid "Could not get layers for image %d" msgstr "No se han podido obtener las capas de la imagen %d" -#: plug-ins/common/compose.c:739 +#: plug-ins/common/compose.c:773 msgid "Composing" msgstr "Componiendo" -#: plug-ins/common/compose.c:974 plug-ins/common/compose.c:1419 +#: plug-ins/common/compose.c:1028 plug-ins/common/compose.c:1428 msgid "At least one image is needed to compose" msgstr "Se necesita una imagen al menos para componer" -#: plug-ins/common/compose.c:995 +#: plug-ins/common/compose.c:1049 msgid "Drawables have different size" msgstr "Los dibujables tienen tamaño diferente" -#: plug-ins/common/compose.c:1023 +#: plug-ins/common/compose.c:1077 msgid "Images have different size" msgstr "Las imágenes tienen tamaño diferente" -#: plug-ins/common/compose.c:1041 +#: plug-ins/common/compose.c:1095 msgid "Error in getting layer IDs" msgstr "Error al obtener identificadores de capas" -#: plug-ins/common/compose.c:1179 +#: plug-ins/common/compose.c:1228 msgid "Compose" msgstr "Componer" -#. Compose type combo -#: plug-ins/common/compose.c:1207 +#: plug-ins/common/compose.c:1243 msgid "Compose Channels" msgstr "Componer canales" -#: plug-ins/common/compose.c:1217 plug-ins/common/decompose.c:896 -msgid "Color _model:" -msgstr "_Modelo de color:" - #. Channel representation grid -#: plug-ins/common/compose.c:1249 +#: plug-ins/common/compose.c:1258 msgid "Channel Representations" msgstr "Representaciones de canal" -#: plug-ins/common/compose.c:1308 +#: plug-ins/common/compose.c:1318 msgid "Mask value" msgstr "Valor de máscara" @@ -1484,27 +1846,27 @@ msgstr "Di_námico" msgid "Variance value" msgstr "Valor de la variancia" -#: plug-ins/common/contrast-retinex.c:297 +#: plug-ins/common/contrast-retinex.c:272 msgid "Retinex" msgstr "Retinex" -#: plug-ins/common/contrast-retinex.c:337 +#: plug-ins/common/contrast-retinex.c:306 msgid "Retinex Image Enhancement" msgstr "Mejora de imagen Retinex" -#: plug-ins/common/contrast-retinex.c:352 +#: plug-ins/common/contrast-retinex.c:321 msgid "Uniform" msgstr "Uniforme" -#: plug-ins/common/contrast-retinex.c:353 plug-ins/metadata/metadata-tags.c:238 +#: plug-ins/common/contrast-retinex.c:322 plug-ins/metadata/metadata-tags.c:254 msgid "Low" msgstr "Bajo" -#: plug-ins/common/contrast-retinex.c:354 plug-ins/metadata/metadata-tags.c:238 +#: plug-ins/common/contrast-retinex.c:323 plug-ins/metadata/metadata-tags.c:254 msgid "High" msgstr "Alto" -#: plug-ins/common/contrast-retinex.c:688 +#: plug-ins/common/contrast-retinex.c:658 msgid "Retinex: filtering" msgstr "Retinex: filtrado" @@ -1524,156 +1886,268 @@ msgstr "Recorte Zealous" msgid "Nothing to crop." msgstr "Nada para recortar." -#: plug-ins/common/curve-bend.c:430 +#: plug-ins/common/curve-bend.c:412 msgid "_Curve Bend..." msgstr "Doblar según _curva…" -#: plug-ins/common/curve-bend.c:435 +#: plug-ins/common/curve-bend.c:417 msgid "Bend the image using two control curves" msgstr "Doblar la imagen usando dos curvas de control" -#: plug-ins/common/curve-bend.c:684 +#: plug-ins/common/curve-bend.c:418 +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 " +"floating selection. If work_on_copy parameter is TRUE, the curve_bend " +"distortion is done on a copy of the active layer (or floating selection). " +"The upper and lower edges are bent in shape of 2 spline curves. Both (upper " +"and lower) curves are determined by up to 17 points or by 256 Y-Values if " +"curve_type == 1 (freehand mode). If rotation is not 0, the layer is rotated " +"before and rotated back after the bend operation. This enables bending in " +"other directions than vertical. Bending usually changes the size of the " +"handled layer. This plug-in sets the offsets of the handled layer to keep " +"its center at the same position." +msgstr "" + +#: plug-ins/common/curve-bend.c:442 +msgid "Rotat_e" +msgstr "R_otar" + +#: plug-ins/common/curve-bend.c:443 +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 +msgid "Smoo_thing" +msgstr "Suavizad_o" + +#: plug-ins/common/curve-bend.c:450 +msgid "Smoothing" +msgstr "Suavizado" + +#: plug-ins/common/curve-bend.c:455 plug-ins/common/qbist.c:997 +#: plug-ins/lighting/lighting-main.c:296 +msgid "_Antialiasing" +msgstr "_Antialias" + +#: plug-ins/common/curve-bend.c:456 +msgid "Antialias" +msgstr "Antialias" + +#: plug-ins/common/curve-bend.c:461 +msgid "Work on cop_y" +msgstr "Trabajar con una cop_ia" + +#: plug-ins/common/curve-bend.c:462 +msgid "Copy the drawable and bend the copy" +msgstr "Copia el dibujable y dobla la copia" + +#: plug-ins/common/curve-bend.c:467 +msgid "Curve Type" +msgstr "Tipo de curva" + +#: plug-ins/common/curve-bend.c:468 +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 +msgid "Curve for Border" +msgstr "Curva para el borde" + +#: plug-ins/common/curve-bend.c:475 +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 +msgid "Argc upper point X" +msgstr "Argc punto superior X" + +#: plug-ins/common/curve-bend.c:486 +#, 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 +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 +msgid "Argc upper point Y" +msgstr "Argc punto superior Y" + +#: plug-ins/common/curve-bend.c:498 +#, 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 +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 +msgid "Argc lower point X" +msgstr "Argc punto inferior X" + +#: plug-ins/common/curve-bend.c:510 +#, 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 +msgid "Argc lower point Y" +msgstr "Argc punto inferior Y" + +#: plug-ins/common/curve-bend.c:522 +#, fuzzy +#| msgid "Lower right" +msgid "Lower point Y" +msgstr "Inferior derecha" + +#: plug-ins/common/curve-bend.c:528 +#, 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 +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 +#, fuzzy +#| msgid "Lower left" +msgid "Lower val Y" +msgstr "Inferior izquierda" + +#: plug-ins/common/curve-bend.c:540 +#, fuzzy +#| msgid "Selected layer" +msgid "Bent layer" +msgstr "Capa seleccionada" + +#: plug-ins/common/curve-bend.c:541 +msgid "The transformed layer" +msgstr "La capa transformada" + +#: plug-ins/common/curve-bend.c:672 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:698 +#: plug-ins/common/curve-bend.c:686 msgid "Cannot operate on layers with masks." msgstr "No funciona con capas con máscaras." -#: plug-ins/common/curve-bend.c:713 +#: plug-ins/common/curve-bend.c:701 msgid "Cannot operate on empty selections." msgstr "No puede operar sobre selecciones vacías." -#: plug-ins/common/curve-bend.c:885 +#: plug-ins/common/curve-bend.c:855 #, c-format msgid "Error while reading '%s': %s" msgstr "Ocurrió un error al leer «%s»: %s" -#. Possibly retrieve data from a previous run -#. The shell and main vbox -#: plug-ins/common/curve-bend.c:1199 plug-ins/common/curve-bend.c:2941 +#: plug-ins/common/curve-bend.c:1113 plug-ins/common/curve-bend.c:2819 msgid "Curve Bend" msgstr "Doblar según curva" +#: plug-ins/common/curve-bend.c:1129 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:1236 plug-ins/pikaressionist/orientmap.c:589 +#: plug-ins/common/curve-bend.c:1152 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:1263 +#: plug-ins/common/curve-bend.c:1180 msgid "_Preview Once" msgstr "_Previsualizar una vez" #. The preview toggle -#: plug-ins/common/curve-bend.c:1272 +#: plug-ins/common/curve-bend.c:1189 msgid "Automatic pre_view" msgstr "_Vista previa automática" -#. Options area, bottom of column -#: plug-ins/common/curve-bend.c:1282 plug-ins/gfig/gfig-dialog.c:1215 -msgid "Options" -msgstr "Opciones" - -#. Rotate spinbutton -#: plug-ins/common/curve-bend.c:1296 -msgid "Rotat_e:" -msgstr "R_otar:" - -#. The smoothing toggle -#: plug-ins/common/curve-bend.c:1315 -msgid "Smoo_thing" -msgstr "Suavizad_o" - -#. The antialiasing toggle -#: plug-ins/common/curve-bend.c:1325 plug-ins/common/qbist.c:1009 -msgid "_Antialiasing" -msgstr "_Antialias" - -#. The work_on_copy toggle -#: plug-ins/common/curve-bend.c:1335 -msgid "Work on cop_y" -msgstr "Trabajar con una cop_ia" - #. The curves graph -#: plug-ins/common/curve-bend.c:1345 +#. Config-connected widgets first +#: plug-ins/common/curve-bend.c:1200 +msgid "Smooth" +msgstr "Suavizar" + +#: plug-ins/common/curve-bend.c:1201 +msgid "Free" +msgstr "Libre" + +#: plug-ins/common/curve-bend.c:1208 +msgid "Upper" +msgstr "Superior" + +#: plug-ins/common/curve-bend.c:1209 +msgctxt "adjective" +msgid "Lower" +msgstr "Inferior" + +#: plug-ins/common/curve-bend.c:1227 msgid "Modify Curves" msgstr "Modificar las curvas" -#: plug-ins/common/curve-bend.c:1374 -msgid "Curve for Border" -msgstr "Curva para el borde" - -#: plug-ins/common/curve-bend.c:1378 -msgctxt "curve-border" -msgid "_Upper" -msgstr "S_uperior" - -#: plug-ins/common/curve-bend.c:1379 -msgctxt "curve-border" -msgid "_Lower" -msgstr "I_nferior" - -#: plug-ins/common/curve-bend.c:1389 -msgid "Curve Type" -msgstr "Tipo de curva" - -#: plug-ins/common/curve-bend.c:1393 -msgid "Smoot_h" -msgstr "Sua_ve" - -#: plug-ins/common/curve-bend.c:1394 -msgid "_Free" -msgstr "_Libre" - #. The Copy button -#: plug-ins/common/curve-bend.c:1409 -#: plug-ins/gradient-flare/gradient-flare.c:3083 +#: plug-ins/common/curve-bend.c:1259 +#: plug-ins/gradient-flare/gradient-flare.c:3047 msgid "_Copy" msgstr "_Copiar" -#: plug-ins/common/curve-bend.c:1414 +#: plug-ins/common/curve-bend.c:1264 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:1421 +#: plug-ins/common/curve-bend.c:1271 msgid "_Mirror" msgstr "_Reflejar" -#: plug-ins/common/curve-bend.c:1426 +#: plug-ins/common/curve-bend.c:1276 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:1434 +#: plug-ins/common/curve-bend.c:1284 msgid "S_wap" msgstr "I_ntercambiar" -#: plug-ins/common/curve-bend.c:1439 +#: plug-ins/common/curve-bend.c:1289 msgid "Swap the two curves" msgstr "Intercambiar las dos curvas" -#: plug-ins/common/curve-bend.c:1451 +#: plug-ins/common/curve-bend.c:1301 msgid "Reset the active curve" msgstr "Reiniciar la curva activa" -#: plug-ins/common/curve-bend.c:1468 +#: plug-ins/common/curve-bend.c:1318 msgid "Load the curves from a file" msgstr "Cargar las curvas desde un archivo" -#: plug-ins/common/curve-bend.c:1480 +#: plug-ins/common/curve-bend.c:1330 msgid "Save the curves to a file" msgstr "Guardar las curvas en un archivo" -#: plug-ins/common/curve-bend.c:1973 +#: plug-ins/common/curve-bend.c:1851 msgid "Load Curve Points from File" msgstr "Cargar puntos de curva desde un archivo" -#: plug-ins/common/curve-bend.c:2008 +#: plug-ins/common/curve-bend.c:1886 msgid "Save Curve Points to File" msgstr "Guardar puntos de curva en un archivo" @@ -1769,21 +2243,18 @@ msgstr "blueness-cb709" msgid "redness-cr709" msgstr "redness-cr709" -#. Redmode radio frame #: plug-ins/common/decompose.c:196 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:985 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:901 msgid "Red" msgstr "Rojo" -#. Greenmode radio frame #: plug-ins/common/decompose.c:197 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1026 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:914 msgid "Green" msgstr "Verde" -#. Bluemode radio frame #: plug-ins/common/decompose.c:198 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1067 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:927 msgid "Blue" msgstr "Azul" @@ -1815,8 +2286,8 @@ msgstr "Magenta" msgid "Yellow" msgstr "Amarillo" -#: plug-ins/common/decompose.c:215 plug-ins/common/warp.c:617 -#: plug-ins/file-fits/fits.c:994 plug-ins/flame/flame.c:1223 +#: 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/gfig/gfig-dialog.c:1459 msgid "Black" msgstr "Negro" @@ -1829,31 +2300,35 @@ msgstr "_Descomponer…" msgid "Decompose an image into separate colorspace components" msgstr "Descomponer una imagen en componentes separados del espacio de color" -#: plug-ins/common/decompose.c:414 +#: plug-ins/common/decompose.c:403 msgid "Decomposing" msgstr "Descomposición" -#: plug-ins/common/decompose.c:549 +#: plug-ins/common/decompose.c:528 msgid "Image not suitable for this decomposition" msgstr "Imagen no adecuada para esta decomposición" -#: plug-ins/common/decompose.c:874 +#: plug-ins/common/decompose.c:853 msgid "Decompose" msgstr "Descomponer" -#: plug-ins/common/decompose.c:884 +#: plug-ins/common/decompose.c:863 msgid "Extract Channels" msgstr "Extraer canales" -#: plug-ins/common/decompose.c:933 +#: plug-ins/common/decompose.c:875 +msgid "Color _model:" +msgstr "_Modelo de color:" + +#: plug-ins/common/decompose.c:912 msgid "_Decompose to layers" msgstr "_Descomponer en capas" -#: plug-ins/common/decompose.c:937 +#: plug-ins/common/decompose.c:916 msgid "_Foreground as registration color" msgstr "Color de _frente como color de registro" -#: plug-ins/common/decompose.c:938 +#: plug-ins/common/decompose.c:917 msgid "" "Pixels in the foreground color will appear black in all output images. This " "can be used for things like crop marks that have to show up on all channels." @@ -1862,52 +2337,75 @@ msgstr "" "imágenes de salida. Esto se puede usar para cosas como marcas de corte que " "tienen que mostrarse en todos los canales." -#: plug-ins/common/depth-merge.c:218 +#: plug-ins/common/depth-merge.c:204 msgid "_Depth Merge..." msgstr "Mezcla con _profundidad…" -#: plug-ins/common/depth-merge.c:222 +#: plug-ins/common/depth-merge.c:208 msgid "Combine two images using depth maps (z-buffers)" msgstr "Combinar dos imágenes usando mapas de profundidad (z-búfers)" -#: plug-ins/common/depth-merge.c:469 +#: plug-ins/common/depth-merge.c:223 +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:" + +#: 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:" + +# //R :-? +#: plug-ins/common/depth-merge.c:247 +msgid "O_verlap" +msgstr "_Solapamiento" + +#: plug-ins/common/depth-merge.c:253 plug-ins/common/file-raw-data.c:365 +msgid "O_ffset" +msgstr "Des_plazamiento" + +#: plug-ins/common/depth-merge.c:254 +#, fuzzy +#| msgid "Save layer o_ffset" +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:" + +#: plug-ins/common/depth-merge.c:265 +#, fuzzy +#| msgid "Scal_e" +msgid "Scal_e 2" +msgstr "Escal_a" + +#: plug-ins/common/depth-merge.c:313 +#, fuzzy +#| msgid "The selection does not intersect the active layer or mask." +msgid "The selection does not intersect with the input drawable." +msgstr "La selección no intersecta con la capa o máscara activas." + +#: plug-ins/common/depth-merge.c:366 msgid "Depth-merging" msgstr "Mezclando con profundidad" -#: plug-ins/common/depth-merge.c:729 +#: plug-ins/common/depth-merge.c:617 msgid "Depth Merge" msgstr "Mezcla con profundidad" -#: plug-ins/common/depth-merge.c:779 -msgid "Source 1:" -msgstr "Fuente 1:" - -#: plug-ins/common/depth-merge.c:792 plug-ins/common/depth-merge.c:820 -msgid "Depth map:" -msgstr "Mapa de profundidad:" - -#: plug-ins/common/depth-merge.c:807 -msgid "Source 2:" -msgstr "Fuente 2:" - -# //R :-? -#. Numeric parameters -#: plug-ins/common/depth-merge.c:836 -msgid "O_verlap:" -msgstr "_Solapamiento:" - -#: plug-ins/common/depth-merge.c:845 -msgid "O_ffset:" -msgstr "Des_plazamiento:" - -#: plug-ins/common/depth-merge.c:854 -msgid "Sc_ale 1:" -msgstr "_Escala 1:" - -#: plug-ins/common/depth-merge.c:863 -msgid "Sca_le 2:" -msgstr "E_scala 2:" - #: plug-ins/common/despeckle.c:169 msgid "Des_peckle..." msgstr "Des_parasitar…" @@ -1960,24 +2458,24 @@ msgstr "Nivel de _blanco" msgid "White level" msgstr "Nivel de blanco" -#: plug-ins/common/despeckle.c:408 plug-ins/common/despeckle.c:784 +#: plug-ins/common/despeckle.c:386 plug-ins/common/despeckle.c:762 msgid "Despeckle" msgstr "Desparasitar" -#: plug-ins/common/despeckle.c:418 +#: plug-ins/common/despeckle.c:396 msgid "Median" msgstr "Media" -#: plug-ins/common/despeckle.c:419 plug-ins/pikaressionist/orientation.c:176 +#: plug-ins/common/despeckle.c:397 plug-ins/pikaressionist/orientation.c:176 #: plug-ins/pikaressionist/size.c:183 msgid "Adaptive" msgstr "Adaptativo" -#: plug-ins/common/despeckle.c:420 +#: plug-ins/common/despeckle.c:398 msgid "Recursive-Median" msgstr "Mediana-Recursivo" -#: plug-ins/common/despeckle.c:421 +#: plug-ins/common/despeckle.c:399 msgid "Recursive-Adaptive" msgstr "Recursivo-Adaptativo" @@ -1993,8 +2491,9 @@ msgstr "Quitar bandas verticales de la imagen" msgid "This plug-in tries to remove vertical stripes from an image." msgstr "Este complemento intenta eliminar las rayas verticales de una imagen." -#: plug-ins/common/destripe.c:141 plug-ins/common/file-html-table.c:194 -#: plug-ins/common/file-ps.c:383 plug-ins/common/file-ps.c:497 +#: plug-ins/common/destripe.c:141 plug-ins/common/file-html-table.c:195 +#: plug-ins/common/file-ps.c:386 plug-ins/common/file-ps.c:500 +#: plug-ins/common/file-raw-data.c:355 plug-ins/common/smooth-palette.c:135 #: plug-ins/imagemap/imap_grid.c:255 msgid "_Width" msgstr "A_nchura" @@ -2011,23 +2510,23 @@ msgstr "Crear _histograma" msgid "Output a histogram" msgstr "Generar un histograma" -#: plug-ins/common/destripe.c:270 +#: plug-ins/common/destripe.c:239 msgid "Destriping" msgstr "Anti-bandas" -#: plug-ins/common/destripe.c:492 +#: plug-ins/common/destripe.c:461 msgid "Destripe" msgstr "Anti-bandas" -#: plug-ins/common/file-aa.c:131 plug-ins/common/file-aa.c:133 +#: plug-ins/common/file-aa.c:132 plug-ins/common/file-aa.c:134 msgid "ASCII art" msgstr "Arte ASCII" -#: plug-ins/common/file-aa.c:136 +#: plug-ins/common/file-aa.c:137 msgid "Saves grayscale image in various text formats" msgstr "Guarda la imagen en escala de grises en varios formatos de texto" -#: plug-ins/common/file-aa.c:138 +#: plug-ins/common/file-aa.c:139 msgid "" "This plug-in uses aalib to save grayscale image as ascii art into a variety " "of text formats" @@ -2035,32 +2534,49 @@ 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:155 +#: plug-ins/common/file-aa.c:156 msgid "_Format" msgstr "_Formato" -#: plug-ins/common/file-aa.c:156 +#: plug-ins/common/file-aa.c:157 msgid "File type to use" msgstr "Tipo de archivo que usar" -#: plug-ins/common/file-aa.c:209 +#: plug-ins/common/file-aa.c:207 msgid "ASCII art does not support multiple layers." msgstr "Arte ASCII no soporta múltiples capas." -#: plug-ins/common/file-cel.c:140 plug-ins/common/file-cel.c:172 +#: plug-ins/common/file-cel.c:141 plug-ins/common/file-cel.c:171 msgid "KISS CEL" msgstr "KISS CEL" -#: plug-ins/common/file-cel.c:245 +#: plug-ins/common/file-cel.c:159 +#, fuzzy +#| msgid "_Palette File" +msgid "_Palette file" +msgstr "Archivo de _paleta" + +#: plug-ins/common/file-cel.c:160 +#, fuzzy +#| msgid "Error: failed to load parameters" +msgid "KCF file to load palette from" +msgstr "Error: falló al cargar los parámetros" + +#. Let user choose KCF palette (cancel ignores) +#: plug-ins/common/file-cel.c:227 msgid "Load KISS Palette" msgstr "Cargar paleta KISS" -#: plug-ins/common/file-cel.c:310 +#: plug-ins/common/file-cel.c:253 +msgid "This KISS CEL image requires a palette file." +msgstr "Esta imagen KISS CEL necesita un archivo de paleta." + +#: plug-ins/common/file-cel.c:317 msgid "CEL format does not support multiple layers." msgstr "El formato CEL no soporta múltiples capas." -#: plug-ins/common/file-cel.c:364 plug-ins/common/file-cel.c:415 -#: plug-ins/common/file-cel.c:436 +#: plug-ins/common/file-cel.c:362 plug-ins/common/file-cel.c:414 +#: plug-ins/common/file-cel.c:435 msgid "EOF or error while reading image header" msgstr "EOF o error al leer la cabecera de la imagen" @@ -2083,38 +2599,38 @@ msgstr "EOF o error al leer la cabecera de la imagen" #. #. * Open the file for reading... #. -#: plug-ins/common/file-cel.c:394 plug-ins/common/file-dicom.c:369 -#: plug-ins/common/file-gegl.c:352 plug-ins/common/file-gif-load.c:402 -#: plug-ins/common/file-heif.c:877 plug-ins/common/file-jp2-load.c:1091 -#: plug-ins/common/file-pcx.c:515 plug-ins/common/file-pcx.c:558 -#: plug-ins/common/file-pdf-load.c:879 plug-ins/common/file-pix.c:381 -#: plug-ins/common/file-png.c:665 plug-ins/common/file-pnm.c:714 -#: plug-ins/common/file-ps.c:1116 plug-ins/common/file-raw-data.c:1665 -#: plug-ins/common/file-sunras.c:450 plug-ins/common/file-tga.c:440 -#: plug-ins/common/file-wbmp.c:176 plug-ins/common/file-wmf.c:1026 -#: plug-ins/common/file-xbm.c:742 plug-ins/common/file-xmc.c:648 -#: plug-ins/common/file-xpm.c:385 plug-ins/common/file-xwd.c:473 -#: plug-ins/file-bmp/bmp-load.c:218 plug-ins/file-exr/file-exr.c:188 -#: plug-ins/file-faxg3/faxg3.c:240 plug-ins/file-fli/fli-pika.c:502 -#: plug-ins/file-icns/file-icns-load.c:507 plug-ins/file-ico/ico-load.c:674 -#: plug-ins/file-ico/ico-load.c:784 plug-ins/file-jpeg/jpeg-load.c:90 -#: plug-ins/file-psd/psd-load.c:182 plug-ins/file-raw/file-darktable.c:413 -#: plug-ins/file-raw/file-rawtherapee.c:341 plug-ins/file-sgi/sgi.c:334 +#: 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-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-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 +#: plug-ins/common/file-xbm.c:741 plug-ins/common/file-xmc.c:646 +#: plug-ins/common/file-xpm.c:384 plug-ins/common/file-xwd.c:484 +#: plug-ins/file-bmp/bmp-load.c:218 plug-ins/file-exr/file-exr.c:193 +#: plug-ins/file-faxg3/faxg3.c:244 plug-ins/file-fli/fli-pika.c:493 +#: plug-ins/file-icns/file-icns-load.c:508 plug-ins/file-ico/ico-load.c:673 +#: 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 #, c-format msgid "Opening '%s'" msgstr "Abriendo «%s»" -#: plug-ins/common/file-cel.c:445 +#: plug-ins/common/file-cel.c:444 msgid "is not a CEL image file" msgstr "no es un archivo de imagen CEL" -#: plug-ins/common/file-cel.c:460 +#: plug-ins/common/file-cel.c:459 #, c-format msgid "illegal bpp value in image: %hhu" msgstr "valor bpp ilegal en la paleta: %hhu" -#: plug-ins/common/file-cel.c:475 +#: plug-ins/common/file-cel.c:474 #, c-format msgid "" "illegal image dimensions: width: %d, horizontal offset: %d, height: %d, " @@ -2123,42 +2639,37 @@ msgstr "" "dimensiones de la imagen no permitidas: anchura: %d, desplazamiento " "horizontal: %d, altura: %d, desplazamiento vertical: %d" -#: plug-ins/common/file-cel.c:489 +#: plug-ins/common/file-cel.c:488 msgid "Can't create a new image" msgstr "No se puede crear una imagen nueva" -#: plug-ins/common/file-cel.c:526 plug-ins/common/file-cel.c:563 -#: plug-ins/common/file-cel.c:589 +#: plug-ins/common/file-cel.c:525 plug-ins/common/file-cel.c:562 +#: plug-ins/common/file-cel.c:588 msgid "EOF or error while reading image data" msgstr "EOF o error al leer los datos de la imagen" -#: plug-ins/common/file-cel.c:607 +#: plug-ins/common/file-cel.c:606 #, c-format msgid "Unsupported bit depth (%d)!" msgstr "¡Profundidad de bits no soportada (%d)!" -#: plug-ins/common/file-cel.c:692 plug-ins/common/file-cel.c:704 -#, c-format -msgid "'%s': EOF or error while reading palette header" -msgstr "«%s»: EOF o error al leer la cabecera de la paleta" - -#: plug-ins/common/file-cel.c:713 +#: plug-ins/common/file-cel.c:693 #, c-format msgid "'%s': is not a KCF palette file" msgstr "«%s» no es un archivo de paleta KCF" -#: plug-ins/common/file-cel.c:722 +#: plug-ins/common/file-cel.c:703 #, c-format msgid "'%s': illegal bpp value in palette: %hhu" msgstr "«%s»: valor bpp ilegal en la paleta: %hhu" -#: plug-ins/common/file-cel.c:731 +#: plug-ins/common/file-cel.c:713 #, c-format msgid "'%s': illegal number of colors: %u" msgstr "«%s»: número ilegal de colores: %u" -#: plug-ins/common/file-cel.c:746 plug-ins/common/file-cel.c:763 -#: plug-ins/common/file-cel.c:783 +#: plug-ins/common/file-cel.c:729 plug-ins/common/file-cel.c:757 +#: plug-ins/common/file-cel.c:788 #, c-format msgid "'%s': EOF or error while reading palette data" msgstr "«%s»: EOF o error al leer los datos de la paleta" @@ -2167,368 +2678,401 @@ msgstr "«%s»: EOF o error al leer los datos de la paleta" #. #. * Open the file for writing... #. -#: plug-ins/common/file-cel.c:840 plug-ins/common/file-gif-save.c:916 -#: plug-ins/common/file-html-table.c:364 plug-ins/common/file-jpegxl.c:1374 -#: plug-ins/common/file-pcx.c:1114 plug-ins/common/file-pix.c:560 -#: plug-ins/common/file-png.c:1494 plug-ins/common/file-pnm.c:1635 -#: plug-ins/common/file-ps.c:1338 plug-ins/common/file-qoi.c:375 -#: plug-ins/common/file-sunras.c:629 plug-ins/common/file-tga.c:1230 -#: plug-ins/common/file-xbm.c:1051 plug-ins/common/file-xpm.c:705 -#: plug-ins/common/file-xwd.c:675 plug-ins/file-bmp/bmp-save.c:333 -#: plug-ins/file-fits/fits.c:640 plug-ins/file-fli/fli-pika.c:784 -#: plug-ins/file-icns/file-icns-save.c:612 plug-ins/file-ico/ico-save.c:1324 -#: plug-ins/file-ico/ico-save.c:1533 plug-ins/file-jpeg/jpeg-save.c:272 -#: plug-ins/file-psd/psd-save.c:2160 plug-ins/file-sgi/sgi.c:646 -#: plug-ins/file-tiff/file-tiff-save.c:1074 +#: 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-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 +#: plug-ins/common/file-xpm.c:704 plug-ins/common/file-xwd.c:720 +#: plug-ins/file-bmp/bmp-save.c:333 plug-ins/file-fits/fits.c:673 +#: plug-ins/file-fli/fli-pika.c:775 plug-ins/file-icns/file-icns-save.c:612 +#: plug-ins/file-ico/ico-save.c:1334 plug-ins/file-ico/ico-save.c:1543 +#: plug-ins/file-jpeg/jpeg-save.c:272 plug-ins/file-psd/psd-save.c:2160 +#: plug-ins/file-sgi/sgi.c:645 plug-ins/file-tiff/file-tiff-save.c:1074 #, c-format msgid "Exporting '%s'" msgstr "Exportando «%s»" -#: plug-ins/common/file-csource.c:122 +#: plug-ins/common/file-csource.c:123 msgid "C source code" msgstr "Código fuente en C" -#: plug-ins/common/file-csource.c:125 +#: plug-ins/common/file-csource.c:126 msgid "Dump image data in RGB(A) format for C source" msgstr "Volcar datos de imagen en formato RGB(A) para fuente C" -#: plug-ins/common/file-csource.c:127 +#: plug-ins/common/file-csource.c:128 msgid "CSource cannot be run non-interactively." msgstr "CSource sólo puede ejecutarse interactivamente." -#: plug-ins/common/file-csource.c:135 +#: plug-ins/common/file-csource.c:136 msgid "C-Source" msgstr "Fuente en C" -#: plug-ins/common/file-csource.c:144 +#: plug-ins/common/file-csource.c:145 msgid "_Prefixed name" msgstr "Nombre con _prefijo" -#: plug-ins/common/file-csource.c:145 +#: plug-ins/common/file-csource.c:146 msgid "Prefixed name" msgstr "Nombre con prefijo" -#: plug-ins/common/file-csource.c:150 +#: plug-ins/common/file-csource.c:151 msgid "Comme_nt" msgstr "Come_ntario" -#: plug-ins/common/file-csource.c:151 +#: plug-ins/common/file-csource.c:152 msgid "Comment" msgstr "Comentario" -#: plug-ins/common/file-csource.c:159 +#: plug-ins/common/file-csource.c:160 msgid "Save comment to _file" msgstr "Guardar el comentario en un _archivo" -#: plug-ins/common/file-csource.c:160 +#: plug-ins/common/file-csource.c:161 msgid "Save comment" msgstr "Guardar el comentario" -#: plug-ins/common/file-csource.c:165 +#: plug-ins/common/file-csource.c:166 msgid "Use GLib types (guint_8*)" msgstr "Usar tipos de GLib (guint_8*)" -#: plug-ins/common/file-csource.c:166 +#: plug-ins/common/file-csource.c:167 msgid "Use GLib types" msgstr "Usar tipos de GLib" -#: plug-ins/common/file-csource.c:171 +#: plug-ins/common/file-csource.c:172 msgid "Save alpha channel (RG_BA/RGB)" msgstr "Guardar el canal alfa (RG_BA/RGB)" -#: plug-ins/common/file-csource.c:172 +#: plug-ins/common/file-csource.c:173 msgid "Save the alpha channel" msgstr "Guardar el canal alfa" -#: plug-ins/common/file-csource.c:177 +#: plug-ins/common/file-csource.c:178 msgid "Save as RGB565 (1_6-bit)" msgstr "Guardar como RGB565 (1_6 bit)" -#: plug-ins/common/file-csource.c:178 +#: plug-ins/common/file-csource.c:179 msgid "Use RGB565 encoding" msgstr "Usar codificación RGB565" -#: plug-ins/common/file-csource.c:183 +#: plug-ins/common/file-csource.c:184 msgid "_Use macros instead of struct" msgstr "_Usar macros en vez de struct" -#: plug-ins/common/file-csource.c:184 +#: plug-ins/common/file-csource.c:185 msgid "Use C macros" msgstr "Usar macros en C" -#: plug-ins/common/file-csource.c:189 +#: plug-ins/common/file-csource.c:190 msgid "Use _1 bit Run-Length-Encoding" msgstr "Usar Run-Length-Encoding de _1 bit" -#: plug-ins/common/file-csource.c:190 +#: plug-ins/common/file-csource.c:191 msgid "Use run-length-encoding" msgstr "Usar Run-Length-Encoding" -#: plug-ins/common/file-csource.c:195 +#: plug-ins/common/file-csource.c:196 plug-ins/pagecurl/pagecurl.c:263 msgid "Opaci_ty" msgstr "Opaci_dad" -#: plug-ins/common/file-csource.c:196 +#: plug-ins/common/file-csource.c:197 plug-ins/pagecurl/pagecurl.c:264 msgid "Opacity" msgstr "Opacidad" -#: plug-ins/common/file-csource.c:240 +#: plug-ins/common/file-csource.c:238 msgid "C source does not support multiple layers." msgstr "La fuente C no soporta múltiples capas." -#: plug-ins/common/file-compressor.c:213 +#: plug-ins/common/file-compressor.c:216 msgid "gzip archive" msgstr "archivador gzip" -#: plug-ins/common/file-compressor.c:232 +#: plug-ins/common/file-compressor.c:235 msgid "bzip archive" msgstr "archivador bzip" -#: plug-ins/common/file-compressor.c:251 +#: plug-ins/common/file-compressor.c:254 msgid "xz archive" msgstr "archivador xz" -#: plug-ins/common/file-compressor.c:438 +#: plug-ins/common/file-compressor.c:444 msgid "No sensible file extension, saving as compressed XCF." msgstr "No hay una extensión razonable, guardando como XCF comprimido." -#: plug-ins/common/file-compressor.c:462 +#: plug-ins/common/file-compressor.c:468 #, c-format msgid "Compressing '%s'" msgstr "Comprimiendo «%s»" -#: plug-ins/common/file-compressor.c:500 +#: plug-ins/common/file-compressor.c:506 msgid "No sensible file extension, attempting to load with file magic." msgstr "" "No hay una extensión razonable, intentando cargar mediante magia de archivos." # ¿Qué es esto? FVD -#: plug-ins/common/file-desktop-link.c:112 +#: plug-ins/common/file-desktop-link.c:114 msgid "Desktop Link" msgstr "Enlace del escritorio" -#: plug-ins/common/file-desktop-link.c:198 +#: plug-ins/common/file-desktop-link.c:202 #, c-format msgid "Error loading desktop file '%s': %s" msgstr "Ocurrió un error al abrir el archivo de escritorio «%s»: %s" -#: plug-ins/common/file-dicom.c:173 +#: plug-ins/common/file-dicom.c:176 msgid "DICOM image" msgstr "Imagen DICOM" -#: plug-ins/common/file-dicom.c:205 +#: plug-ins/common/file-dicom.c:208 msgid "Digital Imaging and Communications in Medicine image" msgstr "Imagen «Digital Imaging and Communications in Medicine»" -#: plug-ins/common/file-dicom.c:301 +#: plug-ins/common/file-dicom.c:307 msgid "Dicom format does not support multiple layers." msgstr "El formato Dicom no soporta múltiples capas." -#: plug-ins/common/file-dicom.c:403 +#: plug-ins/common/file-dicom.c:409 #, c-format msgid "'%s' is not a DICOM file." msgstr "«%s» no es un archivo DICOM." -#: plug-ins/common/file-dicom.c:576 +#: plug-ins/common/file-dicom.c:582 #, c-format msgid "Transfer syntax %s is not supported by PIKA." msgstr "PIKA no soporta la sintaxis de transferencia %s." -#: plug-ins/common/file-dicom.c:631 +#: plug-ins/common/file-dicom.c:637 #, c-format msgid "%s is not supported by PIKA in combination with samples per pixel: %d" msgstr "%s no es compatible con PIKA en combinación con muestras por píxel: %d" -#: plug-ins/common/file-dicom.c:1523 +#: plug-ins/common/file-dicom.c:1529 msgid "Cannot save images with alpha channel." msgstr "No se pueden guardar imágenes con canales alfa." -#: plug-ins/common/file-dicom.c:1542 plug-ins/common/file-ps.c:1333 -#: plug-ins/common/file-xwd.c:670 plug-ins/file-fits/fits.c:635 +#: plug-ins/common/file-dicom.c:1548 plug-ins/common/file-ps.c:1316 +#: plug-ins/common/file-xwd.c:715 plug-ins/file-fits/fits.c:668 msgid "Cannot operate on unknown image types." msgstr "No puede operar sobre tipos de imagen desconocidos." -#: plug-ins/common/file-gbr.c:125 +# Nombre de un formato de imagen +#: plug-ins/common/file-farbfeld.c:138 plug-ins/common/file-farbfeld.c:164 +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" + +#: plug-ins/common/file-farbfeld.c:167 plug-ins/common/file-farbfeld.c:169 +msgid "Export image in the Farbfeld file format" +msgstr "Exportar imagen en el formato de archivo Farbfeld" + +#: plug-ins/common/file-farbfeld.c:257 +#, fuzzy +#| msgid "GIF format does not support multiple layers." +msgid "Farbfeld format does not support multiple layers." +msgstr "El formato GIF no soporta múltiples capas." + +#: plug-ins/common/file-farbfeld.c:309 +#, fuzzy +#| msgid "Failed to read QOI file" +msgid "Failed to read Farbfeld header" +msgstr "No se pudo leer el archivo QOI" + +#: plug-ins/common/file-farbfeld.c:335 +#, fuzzy +#| msgid "Premature end of file." +msgid "Premature end of Farbfeld pixel data" +msgstr "Final prematuro del archivo." + +#: plug-ins/common/file-gbr.c:126 msgid "PIKA brush" msgstr "Pincel PIKA" -#: plug-ins/common/file-gbr.c:127 +#: plug-ins/common/file-gbr.c:128 msgid "Brush" msgstr "Pincel" -#: plug-ins/common/file-gbr.c:131 plug-ins/common/file-gbr.c:133 +#: plug-ins/common/file-gbr.c:132 plug-ins/common/file-gbr.c:134 msgid "Exports files in the PIKA brush file format" msgstr "Exporta archivos en el formato de pinceles de PIKA" -#: plug-ins/common/file-gbr.c:151 +#: plug-ins/common/file-gbr.c:152 msgid "Sp_acing" msgstr "Es_paciado" -#: plug-ins/common/file-gbr.c:152 +#: plug-ins/common/file-gbr.c:153 plug-ins/common/file-gih.c:188 msgid "Spacing of the brush" msgstr "Espaciado del pincel" -#: plug-ins/common/file-gbr.c:157 plug-ins/common/file-pat.c:136 +#: plug-ins/common/file-gbr.c:158 plug-ins/common/file-gih.c:193 +#: plug-ins/common/file-pat.c:137 msgid "_Description" msgstr "_Descripción" -#: plug-ins/common/file-gbr.c:158 +#: plug-ins/common/file-gbr.c:159 msgid "Short description of the brush" msgstr "Breve descripción del pincel" -#: plug-ins/common/file-gbr.c:159 +#: plug-ins/common/file-gbr.c:160 msgid "PIKA Brush" msgstr "Pincel de PIKA" -#: plug-ins/common/file-gbr.c:231 -msgid "GBR format does not support multiple layers." -msgstr "El formato GBR no soporta múltiples capas." - -#: plug-ins/common/file-gegl.c:114 +#: plug-ins/common/file-gegl.c:117 msgid "Radiance RGBE" msgstr "Resplandor RGBE" -#: plug-ins/common/file-gegl.c:130 plug-ins/file-exr/file-exr.c:106 +#: plug-ins/common/file-gegl.c:133 plug-ins/file-exr/file-exr.c:109 msgid "OpenEXR image" msgstr "Imagen OpenEXR" -#: plug-ins/common/file-gegl.c:311 +#: plug-ins/common/file-gegl.c:317 msgid "GEGL export plug-in does not support multiple layers." msgstr "El complemento de exportación a GEGL no soporta múltiples capas." -#: plug-ins/common/file-gegl.c:376 +#: plug-ins/common/file-gegl.c:381 #, c-format msgid "Could not open '%s'" msgstr "No se pudo abrir «%s»" -#: plug-ins/common/file-gif-load.c:176 plug-ins/common/file-gif-save.c:149 +#: plug-ins/common/file-gif-load.c:178 plug-ins/common/file-gif-save.c:150 msgid "GIF image" msgstr "Imagen GIF" -#: plug-ins/common/file-gif-load.c:417 +#: plug-ins/common/file-gif-load.c:421 msgid "GIF magic code" msgstr "Código mágico de GIF" -#: plug-ins/common/file-gif-load.c:425 +#: plug-ins/common/file-gif-load.c:429 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:433 +#: plug-ins/common/file-gif-load.c:437 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:440 +#: plug-ins/common/file-gif-load.c:444 msgid "screen descriptor" msgstr "descriptor de pantalla" -#: plug-ins/common/file-gif-load.c:458 +#: plug-ins/common/file-gif-load.c:462 msgid "global colormap" msgstr "Mapa de colores global" -#: plug-ins/common/file-gif-load.c:466 -msgid "Non-square pixels. Image might look squashed." -msgstr "Píxeles no cuadrados. La imagen se verá aplastada." - -#: plug-ins/common/file-gif-load.c:476 plug-ins/common/file-gif-load.c:1060 +#: plug-ins/common/file-gif-load.c:474 plug-ins/common/file-gif-load.c:1080 msgid "image data" msgstr "datos de imagen" -#: plug-ins/common/file-gif-load.c:493 +#: plug-ins/common/file-gif-load.c:491 msgid "extension data" msgstr "datos de extensión" -#: plug-ins/common/file-gif-load.c:513 +#: plug-ins/common/file-gif-load.c:511 msgid "frame info" msgstr "info de fotograma" -#: plug-ins/common/file-gif-load.c:526 +#: plug-ins/common/file-gif-load.c:524 msgid "local colormap" msgstr "Mapa de colores local" -#: plug-ins/common/file-gif-load.c:586 plug-ins/common/file-gif-load.c:591 +#: plug-ins/common/file-gif-load.c:569 +#, 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 #, c-format msgid "Error reading %s. %s" msgstr "Error al leer %s. %s" -#: plug-ins/common/file-gif-load.c:587 plug-ins/common/file-gif-load.c:592 -#: plug-ins/common/file-gif-load.c:743 plug-ins/common/file-gif-load.c:751 -#: plug-ins/common/file-gif-load.c:782 plug-ins/common/file-gif-load.c:836 -#: plug-ins/common/file-gif-load.c:926 plug-ins/common/file-gif-load.c:945 -#: plug-ins/common/file-gif-load.c:1046 plug-ins/common/file-gif-load.c:1050 -#: plug-ins/common/file-gif-load.c:1195 +#: 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 msgid "Image may be corrupt!" msgstr "¡La imagen puede estar corrupta!" -#: plug-ins/common/file-gif-load.c:743 +#: plug-ins/common/file-gif-load.c:763 msgid "Error reading data size" msgstr "Error al leer el tamaño de los datos" -#: plug-ins/common/file-gif-load.c:751 +#: plug-ins/common/file-gif-load.c:771 msgid "Error reading data" msgstr "Error al leer los datos" -#: plug-ins/common/file-gif-load.c:782 +#: plug-ins/common/file-gif-load.c:802 msgid "Not enough compressed data" msgstr "No hay suficientes datos comprimidos" -#: plug-ins/common/file-gif-load.c:836 +#: plug-ins/common/file-gif-load.c:856 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:925 +#: plug-ins/common/file-gif-load.c:945 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:945 +#: plug-ins/common/file-gif-load.c:965 msgid "Unexpected extra data" msgstr "Datos adicionales inesperados" -#: plug-ins/common/file-gif-load.c:964 +#: plug-ins/common/file-gif-load.c:984 msgid "Invalid table entry" msgstr "Entrada de tabla no válida" -#: plug-ins/common/file-gif-load.c:964 plug-ins/common/file-gif-load.c:970 +#: plug-ins/common/file-gif-load.c:984 plug-ins/common/file-gif-load.c:990 msgid "Image is corrupt!" msgstr "La imagen está corrupta." -#: plug-ins/common/file-gif-load.c:970 +#: plug-ins/common/file-gif-load.c:990 msgid "Circular table entry" msgstr "Entrada de tabla circular" -#: plug-ins/common/file-gif-load.c:1045 +#: plug-ins/common/file-gif-load.c:1065 #, c-format msgid "%s. %s" msgstr "%s. %s" -#: plug-ins/common/file-gif-load.c:1046 plug-ins/common/file-gif-load.c:1050 +#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 msgid "Invalid frame dimensions" msgstr "Dimensiones de fotograma no válidas" -#: plug-ins/common/file-gif-load.c:1066 +#: plug-ins/common/file-gif-load.c:1086 msgid "compressed image data" msgstr "datos de imagen comprimidos" -#: plug-ins/common/file-gif-load.c:1099 +#: plug-ins/common/file-gif-load.c:1119 #, c-format msgid "Background (%d%s)" msgstr "Fondo (%d%s)" -#: plug-ins/common/file-gif-load.c:1126 +#: plug-ins/common/file-gif-load.c:1146 #, c-format msgid "Opening '%s' (frame %d)" msgstr "Abriendo «%s» (fotograma %d)" -#: plug-ins/common/file-gif-load.c:1155 +#: plug-ins/common/file-gif-load.c:1175 #, c-format msgid "Frame %d" msgstr "Cuadro %d" -#: plug-ins/common/file-gif-load.c:1157 +#: plug-ins/common/file-gif-load.c:1177 #, c-format msgid "Frame %d (%d%s)" msgstr "Cuadro %d (%d%s)" -#: plug-ins/common/file-gif-load.c:1188 +#: plug-ins/common/file-gif-load.c:1208 #, c-format msgid "" "GIF: Undocumented GIF composite type %d is not handled. Animation might not " @@ -2537,12 +3081,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:1194 +#: plug-ins/common/file-gif-load.c:1214 #, c-format msgid "Unknown composite type %d. %s" msgstr "Tipo de compuesto desconocido %d. %s" -#: plug-ins/common/file-gif-load.c:1237 +#: plug-ins/common/file-gif-load.c:1257 msgid "" "Can't handle non-alpha RGB frames.\n" "Please file a bug report at https://gitlab.gnome.org/GNOME/pika/issues" @@ -2550,26 +3094,32 @@ 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:1364 +#: plug-ins/common/file-gif-load.c:1380 msgid "Too much compressed data, ignoring extra..." msgstr "Demasiados datos comprimidos, ignorando extra…" -#: plug-ins/common/file-gif-save.c:151 +#: plug-ins/common/file-gif-save.c:152 msgid "GIF" msgstr "GIF" -#: plug-ins/common/file-gif-save.c:154 -msgid "exports files in Compuserve GIF file format" -msgstr "Exporta archivos en el formato de archivo GIF de Compuserve" +#: plug-ins/common/file-gif-save.c:155 +msgid "exports files in GIF file format" +msgstr "Exportar archivos en el formato de archivo GIF" -#: plug-ins/common/file-gif-save.c:156 -#, c-format +#: plug-ins/common/file-gif-save.c:158 +#, fuzzy, no-c-format +#| msgid "" +#| "Export a file in Compuserve GIF format, with possible animation, " +#| "transparency, and comment. To export an animation, operate on a multi-" +#| "layer file and give the 'as-animation' parameter as TRUE. The plug-in " +#| "will interpret <50% alpha as transparent. When run non-interactively, the " +#| "value for the comment is taken from the 'pika-comment' parasite. " msgid "" -"Export a file in Compuserve GIF format, with possible animation, " -"transparency, and comment. To export an animation, operate on a multi-layer " -"file and give the 'as-animation' parameter as TRUE. The plug-in will " -"interpret <50% alpha as transparent. When run non-interactively, the value " -"for the comment is taken from the 'pika-comment' parasite. " +"Export a file in GIF format, with possible animation, transparency, and " +"comment. To export an animation, operate on a multi-layer file and give the " +"'as-animation' parameter as TRUE. The plug-in will interpret <50% alpha as " +"transparent. When run non-interactively, the value for the comment is taken " +"from the 'pika-comment' parasite." msgstr "" "Exportar un archivo en formato GIF de Compuserve, con posibles animaciones, " "transparencias y comentarios. Para exportar una animación, opere en un " @@ -2578,101 +3128,101 @@ msgstr "" "se ejecuta de forma no interactiva, el valor del comentario se toma del " "parásito «pika-comment». " -#: plug-ins/common/file-gif-save.c:182 plug-ins/common/file-mng.c:277 +#: plug-ins/common/file-gif-save.c:184 plug-ins/common/file-mng.c:278 msgid "_Interlace" msgstr "_Entrelazar" -#: plug-ins/common/file-gif-save.c:183 +#: plug-ins/common/file-gif-save.c:185 msgid "Try to export as interlaced" msgstr "Intentar exportar como entrelazado" -#: plug-ins/common/file-gif-save.c:188 +#: plug-ins/common/file-gif-save.c:190 msgid "Loop _Forever" msgstr "Bucle in_finito" -#: plug-ins/common/file-gif-save.c:189 +#: plug-ins/common/file-gif-save.c:191 msgid "(animated gif) Loop infinitely" msgstr "(gif animado) Bucle infinito" -#: plug-ins/common/file-gif-save.c:194 +#: plug-ins/common/file-gif-save.c:196 msgid "_Number of repeats" msgstr "_Número de repeticiones" -#: plug-ins/common/file-gif-save.c:195 +#: plug-ins/common/file-gif-save.c:197 msgid "(animated gif) Number of repeats (Ignored if 'loop' is TRUE)" msgstr "" "(gif animado) Número de repeticiones (se ignora si «bucle» es VERDADERO)" -#: plug-ins/common/file-gif-save.c:201 +#: plug-ins/common/file-gif-save.c:203 msgid "_Delay between frames when unspecified" msgstr "_Retardo entre fotogramas cuando no esté especificado" -#: plug-ins/common/file-gif-save.c:202 +#: plug-ins/common/file-gif-save.c:204 msgid "(animated gif) Default delay between frames in milliseconds" msgstr "(gif animado) Retraso predeterminado entre fotogramas en milisegundos" -#: plug-ins/common/file-gif-save.c:208 +#: plug-ins/common/file-gif-save.c:210 msgid "Frame disposal _when unspecified" msgstr "Disposición de fotograma _cuando no se especifique" -#: plug-ins/common/file-gif-save.c:209 +#: plug-ins/common/file-gif-save.c:211 msgid "" "(animated gif) Default disposal type (0=`don't care`, 1=combine, 2=replace)" msgstr "" "(gif animado) Tipo de disposición predeterminado (0=«no importa», " "1=combinar, 2=reemplazar)" -#: plug-ins/common/file-gif-save.c:217 +#: plug-ins/common/file-gif-save.c:219 msgid "_As animation" msgstr "Como _animación" -#: plug-ins/common/file-gif-save.c:218 +#: plug-ins/common/file-gif-save.c:220 msgid "Export GIF as animation?" msgstr "¿Exportar GIF como animación?" -#: plug-ins/common/file-gif-save.c:223 +#: plug-ins/common/file-gif-save.c:225 msgid "_Use delay entered above for all frames" msgstr "_Usar el retraso introducido más arriba para todos los cuadros" -#: plug-ins/common/file-gif-save.c:224 +#: plug-ins/common/file-gif-save.c:226 msgid "(animated gif) Use specified delay for all frames" msgstr "(gif animado) Usar el retraso especificado para todos los fotogramas" -#: plug-ins/common/file-gif-save.c:229 +#: plug-ins/common/file-gif-save.c:231 msgid "Use dis_posal entered above for all frames" msgstr "Usar la dis_posición introducida más arriba para todos los fotogramas" -#: plug-ins/common/file-gif-save.c:231 +#: plug-ins/common/file-gif-save.c:233 msgid "(animated gif) Use specified disposal for all frames" msgstr "" "(gif animado) Usar la disposición especificada para todos los fotogramas" -#: plug-ins/common/file-gif-save.c:236 +#: plug-ins/common/file-gif-save.c:238 msgid "Sa_ve comment" msgstr "G_uardar el comentario" -#: plug-ins/common/file-gif-save.c:237 +#: plug-ins/common/file-gif-save.c:239 msgid "Save the image comment in the GIF file" msgstr "Guardar el comentario de la imagen en el archivo GIF" -#: plug-ins/common/file-gif-save.c:242 +#: plug-ins/common/file-gif-save.c:244 msgid "Commen_t" msgstr "Comen_tario" -#: plug-ins/common/file-gif-save.c:243 +#: plug-ins/common/file-gif-save.c:245 msgid "Image comment" msgstr "Comentario de la imagen" -#: plug-ins/common/file-gif-save.c:349 +#: plug-ins/common/file-gif-save.c:348 msgid "GIF format does not support multiple layers." msgstr "El formato GIF no soporta múltiples capas." -#: plug-ins/common/file-gif-save.c:557 +#: plug-ins/common/file-gif-save.c:553 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:676 +#: plug-ins/common/file-gif-save.c:672 #, c-format msgid "" "Unable to export '%s'. The GIF file format does not support images that are " @@ -2681,7 +3231,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:802 +#: plug-ins/common/file-gif-save.c:798 msgid "" "The GIF format only supports comments in 7bit ASCII encoding. No comment is " "saved." @@ -2689,18 +3239,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:889 +#: plug-ins/common/file-gif-save.c:885 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:1109 +#: plug-ins/common/file-gif-save.c:1105 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:1158 +#: plug-ins/common/file-gif-save.c:1154 msgid "" "The image you are trying to export as a GIF contains layers which extend " "beyond the actual borders of the image." @@ -2709,11 +3259,11 @@ msgstr "" "extiende\n" "más allá de los bordes reales de la imagen." -#: plug-ins/common/file-gif-save.c:1164 +#: plug-ins/common/file-gif-save.c:1160 msgid "Cr_op" msgstr "_Recortar" -#: plug-ins/common/file-gif-save.c:1175 +#: plug-ins/common/file-gif-save.c:1171 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." @@ -2721,27 +3271,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:1265 plug-ins/common/file-mng.c:1642 +#: plug-ins/common/file-gif-save.c:1261 plug-ins/common/file-mng.c:1638 msgid "milliseconds" msgstr "milisegundos" -#: plug-ins/common/file-gif-save.c:1270 +#: plug-ins/common/file-gif-save.c:1267 msgid "I don't care" msgstr "No me importa" -#: plug-ins/common/file-gif-save.c:1272 -msgid "Cumulative layers (combine)" -msgstr "Capas acumulativas (combinar)" - -#: plug-ins/common/file-gif-save.c:1274 -msgid "One frame per layer (replace)" -msgstr "Un cuadro por capa (reemplazar)" - -#: plug-ins/common/file-gif-save.c:1305 +#: plug-ins/common/file-gif-save.c:1303 msgid "Animated GIF" msgstr "GIF animado" -#: plug-ins/common/file-gif-save.c:1311 +#: plug-ins/common/file-gif-save.c:1310 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." @@ -2749,80 +3291,113 @@ msgstr "" "Solo puede exportar como animación cuando la imagen tiene más de una capa.\n" "La imagen que está tratando de exportar tiene una sola capa." -#: plug-ins/common/file-gih.c:178 +#: plug-ins/common/file-gih.c:157 msgid "PIKA brush (animated)" msgstr "Pincel PIKA (animado)" -#: plug-ins/common/file-gih.c:632 +#: plug-ins/common/file-gih.c:180 msgid "Brush Pipe" msgstr "Tubería de pinceles" -#: plug-ins/common/file-gih.c:650 plug-ins/imagemap/imap_settings.c:105 -msgid "_Description:" -msgstr "_Descripción:" +#: plug-ins/common/file-gih.c:187 +msgid "Spacing (_percent)" +msgstr "Espaciado (_porcentaje)" -#: plug-ins/common/file-gih.c:664 -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" -#: plug-ins/common/file-gih.c:718 -msgid "Pixels" -msgstr "Píxeles" +#: plug-ins/common/file-gih.c:199 +#, fuzzy +#| msgid "Pixel _width:" +msgid "Cell _width" +msgstr "A_nchura del píxel:" -#: plug-ins/common/file-gih.c:723 -msgid "Ce_ll size:" -msgstr "Tamaño de ce_lda:" +#: plug-ins/common/file-gih.c:200 +msgid "Width of the brush cells in pixels" +msgstr "Ancho de las celdas del pincel en píxeles" -#: plug-ins/common/file-gih.c:735 -msgid "_Number of cells:" +#: plug-ins/common/file-gih.c:205 +msgid "Cell _height" +msgstr "A_ltura de celda" + +#: plug-ins/common/file-gih.c:206 +msgid "Height of the brush cells in pixels" +msgstr "Alto de las celdas del pincel en píxeles" + +#: plug-ins/common/file-gih.c:211 +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:" -#: plug-ins/common/file-gih.c:760 -msgid " Rows of " -msgstr " Fila(s) de " +#: plug-ins/common/file-gih.c:217 +msgid "_Rank" +msgstr "_Rango" -#: plug-ins/common/file-gih.c:772 -msgid " Columns on each layer" -msgstr " Columnas en cada capa" +#: 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" -#: plug-ins/common/file-gih.c:776 -msgid " (Width Mismatch!) " -msgstr " (¡Anchura incoherente!) " +#: plug-ins/common/file-gih.c:229 +msgid "Display as" +msgstr "Mostrar como" -#: plug-ins/common/file-gih.c:780 -msgid " (Height Mismatch!) " -msgstr " (¡Altura incoherente!) " +#: plug-ins/common/file-gih.c:230 +msgid "Describe how the layers will be split" +msgstr "Describe cómo se dividirán las capas" -#: plug-ins/common/file-gih.c:785 -msgid "Display as:" -msgstr "Mostrar como:" +#: plug-ins/common/file-gih.c:234 +msgid "D_imension" +msgstr "D_imensión" -#: plug-ins/common/file-gih.c:796 -msgid "Di_mension:" -msgstr "Di_mensión:" +#: plug-ins/common/file-gih.c:235 +msgid "How many dimensions the animated brush has" +msgstr "Cuántas dimensiones tiene el pincel animado" -#: plug-ins/common/file-gih.c:869 +#: plug-ins/common/file-gih.c:475 +msgid "Width Mismatch!" +msgstr "¡Anchura incoherente!" + +#: plug-ins/common/file-gih.c:476 +msgid "Height Mismatch!" +msgstr "¡Altura incoherente!" + +#: plug-ins/common/file-gih.c:523 +#, c-format +msgid "Displays as a %d × %d grid on each layer" +msgstr "Se muestra como una cuadrícula %d × %d en cada capa" + +#: plug-ins/common/file-gih.c:709 msgid "Ranks:" msgstr "Rangos:" -#: plug-ins/common/file-header.c:117 +#: plug-ins/common/file-header.c:118 msgid "C source code header" msgstr "Cabecera de código fuente en C" -#: plug-ins/common/file-header.c:179 +#: plug-ins/common/file-header.c:181 msgid "Header plug-in does not support multiple layers." msgstr "El complemento Cabecera no soporta múltiples capas." -#: plug-ins/common/file-heif.c:190 plug-ins/common/file-heif.c:230 +#: plug-ins/common/file-heif.c:194 plug-ins/common/file-heif.c:234 msgid "HEIF/HEIC" msgstr "HEIF/HEIC" -#: plug-ins/common/file-heif.c:193 +#: plug-ins/common/file-heif.c:197 msgid "Loads HEIF images" msgstr "Carga imágenes HEIF" # ¿En vez de «suffices» quizo decir «suffixes»? -#: plug-ins/common/file-heif.c:194 +#: plug-ins/common/file-heif.c:198 msgid "" "Load image stored in HEIF format (High Efficiency Image File Format). " "Typical suffices for HEIF files are .heif, .heic." @@ -2831,246 +3406,248 @@ msgstr "" "alta eficiencia). Las extensiones típicas de los archivos HEIF son .heif y ." "heic." -#: plug-ins/common/file-heif.c:235 +#: plug-ins/common/file-heif.c:239 msgid "Exports HEIF images" msgstr "Exporta imágenes HEIF" -#: plug-ins/common/file-heif.c:236 +#: plug-ins/common/file-heif.c:240 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:252 plug-ins/common/file-heif.c:362 +#: plug-ins/common/file-heif.c:256 plug-ins/common/file-heif.c:366 +#: plug-ins/file-jpeg/jpeg.c:206 msgid "_Quality" msgstr "Ca_lidad" -#: plug-ins/common/file-heif.c:253 plug-ins/common/file-heif.c:363 +#: plug-ins/common/file-heif.c:257 plug-ins/common/file-heif.c:367 msgid "Quality factor (0 = worst, 100 = best)" msgstr "Factor de calidad (0 = peor, 100 = mejor)" -#: plug-ins/common/file-heif.c:258 plug-ins/common/file-heif.c:368 -#: plug-ins/common/file-jpegxl.c:185 plug-ins/file-webp/file-webp.c:175 +#: plug-ins/common/file-heif.c:262 plug-ins/common/file-heif.c:372 +#: 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:259 plug-ins/common/file-heif.c:369 -#: plug-ins/common/file-jpegxl.c:186 +#: plug-ins/common/file-heif.c:263 plug-ins/common/file-heif.c:373 +#: plug-ins/common/file-jpegxl.c:189 msgid "Use lossless compression" msgstr "Usar compresión sin pérdidas" -#: plug-ins/common/file-heif.c:264 plug-ins/common/file-heif.c:374 +#: plug-ins/common/file-heif.c:268 plug-ins/common/file-heif.c:378 msgid "Save color prof_ile" msgstr "Guardar perf_il de color" -#: plug-ins/common/file-heif.c:265 plug-ins/common/file-heif.c:375 +#: plug-ins/common/file-heif.c:269 plug-ins/common/file-heif.c:379 msgid "Save the image's color profile" msgstr "Guardar el perfil de color de la imagen" -#: plug-ins/common/file-heif.c:270 plug-ins/common/file-heif.c:380 -#: plug-ins/common/file-jpegxl.c:197 +#: plug-ins/common/file-heif.c:274 plug-ins/common/file-heif.c:384 +#: plug-ins/common/file-jpegxl.c:200 msgid "_Bit depth" msgstr "Profundidad de _bit" -#: plug-ins/common/file-heif.c:271 plug-ins/common/file-heif.c:381 -#: plug-ins/common/file-jpegxl.c:198 +#: plug-ins/common/file-heif.c:275 plug-ins/common/file-heif.c:385 +#: 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:276 plug-ins/common/file-heif.c:386 -#: plug-ins/common/file-png.c:283 +#: plug-ins/common/file-heif.c:280 plug-ins/common/file-heif.c:390 +#: plug-ins/common/file-png.c:286 msgid "_Pixel format" msgstr "Formato de _píxel" -#: plug-ins/common/file-heif.c:277 plug-ins/common/file-heif.c:387 +#: plug-ins/common/file-heif.c:281 plug-ins/common/file-heif.c:391 msgid "Format of color sub-sampling" msgstr "Formato de submuestreo de color" -#: plug-ins/common/file-heif.c:283 plug-ins/common/file-heif.c:393 +#: plug-ins/common/file-heif.c:287 plug-ins/common/file-heif.c:397 msgid "Enco_der speed" msgstr "Velocidad del co_dificador" -#: plug-ins/common/file-heif.c:284 plug-ins/common/file-heif.c:394 +#: plug-ins/common/file-heif.c:288 plug-ins/common/file-heif.c:398 msgid "Tradeoff between speed and compression" msgstr "Equilibrio entre velocidad y compresión" -#: plug-ins/common/file-heif.c:290 plug-ins/common/file-heif.c:400 -#: plug-ins/common/file-jpegxl.c:222 +#: plug-ins/common/file-heif.c:294 plug-ins/common/file-heif.c:404 +#: plug-ins/common/file-jpegxl.c:225 msgid "Save Exi_f" msgstr "Guardar Exi_f" -#: plug-ins/common/file-heif.c:291 plug-ins/common/file-heif.c:401 -#: plug-ins/common/file-jpegxl.c:223 +#: plug-ins/common/file-heif.c:295 plug-ins/common/file-heif.c:405 +#: 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:296 plug-ins/common/file-heif.c:406 -#: plug-ins/common/file-jpegxl.c:228 +#: plug-ins/common/file-heif.c:300 plug-ins/common/file-heif.c:410 +#: plug-ins/common/file-jpegxl.c:231 msgid "Save _XMP" msgstr "Guardar _XMP" -#: plug-ins/common/file-heif.c:297 plug-ins/common/file-heif.c:407 -#: plug-ins/common/file-jpegxl.c:229 +#: plug-ins/common/file-heif.c:301 plug-ins/common/file-heif.c:411 +#: 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:311 +#: plug-ins/common/file-heif.c:315 msgid "Loads AVIF images" msgstr "Carga imágenes AVIF" -#: plug-ins/common/file-heif.c:312 +#: plug-ins/common/file-heif.c:316 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:344 +#: plug-ins/common/file-heif.c:348 msgid "Exports AVIF images" msgstr "Exporta imágenes AVIF" -#: plug-ins/common/file-heif.c:345 +#: plug-ins/common/file-heif.c:349 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:501 plug-ins/common/file-heif.c:597 +#: plug-ins/common/file-heif.c:504 plug-ins/common/file-heif.c:594 msgid "HEIF format does not support multiple layers." msgstr "El formato HEIF no soporta múltiples capas." -#: plug-ins/common/file-heif.c:917 plug-ins/common/file-heif.c:950 -#: plug-ins/common/file-heif.c:991 plug-ins/common/file-heif.c:1057 +#: 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 #, c-format msgid "Loading HEIF image failed: %s" msgstr "Falló al cargar la imagen HEIF: %s" -#: plug-ins/common/file-heif.c:939 +#: plug-ins/common/file-heif.c:933 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:1183 +#: plug-ins/common/file-heif.c:1177 msgid "image content" msgstr "contenido de la imagen" -#: plug-ins/common/file-heif.c:1535 +#: plug-ins/common/file-heif.c:1529 #, c-format msgid "Exporting '%s' using %s encoder" msgstr "Exportando «%s» usando el codificador %s" -#: plug-ins/common/file-heif.c:1585 plug-ins/common/file-heif.c:1992 +#: plug-ins/common/file-heif.c:1579 plug-ins/common/file-heif.c:1986 #, c-format msgid "Encoding HEIF image failed: %s" msgstr "Falló al codificar la imagen HEIF: %s" -#: plug-ins/common/file-heif.c:2113 +#: plug-ins/common/file-heif.c:2107 #, c-format msgid "Writing HEIF image failed: %s" msgstr "Falló al escribir la imagen HEIF: %s" -#: plug-ins/common/file-heif.c:2202 +#: plug-ins/common/file-heif.c:2196 msgid "primary" msgstr "primario" -#: plug-ins/common/file-heif.c:2347 +#: plug-ins/common/file-heif.c:2341 msgid "Load HEIF Image" msgstr "Cargar imagen HEIF" -#: plug-ins/common/file-heif.c:2361 +#: plug-ins/common/file-heif.c:2355 msgid "Select Image" msgstr "Seleccione imagen" -#: plug-ins/common/file-heif.c:2518 +#: plug-ins/common/file-heif.c:2512 msgid "YUV444" msgstr "YUV444" -#: plug-ins/common/file-heif.c:2519 +#: plug-ins/common/file-heif.c:2513 msgid "YUV420" msgstr "YUV420" -#: plug-ins/common/file-heif.c:2527 plug-ins/common/file-jpegxl.c:2020 +#: plug-ins/common/file-heif.c:2521 plug-ins/common/file-jpegxl.c:2022 msgid "8 bit/channel" msgstr "8 bit/canal" -#: plug-ins/common/file-heif.c:2528 +#: plug-ins/common/file-heif.c:2522 msgid "10 bit/channel" msgstr "10 bit/canal" -#: plug-ins/common/file-heif.c:2529 +#: plug-ins/common/file-heif.c:2523 msgid "12 bit/channel" msgstr "12 bit/canal" -#: plug-ins/common/file-heif.c:2535 +#: plug-ins/common/file-heif.c:2529 msgid "Slow" msgstr "Lento" -#: plug-ins/common/file-heif.c:2536 +#: plug-ins/common/file-heif.c:2530 msgid "Balanced" msgstr "Balanceado" -#: plug-ins/common/file-heif.c:2537 +#: plug-ins/common/file-heif.c:2531 msgid "Fast" msgstr "Rápido" -#: plug-ins/common/file-html-table.c:153 +#: plug-ins/common/file-html-table.c:154 msgid "HTML table" msgstr "Tabla HTML" -#: plug-ins/common/file-html-table.c:155 +#: plug-ins/common/file-html-table.c:156 msgid "HTML Table" msgstr "Tabla HTML" # Nombre del complemento -#: plug-ins/common/file-html-table.c:158 +#: plug-ins/common/file-html-table.c:159 msgid "PIKA Table Magic" msgstr "PIKA Table Magic" -#: plug-ins/common/file-html-table.c:159 +#: plug-ins/common/file-html-table.c:160 msgid "Allows you to draw an HTML table in PIKA. See help for more info." msgstr "" "Le permite dibujar una tabla HTML en PIKA. Consulte la ayuda para obtener " "más información." -#: plug-ins/common/file-html-table.c:175 +#: plug-ins/common/file-html-table.c:176 msgid "Use c_aption" msgstr "Usar s_ubtítulo" -#: plug-ins/common/file-html-table.c:176 +#: plug-ins/common/file-html-table.c:177 msgid "Enable if you would like to have the table captioned." msgstr "Actívelo si quiere que la tabla tenga un título." -#: plug-ins/common/file-html-table.c:182 +#: plug-ins/common/file-html-table.c:183 msgid "Capt_ion" msgstr "Subt_ítulo" -#: plug-ins/common/file-html-table.c:183 +#: plug-ins/common/file-html-table.c:184 msgid "The text for the table caption." msgstr "El texto para el título de la tabla." -#: plug-ins/common/file-html-table.c:188 +#: plug-ins/common/file-html-table.c:189 msgid "Cell con_tent" msgstr "Con_tenido de celda" -#: plug-ins/common/file-html-table.c:189 +#: plug-ins/common/file-html-table.c:190 msgid "The text to go into each cell." msgstr "El texto que va en cada celda." -#: plug-ins/common/file-html-table.c:195 +#: plug-ins/common/file-html-table.c:196 msgid "The width for each table cell. Can be a number or a percent." msgstr "" "La anchura de cada celda de tabla. Puede ser un número o un porcentaje." -#: plug-ins/common/file-html-table.c:201 plug-ins/common/file-ps.c:389 -#: plug-ins/common/file-ps.c:504 plug-ins/imagemap/imap_grid.c:261 +#: plug-ins/common/file-html-table.c:202 plug-ins/common/file-ps.c:392 +#: plug-ins/common/file-ps.c:507 plug-ins/common/file-raw-data.c:360 +#: plug-ins/common/smooth-palette.c:141 plug-ins/imagemap/imap_grid.c:261 msgid "_Height" msgstr "Al_tura" -#: plug-ins/common/file-html-table.c:202 +#: plug-ins/common/file-html-table.c:203 msgid "The height for each table cell. Can be a number or a percent." msgstr "La altura de cada celda de tabla. Puede ser un número o un porcentaje." -#: plug-ins/common/file-html-table.c:208 +#: plug-ins/common/file-html-table.c:209 msgid "_Generate full HTML document" msgstr "_Generar un documento HTML completo" -#: plug-ins/common/file-html-table.c:209 +#: plug-ins/common/file-html-table.c:210 msgid "" "If enabled GTM will output a full HTML document with , , etc. " "tags instead of just the table html." @@ -3078,20 +3655,20 @@ msgstr "" "Si lo activa GTM producirá un archivo HTML completo con etiquetas , " ", etc. en vez de simplemente la tabla HTML." -#: plug-ins/common/file-html-table.c:216 +#: plug-ins/common/file-html-table.c:217 msgid "_Border" msgstr "_Borde" -#: plug-ins/common/file-html-table.c:217 +#: plug-ins/common/file-html-table.c:218 msgid "The number of pixels in the table border." msgstr "El número de píxeles en el borde de la tabla." # //R ¿Cómo traduzco esto? -#: plug-ins/common/file-html-table.c:222 +#: plug-ins/common/file-html-table.c:223 msgid "_Use cellspan" msgstr "_Usar cellspan" -#: plug-ins/common/file-html-table.c:223 +#: plug-ins/common/file-html-table.c:224 msgid "" "If enabled GTM will replace any rectangular sections of identically colored " "blocks with one large cell with ROWSPAN and COLSPAN values." @@ -3099,11 +3676,11 @@ msgstr "" "Si lo activa GTM reemplazará cualquier región rectangular de bloques " "idénticamente coloreados con una gran celda con valores ROWSPAN y COLSPAN." -#: plug-ins/common/file-html-table.c:231 +#: plug-ins/common/file-html-table.c:232 msgid "Co_mpress TD tags" msgstr "Co_mprimir etiquetas TD" -#: plug-ins/common/file-html-table.c:232 +#: plug-ins/common/file-html-table.c:233 msgid "" "Enabling this will cause GTM to leave no whitespace between the TD tags and " "the cell content. This is only necessary for pixel level positioning control." @@ -3112,27 +3689,27 @@ msgstr "" "y el contenido de las celdas. Esto sólo es necesario para el control de " "posición a nivel de píxel." -#: plug-ins/common/file-html-table.c:241 +#: plug-ins/common/file-html-table.c:242 msgid "Cell-pa_dding" msgstr "Rel_leno de celdas" -#: plug-ins/common/file-html-table.c:242 +#: plug-ins/common/file-html-table.c:243 msgid "The amount of cell padding." msgstr "La cantidad de relleno de celdas." -#: plug-ins/common/file-html-table.c:247 +#: plug-ins/common/file-html-table.c:248 msgid "Cell spaci_ng" msgstr "Es_paciado de celdas" -#: plug-ins/common/file-html-table.c:248 +#: plug-ins/common/file-html-table.c:249 msgid "The amount of cell spacing." msgstr "La cantidad de espaciado de celdas." -#: plug-ins/common/file-html-table.c:289 +#: plug-ins/common/file-html-table.c:287 msgid "HTML table plug-in does not support multiple layers." msgstr "El complemento Tabla HTML no soporta múltiples capas." -#: plug-ins/common/file-html-table.c:614 +#: plug-ins/common/file-html-table.c:609 msgid "" "You are about to create a huge\n" "HTML file which will most likely\n" @@ -3142,57 +3719,57 @@ msgstr "" "archivo HTML que muy probablemente\n" "colgará su navegador." -#: plug-ins/common/file-html-table.c:631 +#: plug-ins/common/file-html-table.c:627 msgid "Warning" msgstr "Aviso" -#: plug-ins/common/file-html-table.c:644 +#: plug-ins/common/file-html-table.c:641 msgid "HTML Page Options" msgstr "Opciones de página HTML" -#: plug-ins/common/file-html-table.c:654 +#: plug-ins/common/file-html-table.c:652 msgid "Table Creation Options" msgstr "Opciones de creación de tabla" -#: plug-ins/common/file-html-table.c:673 +#: plug-ins/common/file-html-table.c:672 msgid "Table Options" msgstr "Opciones de tabla" # Formato -#: plug-ins/common/file-iff.c:145 +#: plug-ins/common/file-iff.c:147 msgid "Amiga IFF" msgstr "Amiga IFF" -#: plug-ins/common/file-iff.c:148 plug-ins/common/file-iff.c:149 +#: plug-ins/common/file-iff.c:150 plug-ins/common/file-iff.c:151 msgid "Load file in the IFF file format" msgstr "Carga un archivo en el formato de archivo IFF" -#: plug-ins/common/file-iff.c:260 +#: plug-ins/common/file-iff.c:252 msgid "Invalid or missing ILBM image" msgstr "Imagen ILBM no válida o ausente" -#: plug-ins/common/file-iff.c:265 +#: plug-ins/common/file-iff.c:257 msgid "ILBM contains no image data - likely a palette file" msgstr "" "ILBM no contiene datos de imagen, probablemente sea un archivo de paleta" -#: plug-ins/common/file-jp2-load.c:187 +#: plug-ins/common/file-jp2-load.c:189 msgid "JPEG 2000 image" msgstr "Imagen JPEG 2000" -#: plug-ins/common/file-jp2-load.c:189 plug-ins/common/file-jp2-load.c:223 +#: plug-ins/common/file-jp2-load.c:191 plug-ins/common/file-jp2-load.c:225 msgid "JPEG 2000" msgstr "JPEG 2000" -#: plug-ins/common/file-jp2-load.c:221 +#: plug-ins/common/file-jp2-load.c:223 msgid "JPEG 2000 codestream" msgstr "Flujo de código de JPEG 2000" -#: plug-ins/common/file-jp2-load.c:226 +#: plug-ins/common/file-jp2-load.c:228 msgid "Loads JPEG 2000 codestream." msgstr "Carga el flujo de código JPEG 2000." -#: plug-ins/common/file-jp2-load.c:227 +#: plug-ins/common/file-jp2-load.c:229 msgid "" "Loads JPEG 2000 codestream. If the color space is set to UNKNOWN (0), we " "will try to guess, which is only possible for few spaces (such as " @@ -3204,11 +3781,11 @@ msgstr "" "espacios (como la escala de grises). La mayoría de estas llamadas fallarán. " "Se espera que conozca el espacio de color de sus datos." -#: plug-ins/common/file-jp2-load.c:247 +#: plug-ins/common/file-jp2-load.c:249 msgid "Color s_pace" msgstr "Es_pacio de color" -#: plug-ins/common/file-jp2-load.c:248 +#: plug-ins/common/file-jp2-load.c:250 msgid "" "Color space { UNKNOWN (0), GRAYSCALE (1), RGB (2), CMYK (3), YCbCr (4), " "xvYCC (5) }" @@ -3218,100 +3795,100 @@ msgstr "" #. Can be RGB, YUV and YCC. #. Can be RGB, YUV and YCC with alpha or CMYK. -#: plug-ins/common/file-jp2-load.c:1003 plug-ins/common/file-jp2-load.c:1011 +#: plug-ins/common/file-jp2-load.c:989 plug-ins/common/file-jp2-load.c:997 msgid "sRGB" msgstr "sRGB" -#: plug-ins/common/file-jp2-load.c:1004 plug-ins/common/file-jp2-load.c:1012 +#: plug-ins/common/file-jp2-load.c:990 plug-ins/common/file-jp2-load.c:998 msgid "YCbCr" msgstr "YCbCr" -#: plug-ins/common/file-jp2-load.c:1005 plug-ins/common/file-jp2-load.c:1013 +#: plug-ins/common/file-jp2-load.c:991 plug-ins/common/file-jp2-load.c:999 msgid "xvYCC" msgstr "xvYCC" -#: plug-ins/common/file-jp2-load.c:1020 +#: plug-ins/common/file-jp2-load.c:1006 #, c-format msgid "Unsupported JPEG 2000%s '%s' with %d components." msgstr "JPEG 2000%s «%s» con componentes %d no admitidos." -#: plug-ins/common/file-jp2-load.c:1099 plug-ins/common/file-wmf.c:1007 +#: plug-ins/common/file-jp2-load.c:1085 plug-ins/common/file-wmf.c:762 #, c-format msgid "Could not open '%s' for reading" msgstr "No se pudo abrir «%s» para lectura" -#: plug-ins/common/file-jp2-load.c:1108 +#: plug-ins/common/file-jp2-load.c:1094 #, c-format msgid "Failed to initialize decoder for '%s', out of memory?" msgstr "No se pudo inicializar el decodificador para «%s», ¿falta memoria?" -#: plug-ins/common/file-jp2-load.c:1124 +#: plug-ins/common/file-jp2-load.c:1110 #, c-format msgid "Couldn't set parameters on decoder for '%s'." msgstr "No se pudieron asignar los parámetros en el descodificador para «%s»." -#: plug-ins/common/file-jp2-load.c:1132 +#: plug-ins/common/file-jp2-load.c:1118 #, c-format msgid "Couldn't read JP2 header from '%s'." msgstr "No se pudo leer la cabecera de la imagen JP2 desde «%s»." -#: plug-ins/common/file-jp2-load.c:1140 +#: plug-ins/common/file-jp2-load.c:1126 #, c-format msgid "Couldn't decode JP2 image in '%s'." msgstr "No se pudo descodificar la imagen JP2 en «%s»." -#: plug-ins/common/file-jp2-load.c:1148 +#: plug-ins/common/file-jp2-load.c:1134 #, c-format msgid "Couldn't decompress JP2 image in '%s'." msgstr "No se pudo descomprimir la imagen JP2 en «%s»." -#: plug-ins/common/file-jp2-load.c:1179 +#: plug-ins/common/file-jp2-load.c:1165 #, c-format msgid "Couldn't decode CIELAB JP2 image in '%s'." msgstr "No se pudo descodificar la imagen CIELAB JP2 en «%s»." -#: plug-ins/common/file-jp2-load.c:1236 +#: plug-ins/common/file-jp2-load.c:1222 #, c-format msgid "Unknown color space in JP2 codestream '%s'." msgstr "Espacio de color desconocido en el flujo de código de JP2 «%s»." -#: plug-ins/common/file-jp2-load.c:1247 +#: plug-ins/common/file-jp2-load.c:1233 #, c-format msgid "Couldn't convert YCbCr JP2 image '%s' to RGB." msgstr "No se pudo convertir la imagen YCbCr JP2 «%s» a RGB." -#: plug-ins/common/file-jp2-load.c:1257 +#: plug-ins/common/file-jp2-load.c:1243 #, c-format msgid "Couldn't convert CMYK JP2 image in '%s' to RGB." msgstr "No se pudo convertir la imagen CMYK JP2 «%s» a RGB." -#: plug-ins/common/file-jp2-load.c:1267 +#: plug-ins/common/file-jp2-load.c:1253 #, c-format msgid "Couldn't convert xvYCC JP2 image in '%s' to RGB." msgstr "No se pudo convertir la imagen xvYCC JP2 «%s» a RGB." -#: plug-ins/common/file-jp2-load.c:1294 +#: plug-ins/common/file-jp2-load.c:1280 #, c-format msgid "Unsupported color space in JP2 image '%s'." msgstr "Espacio de color no soportado en la imagen JP2 «%s»." -#: plug-ins/common/file-jpegxl.c:139 plug-ins/common/file-jpegxl.c:166 +#: plug-ins/common/file-jpegxl.c:142 plug-ins/common/file-jpegxl.c:169 msgid "JPEG XL image" msgstr "Imagen JPEG XL" -#: plug-ins/common/file-jpegxl.c:142 plug-ins/common/file-jpegxl.c:143 +#: plug-ins/common/file-jpegxl.c:145 plug-ins/common/file-jpegxl.c:146 msgid "Loads files in the JPEG XL file format" msgstr "Carga archivos en el formato de archivo JPEG XL" -#: plug-ins/common/file-jpegxl.c:169 plug-ins/common/file-jpegxl.c:170 +#: plug-ins/common/file-jpegxl.c:172 plug-ins/common/file-jpegxl.c:173 msgid "Saves files in the JPEG XL file format" msgstr "Guarda archivos en el formato de archivo JPEG XL" -#: plug-ins/common/file-jpegxl.c:191 +#: plug-ins/common/file-jpegxl.c:194 msgid "Co_mpression/maxError" msgstr "Co_mpresión/errorMax" -#: plug-ins/common/file-jpegxl.c:192 +#: plug-ins/common/file-jpegxl.c:195 msgid "" "Max. butteraugli distance, lower = higher quality. Range: 0 .. 15. 1.0 = " "visually lossless." @@ -3319,90 +3896,100 @@ msgstr "" "Distancia máxima de butteraugli, menor = mayor calidad. Rango: 0 .. 15. 1.0 " "= visualmente sin pérdidas." -#: plug-ins/common/file-jpegxl.c:203 +#: plug-ins/common/file-jpegxl.c:206 msgid "Effort/S_peed" msgstr "Esfuerzo/V_elocidad" -#: plug-ins/common/file-jpegxl.c:204 +#: plug-ins/common/file-jpegxl.c:207 msgid "Encoder effort setting" msgstr "Configuración del esfuerzo del codificador" -#: plug-ins/common/file-jpegxl.c:210 +#: plug-ins/common/file-jpegxl.c:213 msgid "Save ori_ginal profile" msgstr "Guardar el perfil ori_ginal" -#: plug-ins/common/file-jpegxl.c:211 +#: plug-ins/common/file-jpegxl.c:214 msgid "Store ICC profile to exported JXL file" msgstr "Almacenar el perfil ICC en el archivo JXL exportado" -#: plug-ins/common/file-jpegxl.c:2006 +#: plug-ins/common/file-jpegxl.c:219 plug-ins/file-tiff/file-tiff.c:241 +msgid "Export as CMY_K" +msgstr "Exportar como CMY_K" + +#: plug-ins/common/file-jpegxl.c:220 +#, fuzzy +#| msgid "Export a CMYK PSD image using the soft-proofing color profile" +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 msgid "lightning (fastest)" msgstr "relámpago (el más rápido)" -#: plug-ins/common/file-jpegxl.c:2007 +#: plug-ins/common/file-jpegxl.c:2009 msgid "thunder" msgstr "trueno" -#: plug-ins/common/file-jpegxl.c:2008 +#: plug-ins/common/file-jpegxl.c:2010 msgid "falcon (faster)" msgstr "halcón (más rápido)" -#: plug-ins/common/file-jpegxl.c:2009 +#: plug-ins/common/file-jpegxl.c:2011 msgid "cheetah" msgstr "guepardo" -#: plug-ins/common/file-jpegxl.c:2010 +#: plug-ins/common/file-jpegxl.c:2012 msgid "hare" msgstr "liebre" -#: plug-ins/common/file-jpegxl.c:2011 +#: plug-ins/common/file-jpegxl.c:2013 msgid "wombat" msgstr "wombat" -#: plug-ins/common/file-jpegxl.c:2012 +#: plug-ins/common/file-jpegxl.c:2014 msgid "squirrel" msgstr "ardilla" -#: plug-ins/common/file-jpegxl.c:2013 +#: plug-ins/common/file-jpegxl.c:2015 msgid "kitten" msgstr "gatito" -#: plug-ins/common/file-jpegxl.c:2014 +#: plug-ins/common/file-jpegxl.c:2016 msgid "tortoise (slower)" msgstr "tortuga (más lento)" -#: plug-ins/common/file-jpegxl.c:2021 +#: plug-ins/common/file-jpegxl.c:2023 msgid "16 bit/channel" msgstr "16 bit/canal" -#: plug-ins/common/file-jpegxl.c:2029 +#: plug-ins/common/file-jpegxl.c:2031 msgid "CMYK profile required for export" msgstr "Se necesita el perfil CMYK para la exportación" -#: plug-ins/common/file-jpegxl.c:2036 plug-ins/file-jpeg/jpeg-save.c:898 -#: plug-ins/file-psd/psd-save.c:2458 plug-ins/file-tiff/file-tiff-save.c:1369 +#: plug-ins/common/file-jpegxl.c:2039 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:2055 plug-ins/file-jpeg/jpeg-save.c:909 -#: plug-ins/file-psd/psd-save.c:2469 plug-ins/file-tiff/file-tiff-save.c:1381 +#: plug-ins/common/file-jpegxl.c:2058 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" msgstr "Perfil: %s" -#: plug-ins/common/file-mng.c:254 +#: plug-ins/common/file-mng.c:255 msgid "MNG animation" msgstr "Animación MNG" -#: plug-ins/common/file-mng.c:256 +#: plug-ins/common/file-mng.c:257 msgid "MNG" msgstr "MNG" -#: plug-ins/common/file-mng.c:259 +#: plug-ins/common/file-mng.c:260 msgid "Saves images in the MNG file format" msgstr "Guarda imágenes en el formato de archivo MNG" -#: plug-ins/common/file-mng.c:260 +#: plug-ins/common/file-mng.c:261 msgid "" "This plug-in saves images in the Multiple-image Network Graphics (MNG) " "format which can be used as a replacement for animated GIFs, and more." @@ -3410,58 +3997,58 @@ msgstr "" "Este complemento guarda imágenes en formato de gráficos de red de imágenes " "múltiples (MNG) que se puede usar como reemplazo de GIF animados y más." -#: plug-ins/common/file-mng.c:278 +#: plug-ins/common/file-mng.c:279 msgid "Use interlacing" msgstr "Usar entrelazado" -#: plug-ins/common/file-mng.c:283 +#: plug-ins/common/file-mng.c:284 msgid "_PNG compression level" msgstr "Nivel de compresión de _PNG" -#: plug-ins/common/file-mng.c:284 +#: plug-ins/common/file-mng.c:285 msgid "" "PNG compression level, choose a high compression level for small file size" msgstr "" "Nivel de compresión PNG. Seleccione un nivel de compresión alto para obtener " "un tamaño de archivo pequeño" -#: plug-ins/common/file-mng.c:290 +#: plug-ins/common/file-mng.c:291 msgid "JPEG compression _quality" msgstr "_Calidad de la compresión de JPEG" -#: plug-ins/common/file-mng.c:291 +#: plug-ins/common/file-mng.c:292 msgid "JPEG quality factor" msgstr "Factor de calidad de JPEG" -#: plug-ins/common/file-mng.c:296 +#: plug-ins/common/file-mng.c:297 msgid "_JPEG smoothing factor" msgstr "Factor de suavizado de _JPEG" -#: plug-ins/common/file-mng.c:297 +#: plug-ins/common/file-mng.c:298 msgid "JPEG smoothing factor" msgstr "Factor de suavizado de JPEG" -#: plug-ins/common/file-mng.c:302 +#: plug-ins/common/file-mng.c:303 msgid "L_oop" msgstr "B_ucle" -#: plug-ins/common/file-mng.c:303 +#: plug-ins/common/file-mng.c:304 msgid "(ANIMATED MNG) Loop infinitely" msgstr "(MNG ANIMADO) Bucle infinito" -#: plug-ins/common/file-mng.c:308 +#: plug-ins/common/file-mng.c:309 msgid "Default fra_me delay" msgstr "Retardo predeterminado de fotogra_ma" -#: plug-ins/common/file-mng.c:309 +#: plug-ins/common/file-mng.c:310 msgid "(ANIMATED MNG) Default delay between frames in milliseconds" msgstr "(MNG ANIMADO) Retraso predeterminado entre fotogramas en milisegundos" -#: plug-ins/common/file-mng.c:315 +#: plug-ins/common/file-mng.c:316 msgid "Default chunks t_ype" msgstr "T_ipo de fragmentos predeterminados" -#: plug-ins/common/file-mng.c:316 +#: plug-ins/common/file-mng.c:317 msgid "" "(ANIMATED MNG) Default chunks type (0 = PNG + Delta PNG; 1 = JNG + Delta " "PNG; 2 = All PNG; 3 = All JNG)" @@ -3469,98 +4056,98 @@ msgstr "" "(MNG ANIMADO) Tipo de fragmentos predeterminado (0 = PNG + Delta PNG; 1 = " "JNG + Delta PNG; 2 = Todo PNG; 3 = Todo JNG)" -#: plug-ins/common/file-mng.c:323 +#: plug-ins/common/file-mng.c:324 msgid "De_fault frame disposal" msgstr "Disposición predeterminada del _fotograma" -#: plug-ins/common/file-mng.c:324 +#: plug-ins/common/file-mng.c:325 msgid "(ANIMATED MNG) Default dispose type (0 = combine; 1 = replace)" msgstr "" "(MNG ANIMADO) Tipo de disposición predeterminado (0 = combinar; 1 = " "reemplazar)" -#: plug-ins/common/file-mng.c:330 plug-ins/common/file-png.c:245 +#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:248 msgid "Save _background color" msgstr "Guardar el color de _fondo" -#: plug-ins/common/file-mng.c:331 +#: plug-ins/common/file-mng.c:332 msgid "Write bKGd (background color) chunk" msgstr "Escribir fragmento de bKGd (color de fondo)" -#: plug-ins/common/file-mng.c:336 +#: plug-ins/common/file-mng.c:337 msgid "Save _gamma" msgstr "Guardar _gamma" -#: plug-ins/common/file-mng.c:337 +#: plug-ins/common/file-mng.c:338 msgid "Write gAMA (gamma) chunk" msgstr "Escribir fragmento gAMA (gamma)" -#: plug-ins/common/file-mng.c:342 +#: plug-ins/common/file-mng.c:343 msgid "Sa_ve resolution" msgstr "G_uardar la resolución" -#: plug-ins/common/file-mng.c:343 +#: plug-ins/common/file-mng.c:344 msgid "Write pHYs (image resolution) chunk" msgstr "Escribir fragmento de pHYs (resolución de imagen)" -#: plug-ins/common/file-mng.c:348 plug-ins/common/file-png.c:263 +#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:266 msgid "Save creation _time" msgstr "Guardar la _hora de creación" -#: plug-ins/common/file-mng.c:349 +#: plug-ins/common/file-mng.c:350 msgid "Write tIME (creation time) chunk" 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:729 plug-ins/common/file-png.c:2254 +#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2240 msgid "Couldn't losslessly save transparency, saving opacity instead." msgstr "" "No se pudo guardar la transparencia sin pérdidas, guardando la opacidad en " "su lugar." -#: plug-ins/common/file-mng.c:1596 +#: plug-ins/common/file-mng.c:1591 msgid "MNG Options" msgstr "Opciones de MNG" -#: plug-ins/common/file-mng.c:1604 plug-ins/common/file-png.c:226 +#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:229 msgid "PNG" msgstr "PNG" -#: plug-ins/common/file-mng.c:1605 +#: plug-ins/common/file-mng.c:1601 msgid "JNG" msgstr "JNG" -#: plug-ins/common/file-mng.c:1608 +#: plug-ins/common/file-mng.c:1604 msgid "PNG + delta PNG" msgstr "PNG + PNG Delta" -#: plug-ins/common/file-mng.c:1609 +#: plug-ins/common/file-mng.c:1605 msgid "JNG + delta PNG" msgstr "JNG + PNG Delta" -#: plug-ins/common/file-mng.c:1610 +#: plug-ins/common/file-mng.c:1606 msgid "All PNG" msgstr "Todo PNG" -#: plug-ins/common/file-mng.c:1611 +#: plug-ins/common/file-mng.c:1607 msgid "All JNG" msgstr "Todo JNG" -#: plug-ins/common/file-mng.c:1619 +#: plug-ins/common/file-mng.c:1615 msgid "Combine" msgstr "Combinar" -#: plug-ins/common/file-mng.c:1620 +#: plug-ins/common/file-mng.c:1616 msgid "Replace" msgstr "Reemplazar" -#: plug-ins/common/file-mng.c:1655 +#: plug-ins/common/file-mng.c:1651 msgid "Animated MNG Options" msgstr "Opciones del MNG animado" -#: plug-ins/common/file-mng.c:1665 +#: plug-ins/common/file-mng.c:1661 msgid "" "These options are only available when the exported image has more than one " "layer. The image you are exporting only has one layer." @@ -3568,15 +4155,15 @@ msgstr "" "Estas opciones sólo están disponibles cuando la imagen exportada tiene más " "de una capa. La imagen que está tratando de exportar tiene una sola capa." -#: plug-ins/common/file-pat.c:112 +#: plug-ins/common/file-pat.c:113 msgid "PIKA pattern" msgstr "Patrón PIKA" -#: plug-ins/common/file-pat.c:116 +#: plug-ins/common/file-pat.c:117 msgid "Exports PIKA pattern file (.PAT)" msgstr "Exporta archivo de patrón PIKA (.PAT)" -#: plug-ins/common/file-pat.c:117 +#: plug-ins/common/file-pat.c:118 msgid "" "New PIKA patterns can be created by exporting them in the appropriate place " "with this plug-in." @@ -3584,183 +4171,213 @@ msgstr "" "Se pueden crear nuevos patrones en PIKA exportándolos en el lugar apropiado " "con este complemento." -#: plug-ins/common/file-pat.c:127 plug-ins/common/qbist.c:980 +#: plug-ins/common/file-pat.c:128 plug-ins/common/qbist.c:968 msgid "Pattern" msgstr "Patrón" -#: plug-ins/common/file-pat.c:137 +#: plug-ins/common/file-pat.c:138 msgid "Short description of the pattern" msgstr "Breve descripción del patrón" -#: plug-ins/common/file-pat.c:138 +#: plug-ins/common/file-pat.c:139 msgid "PIKA Pattern" msgstr "Patrón de PIKA" -#: plug-ins/common/file-pcx.c:207 plug-ins/common/file-pcx.c:271 +#: plug-ins/common/file-pcx.c:212 plug-ins/common/file-pcx.c:276 msgid "ZSoft PCX image" msgstr "Imagen ZSoft PCX" -#: plug-ins/common/file-pcx.c:210 +#: plug-ins/common/file-pcx.c:215 msgid "Loads files in Zsoft PCX file format" msgstr "Carga archivos en el formato de archivo Zsoft PCX" -#: plug-ins/common/file-pcx.c:219 plug-ins/common/file-pcx.c:250 +#: plug-ins/common/file-pcx.c:224 plug-ins/common/file-pcx.c:255 msgid "Palette Options" msgstr "Opciones de paleta" -#: plug-ins/common/file-pcx.c:220 plug-ins/common/file-pcx.c:251 +#: plug-ins/common/file-pcx.c:225 plug-ins/common/file-pcx.c:256 msgid "Use built-in palette (0) or override with black/white (1)" msgstr "Usar la paleta integrada (0) o anular con blanco y negro (1)" -#: plug-ins/common/file-pcx.c:238 +#: plug-ins/common/file-pcx.c:243 msgid "ZSoft DCX image" msgstr "Imagen ZSoft DCX" -#: plug-ins/common/file-pcx.c:241 +#: plug-ins/common/file-pcx.c:246 msgid "Loads files in Zsoft DCX file format" msgstr "Carga archivos en el formato de archivo Zsoft DCX" -#: plug-ins/common/file-pcx.c:413 +#: plug-ins/common/file-pcx.c:399 msgid "PCX format does not support multiple layers." msgstr "El formato PCX no soporta múltiples capas." -#: plug-ins/common/file-pcx.c:535 +#: plug-ins/common/file-pcx.c:521 msgid "Could not load PCX image" msgstr "No se pudo cargar la imagen PCX" -#: plug-ins/common/file-pcx.c:582 +#: plug-ins/common/file-pcx.c:568 msgid "DCX image offset exceeds the file size" msgstr "El desplazamiento de la imagen DCX excede el tamaño del archivo" -#: plug-ins/common/file-pcx.c:593 +#: plug-ins/common/file-pcx.c:579 msgid "Could not load DCX image" msgstr "No se pudo cargar la imagen DCX" -#: plug-ins/common/file-pcx.c:616 +#: plug-ins/common/file-pcx.c:602 #, c-format msgid "%s: DCX image offset exceeds the file size: %s\n" msgstr "" "%s: El desplazamiento de la imagen DCX excede el tamaño del archivo: %s\n" -#: plug-ins/common/file-pcx.c:633 +#: plug-ins/common/file-pcx.c:619 msgid "Mixed-mode DCX image not loaded" msgstr "Imagen DCX de modo mixto no cargada" -#: plug-ins/common/file-pcx.c:640 +#: plug-ins/common/file-pcx.c:626 #, c-format msgid "%s: Could not load all DCX images: %s\n" msgstr "%s: No se pudieron cargar todas las imágenes DCX: %s\n" -#: plug-ins/common/file-pcx.c:680 +#: plug-ins/common/file-pcx.c:666 #, c-format msgid "Could not read header from '%s'" msgstr "No se pudo leer la cabecera de «%s»" -#: plug-ins/common/file-pcx.c:691 +#: plug-ins/common/file-pcx.c:677 #, c-format msgid "'%s' is not a PCX file" msgstr "«%s» no es un archivo PCX" -#: plug-ins/common/file-pcx.c:707 plug-ins/common/file-wbmp.c:259 +#: 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 #, 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:713 plug-ins/common/file-wbmp.c:265 +#: 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 #, c-format msgid "Unsupported or invalid image height: %d" msgstr "Altura de imagen no soportada o no válida: %d" -#: plug-ins/common/file-pcx.c:719 +#: plug-ins/common/file-pcx.c:705 msgid "Invalid number of bytes per line in PCX header" msgstr "Número de bytes por línea inválido en la cabecera PCX" -#: plug-ins/common/file-pcx.c:726 +#: plug-ins/common/file-pcx.c:712 msgid "Resolution out of bounds in XCX header, using 72x72" msgstr "Resolución fuera de los límites de la cabecera XCX, usando 72x72" -#: plug-ins/common/file-pcx.c:734 +#: plug-ins/common/file-pcx.c:720 #, c-format msgid "Image dimensions too large: width %d x height %d" msgstr "" "Las dimensiones de la imagen son demasiado grandes: anchura %d x altura %d" -#: plug-ins/common/file-pcx.c:861 +#: plug-ins/common/file-pcx.c:847 msgid "Unusual PCX flavour, giving up" msgstr "Versión de PCX inusual, terminando" -#: plug-ins/common/file-pcx.c:887 +#: plug-ins/common/file-pcx.c:873 msgid "Import from PCX" msgstr "Importar desde PCX" -#: plug-ins/common/file-pcx.c:896 +#: plug-ins/common/file-pcx.c:882 msgid "Use PCX image's built-in palette" msgstr "Use la paleta integrada de la imagen PCX" -#: plug-ins/common/file-pcx.c:897 +#: plug-ins/common/file-pcx.c:883 msgid "Use black and white palette" msgstr "Usar paleta de blanco y negro" -#: plug-ins/common/file-pcx.c:1181 plug-ins/common/file-pnm.c:1631 +#: plug-ins/common/file-pcx.c:1167 plug-ins/common/file-pnm.c:1630 msgid "Cannot export images with alpha channel." msgstr "No se pueden exportar imágenes con canales alfa." -#: plug-ins/common/file-pcx.c:1201 +#: plug-ins/common/file-pcx.c:1187 #, c-format msgid "Invalid X offset: %d" msgstr "Desplazamiento X no válido: %d" -#: plug-ins/common/file-pcx.c:1207 +#: plug-ins/common/file-pcx.c:1193 #, c-format msgid "Invalid Y offset: %d" msgstr "Desplazamiento Y no válido: %d" -#: plug-ins/common/file-pcx.c:1213 +#: plug-ins/common/file-pcx.c:1199 #, c-format msgid "Right border out of bounds (must be < %d): %d" msgstr "Borde derecho fuera de los límites (debe ser < %d): %d" -#: plug-ins/common/file-pcx.c:1220 +#: plug-ins/common/file-pcx.c:1206 #, c-format msgid "Bottom border out of bounds (must be < %d): %d" msgstr "Borde inferior fuera de los límites (debe ser < %d): %d" -#: plug-ins/common/file-pcx.c:1296 plug-ins/common/file-qoi.c:394 +#: plug-ins/common/file-pcx.c:1282 plug-ins/common/file-qoi.c:393 #, c-format msgid "Writing to file '%s' failed: %s" msgstr "Ocurrió un error al escribir en el archivo «%s»: %s" -#: plug-ins/common/file-pdf-load.c:317 plug-ins/common/file-pdf-save.c:314 +#: plug-ins/common/file-pdf-load.c:319 plug-ins/common/file-pdf-save.c:315 msgid "Portable Document Format" msgstr "Portable Document Format" -#: plug-ins/common/file-pdf-load.c:367 +#: plug-ins/common/file-pdf-load.c:345 +msgid "PDF password" +msgstr "Contraseña del PDF" + +#: plug-ins/common/file-pdf-load.c:346 +msgid "The password to decrypt the encrypted PDF file" +msgstr "La contraseña para descifrar el archivo PDF cifrado" + +#: plug-ins/common/file-pdf-load.c:351 +msgid "Load in re_verse order" +msgstr "Cargar en orden in_verso" + +#: plug-ins/common/file-pdf-load.c:352 +msgid "Load PDF pages in reverse order" +msgstr "Cargar páginas PDF en orden inverso" + +#: plug-ins/common/file-pdf-load.c:369 msgid "Open pages as" msgstr "Abrir páginas como" -#: plug-ins/common/file-pdf-load.c:368 +#: plug-ins/common/file-pdf-load.c:370 plug-ins/common/file-pdf-load.c:377 msgid "Number of pages to load (0 for all)" msgstr "Número de páginas que cargar (0 para todas)" -#: plug-ins/common/file-pdf-load.c:392 +#: plug-ins/common/file-pdf-load.c:376 +msgid "N pages" +msgstr "N páginas" + +#: plug-ins/common/file-pdf-load.c:389 +msgid "Pages" +msgstr "Páginas" + +#: plug-ins/common/file-pdf-load.c:390 +#, fuzzy +#| msgid "The number of pixels in the table border." +msgid "The pages to load in the expected order" +msgstr "El número de píxeles en el borde de la tabla." + +#: plug-ins/common/file-pdf-load.c:394 msgid "Use _Anti-aliasing" msgstr "Usar _Antialias" -#: plug-ins/common/file-pdf-load.c:393 +#: plug-ins/common/file-pdf-load.c:395 msgid "Render texts with anti-aliasing" msgstr "Renderizar textos con suavizado" -#: plug-ins/common/file-pdf-load.c:398 +#: plug-ins/common/file-pdf-load.c:400 msgid "_Fill transparent areas with white" msgstr "_Rellenar de blanco las zonas transparentes" -#: plug-ins/common/file-pdf-load.c:399 +#: plug-ins/common/file-pdf-load.c:401 msgid "Render all pages as opaque by filling the background in white" msgstr "Renderizar todas las páginas como opacas rellenando el fondo de blanco" -#: plug-ins/common/file-pdf-load.c:407 plug-ins/common/file-pdf-load.c:408 +#: plug-ins/common/file-pdf-load.c:409 plug-ins/common/file-pdf-load.c:410 msgid "Resolution" msgstr "Resolución" @@ -3769,7 +4386,7 @@ msgstr "Resolución" #. * third is number of pages. #. * Specify order as in English if needed. #. -#: plug-ins/common/file-pdf-load.c:531 +#: plug-ins/common/file-pdf-load.c:517 #, c-format msgid "PDF document '%1$s' has %3$d page. Page %2$d is out of range." msgid_plural "PDF document '%1$s' has %3$d pages. Page %2$d is out of range." @@ -3779,72 +4396,71 @@ msgstr[1] "" "El archivo PDF «%1$s» tiene %3$d páginas. La página %2$d está fuera del " "rango." -#: plug-ins/common/file-pdf-load.c:696 +#: plug-ins/common/file-pdf-load.c:673 msgid "PDF is password protected, please input the password:" msgstr "El PDF está protegido con contraseña, introdúzcala:" -#: plug-ins/common/file-pdf-load.c:706 +#: plug-ins/common/file-pdf-load.c:683 msgid "Encrypted PDF" msgstr "PDF cifrado" -#: plug-ins/common/file-pdf-load.c:733 +#: plug-ins/common/file-pdf-load.c:710 msgid "Wrong password! Please input the right one:" msgstr "Contraseña incorrecta. Introduzca una válida:" -#: plug-ins/common/file-pdf-load.c:751 +#: plug-ins/common/file-pdf-load.c:728 #, c-format msgid "Could not load '%s': %s" msgstr "No se pudo cargar «%s»: %s" -#: plug-ins/common/file-pdf-load.c:1166 +#: plug-ins/common/file-pdf-load.c:1143 msgid "Import from PDF" msgstr "Importar desde PDF" -#: plug-ins/common/file-pdf-load.c:1195 +#: plug-ins/common/file-pdf-load.c:1172 msgid "Error getting number of pages from the given PDF file." msgstr "Error al obtener el número de páginas del archivo PDF dado." #. Resolution -#: plug-ins/common/file-pdf-load.c:1244 +#: plug-ins/common/file-pdf-load.c:1221 msgid "_Width (pixels):" msgstr "_Anchura (píxeles):" -#: plug-ins/common/file-pdf-load.c:1245 +#: plug-ins/common/file-pdf-load.c:1222 msgid "_Height (pixels):" msgstr "_Altura (píxeles):" -#: plug-ins/common/file-pdf-load.c:1247 +#: plug-ins/common/file-pdf-load.c:1224 msgid "_Resolution:" msgstr "_Resolución:" -#: plug-ins/common/file-pdf-load.c:1538 plug-ins/common/file-pdf-load.c:1539 -#: plug-ins/common/file-svg.c:935 plug-ins/common/file-wmf.c:722 +#: plug-ins/common/file-pdf-load.c:1515 plug-ins/common/file-pdf-load.c:1516 #: plug-ins/print/print-page-layout.c:307 #, c-format msgid "pixels/%a" msgstr "píxeles/%a" -#: plug-ins/common/file-pdf-save.c:330 +#: plug-ins/common/file-pdf-save.c:331 msgid "PDF" msgstr "PDF" -#: plug-ins/common/file-pdf-save.c:380 plug-ins/common/file-pdf-save.c:452 -#: plug-ins/common/file-pdf-save.c:1165 +#: plug-ins/common/file-pdf-save.c:381 plug-ins/common/file-pdf-save.c:453 +#: plug-ins/common/file-pdf-save.c:1153 msgid "_Fill transparent areas with background color" msgstr "_Rellenar las zonas transparentes con el color de fondo" -#: plug-ins/common/file-pdf-save.c:381 plug-ins/common/file-pdf-save.c:453 +#: plug-ins/common/file-pdf-save.c:382 plug-ins/common/file-pdf-save.c:454 msgid "" "Fill transparent areas with background color if layer has an alpha channel" msgstr "" "Rellenar las áreas transparentes con el color de fondo si la capa tiene un " "canal alfa" -#: plug-ins/common/file-pdf-save.c:394 +#: plug-ins/common/file-pdf-save.c:395 msgid "_Create multipage PDF..." msgstr "_Crear PDF de varias páginas…" -#: plug-ins/common/file-pdf-save.c:731 +#: plug-ins/common/file-pdf-save.c:719 #, c-format msgid "" "An error occurred while creating the PDF file:\n" @@ -3857,7 +4473,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:1006 +#: plug-ins/common/file-pdf-save.c:994 #, c-format msgid "" "The following fonts cannot be found: %s.\n" @@ -3869,57 +4485,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:1104 +#: plug-ins/common/file-pdf-save.c:1092 msgid "Save to:" msgstr "Guardar en:" -#: plug-ins/common/file-pdf-save.c:1108 +#: plug-ins/common/file-pdf-save.c:1096 msgid "Browse..." msgstr "Explorar…" -#: plug-ins/common/file-pdf-save.c:1109 +#: plug-ins/common/file-pdf-save.c:1097 msgid "Multipage PDF export" msgstr "Exportación de PDF de varias páginas" -#: plug-ins/common/file-pdf-save.c:1145 +#: plug-ins/common/file-pdf-save.c:1133 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:1155 +#: plug-ins/common/file-pdf-save.c:1143 msgid "Add this image" msgstr "Añadir esta imagen" -#: plug-ins/common/file-pdf-save.c:1160 +#: plug-ins/common/file-pdf-save.c:1148 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:1170 +#: plug-ins/common/file-pdf-save.c:1158 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:1175 +#: plug-ins/common/file-pdf-save.c:1163 msgid "_Apply layer masks before saving" msgstr "_Aplicar máscaras de capa antes de guardar" -#: plug-ins/common/file-pdf-save.c:1179 +#: plug-ins/common/file-pdf-save.c:1167 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:1268 plug-ins/common/file-pdf-save.c:1341 -#: plug-ins/common/file-pdf-save.c:1439 plug-ins/common/file-ps.c:2115 +#: 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 #, c-format msgid "Page %d" msgstr "Página %d" -#: plug-ins/common/file-pdf-save.c:1308 +#: plug-ins/common/file-pdf-save.c:1296 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:1486 plug-ins/print/print-draw-page.c:125 +#: plug-ins/common/file-pdf-save.c:1474 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." @@ -3927,71 +4543,85 @@ msgstr "" # 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-pix.c:169 plug-ins/common/file-pix.c:196 +#: plug-ins/common/file-pix.c:174 plug-ins/common/file-pix.c:205 msgid "Alias Pix image" msgstr "Imagen Pix de Alias" -#: plug-ins/common/file-pix.c:285 +#: plug-ins/common/file-pix.c:297 msgid "PIX format does not support multiple layers." msgstr "El formato PIX no soporta múltiples capas." -#: plug-ins/common/file-png.c:180 plug-ins/common/file-png.c:210 +#: plug-ins/common/file-pix.c:589 +#, fuzzy, c-format +#| msgid "Error trying to open temporary file '%s' for parasite loading: %s" +msgid "" +"Error trying to open temporary JPEG file '%s' for Esm Software pix loading: " +"%s" +msgstr "" +"Erro al intentar abrir el archivo temporal «%s» para la carga de parásitos: " +"«%s»" + +#: plug-ins/common/file-pix.c:607 +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 msgid "PNG image" msgstr "Imagen PNG" -#: plug-ins/common/file-png.c:233 +#: plug-ins/common/file-png.c:236 msgid "_Interlacing (Adam7)" msgstr "Entrela_zado (Adam7)" -#: plug-ins/common/file-png.c:234 +#: plug-ins/common/file-png.c:237 msgid "Use Adam7 interlacing" msgstr "Usar entrelazado Adam7" -#: plug-ins/common/file-png.c:239 +#: plug-ins/common/file-png.c:242 msgid "Co_mpression level" msgstr "Nivel de co_mpresión" -#: plug-ins/common/file-png.c:240 +#: plug-ins/common/file-png.c:243 msgid "Deflate Compression factor (0..9)" msgstr "Factor de compresión de desinflar (0,9)" -#: plug-ins/common/file-png.c:246 +#: plug-ins/common/file-png.c:249 msgid "Write bKGD chunk (PNG metadata)" msgstr "Escribir fragmento de bKGD (metadatos PNG)" -#: plug-ins/common/file-png.c:251 +#: plug-ins/common/file-png.c:254 msgid "Save layer o_ffset" msgstr "Guardar el desplazamiento de _capa" -#: plug-ins/common/file-png.c:252 +#: plug-ins/common/file-png.c:255 msgid "Write oFFs chunk (PNG metadata)" msgstr "Escribir fragmento de oFFs (metadatos PNG)" -#: plug-ins/common/file-png.c:257 +#: plug-ins/common/file-png.c:260 msgid "Save resol_ution" msgstr "Guardar la resol_ución" -#: plug-ins/common/file-png.c:258 +#: plug-ins/common/file-png.c:261 msgid "Write pHYs chunk (PNG metadata)" msgstr "Escribir fragmento de pHYs (metadatos PNG)" -#: plug-ins/common/file-png.c:264 +#: plug-ins/common/file-png.c:267 msgid "Write tIME chunk (PNG metadata)" msgstr "Escribir fragmento de tIME (metadatos PNG)" -#: plug-ins/common/file-png.c:269 +#: plug-ins/common/file-png.c:272 plug-ins/file-tiff/file-tiff.c:234 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:270 +#: plug-ins/common/file-png.c:273 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:275 +#: plug-ins/common/file-png.c:278 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:276 +#: plug-ins/common/file-png.c:279 msgid "" "When checked, save as 1, 2, 4, or 8-bit depending on number of colors used. " "When unchecked, always save as 8-bit" @@ -3999,45 +4629,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:284 +#: plug-ins/common/file-png.c:287 msgid "PNG export format" msgstr "Formato de exportación PNG" -#: plug-ins/common/file-png.c:423 +#: plug-ins/common/file-png.c:288 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 +msgid "8 bpc RGB" +msgstr "8 bpc RGB" + +#: plug-ins/common/file-png.c:290 +msgid "8 bpc GRAY" +msgstr "8 bpc GRAY" + +#: plug-ins/common/file-png.c:291 +msgid "8 bpc RGBA" +msgstr "8 bpc RGBA" + +#: plug-ins/common/file-png.c:292 +msgid "8 bpc GRAYA" +msgstr "8 bpc GRAYA" + +#: plug-ins/common/file-png.c:293 +msgid "16 bpc RGB" +msgstr "16 bpc RGB" + +#: plug-ins/common/file-png.c:294 +msgid "16 bpc GRAY" +msgstr "16 bpc GRAY" + +#: plug-ins/common/file-png.c:295 +msgid "16 bpc RGBA" +msgstr "16 bpc RGBA" + +#: plug-ins/common/file-png.c:296 +msgid "16 bpc GRAYA" +msgstr "16 bpc GRAYA" + +#: plug-ins/common/file-png.c:411 msgid "PNG format does not support multiple layers." msgstr "El formato PNG no soporta múltiples capas." -#: plug-ins/common/file-png.c:499 +#: plug-ins/common/file-png.c:484 #, c-format msgid "Error loading PNG file: %s\n" msgstr "Error al cargar el archivo PNG: %s\n" -#: plug-ins/common/file-png.c:630 +#: plug-ins/common/file-png.c:615 #, 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:639 +#: plug-ins/common/file-png.c:624 #, 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:647 +#: plug-ins/common/file-png.c:632 #, 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:902 +#: plug-ins/common/file-png.c:887 #, 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:915 plug-ins/file-exr/file-exr.c:254 +#: plug-ins/common/file-png.c:900 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:983 +#: plug-ins/common/file-png.c:968 msgid "" "The PNG file specifies an offset that caused the layer to be positioned " "outside the image." @@ -4045,19 +4713,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:1217 +#: plug-ins/common/file-png.c:1202 msgid "Apply PNG Offset" msgstr "Aplicar desplazamiento de PNG" -#: plug-ins/common/file-png.c:1221 +#: plug-ins/common/file-png.c:1206 msgid "Ignore PNG offset" msgstr "Ignorar el desplazamiento de PNG" -#: plug-ins/common/file-png.c:1222 +#: plug-ins/common/file-png.c:1207 msgid "Apply PNG offset to layer" msgstr "Aplicar desplazamiento de PNG a la capa" -#: plug-ins/common/file-png.c:1247 +#: plug-ins/common/file-png.c:1232 #, c-format msgid "" "The PNG image you are importing specifies an offset of %d, %d. Do you want " @@ -4066,402 +4734,448 @@ 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:1459 +#: plug-ins/common/file-png.c:1445 #, 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:1468 +#: plug-ins/common/file-png.c:1454 #, 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:1476 +#: plug-ins/common/file-png.c:1462 #, c-format msgid "Error while exporting '%s'. Could not export image." msgstr "Error al exportar «%s». No se pudo exportar la imagen." -#: plug-ins/common/file-png.c:2296 plug-ins/common/file-ps.c:3739 -#: plug-ins/file-fits/fits.c:1002 -msgid "Automatic" -msgstr "Automático" - -# bits por canal -#: plug-ins/common/file-png.c:2297 -msgid "8 bpc RGB" -msgstr "8 bpc RGB" - -#: plug-ins/common/file-png.c:2298 -msgid "8 bpc GRAY" -msgstr "8 bpc GRAY" - -#: plug-ins/common/file-png.c:2299 -msgid "8 bpc RGBA" -msgstr "8 bpc RGBA" - -#: plug-ins/common/file-png.c:2300 -msgid "8 bpc GRAYA" -msgstr "8 bpc GRAYA" - -#: plug-ins/common/file-png.c:2301 -msgid "16 bpc RGB" -msgstr "16 bpc RGB" - -#: plug-ins/common/file-png.c:2302 -msgid "16 bpc GRAY" -msgstr "16 bpc GRAY" - -#: plug-ins/common/file-png.c:2303 -msgid "16 bpc RGBA" -msgstr "16 bpc RGBA" - -#: plug-ins/common/file-png.c:2304 -msgid "16 bpc GRAYA" -msgstr "16 bpc GRAYA" - -#: plug-ins/common/file-pnm.c:315 +#: plug-ins/common/file-pnm.c:318 msgid "PNM Image" msgstr "Imagen PNM" -#: plug-ins/common/file-pnm.c:318 +#: plug-ins/common/file-pnm.c:321 msgid "Loads files in the PNM file format" msgstr "Carga archivos en el formato de archivo PNM" -#: plug-ins/common/file-pnm.c:319 +#: plug-ins/common/file-pnm.c:322 msgid "This plug-in loads files in the various Netpbm portable file formats." msgstr "" "Este complemento carga archivos en varios formatos de archivos portátiles de " "Netpbm." -#: plug-ins/common/file-pnm.c:348 +#: plug-ins/common/file-pnm.c:351 msgid "PNM image" msgstr "Imagen PNM" -#: plug-ins/common/file-pnm.c:350 +#: plug-ins/common/file-pnm.c:353 msgid "PNM" msgstr "PNM" -#: plug-ins/common/file-pnm.c:353 +#: plug-ins/common/file-pnm.c:356 msgid "Exports files in the PNM file format" msgstr "Exporta archivos en el formato de archivo PNM" -#: plug-ins/common/file-pnm.c:354 +#: plug-ins/common/file-pnm.c:357 msgid "PNM export handles all image types without transparency." msgstr "" "La exportación PNM maneja todos los tipos de imágenes sin transparencia." -#: plug-ins/common/file-pnm.c:370 plug-ins/common/file-pnm.c:406 -#: plug-ins/common/file-pnm.c:442 +#: plug-ins/common/file-pnm.c:373 plug-ins/common/file-pnm.c:409 +#: plug-ins/common/file-pnm.c:445 msgid "Data formatting" msgstr "Formateado de datos" -#: plug-ins/common/file-pnm.c:371 plug-ins/common/file-pnm.c:407 -#: plug-ins/common/file-pnm.c:443 plug-ins/common/file-pnm.c:479 +#: plug-ins/common/file-pnm.c:374 plug-ins/common/file-pnm.c:410 +#: plug-ins/common/file-pnm.c:446 plug-ins/common/file-pnm.c:482 msgid "TRUE for raw output, FALSE for ascii output" msgstr "VERDADERO para salida sin procesar, FALSO para salida ascii" -#: plug-ins/common/file-pnm.c:385 +#: plug-ins/common/file-pnm.c:388 msgid "PBM" msgstr "PBM" -#: plug-ins/common/file-pnm.c:386 +#: plug-ins/common/file-pnm.c:389 msgid "PBM image" msgstr "Imagen PBM" -#: plug-ins/common/file-pnm.c:389 +#: plug-ins/common/file-pnm.c:392 msgid "Exports files in the PBM file format" msgstr "Exporta archivos en el formato de archivo PBM" -#: plug-ins/common/file-pnm.c:390 +#: plug-ins/common/file-pnm.c:393 msgid "PBM exporting produces mono images without transparency." msgstr "La exportación de PBM produce imágenes mono sin transparencia." -#: plug-ins/common/file-pnm.c:421 +#: plug-ins/common/file-pnm.c:424 msgid "PGM image" msgstr "Imagen PGM" -#: plug-ins/common/file-pnm.c:423 +#: plug-ins/common/file-pnm.c:426 msgid "PGM" msgstr "PGM" -#: plug-ins/common/file-pnm.c:425 +#: plug-ins/common/file-pnm.c:428 msgid "Exports files in the PGM file format" msgstr "Exporta archivos en el formato de archivo PGM" -#: plug-ins/common/file-pnm.c:426 +#: plug-ins/common/file-pnm.c:429 msgid "PGM exporting produces grayscale images without transparency." msgstr "" "La exportación PGM produce imágenes en escala de grises sin transparencia." -#: plug-ins/common/file-pnm.c:457 +#: plug-ins/common/file-pnm.c:460 msgid "PPM image" msgstr "Imagen PPM" -#: plug-ins/common/file-pnm.c:459 +#: plug-ins/common/file-pnm.c:462 msgid "PPM" msgstr "PPM" -#: plug-ins/common/file-pnm.c:461 +#: plug-ins/common/file-pnm.c:464 msgid "Exports files in the PPM file format" msgstr "Exporta archivos en el formato de archivo PPM" -#: plug-ins/common/file-pnm.c:462 +#: plug-ins/common/file-pnm.c:465 msgid "PPM export handles RGB images without transparency." msgstr "La exportación PPM maneja imágenes RGB sin transparencia." -#: plug-ins/common/file-pnm.c:493 +#: plug-ins/common/file-pnm.c:496 msgid "PAM image" msgstr "Imagen PAM" -#: plug-ins/common/file-pnm.c:496 +#: plug-ins/common/file-pnm.c:499 msgid "Exports files in the PAM file format" msgstr "Exporta archivos en el formato de archivo PAM" -#: plug-ins/common/file-pnm.c:497 +#: plug-ins/common/file-pnm.c:500 msgid "PAM export handles RGB images with or without transparency." msgstr "La exportación PAM maneja imágenes RGB con o sin transparencia." -#: plug-ins/common/file-pnm.c:522 +#: plug-ins/common/file-pnm.c:525 msgid "PFM image" msgstr "Imagen PFM" -#: plug-ins/common/file-pnm.c:525 +#: plug-ins/common/file-pnm.c:528 msgid "Exports files in the PFM file format" msgstr "Exporta archivos en el formato de archivo PFM" -#: plug-ins/common/file-pnm.c:526 +#: plug-ins/common/file-pnm.c:529 msgid "PFM export handles all images without transparency." msgstr "La exportación PFM maneja todas las imágenes sin transparencia." -#: plug-ins/common/file-pnm.c:661 +#: plug-ins/common/file-pnm.c:663 #, c-format msgid "%s format does not support multiple layers." msgstr "El formato %s no soporta múltiples capas." -#: plug-ins/common/file-pnm.c:747 plug-ins/common/file-pnm.c:779 -#: plug-ins/common/file-pnm.c:788 plug-ins/common/file-pnm.c:803 -#: plug-ins/common/file-pnm.c:818 plug-ins/common/file-pnm.c:1016 -#: plug-ins/common/file-pnm.c:1111 plug-ins/common/file-pnm.c:1196 -#: plug-ins/common/file-pnm.c:1257 +#: plug-ins/common/file-pnm.c:746 plug-ins/common/file-pnm.c:778 +#: plug-ins/common/file-pnm.c:787 plug-ins/common/file-pnm.c:802 +#: plug-ins/common/file-pnm.c:817 plug-ins/common/file-pnm.c:1015 +#: plug-ins/common/file-pnm.c:1110 plug-ins/common/file-pnm.c:1195 +#: plug-ins/common/file-pnm.c:1256 msgid "Premature end of file." msgstr "Final prematuro del archivo." -#: plug-ins/common/file-pnm.c:749 +#: plug-ins/common/file-pnm.c:748 msgid "Invalid file." msgstr "Archivo no válido." -#: plug-ins/common/file-pnm.c:767 +#: plug-ins/common/file-pnm.c:766 msgid "File not in a supported format." msgstr "El archivo no está en un formato soportado." -#: plug-ins/common/file-pnm.c:782 +#: plug-ins/common/file-pnm.c:781 msgid "Invalid X resolution." msgstr "Resolución X no válida." -#: plug-ins/common/file-pnm.c:784 plug-ins/common/file-pnm.c:950 +#: plug-ins/common/file-pnm.c:783 plug-ins/common/file-pnm.c:949 msgid "Image width is larger than PIKA can handle." msgstr "La anchura de la imagen es mayor de lo que PIKA puede manejar." -#: plug-ins/common/file-pnm.c:791 +#: plug-ins/common/file-pnm.c:790 msgid "Invalid Y resolution." msgstr "Resolución Y no válida." -#: plug-ins/common/file-pnm.c:793 +#: plug-ins/common/file-pnm.c:792 msgid "Image height is larger than PIKA can handle." msgstr "La altura de la imagen es mayor de lo que PIKA puede manejar." -#: plug-ins/common/file-pnm.c:807 +#: plug-ins/common/file-pnm.c:806 msgid "Bogus scale factor." msgstr "Factor de escalado no soportado." -#: plug-ins/common/file-pnm.c:809 +#: plug-ins/common/file-pnm.c:808 msgid "Unsupported scale factor." msgstr "Factor de escalado no soportado." -#: plug-ins/common/file-pnm.c:823 +#: plug-ins/common/file-pnm.c:822 msgid "Unsupported maximum value." 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:944 +#: plug-ins/common/file-pnm.c:943 msgid "PAM: Unsupported inofficial PNM variant." msgstr "PAM: variante de PNM no oficial y no soportada." -#: plug-ins/common/file-pnm.c:948 +#: plug-ins/common/file-pnm.c:947 msgid "PAM: Premature end of file." msgstr "PAM: Final prematuro del archivo." -#: plug-ins/common/file-pnm.c:952 +#: plug-ins/common/file-pnm.c:951 msgid "PAM: Invalid X resolution." msgstr "PAM: Resolución X no válida." -#: plug-ins/common/file-pnm.c:954 +#: plug-ins/common/file-pnm.c:953 msgid "PAM: Invalid Y resolution." msgstr "PAM: Resolución Y no válida." -#: plug-ins/common/file-pnm.c:956 +#: plug-ins/common/file-pnm.c:955 msgid "PAM: Invalid maximum value." msgstr "PAM: Valor máximo no válido." -#: plug-ins/common/file-pnm.c:958 +#: plug-ins/common/file-pnm.c:957 msgid "PAM: Invalid depth." msgstr "PAM: Profundidad no válida." # The TupleType property specifies the encoding method used for the image data, such as whether the image data is stored in grayscale or in full color. -#: plug-ins/common/file-pnm.c:960 +#: plug-ins/common/file-pnm.c:959 msgid "PAM: Unsupported tupltype." msgstr "PAM: tupletype no soportado." #. file save type -#: plug-ins/common/file-pnm.c:2028 +#: plug-ins/common/file-pnm.c:2027 msgid "_ASCII" msgstr "_ASCII" -#: plug-ins/common/file-pnm.c:2029 +#: plug-ins/common/file-pnm.c:2028 msgid "_Raw" msgstr "_Bruto" -#: plug-ins/common/file-ps.c:336 plug-ins/common/file-ps.c:449 +#: plug-ins/common/file-ps.c:339 plug-ins/common/file-ps.c:452 msgid "PostScript document" msgstr "Documento PostScript" -#: plug-ins/common/file-ps.c:353 +#: plug-ins/common/file-ps.c:356 msgid "Encapsulated PostScript image" msgstr "Imagen de PostScript encapsulado" -#: plug-ins/common/file-ps.c:377 +#: plug-ins/common/file-ps.c:380 msgid "Resol_ution" msgstr "Resol_ución" +#: plug-ins/common/file-ps.c:381 +msgid "Resolution to interpret image (dpi)" +msgstr "Resolución a la que interpretar la imagen (ppp)" + +#: plug-ins/common/file-ps.c:387 +msgid "Desired width" +msgstr "Anchura deseada" + +#: plug-ins/common/file-ps.c:393 +msgid "Desired height" +msgstr "Altura deseada" + # //R ¿Está bien traducido? -#: plug-ins/common/file-ps.c:395 +#: plug-ins/common/file-ps.c:398 msgid "Try _Bounding Box" msgstr "Intentar con cajas de _contorno" -#: plug-ins/common/file-ps.c:401 +#: plug-ins/common/file-ps.c:399 +msgid "FALSE: Use width/height, TRUE: Use BoundingBox" +msgstr "FALSO: Usar ancho/alto, VERDADERO: Usar caja de contorno" + +#: plug-ins/common/file-ps.c:404 msgid "_Pages" msgstr "_Páginas" -#: plug-ins/common/file-ps.c:407 +#: plug-ins/common/file-ps.c:405 +msgid "Pages to load (e.g.: 1,3,5-7)" +msgstr "Páginas que cargar (p.ej.: 1,3,5-7)" + +#: plug-ins/common/file-ps.c:410 msgid "Coloring" msgstr "Coloreado" -#: plug-ins/common/file-ps.c:413 +#: plug-ins/common/file-ps.c:411 +msgid "4: b/w, 5: grey, 6: color image, 7: automatic" +msgstr "4: b/n, 5: gris, 6: imagen a color, 7: automático" + +#: plug-ins/common/file-ps.c:416 msgid "Text antialiasing" msgstr "Suavizado de texto" -#: plug-ins/common/file-ps.c:419 +#: plug-ins/common/file-ps.c:417 plug-ins/common/file-ps.c:423 +msgid "1, 2 or 4" +msgstr "1, 2 o 4" + +#: plug-ins/common/file-ps.c:422 msgid "Graphic antialiasing" msgstr "Suavizado de gráficos" -#: plug-ins/common/file-ps.c:459 +#: plug-ins/common/file-ps.c:462 msgid "PS" msgstr "PS" -#: plug-ins/common/file-ps.c:468 +#: plug-ins/common/file-ps.c:471 msgid "Encapsulated PostScript" msgstr "PostScript encapsulado" -#: plug-ins/common/file-ps.c:479 +#: plug-ins/common/file-ps.c:482 msgid "EPS" msgstr "EPS" -#: plug-ins/common/file-ps.c:511 +#: plug-ins/common/file-ps.c:501 +msgid "Width of the image in PostScript file (0: use input image size)" +msgstr "" +"Ancho de la imagen en el archivo PostScript (0: usar el tamaño de imagen de " +"entrada)" + +#: plug-ins/common/file-ps.c:508 +msgid "Height of the image in PostScript file (0: use input image size)" +msgstr "" +"Altura de la imagen en el archivo PostScript (0: usar el tamaño de imagen de " +"entrada)" + +#: plug-ins/common/file-ps.c:514 msgid "_X offset" msgstr "Desplazamiento _X" -#: plug-ins/common/file-ps.c:517 +#: plug-ins/common/file-ps.c:515 +msgid "X-offset to image from lower left corner" +msgstr "Desplazamiento X a la imagen desde la esquina inferior izquierda" + +#: plug-ins/common/file-ps.c:520 msgid "Y o_ffset" msgstr "Des_plazamiento Y" -#: plug-ins/common/file-ps.c:523 +#: plug-ins/common/file-ps.c:521 +msgid "Y-offset to image from lower left corner" +msgstr "Desplazamiento Y a la imagen desde la esquina inferior izquierda" + +#: plug-ins/common/file-ps.c:526 msgid "Unit" msgstr "Unidad" -#: plug-ins/common/file-ps.c:530 +#: plug-ins/common/file-ps.c:527 +msgid "Unit for width/height/offset. 0: inches, 1: millimeters" +msgstr "Unidad de ancho/alto/desplazamiento. 0: pulgadas, 1: milímetros" + +#: plug-ins/common/file-ps.c:533 msgid "_Keep aspect ratio" msgstr "_Mantener proporción" -#: plug-ins/common/file-ps.c:536 plug-ins/map-object/map-object-ui.c:1013 +#: plug-ins/common/file-ps.c:534 +msgid "FALSE: use width/height, TRUE: keep aspect ratio" +msgstr "FALSO: usar ancho/alto, VERDADERO: mantener la relación de aspecto" + +#: plug-ins/common/file-ps.c:539 plug-ins/map-object/map-object-ui.c:738 msgid "Rotation" msgstr "Rotación" -#: plug-ins/common/file-ps.c:542 +#: plug-ins/common/file-ps.c:545 msgid "PostScript Level _2" msgstr "PostScript nivel _2" -#: plug-ins/common/file-ps.c:554 plug-ins/imagemap/imap_grid.c:298 +#: plug-ins/common/file-ps.c:546 +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" + +#: plug-ins/common/file-ps.c:552 +#, fuzzy +#| msgid "Encapsulated PostScript" +msgid "FALSE: PostScript, TRUE: Encapsulated PostScript" +msgstr "PostScript encapsulado" + +#: plug-ins/common/file-ps.c:557 plug-ins/imagemap/imap_grid.c:298 msgid "_Preview" msgstr "Vista _previa" -#: plug-ins/common/file-ps.c:560 +#: plug-ins/common/file-ps.c:558 +msgid "Show Preview" +msgstr "Mostrar vista previa" + +#: plug-ins/common/file-ps.c:563 msgid "Preview Si_ze" msgstr "Ta_maño de vista previa" -#: plug-ins/common/file-ps.c:722 +#: plug-ins/common/file-ps.c:564 +msgid "0: no preview, >0: max. size of preview" +msgstr "0: sin vista previa, >0: máx. tamaño de vista previa" + +#: plug-ins/common/file-ps.c:708 msgid "PostScript plug-in does not support multiple layers." msgstr "El complemento PostScript no soporta múltiples capas." -#: plug-ins/common/file-ps.c:1136 +#: plug-ins/common/file-ps.c:1119 #, c-format msgid "Could not interpret PostScript file '%s'" msgstr "No se puede interpretar el archivo PostScript «%s»" -#: plug-ins/common/file-ps.c:1220 +#: plug-ins/common/file-ps.c:1203 msgid "Rendered EPS" msgstr "EPS renderizado" -#: plug-ins/common/file-ps.c:1248 +#: plug-ins/common/file-ps.c:1231 #, c-format msgid "%s-pages" msgstr "%s-páginas" -#: plug-ins/common/file-ps.c:1320 +#: plug-ins/common/file-ps.c:1303 msgid "PostScript export cannot handle images with alpha channels" msgstr "" "PostScript no puede manejar la exportación de imágenes con canales alfa" -#: plug-ins/common/file-ps.c:3729 +#: plug-ins/common/file-ps.c:3712 msgid "Rendering" msgstr "Renderizado" #. Coloring -#: plug-ins/common/file-ps.c:3736 +#: plug-ins/common/file-ps.c:3720 msgid "B/W" msgstr "B/N" -#: plug-ins/common/file-ps.c:3737 +#: plug-ins/common/file-ps.c:3721 plug-ins/imagemap/imap-menu.ui:101 msgid "Gray" msgstr "Gris" -#: plug-ins/common/file-ps.c:3738 plug-ins/common/file-xpm.c:511 +#: plug-ins/common/file-ps.c:3722 plug-ins/common/file-xpm.c:510 #: plug-ins/pikaressionist/color.c:65 plug-ins/pikaressionist/general.c:169 +#: plug-ins/imagemap/imap-menu.ui:96 plug-ins/lighting/lighting-main.c:209 +#: plug-ins/lighting/lighting-main.c:332 plug-ins/lighting/lighting-main.c:391 +#: plug-ins/lighting/lighting-main.c:450 plug-ins/lighting/lighting-main.c:509 +#: plug-ins/lighting/lighting-main.c:568 plug-ins/lighting/lighting-ui.c:327 msgid "Color" msgstr "Color" -#: plug-ins/common/file-ps.c:3746 plug-ins/common/file-ps.c:3754 +#: plug-ins/common/file-ps.c:3730 plug-ins/common/file-ps.c:3738 msgid "Weak" msgstr "Débil" -#: plug-ins/common/file-ps.c:3747 plug-ins/common/file-ps.c:3755 +#: plug-ins/common/file-ps.c:3731 plug-ins/common/file-ps.c:3739 msgid "Strong" msgstr "Fuerte" -#: plug-ins/common/file-ps.c:3781 +#: plug-ins/common/file-ps.c:3765 msgid "Pages:" msgstr "Páginas:" -#: plug-ins/common/file-ps.c:3785 +#: plug-ins/common/file-ps.c:3769 msgid "Pages to load (e.g.: 1-4 or 1,3,5-7)" msgstr "Páginas a cargar (ej: 1-4 o 1,3,5-7)" -#: plug-ins/common/file-ps.c:3791 +#: plug-ins/common/file-ps.c:3775 msgid "Open as" msgstr "Abrir como" -#: plug-ins/common/file-ps.c:3884 +#: plug-ins/common/file-ps.c:3868 msgid "" "When toggled, the resulting image will be scaled to fit into the given size " "without changing the aspect ratio." @@ -4469,49 +5183,49 @@ msgstr "" "Si se activa la imagen resultante será redimensionada de manera que quepa en " "el tamaño dado sin cambiar la proporción." -#: plug-ins/common/file-ps.c:3890 +#: plug-ins/common/file-ps.c:3874 msgid "Image Size" msgstr "Tamaño de imagen" #. Unit -#: plug-ins/common/file-ps.c:3901 +#: plug-ins/common/file-ps.c:3886 msgid "_Inch" msgstr "P_ulgada" -#: plug-ins/common/file-ps.c:3902 +#: plug-ins/common/file-ps.c:3887 msgid "_Millimeter" msgstr "_Milímetro" #. Rotation -#: plug-ins/common/file-ps.c:3915 +#: plug-ins/common/file-ps.c:3900 msgid "_0" msgstr "_0" -#: plug-ins/common/file-ps.c:3916 +#: plug-ins/common/file-ps.c:3901 msgid "_90" msgstr "_90" -#: plug-ins/common/file-ps.c:3917 +#: plug-ins/common/file-ps.c:3902 msgid "_180" msgstr "_180" -#: plug-ins/common/file-ps.c:3918 +#: plug-ins/common/file-ps.c:3903 msgid "_270" msgstr "_270" -#: plug-ins/common/file-ps.c:3925 +#: plug-ins/common/file-ps.c:3910 msgid "Output" msgstr "Salida" -#: plug-ins/common/file-psp.c:664 plug-ins/common/file-psp.c:694 +#: plug-ins/common/file-psp.c:667 plug-ins/common/file-psp.c:697 msgid "Paint Shop Pro image" msgstr "Imagen de Paint Shop Pro" -#: plug-ins/common/file-psp.c:667 +#: plug-ins/common/file-psp.c:670 msgid "Loads images from the Paint Shop Pro PSP file format" msgstr "Carga imágenes desde el formato de archivo PSP de Paint Shop Pro" -#: plug-ins/common/file-psp.c:669 +#: plug-ins/common/file-psp.c:672 msgid "" "This plug-in loads and exports images in Paint Shop Pro's native PSP format. " "Vector layers aren't handled. Exporting isn't yet implemented." @@ -4520,190 +5234,332 @@ msgstr "" "Shop Pro. Las capas vectoriales no se manejan. La exportación aún no está " "implementada." -#: plug-ins/common/file-psp.c:841 +#: plug-ins/common/file-psp.c:840 msgid "RLE" msgstr "RLE" -#: plug-ins/common/file-psp.c:842 +#: plug-ins/common/file-psp.c:841 msgid "LZ77" msgstr "LZ77" -#: plug-ins/common/file-psp.c:934 +#: plug-ins/common/file-psp.c:933 msgid "Error reading block header" msgstr "Error al leer la cabecera del bloque" -#: plug-ins/common/file-psp.c:941 +#: plug-ins/common/file-psp.c:940 #, c-format msgid "Invalid block header at %ld" msgstr "Bloque de cabecera no válido en %ld" -#: plug-ins/common/file-psp.c:944 +#: plug-ins/common/file-psp.c:943 msgid "Invalid block header" msgstr "Bloque de cabecera no válido" -#: plug-ins/common/file-psp.c:976 +#: plug-ins/common/file-psp.c:975 #, c-format msgid "Seek error: %s" msgstr "Error de búsqueda: %s" -#: plug-ins/common/file-psp.c:999 +#: plug-ins/common/file-psp.c:998 msgid "Invalid general image attribute chunk size." msgstr "El tamaño del bloque de atributo general de imagen no es válido." -#: plug-ins/common/file-psp.c:1021 +#: plug-ins/common/file-psp.c:1020 msgid "Error reading general image attribute block." msgstr "Error al leer el bloque de atributo general de la imagen." -#: plug-ins/common/file-psp.c:1036 +#: plug-ins/common/file-psp.c:1035 #, c-format msgid "Unknown compression type %d" msgstr "Tipo de compresión desconocido %d" -#: plug-ins/common/file-psp.c:1072 plug-ins/common/file-psp.c:1079 +#: plug-ins/common/file-psp.c:1071 plug-ins/common/file-psp.c:1078 #, c-format msgid "Unsupported bit depth %d" msgstr "Profundidad de bit no soportada %d" -#: plug-ins/common/file-psp.c:1126 +#: plug-ins/common/file-psp.c:1125 msgid "Error reading creator keyword chunk" msgstr "Error al leer la parte de creación de palabra clave" -#: plug-ins/common/file-psp.c:1132 +#: plug-ins/common/file-psp.c:1131 msgid "Invalid keyword chunk header" msgstr "La parte del encabezado sobre la palabra clave no es válida" -#: plug-ins/common/file-psp.c:1147 plug-ins/common/file-psp.c:1174 +#: plug-ins/common/file-psp.c:1146 plug-ins/common/file-psp.c:1173 msgid "Error reading creator keyword data" msgstr "Error al leer el origen de las palabras clave" -#: plug-ins/common/file-psp.c:1258 plug-ins/common/file-psp.c:1267 -#: plug-ins/common/file-psp.c:1276 +#: plug-ins/common/file-psp.c:1257 plug-ins/common/file-psp.c:1266 +#: plug-ins/common/file-psp.c:1275 msgid "Error reading color block" msgstr "Error al leer el bloque de color" -#: plug-ins/common/file-psp.c:1289 +#: plug-ins/common/file-psp.c:1286 +#, fuzzy +#| msgid "Error reading palette. " +msgid "Error: Unsupported palette size" +msgstr "Error al leer la paleta. " + +#: plug-ins/common/file-psp.c:1297 msgid "Error reading color palette" msgstr "Error al leer la paleta de color" -#: plug-ins/common/file-psp.c:1715 plug-ins/common/file-psp.c:1729 +#: plug-ins/common/file-psp.c:1723 plug-ins/common/file-psp.c:1737 msgid "zlib error" msgstr "error de zlib" -#: plug-ins/common/file-psp.c:1792 plug-ins/common/file-psp.c:1826 -#: plug-ins/common/file-psp.c:1836 +#: plug-ins/common/file-psp.c:1800 plug-ins/common/file-psp.c:1834 +#: plug-ins/common/file-psp.c:1844 msgid "Error reading layer extension information" msgstr "Error al leer la información de la extensión de la capa" -#: plug-ins/common/file-psp.c:1813 +#: plug-ins/common/file-psp.c:1821 msgid "Error reading block information" msgstr "Error al leer la información del bloque" -#: plug-ins/common/file-psp.c:1893 +#: plug-ins/common/file-psp.c:1901 #, c-format msgid "Invalid layer sub-block %s, should be LAYER" msgstr "El sub-bloque de la capa %s no es válido, debería ser CAPA" -#: plug-ins/common/file-psp.c:1924 plug-ins/common/file-psp.c:1981 +#: plug-ins/common/file-psp.c:1932 plug-ins/common/file-psp.c:1989 msgid "Error reading layer information chunk" msgstr "Error al leer la parte sobre la información de la capa" -#: plug-ins/common/file-psp.c:2023 +#: plug-ins/common/file-psp.c:2031 #, c-format msgid "Invalid layer dimensions: %dx%d" msgstr "Dimensiones de la capa no válidas: %dx%d" -#: plug-ins/common/file-psp.c:2084 +#: plug-ins/common/file-psp.c:2092 msgid "Error creating layer" msgstr "Error al crear la capa" -#: plug-ins/common/file-psp.c:2129 +#: plug-ins/common/file-psp.c:2137 #, c-format msgid "Invalid layer sub-block %s, should be CHANNEL" msgstr "El sub-bloque de la capa %s no es válido, debería ser CANAL" -#: plug-ins/common/file-psp.c:2145 +#: plug-ins/common/file-psp.c:2153 msgid "Error reading channel information chunk" msgstr "Error al leer la parte sobre la información del canal" -#: plug-ins/common/file-psp.c:2168 +#: plug-ins/common/file-psp.c:2176 #, c-format msgid "Invalid channel type %d in channel information chunk" msgstr "Tipo de canal %d no válido en la parte sobre información del canal" -#: plug-ins/common/file-psp.c:2272 plug-ins/common/file-psp.c:2289 +#: plug-ins/common/file-psp.c:2280 plug-ins/common/file-psp.c:2297 msgid "Error reading tube data chunk" msgstr "Error al leer la parte sobre datos del tubo" -#: plug-ins/common/file-psp.c:2394 +#: plug-ins/common/file-psp.c:2384 plug-ins/common/file-psp.c:2400 +#, fuzzy +#| msgid "Error reading layer information chunk" +msgid "Error reading selection chunk" +msgstr "Error al leer la parte sobre la información de la capa" + +#: plug-ins/common/file-psp.c:2393 +#, fuzzy +#| msgid "invalid block size" +msgid "Invalid selection chunk size" +msgstr "tamaño de bloque no válido" + +#: plug-ins/common/file-psp.c:2417 +#, fuzzy +#| msgid "Error reading layer information chunk" +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 +#, 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 msgid "Error reading file header." msgstr "Error al leer la cabecera del archivo." -#: plug-ins/common/file-psp.c:2401 +#: plug-ins/common/file-psp.c:2522 msgid "Incorrect file signature." msgstr "Firma del archivo incorrecta." -#: plug-ins/common/file-psp.c:2415 +#: plug-ins/common/file-psp.c:2536 #, 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:2435 +#: plug-ins/common/file-psp.c:2556 msgid "invalid block size" msgstr "tamaño de bloque no válido" -#: plug-ins/common/file-psp.c:2444 +#: plug-ins/common/file-psp.c:2565 msgid "Duplicate General Image Attributes block." msgstr "El bloque general de atributos de imagen está duplicado." -#: plug-ins/common/file-psp.c:2472 +#: plug-ins/common/file-psp.c:2593 msgid "Missing General Image Attributes block." msgstr "Falta el bloque general de atributos de imagen." -#: plug-ins/common/file-psp.c:2588 +#: plug-ins/common/file-psp.c:2715 msgid "Exporting not implemented yet." msgstr "Exportar no está todavía implementado." -#: plug-ins/common/file-qoi.c:137 plug-ins/common/file-qoi.c:164 +#: plug-ins/common/file-qoi.c:140 plug-ins/common/file-qoi.c:167 msgid "Quite OK Image" msgstr "Quite OK Image" -#: plug-ins/common/file-qoi.c:140 +#: plug-ins/common/file-qoi.c:143 msgid "Load file in the QOI file format" msgstr "Carga un archivo en el formato de archivo QOI" -#: plug-ins/common/file-qoi.c:141 +#: plug-ins/common/file-qoi.c:144 msgid "Load file in the QOI file format (Quite OK Image)" msgstr "Carga un archivo en el formato de archivo QOI (Quite OK Image)" -#: plug-ins/common/file-qoi.c:167 +#: plug-ins/common/file-qoi.c:170 msgid "Export image in the QOI file format" msgstr "Exporta imagen en el formato de archivo QOI" -#: plug-ins/common/file-qoi.c:168 +#: plug-ins/common/file-qoi.c:171 msgid "Export image in the QOI file format (Quite OK Image)" msgstr "Exportar imagen en formato de archivo QOI (Quite OK Image)" -#: plug-ins/common/file-qoi.c:262 +#: plug-ins/common/file-qoi.c:261 msgid "QOI format does not support multiple layers." msgstr "El formato QOI no soporta múltiples capas." -#: plug-ins/common/file-qoi.c:312 +#: plug-ins/common/file-qoi.c:311 msgid "Failed to read QOI file" msgstr "No se pudo leer el archivo QOI" -#: plug-ins/common/file-raw-data.c:333 plug-ins/common/file-raw-data.c:452 +#: plug-ins/common/file-raw-data.c:336 plug-ins/common/file-raw-data.c:455 msgid "Raw image data" msgstr "Datos de imagen en bruto" -#: plug-ins/common/file-raw-data.c:414 plug-ins/common/file-raw-data.c:2802 +#: plug-ins/common/file-raw-data.c:356 +msgid "Image width in number of pixels" +msgstr "Ancho de la imagen en número de píxeles" + +#: plug-ins/common/file-raw-data.c:361 +msgid "Image height in number of pixels" +msgstr "Altura de la imagen en número de píxeles" + +#: plug-ins/common/file-raw-data.c:366 +msgid "Offset to beginning of image in raw data" +msgstr "Desplazamiento al comienzo de la imagen en datos sin procesar" + +#: plug-ins/common/file-raw-data.c:371 +msgid "Pixel _format" +msgstr "_Formato de píxel" + +#: plug-ins/common/file-raw-data.c:372 +msgid "The layout of pixel data, such as components and their order" +msgstr "" +"La disposición de los datos de píxeles, como los componentes y su orden" + +#: plug-ins/common/file-raw-data.c:376 +msgid "Data t_ype" +msgstr "T_ipo de datos" + +#: plug-ins/common/file-raw-data.c:377 +msgid "" +"Data type used to represent pixel values { RAW_ENCODING_UNSIGNED (0), " +"RAW_ENCODING_SIGNED (1), RAW_ENCODING_FLOAT (2) }" +msgstr "" +"Tipo de datos utilizados para representar valores de píxeles " +"{ RAW_ENCODING_UNSIGNED (0), RAW_ENCODING_SIGNED (1), RAW_ENCODING_FLOAT " +"(2) }" + +#: plug-ins/common/file-raw-data.c:381 +#, fuzzy +#| msgid "Big Endian" +msgid "Endianness" +msgstr "Big Endian" + +#: plug-ins/common/file-raw-data.c:382 +msgid "" +"Order of sequences of bytes { RAW_LITTLE_ENDIAN (0), RAW_BIG_ENDIAN (1) }" +msgstr "" +"Orden de secuencias de bytes { RAW_LITTLE_ENDIAN (0), RAW_BIG_ENDIAN (1) }" + +#: plug-ins/common/file-raw-data.c:386 plug-ins/common/file-raw-data.c:470 +msgid "Planar configuration" +msgstr "Configuración planar" + +#: plug-ins/common/file-raw-data.c:387 plug-ins/common/file-raw-data.c:471 +msgid "" +"How color pixel data are stored { RAW_PLANAR_CONTIGUOUS (0), " +"RAW_PLANAR_SEPARATE (1) }" +msgstr "" +"Cómo se almacenan los datos de color de los píxeles { RAW_PLANAR_CONTIGUOUS " +"(0), RAW_PLANAR_SEPARATE (1) }" + +#: plug-ins/common/file-raw-data.c:395 +msgid "Palette Offse_t" +msgstr "Des_plazamiento de paleta" + +#: plug-ins/common/file-raw-data.c:396 +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" + +#: 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), " +"RAW_PALETTE_BGR (1) }" + +#: plug-ins/common/file-raw-data.c:406 +msgid "_Palette File" +msgstr "Archivo de _paleta" + +#: plug-ins/common/file-raw-data.c:407 +#, fuzzy +#| msgid "XJT file contains unknown pathtype %d" +msgid "The file containing palette data" +msgstr "El archivo XJT contiene un tipo de camino desconocido %d" + +#: plug-ins/common/file-raw-data.c:417 plug-ins/common/file-raw-data.c:2804 msgid "Digital Elevation Model data" msgstr "Datos del modelo digital de elevación" -#: plug-ins/common/file-raw-data.c:481 +#: plug-ins/common/file-raw-data.c:441 +msgid "_Sample spacing" +msgstr "E_spaciado de muestra" + +#: plug-ins/common/file-raw-data.c:442 +msgid "" +"The sample spacing of the data. (0: auto-detect, 1: SRTM-1, 2: SRTM-3 data)" +msgstr "" +"El espaciado muestral de los datos. (0: detección automática, 1: SRTM-1, 2: " +"datos SRTM-3)" + +#: plug-ins/common/file-raw-data.c:476 +#, fuzzy +#| msgid "Palette Map" +msgid "Palette's layout" +msgstr "Mapa de paleta" + +#: plug-ins/common/file-raw-data.c:484 msgid "Raw Data" msgstr "Datos en bruto" -#: plug-ins/common/file-raw-data.c:550 +#: plug-ins/common/file-raw-data.c:551 #, c-format msgid "" "%d is not a valid sample spacing. Valid values are: 0 (auto-detect), 1 and 3." @@ -4711,7 +5567,7 @@ msgstr "" "%d no es un espaciado de muestra válido. Los valores válidos son: 0 (auto-" "detectar), 1 y 3." -#: plug-ins/common/file-raw-data.c:563 +#: plug-ins/common/file-raw-data.c:564 #, c-format msgid "" "Auto-detection of sample spacing failed. \"%s\" does not appear to be a " @@ -4723,16 +5579,16 @@ msgstr "" "soportados son: SRTM-1 and SRTM-3. Si conoce la variante, ejecute con " "argumento 1 o 3." -#: plug-ins/common/file-raw-data.c:654 +#: plug-ins/common/file-raw-data.c:649 msgid "RAW export does not support multiple layers." msgstr "La exportación a RAW no soporta múltiples capas." -#: plug-ins/common/file-raw-data.c:1555 +#: plug-ins/common/file-raw-data.c:1547 #, c-format msgid "Could not open '%s' for size verification: %s" msgstr "No se pudo abrir el archivo «%s» para verificarlo: %s" -#: plug-ins/common/file-raw-data.c:2631 +#: plug-ins/common/file-raw-data.c:2633 msgid "Load Image from Raw Data" msgstr "Cargar imagen a partir de los datos en bruto" @@ -4744,118 +5600,118 @@ msgstr "Cargar imagen a partir de los datos en bruto" #. * SRTM-3 data are sampled at three arc-seconds and contain 1201 lines and #. * 1201 samples with similar overlapping rows and columns." #. -#: plug-ins/common/file-raw-data.c:2690 +#: plug-ins/common/file-raw-data.c:2692 msgid "SRTM-1 (1 arc-second)" msgstr "SRTM-1 (1 arcosegundo)" -#: plug-ins/common/file-raw-data.c:2691 +#: plug-ins/common/file-raw-data.c:2693 msgid "SRTM-3 (3 arc-seconds)" msgstr "SRTM-3 (3 arcosegundos)" #. Generic case for any data. Let's leave choice to select the #. * right type of raw data. #. -#: plug-ins/common/file-raw-data.c:2702 +#: plug-ins/common/file-raw-data.c:2704 msgid "RGB 8-bit" msgstr "RGB 8-bit" -#: plug-ins/common/file-raw-data.c:2703 +#: plug-ins/common/file-raw-data.c:2705 msgid "RGB 16-bit" msgstr "RGB 16-bit" -#: plug-ins/common/file-raw-data.c:2704 +#: plug-ins/common/file-raw-data.c:2706 msgid "RGB 32-bit" msgstr "RGB 32-bit" -#: plug-ins/common/file-raw-data.c:2706 +#: plug-ins/common/file-raw-data.c:2708 msgid "RGBA 8-bit" msgstr "RGBA 8-bit" -#: plug-ins/common/file-raw-data.c:2707 +#: plug-ins/common/file-raw-data.c:2709 msgid "RGBA 16-bit" msgstr "RGBA 16-bit" -#: plug-ins/common/file-raw-data.c:2708 +#: plug-ins/common/file-raw-data.c:2710 msgid "RGBA 32-bit" msgstr "RGBA 32-bit" -#: plug-ins/common/file-raw-data.c:2710 +#: plug-ins/common/file-raw-data.c:2712 msgid "RGB565" msgstr "RGB565" -#: plug-ins/common/file-raw-data.c:2711 +#: plug-ins/common/file-raw-data.c:2713 msgid "BGR565" msgstr "BGR565" -#: plug-ins/common/file-raw-data.c:2713 +#: plug-ins/common/file-raw-data.c:2715 msgid "B&W 1 bit" msgstr "B/N 1 bit" -#: plug-ins/common/file-raw-data.c:2714 +#: plug-ins/common/file-raw-data.c:2716 msgid "Grayscale 2-bit" msgstr "Escala de grises de 2 bit" -#: plug-ins/common/file-raw-data.c:2715 +#: plug-ins/common/file-raw-data.c:2717 msgid "Grayscale 4-bit" msgstr "Escala de grises de 4 bit" -#: plug-ins/common/file-raw-data.c:2716 +#: plug-ins/common/file-raw-data.c:2718 msgid "Grayscale 8-bit" msgstr "Escala de grises de 8 bit" -#: plug-ins/common/file-raw-data.c:2717 +#: plug-ins/common/file-raw-data.c:2719 msgid "Grayscale 16-bit" msgstr "Escala de grises de 16 bit" -#: plug-ins/common/file-raw-data.c:2718 +#: plug-ins/common/file-raw-data.c:2720 msgid "Grayscale 32-bit" msgstr "Escala de grises de 32 bit" -#: plug-ins/common/file-raw-data.c:2720 +#: plug-ins/common/file-raw-data.c:2722 msgid "Grayscale-Alpha 8-bit" msgstr "Escala de grises-Alfa 8-bit" -#: plug-ins/common/file-raw-data.c:2721 +#: plug-ins/common/file-raw-data.c:2723 msgid "Grayscale-Alpha 16-bit" msgstr "Escala de grises-Alfa 16-bit" -#: plug-ins/common/file-raw-data.c:2722 +#: plug-ins/common/file-raw-data.c:2724 msgid "Grayscale-Alpha 32-bit" msgstr "Escala de grises-Alfa 32-bit" -#: plug-ins/common/file-raw-data.c:2724 +#: plug-ins/common/file-raw-data.c:2726 msgid "Indexed" msgstr "Indexado" -#: plug-ins/common/file-raw-data.c:2725 +#: plug-ins/common/file-raw-data.c:2727 msgid "Indexed Alpha" msgstr "Indexado con Alfa" -#: plug-ins/common/file-raw-data.c:2731 +#: plug-ins/common/file-raw-data.c:2733 msgid "Unsigned Integer" msgstr "Entero sin signo" -#: plug-ins/common/file-raw-data.c:2732 +#: plug-ins/common/file-raw-data.c:2734 msgid "Signed Integer" msgstr "Entero con signo" -#: plug-ins/common/file-raw-data.c:2733 +#: plug-ins/common/file-raw-data.c:2735 msgid "Floating Point" msgstr "Coma flotante" -#: plug-ins/common/file-raw-data.c:2739 +#: plug-ins/common/file-raw-data.c:2741 msgid "Little Endian" msgstr "Little Endian" -#: plug-ins/common/file-raw-data.c:2740 +#: plug-ins/common/file-raw-data.c:2742 msgid "Big Endian" msgstr "Big Endian" -#: plug-ins/common/file-raw-data.c:2746 +#: plug-ins/common/file-raw-data.c:2748 msgid "Contiguous" msgstr "Contiguo" -#: plug-ins/common/file-raw-data.c:2747 +#: plug-ins/common/file-raw-data.c:2749 msgid "Planar" msgstr "Planar" @@ -4863,103 +5719,103 @@ msgstr "Planar" #. * used for 3D surface modeling or relief maps; so it must be #. * translated by the proper technical term in your language. #. -#: plug-ins/common/file-raw-data.c:2796 +#: plug-ins/common/file-raw-data.c:2798 msgid "Digital Elevation Model data (1 arc-second)" msgstr "Datos del modelo digital de elevación (1 arcosegundo)" -#: plug-ins/common/file-raw-data.c:2799 +#: plug-ins/common/file-raw-data.c:2801 msgid "Digital Elevation Model data (3 arc-seconds)" msgstr "Datos del modelo digital de elevación (3 arcosegundos)" -#: plug-ins/common/file-raw-data.c:2806 +#: plug-ins/common/file-raw-data.c:2808 msgid "Image" msgstr "Imagen" -#: plug-ins/common/file-raw-data.c:2809 +#: plug-ins/common/file-raw-data.c:2811 msgid "R, G, B (normal)" msgstr "R, G, B (normal)" -#: plug-ins/common/file-raw-data.c:2810 +#: plug-ins/common/file-raw-data.c:2812 msgid "B, G, R, X (BMP style)" msgstr "B, G, R, X (estilo BMP)" -#: plug-ins/common/file-raw-data.c:2825 +#: plug-ins/common/file-raw-data.c:2827 msgid "Palette" msgstr "Paleta" #. TRANSLATORS: %s is a sample to describe the planar configuration #. * (e.g. RGB,RGB,RGB vs RRR,GGG,BBB). #. -#: plug-ins/common/file-raw-data.c:2896 +#: plug-ins/common/file-raw-data.c:2898 #, c-format msgid "_Contiguous (%s)" msgstr "_Contiguo (%s)" -#: plug-ins/common/file-raw-data.c:2898 +#: plug-ins/common/file-raw-data.c:2900 msgid "_Contiguous" msgstr "_Contiguo" #. TRANSLATORS: %s is a sample to describe the planar configuration #. * (e.g. RGB,RGB,RGB vs RRR,GGG,BBB). #. -#: plug-ins/common/file-raw-data.c:2904 +#: plug-ins/common/file-raw-data.c:2906 #, c-format msgid "_Planar (%s)" msgstr "_Planar (%s)" -#: plug-ins/common/file-raw-data.c:2906 +#: plug-ins/common/file-raw-data.c:2908 msgid "_Planar" msgstr "_Planar" #. Palette type combo -#: plug-ins/common/file-raw-data.c:2928 +#: plug-ins/common/file-raw-data.c:2930 msgid "_R, G, B (normal)" msgstr "_R, G, B (normal)" -#: plug-ins/common/file-raw-data.c:2929 +#: plug-ins/common/file-raw-data.c:2931 msgid "_B, G, R, X (BMP style)" msgstr "_B, G, R, X (estilo BMP)" -#: plug-ins/common/file-sunras.c:274 plug-ins/common/file-sunras.c:300 +#: plug-ins/common/file-sunras.c:277 plug-ins/common/file-sunras.c:303 msgid "SUN Rasterfile image" msgstr "Imagen SUN Rasterfile" -#: plug-ins/common/file-sunras.c:315 +#: plug-ins/common/file-sunras.c:318 msgid "SUNRAS" msgstr "SUNRAS" -#: plug-ins/common/file-sunras.c:322 +#: plug-ins/common/file-sunras.c:325 msgid "Data Formatting" msgstr "Formateado de datos" -#: plug-ins/common/file-sunras.c:323 +#: plug-ins/common/file-sunras.c:326 msgid "Use standard (0) or Run-Length Encoded (1) output" msgstr "Usar salida estándar (0) o de longitud de ejecución codificada (1)" -#: plug-ins/common/file-sunras.c:407 +#: plug-ins/common/file-sunras.c:409 msgid "SUNRAS format does not support multiple layers." msgstr "El formato SUNRAS no soporta múltiples capas." -#: plug-ins/common/file-sunras.c:469 +#: plug-ins/common/file-sunras.c:468 #, c-format msgid "Could not open '%s' as SUN-raster-file" msgstr "No se pudo abrir «%s» como archivo SUN-raster" -#: plug-ins/common/file-sunras.c:479 +#: plug-ins/common/file-sunras.c:478 msgid "The type of this SUN-rasterfile is not supported" msgstr "El tipo de este archivo SUN-raster no está soportado" -#: plug-ins/common/file-sunras.c:508 +#: plug-ins/common/file-sunras.c:507 #, c-format msgid "Could not read color entries from '%s'" msgstr "No se han podido leer las entradas de color de «%s»" -#: plug-ins/common/file-sunras.c:517 +#: plug-ins/common/file-sunras.c:516 msgid "Type of colormap not supported" msgstr "El tipo del mapa de color no está soportado" -#: plug-ins/common/file-sunras.c:524 plug-ins/common/file-xbm.c:838 -#: plug-ins/common/file-xwd.c:551 +#: plug-ins/common/file-sunras.c:523 plug-ins/common/file-xbm.c:837 +#: plug-ins/common/file-xwd.c:596 #, c-format msgid "" "'%s':\n" @@ -4968,8 +5824,8 @@ msgstr "" "«%s»:\n" "No se ha especificado la anchura de la imagen" -#: plug-ins/common/file-sunras.c:532 plug-ins/common/file-xbm.c:846 -#: plug-ins/common/file-xwd.c:559 +#: plug-ins/common/file-sunras.c:531 plug-ins/common/file-xbm.c:845 +#: plug-ins/common/file-xwd.c:605 #, c-format msgid "" "'%s':\n" @@ -4978,8 +5834,8 @@ msgstr "" "«%s»:\n" "La anchura de la imagen es mayor de lo que PIKA puede manejar" -#: plug-ins/common/file-sunras.c:540 plug-ins/common/file-xbm.c:854 -#: plug-ins/common/file-xwd.c:566 +#: plug-ins/common/file-sunras.c:539 plug-ins/common/file-xbm.c:853 +#: plug-ins/common/file-xwd.c:613 #, c-format msgid "" "'%s':\n" @@ -4988,8 +5844,8 @@ msgstr "" "«%s»:\n" "No se ha especificado la altura de la imagen" -#: plug-ins/common/file-sunras.c:548 plug-ins/common/file-xbm.c:862 -#: plug-ins/common/file-xwd.c:573 +#: plug-ins/common/file-sunras.c:547 plug-ins/common/file-xbm.c:861 +#: plug-ins/common/file-xwd.c:621 #, c-format msgid "" "'%s':\n" @@ -4998,60 +5854,91 @@ msgstr "" "«%s»:\n" "La altura de la imagen es mayor de lo que PIKA puede manejar" -#: plug-ins/common/file-sunras.c:584 +#: plug-ins/common/file-sunras.c:583 msgid "This image depth is not supported" msgstr "Esta profundidad de imagen no está soportada" -#: plug-ins/common/file-sunras.c:613 +#: plug-ins/common/file-sunras.c:612 msgid "SUNRAS export cannot handle images with alpha channels" msgstr "SUNRAS no puede manejar la exportación de imágenes con canales alfa" -#: plug-ins/common/file-sunras.c:624 +#: plug-ins/common/file-sunras.c:623 msgid "Can't operate on unknown image types" msgstr "No se puede hacer funcionar con tipos desconocidos de imagen" -#: plug-ins/common/file-sunras.c:1193 plug-ins/common/file-sunras.c:1288 -#: plug-ins/common/file-sunras.c:1372 plug-ins/common/file-sunras.c:1472 -#: plug-ins/common/file-xwd.c:1452 plug-ins/common/file-xwd.c:1556 -#: plug-ins/common/file-xwd.c:1716 plug-ins/common/file-xwd.c:1932 -#: plug-ins/common/file-xwd.c:2091 plug-ins/common/file-xwd.c:2355 +#: plug-ins/common/file-sunras.c:1192 plug-ins/common/file-sunras.c:1287 +#: plug-ins/common/file-sunras.c:1371 plug-ins/common/file-sunras.c:1471 +#: plug-ins/common/file-xwd.c:1519 plug-ins/common/file-xwd.c:1633 +#: plug-ins/common/file-xwd.c:1804 plug-ins/common/file-xwd.c:2044 +#: plug-ins/common/file-xwd.c:2233 plug-ins/common/file-xwd.c:2509 msgid "EOF encountered on reading" msgstr "Encontrado EOF (fin-de-archivo) al leer" -#: plug-ins/common/file-sunras.c:1651 plug-ins/common/file-sunras.c:1772 +#: plug-ins/common/file-sunras.c:1650 plug-ins/common/file-sunras.c:1771 msgid "Write error occurred" msgstr "Ocurrió un error de escritura" -#: plug-ins/common/file-sunras.c:1795 +#: plug-ins/common/file-sunras.c:1794 msgid "S_tandard" msgstr "Es_tándar" -#: plug-ins/common/file-sunras.c:1796 +#: plug-ins/common/file-sunras.c:1795 msgid "R_un-Length Encoded" msgstr "Codificado en R_un-Lenght" -#: plug-ins/common/file-svg.c:163 +#: plug-ins/common/file-svg.c:160 msgid "SVG image" msgstr "Imagen SVG" -#: plug-ins/common/file-svg.c:367 plug-ins/common/file-svg.c:745 +#: plug-ins/common/file-svg.c:205 +msgid "_Paths" +msgstr "_Rutas" + +#: plug-ins/common/file-svg.c:206 +#, fuzzy +#| msgid "" +#| "Import path elements of the SVG so they can be used with the PIKA path " +#| "tool" +msgid "" +"Whether and how to import paths so that they can be used with the path tool" +msgstr "" +"Importar los elementos de la ruta del SVG para que puedan ser utilizados con " +"la herramienta de ruta de PIKA" + +#: plug-ins/common/file-svg.c:207 +#, fuzzy +#| msgid "Import _paths" +msgid "Don't import paths" +msgstr "Importar _rutas" + +#: plug-ins/common/file-svg.c:208 +#, fuzzy +#| msgid "Import _paths" +msgid "Import paths individually" +msgstr "Importar _rutas" + +#: plug-ins/common/file-svg.c:209 +msgid "Merge imported paths" +msgstr "Combinar las rutas importadas" + +#: plug-ins/common/file-svg.c:382 plug-ins/common/file-svg.c:811 msgid "Unknown reason" msgstr "Razón desconocida" -#: plug-ins/common/file-svg.c:373 +#: plug-ins/common/file-svg.c:388 msgid "Rendering SVG" msgstr "Renderizando SVG" -#: plug-ins/common/file-svg.c:384 +#: plug-ins/common/file-svg.c:398 msgid "Rendered SVG" msgstr "SVG renderizado" -#: plug-ins/common/file-svg.c:499 plug-ins/common/file-wmf.c:401 +#: plug-ins/common/file-svg.c:601 plug-ins/common/file-wmf.c:398 #, c-format msgid "%d × %d" msgstr "%d x %d" -#: plug-ins/common/file-svg.c:507 +#: plug-ins/common/file-svg.c:609 msgid "" "SVG file does not\n" "specify a size!" @@ -5064,15 +5951,15 @@ msgstr "" #. * unsafe, possibly consumming too much memory with malicious XML #. * files. #. -#: plug-ins/common/file-svg.c:671 +#: plug-ins/common/file-svg.c:736 msgid "Disable safety size limits?" msgstr "¿Desactivar los limites del tamaño de seguridad?" -#: plug-ins/common/file-svg.c:676 +#: plug-ins/common/file-svg.c:741 msgid "_No" msgstr "_No" -#: plug-ins/common/file-svg.c:677 +#: plug-ins/common/file-svg.c:742 msgid "_Yes" msgstr "_Si" @@ -5086,7 +5973,7 @@ msgstr "_Si" #. * cases. Instead of this, we need to ask each and every time, in #. * case it might be the huge data error. #. -#: plug-ins/common/file-svg.c:701 +#: plug-ins/common/file-svg.c:766 msgid "" "A parsing error occurred.\n" "Disabling safety limits may help. Malicious SVG files may use this to " @@ -5096,145 +5983,101 @@ msgstr "" "Podría ser de ayuda desactivar los límites de seguridad. Los archivos SVG " "maliciosos pueden usar esto para consumir demasiada memoria." -#: plug-ins/common/file-svg.c:713 +#: plug-ins/common/file-svg.c:778 msgid "For security reasons, this should only be used for trusted input!" msgstr "" "Por razones de seguridad, esto solo se debe usar para entradas de confianza." -#: plug-ins/common/file-svg.c:720 +#: plug-ins/common/file-svg.c:785 msgid "Retry without limits preventing to parse huge data?" msgstr "" "¿Volver a intentar sin los límites que evitan analizar grandes cantidades de " "datos?" -#. Scalable Vector Graphics is SVG, should perhaps not be translated -#: plug-ins/common/file-svg.c:752 +#: plug-ins/common/file-svg.c:820 msgid "Render Scalable Vector Graphics" msgstr "Renderizar gráfico vectorial escalable" -#. Width and Height -#: plug-ins/common/file-svg.c:811 plug-ins/common/file-wmf.c:606 -#: plug-ins/common/grid.c:844 -msgid "Width:" -msgstr "Anchura:" - -#: plug-ins/common/file-svg.c:817 plug-ins/common/file-wmf.c:611 -msgid "Height:" -msgstr "Altura:" - -#: plug-ins/common/file-svg.c:889 plug-ins/common/file-wmf.c:679 -msgid "_X ratio:" -msgstr "Proporción _X:" - -#: plug-ins/common/file-svg.c:910 plug-ins/common/file-wmf.c:699 -msgid "_Y ratio:" -msgstr "Proporción _Y:" - -#: plug-ins/common/file-svg.c:924 plug-ins/common/file-wmf.c:712 -msgid "Constrain aspect ratio" -msgstr "Restringir la proporción" - -#. Resolution -#: plug-ins/common/file-svg.c:929 plug-ins/common/file-wmf.c:717 -msgid "Resolution:" -msgstr "Resolución:" - -#. Path Import -#: plug-ins/common/file-svg.c:955 -msgid "Import _paths" -msgstr "Importar _rutas" - -#: plug-ins/common/file-svg.c:962 -msgid "" -"Import path elements of the SVG so they can be used with the PIKA path tool" -msgstr "" -"Importar los elementos de la ruta del SVG para que puedan ser utilizados con " -"la herramienta de ruta de PIKA" - -#: plug-ins/common/file-svg.c:970 -msgid "Merge imported paths" -msgstr "Combinar las rutas importadas" - -#: plug-ins/common/file-tga.c:260 plug-ins/common/file-tga.c:286 +#: plug-ins/common/file-tga.c:263 plug-ins/common/file-tga.c:289 msgid "TarGA image" msgstr "Imagen TarGA" -#: plug-ins/common/file-tga.c:298 +#: plug-ins/common/file-tga.c:301 msgid "TGA" msgstr "TGA" -#: plug-ins/common/file-tga.c:305 +#: plug-ins/common/file-tga.c:308 msgid "_Use RLE compression" msgstr "_Usar compresión RLE" -#: plug-ins/common/file-tga.c:306 +#: plug-ins/common/file-tga.c:309 msgid "Use RLE compression" msgstr "Usar compresión RLE" -#: plug-ins/common/file-tga.c:311 +#: plug-ins/common/file-tga.c:314 msgid "Ori_gin" msgstr "Ori_gen" -#: plug-ins/common/file-tga.c:312 +#: plug-ins/common/file-tga.c:315 msgid "Image origin (0 = top-left, 1 = bottom-left)" msgstr "" "Origen de la imagen (0 = arriba a la izquierda, 1 = abajo a la izquierda)" -#: plug-ins/common/file-tga.c:394 plug-ins/common/file-xwd.c:442 +#: plug-ins/common/file-tga.c:396 plug-ins/common/file-xwd.c:453 msgid "TGA format does not support multiple layers." msgstr "El formato TGA no soporta múltiples capas." -#: plug-ins/common/file-tga.c:458 +#: plug-ins/common/file-tga.c:457 #, c-format msgid "Cannot read footer from '%s'" msgstr "No se puede leer el pie de «%s»" -#: plug-ins/common/file-tga.c:477 +#: plug-ins/common/file-tga.c:476 #, c-format msgid "Cannot read extension from '%s'" msgstr "No se puede leer la extensión de «%s»" -#: plug-ins/common/file-tga.c:490 +#: plug-ins/common/file-tga.c:489 #, c-format msgid "Cannot read header from '%s'" msgstr "No se pudo leer la cabecera de «%s»" -#: plug-ins/common/file-tga.c:1453 +#: plug-ins/common/file-tga.c:1452 msgid "Bottom left" msgstr "Inferior izquierdo" -#: plug-ins/common/file-tga.c:1454 +#: plug-ins/common/file-tga.c:1453 msgid "Top left" msgstr "Arriba a la izquierda" -#: plug-ins/common/file-wbmp.c:116 +#: plug-ins/common/file-wbmp.c:118 msgid "Wireless BMP image" msgstr "Imagen BMP inalámbrica" -#: plug-ins/common/file-wbmp.c:119 plug-ins/common/file-wbmp.c:120 +#: plug-ins/common/file-wbmp.c:121 plug-ins/common/file-wbmp.c:122 msgid "Loads files of Wireless BMP file format" msgstr "Carga archivos en el formato de archivo BMP inalámbrico" -#: plug-ins/common/file-wbmp.c:193 +#: plug-ins/common/file-wbmp.c:197 #, c-format msgid "'%s': Invalid WBMP type value" msgstr "«%s» no es un archivo de tipo WBMP válido" -#: plug-ins/common/file-wbmp.c:202 +#: plug-ins/common/file-wbmp.c:206 #, c-format msgid "'%s': Unsupported WBMP fixed header value" msgstr "«%s»: valor de cabecera fijo WBMP no admitido" -#: plug-ins/common/file-wbmp.c:224 +#: plug-ins/common/file-wbmp.c:228 #, c-format msgid "'%s' is not a valid WBMP file" msgstr "«%s» no es un archivo WBMP válido" -#: plug-ins/common/file-wmf.c:153 +#: plug-ins/common/file-wmf.c:155 msgid "Microsoft WMF file" msgstr "Archivo WMF de Microsoft" -#: plug-ins/common/file-wmf.c:395 +#: plug-ins/common/file-wmf.c:392 msgid "" "WMF file does not\n" "specify a size!" @@ -5242,23 +6085,23 @@ msgstr "" "¡El archivo WMF no especifica\n" "un tamaño!" -#: plug-ins/common/file-wmf.c:542 +#: plug-ins/common/file-wmf.c:443 msgid "Render Windows Metafile" msgstr "Renderizar un metaarchivo de Windows" -#: plug-ins/common/file-wmf.c:1039 +#: plug-ins/common/file-wmf.c:797 msgid "Rendered WMF" msgstr "WMF renderizado" -#: plug-ins/common/file-xbm.c:159 plug-ins/common/file-xbm.c:187 +#: plug-ins/common/file-xbm.c:162 plug-ins/common/file-xbm.c:190 msgid "X BitMap image" msgstr "Imagen X BitMap" -#: plug-ins/common/file-xbm.c:162 +#: plug-ins/common/file-xbm.c:165 msgid "Load a file in X10 or X11 bitmap (XBM) file format" msgstr "Carga un archivo en formato de archivo de mapa de bits X10 o X11 (XBM)" -#: plug-ins/common/file-xbm.c:164 +#: plug-ins/common/file-xbm.c:167 msgid "" "Load a file in X10 or X11 bitmap (XBM) file format. XBM is a lossless format " "for flat black-and-white (two color indexed) images." @@ -5267,12 +6110,12 @@ msgstr "" "es un formato sin pérdidas para imágenes planas en blanco y negro (indexadas " "en dos colores)." -#: plug-ins/common/file-xbm.c:190 +#: plug-ins/common/file-xbm.c:193 msgid "Export a file in X10 or X11 bitmap (XBM) file format" msgstr "" "Exportar un archivo en formato de archivo de mapa de bits X10 o X11 (XBM)" -#: plug-ins/common/file-xbm.c:192 +#: plug-ins/common/file-xbm.c:195 msgid "" "X10 or X11 bitmap (XBM) file format. XBM is a lossless format for flat black-" "and-white (two color indexed) images." @@ -5280,87 +6123,87 @@ msgstr "" "Formato de archivo de mapa de bits X10 o X11 (XBM). XBM es un formato sin " "pérdidas para imágenes planas en blanco y negro (indexadas en dos colores)." -#: plug-ins/common/file-xbm.c:203 +#: plug-ins/common/file-xbm.c:206 msgid "XBM" msgstr "XBM" -#: plug-ins/common/file-xbm.c:212 +#: plug-ins/common/file-xbm.c:215 msgid "_Write comment" msgstr "_Escribir comentario" -#: plug-ins/common/file-xbm.c:213 +#: plug-ins/common/file-xbm.c:216 msgid "Write a comment at the beginning of the file." msgstr "Escribir un comentario al principio del archivo." -#: plug-ins/common/file-xbm.c:218 +#: plug-ins/common/file-xbm.c:221 plug-ins/common/mail.c:235 msgid "Co_mment" msgstr "Co_mentario" -#: plug-ins/common/file-xbm.c:219 +#: plug-ins/common/file-xbm.c:222 msgid "Image description (maximum 72 bytes)" msgstr "Descripción de la imagen (máximo 72 bytes)" -#: plug-ins/common/file-xbm.c:227 +#: plug-ins/common/file-xbm.c:230 msgid "_X10 format bitmap" msgstr "Formato de mapa de bits _X10" -#: plug-ins/common/file-xbm.c:228 +#: plug-ins/common/file-xbm.c:231 msgid "Export in X10 format" msgstr "Exportar en formato X10" -#: plug-ins/common/file-xbm.c:233 +#: plug-ins/common/file-xbm.c:236 msgid "Write hot spot _values" msgstr "Escribir _valores del punto activo" -#: plug-ins/common/file-xbm.c:234 +#: plug-ins/common/file-xbm.c:237 msgid "Write hotspot information" msgstr "Escribir la información del punto activo" -#: plug-ins/common/file-xbm.c:239 +#: plug-ins/common/file-xbm.c:242 msgid "Hot s_pot X" msgstr "X del _punto activo" -#: plug-ins/common/file-xbm.c:240 +#: plug-ins/common/file-xbm.c:243 msgid "X coordinate of hotspot" msgstr "Coordenada X del punto activo" -#: plug-ins/common/file-xbm.c:245 +#: plug-ins/common/file-xbm.c:248 msgid "Hot spot _Y" msgstr "_Y del punto activo" -#: plug-ins/common/file-xbm.c:246 +#: plug-ins/common/file-xbm.c:249 msgid "Y coordinate of hotspot" msgstr "Coordenada Y del punto activo" -#: plug-ins/common/file-xbm.c:251 +#: plug-ins/common/file-xbm.c:254 msgid "I_dentifier prefix" msgstr "Prefijo del i_dentificador" -#: plug-ins/common/file-xbm.c:252 +#: plug-ins/common/file-xbm.c:255 msgid "Identifier prefix [determined from filename]" msgstr "Prefijo del identificador [determinado a partir del nombre de archivo]" -#: plug-ins/common/file-xbm.c:257 +#: plug-ins/common/file-xbm.c:260 msgid "Write extra mask _file" msgstr "Esc_ribir archivo de máscara extra" -#: plug-ins/common/file-xbm.c:258 +#: plug-ins/common/file-xbm.c:261 msgid "Write extra mask file" msgstr "Escribir archivo de máscara extra" -#: plug-ins/common/file-xbm.c:263 +#: plug-ins/common/file-xbm.c:266 msgid "Mas_k file extensions" msgstr "Extensión del archivo de _máscara" -#: plug-ins/common/file-xbm.c:264 +#: plug-ins/common/file-xbm.c:267 msgid "Suffix of the mask file" msgstr "Sufijo del archivo de máscara" -#: plug-ins/common/file-xbm.c:376 +#: plug-ins/common/file-xbm.c:378 msgid "XBM format does not support multiple layers." msgstr "El formato XBM no soporta múltiples capas." -#: plug-ins/common/file-xbm.c:830 +#: plug-ins/common/file-xbm.c:829 #, c-format msgid "" "'%s':\n" @@ -5370,7 +6213,7 @@ msgstr "" "No se pudo leer la cabecera (ftell == %ld)" # //R :-? -#: plug-ins/common/file-xbm.c:870 +#: plug-ins/common/file-xbm.c:869 #, c-format msgid "" "'%s':\n" @@ -5380,7 +6223,7 @@ msgstr "" "No se ha especificado el tipo de datos de la imagen" #. The image is not black-and-white. -#: plug-ins/common/file-xbm.c:1015 +#: plug-ins/common/file-xbm.c:1014 msgid "" "The image which you are trying to export as an XBM contains more than two " "colors.\n" @@ -5394,7 +6237,7 @@ msgstr "" "intentarlo." # //R Hum -#: plug-ins/common/file-xbm.c:1027 +#: plug-ins/common/file-xbm.c:1026 msgid "" "You cannot save a cursor mask for an image\n" "which has no alpha channel." @@ -5402,7 +6245,7 @@ msgstr "" "No puede guardar una máscara de cursor para una imagen\n" "que no tiene canal Alfa." -#: plug-ins/common/file-xbm.c:1259 +#: plug-ins/common/file-xbm.c:1258 msgid "" "Writing a comment will make the XBM file unreadable by some applications.\n" "The comment will not affect embedding the XBM in C source code." @@ -5411,11 +6254,11 @@ msgstr "" "XBM.\n" "El comentario no afectará la incrustación de XBM en código fuente C." -#: plug-ins/common/file-xmc.c:299 plug-ins/common/file-xmc.c:348 +#: plug-ins/common/file-xmc.c:301 plug-ins/common/file-xmc.c:350 msgid "X11 Mouse Cursor" msgstr "Puntero de ratón X11" -#: plug-ins/common/file-xmc.c:537 +#: plug-ins/common/file-xmc.c:541 msgid "" "Cannot set the hot spot!\n" "You must arrange layers so that all of them have an intersection." @@ -5423,69 +6266,69 @@ msgstr "" "No se pudo establecer el punto activo.\n" "Debe disponer las capas de forma que todas ellas tengan una intersección." -#: plug-ins/common/file-xmc.c:665 +#: plug-ins/common/file-xmc.c:663 #, c-format msgid "'%s' is not a valid X cursor." msgstr "«%s» no es un cursor X válido." -#: plug-ins/common/file-xmc.c:678 +#: plug-ins/common/file-xmc.c:676 #, c-format msgid "Frame %d of '%s' is too wide for an X cursor." msgstr "El fotograma %d de «%s» es demasiado ancho para un cursor X." -#: plug-ins/common/file-xmc.c:686 +#: plug-ins/common/file-xmc.c:684 #, c-format msgid "Frame %d of '%s' is too high for an X cursor." msgstr "El fotograma %d de «%s» es demasiado alto para un cursor X." -#: plug-ins/common/file-xmc.c:957 +#: plug-ins/common/file-xmc.c:955 #, c-format msgid "there is no image chunk in \"%s\"." msgstr "no hay ningún bloque de imagen en «%s»." -#: plug-ins/common/file-xmc.c:998 +#: plug-ins/common/file-xmc.c:996 #, c-format msgid "'%s' is too wide for an X cursor." msgstr "«%s» es demasiado ancho para un cursor X." -#: plug-ins/common/file-xmc.c:1007 +#: plug-ins/common/file-xmc.c:1005 #, c-format msgid "'%s' is too high for an X cursor." msgstr "«%s» es demasiado alto para un cursor X." -#: plug-ins/common/file-xmc.c:1071 +#: plug-ins/common/file-xmc.c:1069 msgid "A read error occurred." msgstr "Ocurrió un error de lectura." -#: plug-ins/common/file-xmc.c:1111 +#: plug-ins/common/file-xmc.c:1109 msgid "Export Image as X11 Mouse Cursor" msgstr "Exportar imagen como cursor de ratón X11" -#: plug-ins/common/file-xmc.c:1130 plug-ins/file-ico/ico-dialog.c:571 +#: plug-ins/common/file-xmc.c:1128 plug-ins/file-ico/ico-dialog.c:584 msgid "Hot spot _X:" msgstr "_X del punto activo:" -#: plug-ins/common/file-xmc.c:1134 +#: plug-ins/common/file-xmc.c:1132 msgid "Enter the X coordinate of the hot spot. The origin is top left corner." msgstr "" "Introduzca la coordenada X del punto activo. El origen es la esquina " "superior izquierda." -#: plug-ins/common/file-xmc.c:1144 plug-ins/file-ico/ico-dialog.c:584 +#: plug-ins/common/file-xmc.c:1142 plug-ins/file-ico/ico-dialog.c:597 msgid "Hot spot _Y:" msgstr "_Y del punto activo:" -#: plug-ins/common/file-xmc.c:1148 +#: plug-ins/common/file-xmc.c:1146 msgid "Enter the Y coordinate of the hot spot. The origin is top left corner." msgstr "" "Introduzca la coordenada Y del punto activo. El origen es la esquina " "superior izquierda." -#: plug-ins/common/file-xmc.c:1154 +#: plug-ins/common/file-xmc.c:1152 msgid "_Auto-Crop all frames" msgstr "_Autorrecortar todos los cuadros" -#: plug-ins/common/file-xmc.c:1158 +#: plug-ins/common/file-xmc.c:1156 msgid "" "Remove the empty borders of all frames.\n" "This reduces the file size and may fix the problem that some large cursors " @@ -5497,7 +6340,7 @@ msgstr "" "algunos cursores grandes desbaratan la pantalla.\n" "Quite la marca si piensa editar el cursor exportado con otros programas." -#: plug-ins/common/file-xmc.c:1177 +#: plug-ins/common/file-xmc.c:1175 msgid "" "_Size where\n" "unspecified:" @@ -5505,7 +6348,7 @@ msgstr "" "Tamaño donde\n" "no esté especificado:" -#: plug-ins/common/file-xmc.c:1181 +#: plug-ins/common/file-xmc.c:1179 msgid "" "Choose the nominal size of frames.\n" "If you don't have plans to make multi-sized cursor, or you have no idea, " @@ -5524,11 +6367,11 @@ msgstr "" "animación, y qué secuencia de animación se usa basándose en el valor de «gtk-" "cursor-theme-size»." -#: plug-ins/common/file-xmc.c:1194 +#: plug-ins/common/file-xmc.c:1192 msgid "Use size entered above for all frames" msgstr "Usar el tamaño introducido más arriba para todos los cuadros" -#: plug-ins/common/file-xmc.c:1201 +#: plug-ins/common/file-xmc.c:1199 msgid "" "_Delay where\n" "unspecified:" @@ -5536,63 +6379,63 @@ msgstr "" "Retraso cuando\n" "no esté especificado:" -#: plug-ins/common/file-xmc.c:1206 +#: plug-ins/common/file-xmc.c:1204 msgid "Enter time span in milliseconds in which each frame is rendered." msgstr "" "Introduzca el intervalo de tiempo en milisegundos en que se renderiza cada " "cuadro." -#: plug-ins/common/file-xmc.c:1220 +#: plug-ins/common/file-xmc.c:1218 msgid "Use delay entered above for all frames" msgstr "Usar el retraso introducido más arriba para todos los cuadros" -#: plug-ins/common/file-xmc.c:1227 +#: plug-ins/common/file-xmc.c:1225 msgid "_Copyright:" msgstr "_Copyright:" -#: plug-ins/common/file-xmc.c:1231 +#: plug-ins/common/file-xmc.c:1229 msgid "Enter copyright information." msgstr "Introduzca la información de copyright." -#: plug-ins/common/file-xmc.c:1237 +#: plug-ins/common/file-xmc.c:1235 msgid "_License:" msgstr "_Licencia:" -#: plug-ins/common/file-xmc.c:1241 +#: plug-ins/common/file-xmc.c:1239 msgid "Enter license information." msgstr "Introduzca la información de la licencia." -#: plug-ins/common/file-xmc.c:1251 +#: plug-ins/common/file-xmc.c:1249 msgid "_Other:" msgstr "_Otro:" -#: plug-ins/common/file-xmc.c:1265 +#: plug-ins/common/file-xmc.c:1263 msgid "Enter other comment if you want." msgstr "Introduzca otro comentario si lo desea." #. Begin displaying export progress -#: plug-ins/common/file-xmc.c:1370 plug-ins/file-webp/file-webp-save.c:198 -#: plug-ins/file-webp/file-webp-save.c:598 +#: plug-ins/common/file-xmc.c:1368 plug-ins/file-webp/file-webp-save.c:198 +#: plug-ins/file-webp/file-webp-save.c:597 #, c-format msgid "Saving '%s'" msgstr "Guardando «%s»" -#: plug-ins/common/file-xmc.c:1445 +#: plug-ins/common/file-xmc.c:1443 #, c-format msgid "Frame '%s' is too wide. Please reduce to no more than %dpx." msgstr "El fotograma «%s» es demasiado ancho. Redúzcalo a %dpx como máximo." -#: plug-ins/common/file-xmc.c:1455 +#: plug-ins/common/file-xmc.c:1453 #, c-format msgid "Frame '%s' is too high. Please reduce to no more than %dpx." msgstr "El fotograma «%s» es demasiado alto. Redúzcalo a %dpx como máximo." -#: plug-ins/common/file-xmc.c:1465 +#: plug-ins/common/file-xmc.c:1463 #, c-format msgid "Width and/or height of frame '%s' is zero!" msgstr "La anchura y/o la altura del cuadro «%s» es cero." -#: plug-ins/common/file-xmc.c:1507 +#: plug-ins/common/file-xmc.c:1505 #, c-format msgid "" "Cannot export the cursor because the hot spot is not on frame '%s'.\n" @@ -5604,7 +6447,7 @@ msgstr "" "Trate de cambiar la posición del punto activo, la geometría de la capa o " "exportar sin auto-recorte." -#: plug-ins/common/file-xmc.c:1681 +#: plug-ins/common/file-xmc.c:1679 #, c-format msgid "" "Your cursor was successfully exported but it contains one or more frames " @@ -5617,7 +6460,7 @@ msgstr "" "para cursores de mapas de bits de X.\n" "Podría no estar admitido en algunos entornos." -#: plug-ins/common/file-xmc.c:1689 +#: plug-ins/common/file-xmc.c:1687 msgid "" "Your cursor was successfully exported but it contains one or more frames " "whose nominal size is not supported by GNOME settings.\n" @@ -5630,7 +6473,7 @@ msgstr "" "en el diálogo de exportación, o el cursor podría no aparecer en la " "configuración de GNOME." -#: plug-ins/common/file-xmc.c:1971 +#: plug-ins/common/file-xmc.c:1969 #, c-format msgid "" "Your cursor was successfully exported but it contains one or more frames " @@ -5642,7 +6485,7 @@ msgstr "" "Se ha fijado a %dpx. Debería comprobar el cursor exportado." #. translators: the %i is *always* 8 here -#: plug-ins/common/file-xmc.c:2068 +#: plug-ins/common/file-xmc.c:2066 #, c-format msgid "" "Sorry, this plug-in cannot handle a cursor which contains over %i different " @@ -5651,58 +6494,67 @@ msgstr "" "Lo sentimos, este complemento no puede manejar un cursor que contenga más de " "%i tamaños nominales distintos." -#: plug-ins/common/file-xpm.c:196 plug-ins/common/file-xpm.c:231 +#: plug-ins/common/file-xpm.c:199 plug-ins/common/file-xpm.c:234 msgid "X PixMap image" msgstr "Imagen X PixMap" -#: plug-ins/common/file-xpm.c:252 +#: plug-ins/common/file-xpm.c:255 msgid "XPM" msgstr "XPM" -#: plug-ins/common/file-xpm.c:259 plug-ins/gradient-flare/gradient-flare.c:3014 +#: plug-ins/common/file-xpm.c:262 msgid "_Threshold" msgstr "U_mbral" -#: plug-ins/common/file-xpm.c:260 +#: plug-ins/common/file-xpm.c:263 msgid "Alpha threshold" msgstr "Umbral de alfa" -#: plug-ins/common/file-xpm.c:342 +#: plug-ins/common/file-xpm.c:344 msgid "XPM format does not support multiple layers." msgstr "El formato XMP no soporta múltiples capas." -#: plug-ins/common/file-xpm.c:396 plug-ins/common/file-xpm.c:854 +#: plug-ins/common/file-xpm.c:395 plug-ins/common/file-xpm.c:853 #, c-format msgid "Error opening file '%s'" msgstr "Ocurrió un error al abrir el archivo «%s»" -#: plug-ins/common/file-xpm.c:402 plug-ins/common/file-xpm.c:860 +#: plug-ins/common/file-xpm.c:401 plug-ins/common/file-xpm.c:859 msgid "XPM file invalid" msgstr "Archivo XPM inválido" -#: plug-ins/common/file-xpm.c:695 +#: plug-ins/common/file-xpm.c:694 msgid "Unsupported drawable type" msgstr "Tipo de dibujable no soportado" -#: plug-ins/common/file-xwd.c:319 plug-ins/common/file-xwd.c:349 +#: plug-ins/common/file-xwd.c:327 plug-ins/common/file-xwd.c:357 msgid "X window dump" msgstr "Volcado de X window" -#: plug-ins/common/file-xwd.c:490 +#: plug-ins/common/file-xwd.c:523 #, c-format msgid "Could not read XWD header from '%s'" msgstr "No se pudo leer la cabecera XWD de «%s»" -#: plug-ins/common/file-xwd.c:511 +#: plug-ins/common/file-xwd.c:541 #, c-format msgid "" "'%s':\n" -"Illegal number of colormap entries: %ld" +"Seek error" msgstr "" "«%s»:\n" -"número ilegal de entradas del mapa de color: %ld" +"Error de búsqueda" -#: plug-ins/common/file-xwd.c:521 +#: plug-ins/common/file-xwd.c:551 +#, c-format +msgid "" +"'%s':\n" +"Illegal number of colormap entries: %u" +msgstr "" +"«%s»:\n" +"número ilegal de entradas del mapa de color: %u" + +#: plug-ins/common/file-xwd.c:562 #, c-format msgid "" "'%s':\n" @@ -5711,11 +6563,11 @@ msgstr "" "«%s»:\n" "Número de entradas del mapa de colores < número de colores" -#: plug-ins/common/file-xwd.c:544 +#: plug-ins/common/file-xwd.c:588 msgid "Can't read color entries" msgstr "No se pueden leer entradas de colores" -#: plug-ins/common/file-xwd.c:628 +#: plug-ins/common/file-xwd.c:673 #, c-format msgid "" "XWD-file %s has format %d, depth %d and bits per pixel %d. Currently this is " @@ -5724,155 +6576,187 @@ msgstr "" "El archivo XWD %s tiene formato %d, profundidad %d y %d bits por pixel. " "Actualmente esto no está soportado." -#: plug-ins/common/file-xwd.c:659 +#: plug-ins/common/file-xwd.c:704 msgid "Cannot export images with alpha channels." msgstr "No se pueden exportar imágenes con canales alfa." -#: plug-ins/common/file-xwd.c:682 +#: plug-ins/common/file-xwd.c:727 #, c-format msgid "Could not open '%s' for writing: " msgstr "No se pudo abrir «%s» para escritura: " -#: plug-ins/common/file-xwd.c:709 +#: plug-ins/common/file-xwd.c:754 #, c-format msgid "Error exporting '%s': " msgstr "Error al exportar «%s»: " -#: plug-ins/common/file-xwd.c:1788 plug-ins/common/file-xwd.c:2188 +#: plug-ins/common/file-xwd.c:961 plug-ins/common/file-xwd.c:995 +#: plug-ins/common/file-xwd.c:1032 +msgid "Seek error" +msgstr "Error de búsqueda" + +#: plug-ins/common/file-xwd.c:1884 plug-ins/common/file-xwd.c:2135 +#: plug-ins/common/file-xwd.c:2330 #, c-format msgid "XWD-file %s is corrupt." msgstr "El archivo XWD-file %s corrompido." -#: plug-ins/common/film.c:241 +#: plug-ins/common/file-xwd.c:2083 +#, fuzzy, c-format +#| msgid "Bad colormap" +msgid "" +"'%s':\n" +"Invalid color map" +msgstr "Mapa de colores malo" + +#: plug-ins/common/film.c:180 msgid "_Filmstrip..." msgstr "_Película…" -#: plug-ins/common/film.c:245 +#: plug-ins/common/film.c:184 msgid "Combine several images on a film strip" msgstr "Combinar varias imágenes en una cinta de película" -#: plug-ins/common/film.c:384 +#: plug-ins/common/film.c:245 +#, fuzzy +#| msgid "Image _height:" +msgid "Image _height" +msgstr "Altura de _imagen:" + +#: plug-ins/common/film.c:246 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +msgid "As fraction of the strip height" +msgstr "Todos los valores son fracciones de la altura de la película" + +#: plug-ins/common/film.c:251 +msgid "Image s_pacing" +msgstr "Es_paciado de imagen" + +#: plug-ins/common/film.c:252 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +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:" + +#: plug-ins/common/film.c:258 +#, fuzzy +#| msgid "" +#| "The distance from the center of the image determines the direction of the " +#| "stroke" +msgid "The offset from the edge of film, as fraction of the strip height" +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:" + +#: plug-ins/common/film.c:264 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +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:" + +#: plug-ins/common/film.c:270 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +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:" + +#: plug-ins/common/film.c:276 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +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:" + +#: plug-ins/common/film.c:282 +#, fuzzy +#| msgid "All Values are Fractions of the Strip Height" +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" + +#: plug-ins/common/film.c:365 msgid "Composing images" msgstr "Componiendo imágenes" -#: plug-ins/common/film.c:938 +#: plug-ins/common/film.c:700 +msgid "\"Filmstrip\" cannot be run without any input images" +msgstr "«Filmstrip» no se puede ejecutar sin imágenes de entrada" + +#: plug-ins/common/film.c:970 msgid "Available images:" msgstr "Imágenes disponibles:" -#: plug-ins/common/film.c:939 +#: plug-ins/common/film.c:971 msgid "On film:" msgstr "En la película:" -#: plug-ins/common/film.c:990 plug-ins/common/unit-editor.c:440 +#: plug-ins/common/film.c:1022 plug-ins/common/unit-editor.c:436 msgid "_Add" msgstr "_Añadir" -#: plug-ins/common/film.c:990 plug-ins/imagemap/imap_polygon.c:531 +#: plug-ins/common/film.c:1022 plug-ins/imagemap/imap_polygon.c:531 msgid "_Remove" msgstr "_Quitar" -#. Create selection -#: plug-ins/common/film.c:1026 plug-ins/imagemap/imap_selection.c:339 -#: plug-ins/selection-to-path/selection-to-path.c:540 -msgid "Selection" -msgstr "Selección" - -#. Film height/color -#: plug-ins/common/film.c:1037 plug-ins/common/film.c:1320 +#: plug-ins/common/film.c:1053 plug-ins/common/film.c:1119 msgid "Filmstrip" msgstr "Película" -#. Keep maximum image height -#: plug-ins/common/film.c:1046 -msgid "_Fit height to images" -msgstr "A_justar altura a las imágenes" - -#: plug-ins/common/film.c:1067 plug-ins/common/smooth-palette.c:536 -#: plug-ins/common/tile.c:523 plug-ins/imagemap/imap_cmd_guides.c:173 -#: plug-ins/imagemap/imap_rectangle.c:405 -#: plug-ins/print/print-page-layout.c:288 -msgid "_Height:" -msgstr "A_ltura:" - -#. Film color -#: plug-ins/common/film.c:1088 -msgid "Select Film Color" -msgstr "Seleccionar color de película" - -#: plug-ins/common/film.c:1093 plug-ins/common/film.c:1150 -msgid "Co_lor:" -msgstr "Co_lor:" - -#. Film numbering: Startindex/Font/color -#: plug-ins/common/film.c:1105 +#: plug-ins/common/film.c:1067 msgid "Numbering" msgstr "Numeración" -#: plug-ins/common/film.c:1126 -msgid "Start _index:" -msgstr "Índice _inicial:" - -#: plug-ins/common/film.c:1140 -msgid "_Font:" -msgstr "Tipogra_fía:" - -#. Numbering color -#: plug-ins/common/film.c:1145 -msgid "Select Number Color" -msgstr "Seleccionar color de números" - -#: plug-ins/common/film.c:1163 -msgid "At _bottom" -msgstr "Al _fondo" - -#: plug-ins/common/film.c:1164 -msgid "At _top" -msgstr "A la c_ima" - #. ** The right frame keeps the image selection ** -#: plug-ins/common/film.c:1177 +#: plug-ins/common/film.c:1085 msgid "Image Selection" msgstr "Selección de Imagen" -#: plug-ins/common/film.c:1210 +#: plug-ins/common/film.c:1135 msgid "All Values are Fractions of the Strip Height" msgstr "Todos los valores son fracciones de la altura de la película" -#: plug-ins/common/film.c:1213 +#. Fill the notebook. +#: plug-ins/common/film.c:1142 msgid "Ad_vanced" msgstr "A_vanzado" -#: plug-ins/common/film.c:1229 -msgid "Image _height:" -msgstr "Altura de _imagen:" - -#: plug-ins/common/film.c:1238 -msgid "Image spac_ing:" -msgstr "Es_paciado de imagen:" - -#: plug-ins/common/film.c:1250 -msgid "_Hole offset:" -msgstr "Desp_lazamiento del agujero:" - -#: plug-ins/common/film.c:1259 -msgid "Ho_le width:" -msgstr "Anchura de_l agujero:" - -#: plug-ins/common/film.c:1268 -msgid "Hol_e height:" -msgstr "Altura de aguj_ero:" - -#: plug-ins/common/film.c:1277 -msgid "Hole sp_acing:" -msgstr "Esp_aciado del agujero:" - -#: plug-ins/common/film.c:1289 -msgid "_Number height:" -msgstr "Altura del _número:" - -#: plug-ins/common/film.c:1301 -msgid "Re_set" -msgstr "Re_stablecer" +#: plug-ins/common/film.c:1143 +msgid "_Selection" +msgstr "_Selección" #: plug-ins/common/gradient-map.c:132 msgid "_Gradient Map" @@ -5898,20 +6782,20 @@ msgstr "Mapa de degradado" msgid "Palette Map" msgstr "Mapa de paleta" -#: plug-ins/common/grid.c:173 +#: plug-ins/common/grid.c:157 msgid "_Grid (legacy)..." msgstr "_Rejilla (heredado)…" -#: plug-ins/common/grid.c:178 +#: plug-ins/common/grid.c:162 msgid "Draw a grid on the image" msgstr "Dibujar una rejilla en la imagen" -#: plug-ins/common/grid.c:330 +#: plug-ins/common/grid.c:289 msgid "Drawing grid" msgstr "Rejilla de dibujo" #. attach labels -#: plug-ins/common/grid.c:837 +#: plug-ins/common/grid.c:864 msgid "" "Horizontal\n" "Lines" @@ -5919,7 +6803,7 @@ msgstr "" "Líneas\n" "Horizontales" -#: plug-ins/common/grid.c:839 +#: plug-ins/common/grid.c:866 msgid "" "Vertical\n" "Lines" @@ -5927,30 +6811,34 @@ msgstr "" "Líneas\n" "Verticales" -#: plug-ins/common/grid.c:841 +#: plug-ins/common/grid.c:868 msgid "Intersection" msgstr "Intersección" +#: plug-ins/common/grid.c:871 +msgid "Width:" +msgstr "Anchura:" + #. attach labels -#: plug-ins/common/grid.c:908 +#: plug-ins/common/grid.c:935 msgid "Spacing:" msgstr "Espaciado:" #. attach labels -#: plug-ins/common/grid.c:973 +#: plug-ins/common/grid.c:1000 msgid "Offset:" msgstr "Desplazamiento:" #. attach color selectors -#: plug-ins/common/grid.c:1006 +#: plug-ins/common/grid.c:1033 msgid "Horizontal Color" msgstr "Color horizontal" -#: plug-ins/common/grid.c:1028 +#: plug-ins/common/grid.c:1055 msgid "Vertical Color" msgstr "Color vertical" -#: plug-ins/common/grid.c:1049 +#: plug-ins/common/grid.c:1076 msgid "Intersection Color" msgstr "Color de intersección" @@ -5966,7 +6854,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:892 +#: plug-ins/common/guillotine.c:266 plug-ins/help-browser/dialog.c:821 msgid "Untitled" msgstr "Sin título" @@ -5991,27 +6879,27 @@ msgstr "Acción" msgid "Create _new layer" msgstr "Crear una capa _nueva" -#: plug-ins/common/hot.c:474 plug-ins/common/hot.c:681 +#: plug-ins/common/hot.c:447 plug-ins/common/hot.c:654 msgid "Hot" msgstr "Caliente" -#: plug-ins/common/hot.c:690 +#: plug-ins/common/hot.c:663 msgid "N_TSC" msgstr "N_TSC" -#: plug-ins/common/hot.c:691 +#: plug-ins/common/hot.c:664 msgid "_PAL" msgstr "_PAL" -#: plug-ins/common/hot.c:696 +#: plug-ins/common/hot.c:669 msgid "Reduce _Luminance" msgstr "Reducir la _luminosidad" -#: plug-ins/common/hot.c:697 +#: plug-ins/common/hot.c:670 msgid "Reduce _Saturation" msgstr "Reducir la _saturación" -#: plug-ins/common/hot.c:698 +#: plug-ins/common/hot.c:671 msgid "_Blacken" msgstr "Enne_grecer" @@ -6027,8 +6915,7 @@ msgstr "Aplicar un dibujo de puzzle a la imagen" msgid "Jigsaw puzzle look" msgstr "Apariencia del rompecabezas" -#: plug-ins/common/jigsaw.c:413 plug-ins/common/tile-small.c:511 -#: plug-ins/pagecurl/pagecurl.c:586 +#: plug-ins/common/jigsaw.c:413 plug-ins/common/tile-small.c:505 msgid "_Horizontal" msgstr "_Horizontal" @@ -6036,8 +6923,7 @@ msgstr "_Horizontal" msgid "Number of pieces going across" msgstr "Número de piezas en sentido horizontal" -#: plug-ins/common/jigsaw.c:419 plug-ins/common/tile-small.c:521 -#: plug-ins/pagecurl/pagecurl.c:585 +#: plug-ins/common/jigsaw.c:419 plug-ins/common/tile-small.c:515 msgid "_Vertical" msgstr "_Vertical" @@ -6069,75 +6955,109 @@ msgstr "Re_flejo" msgid "The amount of highlighting on the edges of each piece" msgstr "La cantidad de brillos en los bordes de cada pieza" -#: plug-ins/common/jigsaw.c:503 +#: plug-ins/common/jigsaw.c:483 msgid "Assembling jigsaw" msgstr "Ensamblando el puzzle" -#: plug-ins/common/jigsaw.c:730 +#: plug-ins/common/jigsaw.c:707 msgid "draw_jigsaw: bad style\n" msgstr "draw_jigsaw: estilo malo\n" -#: plug-ins/common/jigsaw.c:2493 +#: plug-ins/common/jigsaw.c:2470 msgid "Jigsaw" msgstr "Puzzle" -#: plug-ins/common/jigsaw.c:2518 +#: plug-ins/common/jigsaw.c:2495 msgid "Number of Tiles" msgstr "Número de piezas" -#: plug-ins/common/jigsaw.c:2535 +#: plug-ins/common/jigsaw.c:2513 msgid "Bevel Edges" msgstr "Biselar los bordes" #. frame for primitive radio buttons -#: plug-ins/common/jigsaw.c:2544 +#: plug-ins/common/jigsaw.c:2523 msgid "Square" msgstr "Cuadrado" -#: plug-ins/common/jigsaw.c:2545 +#: plug-ins/common/jigsaw.c:2524 msgid "Curved" msgstr "Curvado" -#: plug-ins/common/mail.c:204 +#: plug-ins/common/mail.c:188 msgid "Send by E_mail..." msgstr "Enviar por correo-_e..." -#: plug-ins/common/mail.c:209 +#: plug-ins/common/mail.c:193 msgid "Send the image by email" msgstr "Enivar la imagen por correo-e" -#: plug-ins/common/mail.c:564 +#: plug-ins/common/mail.c:195 +msgid "Sendmail is used to send emails and must be properly configured." +msgstr "" +"Sendmail se utiliza para enviar correos electrónicos y debe configurarse " +"correctamente." + +#: plug-ins/common/mail.c:198 +msgid "" +"The preferred email composer is used to send emails and must be properly " +"configured." +msgstr "" +"El gestor de correo electrónico preferido se utiliza para enviar correos " +"electrónicos y debe configurarse correctamente." + +#: plug-ins/common/mail.c:211 +msgid "File_name" +msgstr "_Nombre del archivo" + +#: plug-ins/common/mail.c:212 +#, fuzzy +#| msgid "The amount of the filter to apply" +msgid "The name of the file to save the image in" +msgstr "La cantidad del filtro que aplicar" + +#: plug-ins/common/mail.c:217 +msgid "_To" +msgstr "_Para" + +#: plug-ins/common/mail.c:218 +msgid "The email address to send to" +msgstr "La dirección de correo electrónico a la que enviar" + +#: plug-ins/common/mail.c:223 +msgid "_From" +msgstr "_De" + +#: plug-ins/common/mail.c:224 +msgid "The email address for the From: field" +msgstr "La dirección de correo electrónico para el campo De:" + +#: plug-ins/common/mail.c:229 +msgid "Su_bject" +msgstr "A_sunto" + +#: plug-ins/common/mail.c:230 +msgid "The subject" +msgstr "El asunto" + +#: plug-ins/common/mail.c:236 +msgid "The comment" +msgstr "El comentario" + +#: plug-ins/common/mail.c:543 msgid "Send by Email" msgstr "Enviar por correo-e" -#: plug-ins/common/mail.c:569 -msgid "_Send" -msgstr "_Enviar" +#: plug-ins/common/mail.c:547 +msgid "Send" +msgstr "Enviar" -#: plug-ins/common/mail.c:600 -msgid "_Filename:" -msgstr "Nombre del _archivo:" - -#: plug-ins/common/mail.c:614 -msgctxt "email-address" -msgid "_To:" -msgstr "_Para:" - -#: plug-ins/common/mail.c:628 -msgctxt "email-address" -msgid "_From:" -msgstr "_De:" - -#: plug-ins/common/mail.c:640 -msgid "S_ubject:" -msgstr "A_sunto:" - -#: plug-ins/common/mail.c:708 +#: plug-ins/common/mail.c:683 msgid "some sort of error with the file extension or lack thereof" msgstr "" "se produjo un error con la extensión del archivo, o bien falta la misma" -#: plug-ins/common/mail.c:892 +#: plug-ins/common/mail.c:868 #, c-format msgid "Could not start sendmail (%s)" msgstr "No se pudo iniciar sendmail (%s)" @@ -6188,20 +7108,20 @@ msgstr "" "El filtro que ejecutar, 0 - media alfa recortada; 1 - estimación óptima " "(alfa controla la variación del ruido); 2 - realce de bordes" -#: plug-ins/common/nl-filter.c:1031 plug-ins/common/nl-filter.c:1129 +#: plug-ins/common/nl-filter.c:1008 plug-ins/common/nl-filter.c:1106 msgid "NL Filter" msgstr "Filtro NL" # //R :-???? -#: plug-ins/common/nl-filter.c:1144 +#: plug-ins/common/nl-filter.c:1121 msgid "Alpha trimmed mean" msgstr "Media alfa recortada" -#: plug-ins/common/nl-filter.c:1145 +#: plug-ins/common/nl-filter.c:1122 msgid "Optimal estimation" msgstr "Estimación óptima" -#: plug-ins/common/nl-filter.c:1146 +#: plug-ins/common/nl-filter.c:1123 msgid "Edge enhancement" msgstr "Realce de bordes" @@ -6226,60 +7146,60 @@ msgstr "" "ser de ayuda para encontrar dónde se han instalado nuevos complementos en " "los menús." -#: plug-ins/common/plugin-browser.c:372 +#: plug-ins/common/plugin-browser.c:373 msgid "Searching by name" msgstr "Buscando por nombre" -#: plug-ins/common/plugin-browser.c:387 +#: plug-ins/common/plugin-browser.c:389 #, c-format msgid "%d plug-in" msgid_plural "%d plug-ins" msgstr[0] "%d complemento" msgstr[1] "%d complementos" -#: plug-ins/common/plugin-browser.c:396 +#: plug-ins/common/plugin-browser.c:398 msgid "No matches for your query" msgstr "No hay resultados respecto de su búsqueda" -#: plug-ins/common/plugin-browser.c:399 +#: plug-ins/common/plugin-browser.c:401 #, c-format msgid "%d plug-in matches your query" msgid_plural "%d plug-ins match your query" msgstr[0] "%d complemento coincide con su consulta" msgstr[1] "%d complementos coinciden con su consulta" -#: plug-ins/common/plugin-browser.c:530 +#: plug-ins/common/plugin-browser.c:532 msgid "No matches" msgstr "Sin correspondencias" -#: plug-ins/common/plugin-browser.c:556 +#: plug-ins/common/plugin-browser.c:558 msgid "Plug-in Browser" msgstr "Visor de complementos" -#: plug-ins/common/plugin-browser.c:601 plug-ins/metadata/metadata-editor.c:605 +#: 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 msgid "Name" msgstr "Nombre" -#: plug-ins/common/plugin-browser.c:609 plug-ins/common/plugin-browser.c:672 +#: plug-ins/common/plugin-browser.c:611 plug-ins/common/plugin-browser.c:674 msgid "Menu Path" msgstr "Ruta del menú" -#: plug-ins/common/plugin-browser.c:617 plug-ins/common/plugin-browser.c:681 +#: plug-ins/common/plugin-browser.c:619 plug-ins/common/plugin-browser.c:683 msgid "Image Types" msgstr "Tipos de imagen" -#: plug-ins/common/plugin-browser.c:627 plug-ins/common/plugin-browser.c:690 +#: plug-ins/common/plugin-browser.c:629 plug-ins/common/plugin-browser.c:692 msgid "Installation Date" msgstr "Fecha de instalación" -#: plug-ins/common/plugin-browser.c:651 +#: plug-ins/common/plugin-browser.c:653 msgid "List View" msgstr "Vista de lista" -#: plug-ins/common/plugin-browser.c:713 +#: plug-ins/common/plugin-browser.c:715 msgid "Tree View" msgstr "Vista de árbol" @@ -6292,10 +7212,15 @@ msgstr "Visor de _procedimientos" msgid "List available procedures in the PDB" msgstr "Relacionar los procedimientos disponibles en el PDB" -#: plug-ins/common/procedure-browser.c:165 +#: plug-ins/common/procedure-browser.c:166 msgid "Procedure Browser" msgstr "Visor de procedimientos" +#: plug-ins/common/procedure-browser.c:184 +#, c-format +msgid "Procedure %s allows only interactive invocation." +msgstr "El procedimiento %s sólo permite la invocación interactiva" + #: plug-ins/common/qbist.c:185 msgid "_Qbist..." msgstr "_Qbista…" @@ -6308,151 +7233,256 @@ msgstr "Generar una ingente variedad de dibujos abstractos" msgid "Any file which will be used as source for pattern generation" msgstr "Cualquier archivo que se usará como origen para generación de patrones" -#: plug-ins/common/qbist.c:369 +#: plug-ins/common/qbist.c:360 msgid "Qbist" msgstr "Qbist" -#: plug-ins/common/qbist.c:844 +#: plug-ins/common/qbist.c:832 msgid "Load QBE File" msgstr "Cargar archivo QBE" -#: plug-ins/common/qbist.c:886 +#: plug-ins/common/qbist.c:874 msgid "Save as QBE File" msgstr "Guardar como archivo QBE" -#: plug-ins/common/qbist.c:940 +#: plug-ins/common/qbist.c:928 msgid "G-Qbist" msgstr "G-Qbist" -#: plug-ins/common/qbist.c:1024 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:683 +#: plug-ins/common/qbist.c:1012 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:736 msgid "_Undo" msgstr "_Deshacer" -#: plug-ins/common/sample-colorize.c:330 +#: plug-ins/common/sample-colorize.c:326 msgid "_Sample Colorize..." msgstr "_Colorear desde muestra…" -#: plug-ins/common/sample-colorize.c:334 +#: plug-ins/common/sample-colorize.c:330 msgid "Colorize image using a sample image as a guide" msgstr "Colorear imagen usando una imagen de muestra como guía" -#: plug-ins/common/sample-colorize.c:1409 +#: plug-ins/common/sample-colorize.c:340 +msgid "Sample drawable" +msgstr "Dibujable de muestra" + +#: plug-ins/common/sample-colorize.c:341 +msgid "Sample drawable (should be of Type RGB or RGBA)" +msgstr "Dibujable de muestra (debe ser de tipo RGB o RGBA)" + +#: plug-ins/common/sample-colorize.c:346 +msgid "Hold _intensity" +msgstr "Mantener _intensidad" + +#: plug-ins/common/sample-colorize.c:347 +msgid "Hold brightness intensity levels" +msgstr "Mantener niveles de intensidad de brillo" + +#: plug-ins/common/sample-colorize.c:352 +msgid "Original i_ntensity" +msgstr "I_ntensidad original" + +#: plug-ins/common/sample-colorize.c:353 +msgid "" +"TRUE: hold brightness of original intensity levels, FALSE: Hold Intensity of " +"input levels" +msgstr "" +"VERDADERO: mantiene el brillo de los niveles de intensidad originales, " +"FALSO: mantiene la intensidad de los niveles de entrada" + +#: plug-ins/common/sample-colorize.c:360 +msgid "Us_e subcolors" +msgstr "Usar sub-color_es" + +#: plug-ins/common/sample-colorize.c:361 +msgid "" +"TRUE: Use all subcolors of same intensity, FALSE: Use only one color per " +"intensity" +msgstr "" +"VERDADERO: usa todos los subcolores de la misma intensidad, FALSO: usa solo " +"un color por intensidad" + +#: plug-ins/common/sample-colorize.c:367 +msgid "Smooth sam_ples" +msgstr "Suavizar las _muestras" + +#: plug-ins/common/sample-colorize.c:368 +msgid "" +"TRUE: guess samplecolors for the missing intensity values, FALSE: use only " +"colors found in the sample" +msgstr "" +"VERDADERO: adivina los colores de muestra para los valores de intensidad que " +"faltan, FALSO: usa solo los colores que se encuentran en la muestra" + +#: plug-ins/common/sample-colorize.c:375 +msgid "_Low" +msgstr "_Bajo" + +#: plug-ins/common/sample-colorize.c:376 +msgid "Intensity of lowest input" +msgstr "Intensidad de la entrada más baja" + +#: plug-ins/common/sample-colorize.c:381 +msgid "_High" +msgstr "_Alto" + +#: plug-ins/common/sample-colorize.c:382 +msgid "Intensity of highest input" +msgstr "Intensidad de la entrada más alta" + +#: plug-ins/common/sample-colorize.c:387 +msgid "Ga_mma" +msgstr "Ga_mma" + +#: plug-ins/common/sample-colorize.c:388 +msgid "Gamma adjustment factor, 1.0 is linear" +msgstr "Factor de ajuste de gamma, 1.0 es lineal" + +#: plug-ins/common/sample-colorize.c:393 +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" + +#: plug-ins/common/sample-colorize.c:399 +#, fuzzy +#| msgid "Hi_ghlight" +msgid "Hi_gh" +msgstr "Re_flejo" + +#: plug-ins/common/sample-colorize.c:400 +#, fuzzy +#| msgid "Light intensity" +msgid "Highest sample color intensity" +msgstr "Intensidad de la luz" + +#: plug-ins/common/sample-colorize.c:1406 msgid "Sample Colorize" msgstr "Colorear desde muestra" -#: plug-ins/common/sample-colorize.c:1414 -msgid "Get _Sample Colors" -msgstr "Obtener colores de _muestra" - -#: plug-ins/common/sample-colorize.c:1416 plug-ins/common/tile-small.c:635 -#: plug-ins/fractal-explorer/fractal-explorer.c:1225 -#: plug-ins/pikaressionist/orientmap.c:527 -#: plug-ins/pikaressionist/presets.c:1060 plug-ins/pikaressionist/sizemap.c:400 -#: plug-ins/imagemap/imap_default_dialog.c:103 -msgid "_Apply" -msgstr "_Aplicar" - #. layer combo_box (Dst) -#: plug-ins/common/sample-colorize.c:1443 +#: plug-ins/common/sample-colorize.c:1418 msgid "Destination:" msgstr "Destino:" #. layer combo_box (Sample) -#: plug-ins/common/sample-colorize.c:1458 +#: plug-ins/common/sample-colorize.c:1433 msgid "Sample:" msgstr "Muestra:" -#: plug-ins/common/sample-colorize.c:1467 +#: plug-ins/common/sample-colorize.c:1442 msgid "From reverse gradient" msgstr "Desde degradado invertido" -#: plug-ins/common/sample-colorize.c:1472 +#: plug-ins/common/sample-colorize.c:1447 msgid "From gradient" msgstr "Desde degradado" #. check button -#: plug-ins/common/sample-colorize.c:1491 +#: plug-ins/common/sample-colorize.c:1465 msgid "Sho_w selection" msgstr "Mo_strar selección" #. check button -#: plug-ins/common/sample-colorize.c:1502 +#: plug-ins/common/sample-colorize.c:1476 msgid "Show co_lor" msgstr "Mostrar co_lor" #. check button -#: plug-ins/common/sample-colorize.c:1517 +#: plug-ins/common/sample-colorize.c:1491 msgid "Show selec_tion" msgstr "Mos_trar selección" #. check button -#: plug-ins/common/sample-colorize.c:1528 +#: plug-ins/common/sample-colorize.c:1502 msgid "Show c_olor" msgstr "Mostrar c_olor" -#: plug-ins/common/sample-colorize.c:1655 +#: plug-ins/common/sample-colorize.c:1626 msgid "Input levels:" msgstr "Niveles de entrada:" -#: plug-ins/common/sample-colorize.c:1705 +#: plug-ins/common/sample-colorize.c:1653 msgid "Output levels:" msgstr "Niveles de salida:" -#. check button -#: plug-ins/common/sample-colorize.c:1744 -msgid "Hold _intensity" -msgstr "Mantener _intensidad" +#: plug-ins/common/sample-colorize.c:1703 +msgid "Get _Sample Colors" +msgstr "Obtener colores de _muestra" -#. check button -#: plug-ins/common/sample-colorize.c:1755 -msgid "Original i_ntensity" -msgstr "I_ntensidad original" - -#. check button -#: plug-ins/common/sample-colorize.c:1772 -msgid "Us_e subcolors" -msgstr "Usar sub-color_es" - -#. check button -#: plug-ins/common/sample-colorize.c:1783 -msgid "S_mooth samples" -msgstr "Suavizar las _muestras" - -#: plug-ins/common/sample-colorize.c:2661 +#: plug-ins/common/sample-colorize.c:2577 msgid "Sample analyze" msgstr "Análisis de muestra" -#: plug-ins/common/sample-colorize.c:3061 +#: plug-ins/common/sample-colorize.c:2988 msgid "Remap colorized" msgstr "Volver a mapear el colorizado" -#: plug-ins/common/smooth-palette.c:134 +#: plug-ins/common/smooth-palette.c:121 msgid "Smoo_th Palette..." msgstr "_Suavizar paleta…" -#: plug-ins/common/smooth-palette.c:138 +#: plug-ins/common/smooth-palette.c:125 msgid "Derive a smooth color palette from the image" msgstr "Derivar una paleta de colores suaves desde la imagen" -#: plug-ins/common/smooth-palette.c:247 +#: plug-ins/common/smooth-palette.c:136 +msgid "Width" +msgstr "Anchura" + +#: plug-ins/common/smooth-palette.c:142 +msgid "Height" +msgstr "Altura" + +#: plug-ins/common/smooth-palette.c:147 +#, fuzzy +#| msgid "_Search depth:" +msgid "Search _depth" +msgstr "Profundidad de la bú_squeda:" + +#: plug-ins/common/smooth-palette.c:148 +#, fuzzy +#| msgid "_Search depth:" +msgid "Search depth" +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 +#: plug-ins/gfig/gfig-dialog.c:600 +msgid "Show image" +msgstr "Mostrar imagen" + +#: plug-ins/common/smooth-palette.c:165 +msgid "New layer" +msgstr "Capa nueva" + +#: plug-ins/common/smooth-palette.c:166 +msgid "Output layer" +msgstr "Capa de salida" + +#: plug-ins/common/smooth-palette.c:216 msgid "Deriving smooth palette" msgstr "Derivando paleta suavizada" -#: plug-ins/common/smooth-palette.c:507 +#: plug-ins/common/smooth-palette.c:486 msgid "Smooth Palette" msgstr "Suavizar paleta" -#: plug-ins/common/smooth-palette.c:531 plug-ins/common/tile.c:519 -#: plug-ins/imagemap/imap_cmd_guides.c:163 +#: plug-ins/common/smooth-palette.c:503 plug-ins/imagemap/imap_cmd_guides.c:163 #: plug-ins/imagemap/imap_rectangle.c:398 #: plug-ins/print/print-page-layout.c:286 msgid "_Width:" msgstr "A_nchura:" -#: plug-ins/common/smooth-palette.c:550 -msgid "_Search depth:" -msgstr "Profundidad de la bú_squeda:" +#: plug-ins/common/smooth-palette.c:508 plug-ins/imagemap/imap_cmd_guides.c:173 +#: plug-ins/imagemap/imap_rectangle.c:405 +#: plug-ins/print/print-page-layout.c:288 +msgid "_Height:" +msgstr "A_ltura:" #: plug-ins/common/sparkle.c:177 msgid "_Sparkle..." @@ -6578,32 +7608,32 @@ msgstr "Tipo de color" msgid "Color of sparkles: { NATURAL (0), FOREGROUND (1), BACKGROUND (2) }" msgstr "Color de destellos: { NATURAL (0), PRIMER PLANO (1), FONDO (2) }" -#: plug-ins/common/sparkle.c:321 +#: plug-ins/common/sparkle.c:314 msgid "Region selected for filter is empty" msgstr "La región seleccionada para el filtro está vacía" -#: plug-ins/common/sparkle.c:353 +#: plug-ins/common/sparkle.c:329 msgid "Sparkling" msgstr "Moteado" -#: plug-ins/common/sparkle.c:392 +#: plug-ins/common/sparkle.c:362 msgid "Sparkle" msgstr "Motas" -#: plug-ins/common/sparkle.c:447 +#: plug-ins/common/sparkle.c:417 msgid "Additional Options" msgstr "Opciones adicionales" #. colortype -#: plug-ins/common/sparkle.c:453 +#: plug-ins/common/sparkle.c:424 msgid "Natural color" msgstr "Color natural" -#: plug-ins/common/sparkle.c:454 plug-ins/common/warp.c:632 +#: plug-ins/common/sparkle.c:425 plug-ins/common/warp.c:614 msgid "Foreground color" msgstr "Color de frente" -#: plug-ins/common/sparkle.c:455 +#: plug-ins/common/sparkle.c:426 msgid "Background color" msgstr "Color de fondo" @@ -6636,7 +7666,7 @@ msgid "Wood" msgstr "Madera" #: plug-ins/common/sphere-designer.c:343 plug-ins/flame/flame.c:820 -#: plug-ins/gfig/gfig-dialog.c:399 +#: plug-ins/gfig/gfig-dialog.c:399 plug-ins/gfig/gfig-menu.ui:79 msgid "Spiral" msgstr "Espiral" @@ -6688,7 +7718,7 @@ msgid "Layers" msgstr "Capas" #: plug-ins/common/sphere-designer.c:2739 -#: plug-ins/gradient-flare/gradient-flare.c:3081 +#: plug-ins/gradient-flare/gradient-flare.c:3045 msgid "_New" msgstr "_Nueva" @@ -6697,11 +7727,11 @@ msgid "D_uplicate" msgstr "D_uplicar" #: plug-ins/common/sphere-designer.c:2751 -#: plug-ins/fractal-explorer/fractal-explorer.c:875 -#: plug-ins/fractal-explorer/fractal-explorer.c:1236 +#: plug-ins/fractal-explorer/fractal-explorer.c:887 +#: plug-ins/fractal-explorer/fractal-explorer.c:1357 #: plug-ins/pikaressionist/presets.c:1067 -#: plug-ins/gradient-flare/gradient-flare.c:3084 -#: plug-ins/gradient-flare/gradient-flare.c:3367 +#: plug-ins/gradient-flare/gradient-flare.c:3048 +#: plug-ins/gradient-flare/gradient-flare.c:3331 msgid "_Delete" msgstr "_Eliminar" @@ -6713,8 +7743,7 @@ msgstr "Propiedades" msgid "Bump" msgstr "Relieve" -#. row labels -#: plug-ins/common/sphere-designer.c:2784 plug-ins/lighting/lighting-ui.c:414 +#: plug-ins/common/sphere-designer.c:2784 msgid "Type:" msgstr "Tipo:" @@ -6733,7 +7762,7 @@ 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:717 +#: plug-ins/ifs-compose/ifs-compose.c:663 msgid "Scale:" msgstr "Escala:" @@ -6754,7 +7783,6 @@ msgid "Transformations" msgstr "Transformaciones" #: plug-ins/common/sphere-designer.c:2877 -#: plug-ins/map-object/map-object-ui.c:1121 msgid "Scale X:" msgstr "Escala X:" @@ -6798,88 +7826,100 @@ msgstr "Renderizando esfera" msgid "Region selected for plug-in is empty" msgstr "La región seleccionada para el complemento está vacía" -#: plug-ins/common/tile.c:144 +#: plug-ins/common/tile.c:131 msgid "_Tile..." msgstr "_Enlosar…" -#: plug-ins/common/tile.c:148 +#: plug-ins/common/tile.c:135 msgid "Create an array of copies of the image" msgstr "Crea una formación de copias de la imagen" -#: plug-ins/common/tile.c:256 plug-ins/common/tile-small.c:377 +#: plug-ins/common/tile.c:254 plug-ins/common/tile-small.c:377 msgid "Tiling" msgstr "Enlosado" -#: plug-ins/common/tile.c:488 +#: plug-ins/common/tile.c:478 msgid "Tile" msgstr "Losa" -#: plug-ins/common/tile.c:510 +#: plug-ins/common/tile.c:480 msgid "Tile to New Size" msgstr "Enlosar a tamaño nuevo" -#: plug-ins/common/tile.c:531 -msgid "C_reate new image" -msgstr "Crear imagen _nueva" - -#: plug-ins/common/tile-small.c:265 +#: plug-ins/common/tile-small.c:271 msgid "_Small Tiles..." msgstr "Baldosas _pequeñas…" -#: plug-ins/common/tile-small.c:269 +#: plug-ins/common/tile-small.c:275 msgid "Tile image into smaller versions of the original" msgstr "Enlosar la imagen en versiones más pequeñas del original" -#: plug-ins/common/tile-small.c:326 +#: plug-ins/common/tile-small.c:285 +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" + +#: plug-ins/common/tile-small.c:332 msgid "Region selected for filter is empty." msgstr "La región seleccionada para el filtro está vacía." -#. Get the preview image -#: plug-ins/common/tile-small.c:442 +#: plug-ins/common/tile-small.c:443 msgid "Small Tiles" msgstr "Baldosas pequeñas" #. Area for buttons etc #. Flip -#: plug-ins/common/tile-small.c:498 plug-ins/ifs-compose/ifs-compose.c:773 +#: plug-ins/common/tile-small.c:492 plug-ins/ifs-compose/ifs-compose.c:719 msgid "Flip" msgstr "Voltear" -#: plug-ins/common/tile-small.c:547 +#: plug-ins/common/tile-small.c:541 msgid "A_ll tiles" msgstr "T_odas las baldosas" -#: plug-ins/common/tile-small.c:560 +#: plug-ins/common/tile-small.c:554 msgid "Al_ternate tiles" msgstr "Baldosas al_ternadas" -#: plug-ins/common/tile-small.c:573 +#: plug-ins/common/tile-small.c:567 msgid "_Explicit tile" msgstr "Baldosas _explícitas" -#: plug-ins/common/tile-small.c:578 +#: plug-ins/common/tile-small.c:572 msgid "Ro_w:" msgstr "Fi_la:" -#: plug-ins/common/tile-small.c:603 +#: plug-ins/common/tile-small.c:597 msgid "Col_umn:" msgstr "Col_umna:" +#: plug-ins/common/tile-small.c:629 +#: plug-ins/fractal-explorer/fractal-explorer.c:1346 +#: plug-ins/pikaressionist/orientmap.c:527 +#: plug-ins/pikaressionist/presets.c:1060 plug-ins/pikaressionist/sizemap.c:400 +#: plug-ins/imagemap/imap_default_dialog.c:103 +msgid "_Apply" +msgstr "_Aplicar" + #. Widget for selecting the Opacity -#: plug-ins/common/tile-small.c:651 +#: plug-ins/common/tile-small.c:645 msgid "O_pacity:" msgstr "O_pacidad:" -#. Lower frame saying how many segments -#: plug-ins/common/tile-small.c:661 +#: plug-ins/common/tile-small.c:656 msgid "Number of Segments" msgstr "Número de segmentos" -#: plug-ins/common/unit-editor.c:115 +#: plug-ins/common/unit-editor.c:114 msgid "Saved" msgstr "Guardado" -#: plug-ins/common/unit-editor.c:115 +#: plug-ins/common/unit-editor.c:114 msgid "" "A unit definition will only be saved before PIKA exits if this column is " "checked." @@ -6887,30 +7927,30 @@ msgstr "" "Una definición de unidad sólo se guardará antes de que salga de PIKA si esta " "columna está marcada." -#: plug-ins/common/unit-editor.c:117 +#: plug-ins/common/unit-editor.c:116 msgid "ID" msgstr "Id" -#: plug-ins/common/unit-editor.c:117 +#: plug-ins/common/unit-editor.c:116 msgid "" "This string will be used to identify a unit in PIKA's configuration files." msgstr "" "Esta cadena se usará para identificar una unidad en los archivos de " "configuración de PIKA." -#: plug-ins/common/unit-editor.c:119 +#: plug-ins/common/unit-editor.c:118 msgid "Factor" msgstr "Factor" -#: plug-ins/common/unit-editor.c:119 +#: plug-ins/common/unit-editor.c:118 msgid "How many units make up an inch." msgstr "Cuántas unidades hacen una pulgada." -#: plug-ins/common/unit-editor.c:120 +#: plug-ins/common/unit-editor.c:119 msgid "Digits" msgstr "Dígitos" -#: plug-ins/common/unit-editor.c:120 +#: plug-ins/common/unit-editor.c:119 msgid "" "This field is a hint for numerical input fields. It specifies how many " "decimal digits the input field should provide to get approximately the same " @@ -6921,11 +7961,11 @@ msgstr "" "entrada para conseguir aproximadamente la misma precisión que un campo de " "entrada en «pulgadas» con dos dígitos decimales." -#: plug-ins/common/unit-editor.c:125 +#: plug-ins/common/unit-editor.c:124 msgid "Symbol" msgstr "Símbolo" -#: plug-ins/common/unit-editor.c:125 +#: plug-ins/common/unit-editor.c:124 msgid "" "The unit's symbol if it has one (e.g. \" for inches). The unit's " "abbreviation is used if doesn't have a symbol." @@ -6933,101 +7973,101 @@ msgstr "" "El símbolo de la unidad, si tiene (p.ej «\"» para pulgadas). Si no tiene " "símbolo, se usa la abreviatura de la unidad." -#: plug-ins/common/unit-editor.c:128 +#: plug-ins/common/unit-editor.c:127 msgid "Abbreviation" msgstr "Abreviatura" -#: plug-ins/common/unit-editor.c:128 +#: plug-ins/common/unit-editor.c:127 msgid "The unit's abbreviation (e.g. \"cm\" for centimeters)." msgstr "La abreviatura de la unidad (p.ej «cm» para centímetros)." -#: plug-ins/common/unit-editor.c:130 +#: plug-ins/common/unit-editor.c:129 msgid "Singular" msgstr "Singular" -#: plug-ins/common/unit-editor.c:130 +#: plug-ins/common/unit-editor.c:129 msgid "The unit's singular form." msgstr "La forma singular de la unidad." -#: plug-ins/common/unit-editor.c:131 +#: plug-ins/common/unit-editor.c:130 msgid "Plural" msgstr "Plural" -#: plug-ins/common/unit-editor.c:131 +#: plug-ins/common/unit-editor.c:130 msgid "The unit's plural form." msgstr "La forma plural de la unidad." -#: plug-ins/common/unit-editor.c:175 +#: plug-ins/common/unit-editor.c:174 msgid "U_nits" msgstr "U_nidades" -#: plug-ins/common/unit-editor.c:180 +#: plug-ins/common/unit-editor.c:179 msgid "Create or alter units used in PIKA" msgstr "Crear o alterar unidades usadas en PIKA" -#: plug-ins/common/unit-editor.c:230 plug-ins/common/unit-editor.c:249 +#: plug-ins/common/unit-editor.c:228 plug-ins/common/unit-editor.c:247 msgid "Unit Editor" msgstr "Editor de unidades" #. destroy model automatically with view #. Put buttons in -#: plug-ins/common/unit-editor.c:253 -#: plug-ins/fractal-explorer/fractal-explorer.c:1214 +#: plug-ins/common/unit-editor.c:251 +#: plug-ins/fractal-explorer/fractal-explorer.c:1335 #: plug-ins/pikaressionist/presets.c:1073 msgid "_Refresh" msgstr "_Actualizar" -#: plug-ins/common/unit-editor.c:260 +#: plug-ins/common/unit-editor.c:258 msgid "_Help" msgstr "A_yuda" -#: plug-ins/common/unit-editor.c:291 +#: plug-ins/common/unit-editor.c:289 msgid "Create a new unit from scratch" msgstr "Crea una nueva unidad desde cero" -#: plug-ins/common/unit-editor.c:298 +#: plug-ins/common/unit-editor.c:296 msgid "Create a new unit using the currently selected unit as template" msgstr "" "Crea una unidad nueva usando como plantilla la unidad actualmente " "seleccionada" -#: plug-ins/common/unit-editor.c:435 +#: plug-ins/common/unit-editor.c:431 msgid "Add a New Unit" msgstr "Añadir una unidad nueva" -#: plug-ins/common/unit-editor.c:464 +#: plug-ins/common/unit-editor.c:460 msgid "_ID:" msgstr "_ID:" -#: plug-ins/common/unit-editor.c:476 +#: plug-ins/common/unit-editor.c:472 msgid "_Factor:" msgstr "_Factor:" -#: plug-ins/common/unit-editor.c:487 +#: plug-ins/common/unit-editor.c:483 msgid "_Digits:" msgstr "_Dígitos:" -#: plug-ins/common/unit-editor.c:499 +#: plug-ins/common/unit-editor.c:495 msgid "_Symbol:" msgstr "_Símbolo:" -#: plug-ins/common/unit-editor.c:511 +#: plug-ins/common/unit-editor.c:507 msgid "_Abbreviation:" msgstr "_Abreviatura:" -#: plug-ins/common/unit-editor.c:523 +#: plug-ins/common/unit-editor.c:519 msgid "Si_ngular:" msgstr "Si_ngular:" -#: plug-ins/common/unit-editor.c:535 +#: plug-ins/common/unit-editor.c:531 msgid "_Plural:" msgstr "_Plural:" -#: plug-ins/common/unit-editor.c:578 +#: plug-ins/common/unit-editor.c:574 msgid "Incomplete input" msgstr "Entrada incompleta" -#: plug-ins/common/unit-editor.c:581 +#: plug-ins/common/unit-editor.c:577 msgid "Please fill in all text fields." msgstr "Rellene todos los campos de texto." @@ -7103,121 +8143,119 @@ msgstr "_Van Gogh (LIC)…" msgid "Special effects that nobody understands" msgstr "Efectos especiales que nadie comprende" -#: plug-ins/common/warp.c:250 +#: plug-ins/common/warp.c:219 msgid "_Warp..." msgstr "_Deformar…" -#: plug-ins/common/warp.c:254 +#: plug-ins/common/warp.c:223 msgid "Twist or smear image in many different ways" msgstr "Girar o emborronar la imagen de muchas maneras diferentes" -#: plug-ins/common/warp.c:486 +#: plug-ins/common/warp.c:468 msgid "Warp" msgstr "Deformar" -#: plug-ins/common/warp.c:508 +#: plug-ins/common/warp.c:490 msgid "Basic Options" msgstr "Opciones básicas" -#: plug-ins/common/warp.c:529 +#: plug-ins/common/warp.c:511 msgid "Step size:" msgstr "Tamaño del paso:" -#: plug-ins/common/warp.c:543 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:762 -#: plug-ins/ifs-compose/ifs-compose.c:1293 +#: plug-ins/common/warp.c:525 plug-ins/ifs-compose/ifs-compose.c:1239 msgid "Iterations:" msgstr "Iteraciones:" #. Displacement map menu -#: plug-ins/common/warp.c:552 +#: plug-ins/common/warp.c:534 msgid "Displacement map:" msgstr "Mapa de desplazamiento:" #. ======================================================================= #. Displacement Type -#: plug-ins/common/warp.c:576 +#: plug-ins/common/warp.c:558 msgid "On edges:" msgstr "En los bordes:" -#: plug-ins/common/warp.c:587 +#: plug-ins/common/warp.c:569 msgid "Wrap" msgstr "Dar la vuelta" -#: plug-ins/common/warp.c:602 +#: plug-ins/common/warp.c:584 msgid "Smear" msgstr "Manchar" #. -------------------------------------------------------------------- #. --------- The secondary grid -------------------------- -#: plug-ins/common/warp.c:652 plug-ins/file-jpeg/jpeg-save.c:968 +#: plug-ins/common/warp.c:634 plug-ins/file-jpeg/jpeg-save.c:970 #: plug-ins/file-webp/file-webp-dialog.c:107 msgid "Advanced Options" msgstr "Opciones avanzadas" -#: plug-ins/common/warp.c:667 +#: plug-ins/common/warp.c:649 msgid "Dither size:" msgstr "Tamaño del entramado:" -#: plug-ins/common/warp.c:680 +#: plug-ins/common/warp.c:662 msgid "Rotation angle:" msgstr "Ángulo de rotación:" -#: plug-ins/common/warp.c:693 +#: plug-ins/common/warp.c:675 msgid "Substeps:" msgstr "Sub-pasos:" #. Magnitude map menu -#: plug-ins/common/warp.c:702 +#: plug-ins/common/warp.c:684 msgid "Magnitude map:" msgstr "Mapa de magnitud:" -#: plug-ins/common/warp.c:730 +#: plug-ins/common/warp.c:712 msgid "Use magnitude map" msgstr "Usar mapa de magnitud" #. -------------------------------------------------------------------- #. --------- The "other" grid -------------------------- -#: plug-ins/common/warp.c:744 +#: plug-ins/common/warp.c:726 msgid "More Advanced Options" msgstr "Más opciones avanzadas" -#: plug-ins/common/warp.c:760 +#: plug-ins/common/warp.c:742 msgid "Gradient scale:" msgstr "Escala del degradado:" -#: plug-ins/common/warp.c:783 +#: plug-ins/common/warp.c:765 msgid "Gradient map selection menu" msgstr "Menú de selección del mapa de degradado" -#: plug-ins/common/warp.c:793 +#: plug-ins/common/warp.c:775 msgid "Vector mag:" msgstr "Magnitud del vector:" #. Angle -#: plug-ins/common/warp.c:808 plug-ins/ifs-compose/ifs-compose.c:731 +#: plug-ins/common/warp.c:790 plug-ins/ifs-compose/ifs-compose.c:677 msgid "Angle:" msgstr "Ángulo:" -#: plug-ins/common/warp.c:831 +#: plug-ins/common/warp.c:813 msgid "Fixed-direction-vector map selection menu" msgstr "Menú de selección del mapa de vector de dirección fija" #. make sure layer is visible -#: plug-ins/common/warp.c:1385 +#: plug-ins/common/warp.c:1405 msgid "Smoothing X gradient" msgstr "Suavizando degradado X" -#: plug-ins/common/warp.c:1388 +#: plug-ins/common/warp.c:1408 msgid "Smoothing Y gradient" msgstr "Suavizando degradado Y" #. calculate new X,Y Displacement image maps -#: plug-ins/common/warp.c:1432 +#: plug-ins/common/warp.c:1451 msgid "Finding XY gradient" msgstr "Buscando un degradado XY" -#: plug-ins/common/warp.c:1450 +#: plug-ins/common/warp.c:1475 #, c-format msgid "Flow step %d" msgstr "Paso del flujo %d" @@ -7227,7 +8265,7 @@ msgid "_Wavelet-decompose..." msgstr "_Descomposición-en-ondículas…" #: plug-ins/common/wavelet-decompose.c:122 -#: plug-ins/common/wavelet-decompose.c:402 +#: plug-ins/common/wavelet-decompose.c:378 msgid "Wavelet decompose" msgstr "Descomposición en ondículas" @@ -7243,154 +8281,174 @@ msgstr "Crear un grupo de capas para almacenar la _descomposición" msgid "_Add a layer mask to each scales layer" msgstr "_Añadir una máscara de capa para cada capa de escalas" -#: plug-ins/common/wavelet-decompose.c:225 +#: plug-ins/common/wavelet-decompose.c:204 msgid "Wavelet-Decompose" msgstr "Descomposición-en-ondículas" -#: plug-ins/common/wavelet-decompose.c:235 +#: plug-ins/common/wavelet-decompose.c:214 msgid "Decomposition" msgstr "Descomposición" -#: plug-ins/common/wavelet-decompose.c:302 +#: plug-ins/common/wavelet-decompose.c:281 #, c-format msgid "Scale %d" msgstr "Escala %d" -#: plug-ins/common/wavelet-decompose.c:326 +#: plug-ins/common/wavelet-decompose.c:305 msgid "Residual" msgstr "Residual" -#: plug-ins/common/web-browser.c:175 +#: plug-ins/common/web-browser.c:178 msgid "The operating system is out of memory or resources." msgstr "Se han agotado la memoria o los recursos del sistema operativo." -#: plug-ins/common/web-browser.c:178 +#: plug-ins/common/web-browser.c:181 msgid "The specified file was not found." msgstr "No se ha encontrado el archivo especificado." -#: plug-ins/common/web-browser.c:181 +#: plug-ins/common/web-browser.c:184 msgid "The specified path was not found." msgstr "No se ha encontrado la ruta especificada." -#: plug-ins/common/web-browser.c:184 +#: plug-ins/common/web-browser.c:187 msgid "" "The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image)." msgstr "" "El archivo .exe no es válido (el .exe no es de Win32 de Microsoft o hay un " "error en la imagen .exe)." -#: plug-ins/common/web-browser.c:187 +#: plug-ins/common/web-browser.c:190 msgid "The operating system denied access to the specified file." msgstr "El sistema operativo ha denegado el acceso al archivo especificado." -#: plug-ins/common/web-browser.c:190 +#: plug-ins/common/web-browser.c:193 msgid "The file name association is incomplete or invalid." msgstr "La asociación del nombre de archivo está incompleta o no es válida." -#: plug-ins/common/web-browser.c:193 +#: plug-ins/common/web-browser.c:196 msgid "DDE transaction busy" msgstr "Transacción DDE ocupada" -#: plug-ins/common/web-browser.c:196 +#: plug-ins/common/web-browser.c:199 msgid "The DDE transaction failed." msgstr "La transacción DDE ha fallado." -#: plug-ins/common/web-browser.c:199 +#: plug-ins/common/web-browser.c:202 msgid "The DDE transaction timed out." msgstr "La transacción DDE ha caducado." -#: plug-ins/common/web-browser.c:202 +#: plug-ins/common/web-browser.c:205 msgid "The specified DLL was not found." msgstr "No se ha encontrado la DLL especificada." -#: plug-ins/common/web-browser.c:205 +#: plug-ins/common/web-browser.c:208 msgid "There is no application associated with the given file name extension." msgstr "No hay ninguna aplicación asociada con la extensión de archivo dada." -#: plug-ins/common/web-browser.c:208 +#: plug-ins/common/web-browser.c:211 msgid "There was not enough memory to complete the operation." msgstr "No ha habido memoria suficiente para completar la operación." -#: plug-ins/common/web-browser.c:211 +#: plug-ins/common/web-browser.c:214 msgid "A sharing violation occurred." msgstr "Se ha producido una violación de compartición." -#: plug-ins/common/web-browser.c:214 +#: plug-ins/common/web-browser.c:217 msgid "Unknown Microsoft Windows error." msgstr "Error desconocido de Microsoft Windows." -#: plug-ins/common/web-browser.c:217 +#: plug-ins/common/web-browser.c:220 #, c-format msgid "Failed to open '%s': %s" msgstr "Falló al abrir «%s»: %s" -#: plug-ins/common/web-page.c:130 +#: plug-ins/common/web-page.c:118 msgid "From _Webpage..." msgstr "Desde una página _web…" -#: plug-ins/common/web-page.c:134 +#: plug-ins/common/web-page.c:122 msgid "Create an image of a webpage" msgstr "Crea una imagen de una página web" -#: plug-ins/common/web-page.c:274 +#: plug-ins/common/web-page.c:139 +#, fuzzy +#| msgid "Enter location (URI):" +msgid "Enter location (_URI)" +msgstr "Introducir dirección (URI):" + +#: plug-ins/common/web-page.c:140 +msgid "URL of the webpage to screenshot" +msgstr "URL de la página web a la que realizar la captura de pantalla" + +#: plug-ins/common/web-page.c:145 +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)" + +#: plug-ins/common/web-page.c:151 +#, fuzzy +#| msgid "Font size:" +msgid "_Font size" +msgstr "Tamaño de la tipografía:" + +#: plug-ins/common/web-page.c:152 +#, fuzzy +#| msgid "The amount of the filter to apply" +msgid "The font size to use in the page (in pt)" +msgstr "La cantidad del filtro que aplicar" + +#: plug-ins/common/web-page.c:214 msgid "Create from webpage" msgstr "Crear un rectángulo" -#: plug-ins/common/web-page.c:279 +#: plug-ins/common/web-page.c:216 msgid "Cre_ate" msgstr "Cre_ar" -#: plug-ins/common/web-page.c:308 -msgid "Enter location (URI):" -msgstr "Introducir dirección (URI):" - -#: plug-ins/common/web-page.c:331 -msgid "Width (pixels):" -msgstr "Anchura (píxeles):" - -#: plug-ins/common/web-page.c:351 -msgid "Font size:" -msgstr "Tamaño de la tipografía:" - -#: plug-ins/common/web-page.c:358 +#: plug-ins/common/web-page.c:217 msgid "Huge" msgstr "Enorme" -#: plug-ins/common/web-page.c:359 +#: plug-ins/common/web-page.c:218 msgid "Large" msgstr "Grande" -#: plug-ins/common/web-page.c:360 +#: plug-ins/common/web-page.c:219 msgctxt "web-page" msgid "Default" msgstr "Predeterminada" -#: plug-ins/common/web-page.c:361 +#: plug-ins/common/web-page.c:220 msgid "Small" msgstr "Pequeña" -#: plug-ins/common/web-page.c:362 +#: plug-ins/common/web-page.c:221 msgid "Tiny" msgstr "Diminuta" -#: plug-ins/common/web-page.c:456 +#: plug-ins/common/web-page.c:291 msgid "Webpage" msgstr "Página web" -#: plug-ins/common/web-page.c:503 -#, c-format -msgid "Transferring webpage image for '%s'" -msgstr "Transfiriendo imagen de página de «%s»" - -#: plug-ins/common/web-page.c:526 +#: plug-ins/common/web-page.c:334 msgid "No URL was specified" msgstr "No se especificó ningún URL" -#: plug-ins/common/web-page.c:588 +#: plug-ins/common/web-page.c:392 #, c-format msgid "Downloading webpage '%s'" msgstr "Descargando página web «%s»" +#: plug-ins/common/web-page.c:401 +#, c-format +msgid "Transferring webpage image for '%s'" +msgstr "Transfiriendo imagen de página de «%s»" + #: plug-ins/file-bmp/bmp-load.c:146 msgid "Bad colormap" msgstr "Mapa de colores malo" @@ -7444,7 +8502,7 @@ msgstr "El canal alfa se ignorará." msgid "Compatibility" msgstr "Compatibilidad" -#: plug-ins/file-bmp/bmp-save.c:1014 +#: plug-ins/file-bmp/bmp-save.c:1015 msgid "" "Some applications can not read BMP images that include color space " "information. PIKA writes color space information by default. Disabling this " @@ -7456,51 +8514,51 @@ msgstr "" "información del espacio de color en el archivo." #. RGB Encoding Options -#: plug-ins/file-bmp/bmp-save.c:1025 +#: plug-ins/file-bmp/bmp-save.c:1026 msgid "16 bit (R5 G6 B5)" msgstr "16 bit (R5 G6 B5)" -#: plug-ins/file-bmp/bmp-save.c:1026 +#: plug-ins/file-bmp/bmp-save.c:1027 msgid "16 bit (A1 R5 G5 B5)" msgstr "16 bit (A1 R5 G5 B5)" -#: plug-ins/file-bmp/bmp-save.c:1027 +#: plug-ins/file-bmp/bmp-save.c:1028 msgid "16 bit (X1 R5 G5 B5)" msgstr "16 bit (X1 R5 G5 B5)" -#: plug-ins/file-bmp/bmp-save.c:1028 +#: plug-ins/file-bmp/bmp-save.c:1029 msgid "24 bit (R8 G8 B8)" msgstr "24 bit (R8 G8 B8)" -#: plug-ins/file-bmp/bmp-save.c:1029 +#: plug-ins/file-bmp/bmp-save.c:1030 msgid "32 bit (A8 R8 G8 B8)" msgstr "32 bit (A8 R8 G8 B8)" -#: plug-ins/file-bmp/bmp-save.c:1030 +#: plug-ins/file-bmp/bmp-save.c:1031 msgid "32 bit (X8 R8 G8 B8)" msgstr "32 bit (X8 R8 G8 B8)" -#: plug-ins/file-bmp/bmp.c:152 plug-ins/file-bmp/bmp.c:178 +#: plug-ins/file-bmp/bmp.c:155 plug-ins/file-bmp/bmp.c:181 msgid "Windows BMP image" msgstr "Imagen BMP de Windows" -#: plug-ins/file-bmp/bmp.c:155 plug-ins/file-bmp/bmp.c:156 +#: plug-ins/file-bmp/bmp.c:158 plug-ins/file-bmp/bmp.c:159 msgid "Loads files of Windows BMP file format" msgstr "Carga archivos con formato BMP de Windows" -#: plug-ins/file-bmp/bmp.c:180 +#: plug-ins/file-bmp/bmp.c:183 msgid "BMP" msgstr "BMP" -#: plug-ins/file-bmp/bmp.c:183 plug-ins/file-bmp/bmp.c:184 +#: plug-ins/file-bmp/bmp.c:186 plug-ins/file-bmp/bmp.c:187 msgid "Saves files in Windows BMP file format" msgstr "Guarda archivos en el formato BMP de Windows" -#: plug-ins/file-bmp/bmp.c:197 +#: plug-ins/file-bmp/bmp.c:200 msgid "Ru_n-Length Encoded" msgstr "Codificado en Ru_n-Lenght" -#: plug-ins/file-bmp/bmp.c:198 +#: plug-ins/file-bmp/bmp.c:201 msgid "" "Use run-length-encoding compression (only valid for 4 and 8-bit indexed " "images)" @@ -7508,19 +8566,19 @@ msgstr "" "Usar compresión de codificación de longitud de ejecución (solo válida para " "imágenes indexadas de 4 y 8 bits)" -#: plug-ins/file-bmp/bmp.c:204 +#: plug-ins/file-bmp/bmp.c:207 msgid "_Write color space information" msgstr "_Escribir la información del espacio de colores" -#: plug-ins/file-bmp/bmp.c:205 +#: plug-ins/file-bmp/bmp.c:208 msgid "Whether or not to write BITMAPV5HEADER color space data" msgstr "Si escribir o no datos del espacio de color BITMAPV5HEADER" -#: plug-ins/file-bmp/bmp.c:211 +#: plug-ins/file-bmp/bmp.c:214 msgid "R_GB format" msgstr "Formato R_GB" -#: plug-ins/file-bmp/bmp.c:212 +#: plug-ins/file-bmp/bmp.c:215 msgid "" "Export format for RGB images (0=RGB_565, 1=RGBA_5551, 2=RGB_555, 3=RGB_888, " "4=RGBA_8888, 5=RGBX_8888)" @@ -7528,94 +8586,100 @@ msgstr "" "Formato de exportación para imágenes RGB (0=RGB_565, 1=RGBA_5551, 2=RGB_555, " "3=RGB_888, 4=RGBA_8888, 5=RGBX_8888)" -#: plug-ins/file-bmp/bmp.c:296 +#: plug-ins/file-bmp/bmp.c:298 msgid "BMP format does not support multiple layers." msgstr "El formato BMP no soporta múltiples capas." -#: plug-ins/file-dds/dds.c:146 plug-ins/file-dds/dds.c:184 +#: plug-ins/file-dds/dds.c:149 plug-ins/file-dds/dds.c:187 msgid "DDS image" msgstr "Imagen DDS" -#: plug-ins/file-dds/dds.c:149 plug-ins/file-dds/dds.c:150 +#: plug-ins/file-dds/dds.c:152 plug-ins/file-dds/dds.c:153 msgid "Loads files in DDS image format" msgstr "Carga archivos en el formato de imagen DDS" -#: plug-ins/file-dds/dds.c:165 +#: plug-ins/file-dds/dds.c:168 msgid "Load _mipmaps" msgstr "Cargar _mipmaps" -#: plug-ins/file-dds/dds.c:166 +#: plug-ins/file-dds/dds.c:169 msgid "Load mipmaps if present" msgstr "Cargar mipmaps si los hubiera" -#: plug-ins/file-dds/dds.c:171 +#: plug-ins/file-dds/dds.c:174 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:172 +#: plug-ins/file-dds/dds.c:175 msgid "Decode YCoCg/AExp images when detected" msgstr "Decodificar imágenes YCoCg/AExp al detectarlas" -#: plug-ins/file-dds/dds.c:323 +#: plug-ins/file-dds/dds.c:326 msgid "Decode YCoCg" msgstr "Decodificar YCoCg" -#: plug-ins/file-dds/dds.c:327 plug-ins/file-dds/dds.c:328 +#: plug-ins/file-dds/dds.c:330 plug-ins/file-dds/dds.c:331 msgid "Converts YCoCg encoded pixels to RGB" msgstr "Convierte píxeles codificados YCoCg a RGB" -#: plug-ins/file-dds/dds.c:345 +#: plug-ins/file-dds/dds.c:348 msgid "Decode YCoCg (scaled)" msgstr "Decodificar YCoCg (escalado)" -#: plug-ins/file-dds/dds.c:349 plug-ins/file-dds/dds.c:351 +#: plug-ins/file-dds/dds.c:352 plug-ins/file-dds/dds.c:354 msgid "Converts YCoCg (scaled) encoded pixels to RGB" msgstr "Convierte píxeles codificados YCoCg (escalados) a RGB" -#: plug-ins/file-dds/dds.c:369 +#: plug-ins/file-dds/dds.c:372 msgid "Decode Alpha exponent" msgstr "Decodificar exponente Alfa" -#: plug-ins/file-dds/dds.c:375 plug-ins/file-dds/dds.c:373 +#: plug-ins/file-dds/dds.c:378 plug-ins/file-dds/dds.c:376 msgid "Converts alpha exponent encoded pixels to RGB" msgstr "Convierte píxeles codificados con exponente alfa a RGB" -#: plug-ins/file-dds/ddsread.c:366 +#: plug-ins/file-dds/ddsread.c:222 +#, 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 msgid "Could not allocate a new image." msgstr "No se puede reservar una imagen nueva." -#: plug-ins/file-dds/ddsread.c:377 +#: plug-ins/file-dds/ddsread.c:393 msgid "Error reading palette." msgstr "Error al leer la paleta." -#: plug-ins/file-dds/ddsread.c:660 +#: plug-ins/file-dds/ddsread.c:676 msgid "Invalid DDS format magic number." msgstr "Formato de número mágico DDS no válido." -#: plug-ins/file-dds/ddsread.c:739 +#: plug-ins/file-dds/ddsread.c:755 #, 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:750 +#: plug-ins/file-dds/ddsread.c:766 #, 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:801 +#: plug-ins/file-dds/ddsread.c:817 msgid "Invalid pixel format." msgstr "Formato de píxel no válido." -#: plug-ins/file-dds/ddsread.c:970 +#: plug-ins/file-dds/ddsread.c:986 #, c-format msgid "Unsupported DXGI format (%d)" msgstr "Formato DXGI (%d) no soportado" -#: plug-ins/file-dds/ddsread.c:1135 plug-ins/file-dds/ddsread.c:1174 +#: plug-ins/file-dds/ddsread.c:1151 plug-ins/file-dds/ddsread.c:1190 msgid "Unexpected EOF.\n" msgstr "EOF no esperado.\n" -#: plug-ins/file-dds/ddsread.c:1514 +#: plug-ins/file-dds/ddsread.c:1530 msgid "Open DDS" msgstr "Abrir DDS" @@ -7715,122 +8779,137 @@ msgstr "Preservar la cober_tura de la prueba alfa" msgid "_Alpha test threshold:" msgstr "Umbral de prueba _alfa:" -#: plug-ins/file-exr/file-exr.c:109 +#: plug-ins/file-exr/file-exr.c:112 msgid "Loads files in the OpenEXR file format" msgstr "Carga archivos en el formato de archivo OpenEXR" -#: plug-ins/file-exr/file-exr.c:196 +#: plug-ins/file-exr/file-exr.c:201 #, c-format msgid "Error opening file '%s' for reading" msgstr "Error al abrir el archivo «%s» para lectura" -#: plug-ins/file-exr/file-exr.c:207 +#: plug-ins/file-exr/file-exr.c:212 #, c-format msgid "Error querying image dimensions from '%s'" msgstr "Error al consultar las dimensiones de la imagen «%s»" -#: plug-ins/file-exr/file-exr.c:227 +#: plug-ins/file-exr/file-exr.c:232 #, c-format msgid "Error querying image precision from '%s'" msgstr "Error al consultar la precisión de la imagen «%s»" -#: plug-ins/file-exr/file-exr.c:244 +#: plug-ins/file-exr/file-exr.c:250 #, c-format msgid "Error querying image type from '%s'" msgstr "Error al consultar el tipo de la imagen «%s»" -#: plug-ins/file-exr/file-exr.c:302 +#: plug-ins/file-exr/file-exr.c:312 #, c-format msgid "Error reading pixel data from '%s'" msgstr "Error al leer los datos de los píxeles de «%s»" -#: plug-ins/file-faxg3/faxg3.c:134 +#: plug-ins/file-exr/file-exr.c:419 +msgid "Import OpenEXR" +msgstr "Importar OpenEXR" + +#: plug-ins/file-exr/file-exr.c:433 +msgid "Unknown Channel Name" +msgstr "Nombre del canal desconocido" + +#: plug-ins/file-exr/file-exr.c:434 +msgid "" +"The image contains a single unknown channel.\n" +"It has been converted to grayscale." +msgstr "" +"La imagen contiene un único canal desconocido.\n" +"Se ha convertido a escala de grises." + +#: plug-ins/file-faxg3/faxg3.c:136 msgid "G3 fax image" msgstr "Imagen tipo fax de G3" -#: plug-ins/file-faxg3/faxg3.c:295 plug-ins/file-faxg3/faxg3.c:593 +#: plug-ins/file-faxg3/faxg3.c:299 plug-ins/file-faxg3/faxg3.c:597 msgid "Could not create buffer to process image data." msgstr "No se pudo crear el búfer para procesar los datos de la imagen." -#: plug-ins/file-faxg3/faxg3.c:560 +#: plug-ins/file-faxg3/faxg3.c:564 #, c-format msgid "Invalid image dimensions (%d x %d). Image may be corrupt." msgstr "" "Dimensiones (%d x %d) de la imagen no válidas. Puede que la imagen esté " "dañada." -#: plug-ins/file-faxg3/faxg3.c:570 +#: plug-ins/file-faxg3/faxg3.c:574 msgid "Could not create image." msgstr "No se pudo crear la imagen." -#: plug-ins/file-fits/fits.c:177 plug-ins/file-fits/fits.c:218 +#: plug-ins/file-fits/fits.c:180 plug-ins/file-fits/fits.c:221 msgid "Flexible Image Transport System" msgstr "Sistema de transporte de imagen flexible" -#: plug-ins/file-fits/fits.c:180 +#: plug-ins/file-fits/fits.c:183 msgid "Load file of the FITS file format" msgstr "Carga un archivo en el formato de archivo FITS" -#: plug-ins/file-fits/fits.c:181 +#: plug-ins/file-fits/fits.c:184 msgid "Load file of the FITS file format (Flexible Image Transport System)" msgstr "" "Carga un archivo en el formato de archivo FITS (Sistema de transporte de " "imagen flexible)" -#: plug-ins/file-fits/fits.c:198 plug-ins/file-fits/fits.c:199 +#: plug-ins/file-fits/fits.c:201 plug-ins/file-fits/fits.c:202 msgid "Replacement for undefined pixels" msgstr "Reemplazo para los píxeles no definidos" -#: plug-ins/file-fits/fits.c:204 +#: plug-ins/file-fits/fits.c:207 msgid "Pixel value scaling" msgstr "Escalado de los valores de los píxeles" -#: plug-ins/file-fits/fits.c:205 +#: plug-ins/file-fits/fits.c:208 msgid "Use DATAMIN/DATAMAX-scaling if possible" msgstr "Si es posible, utilizar el escalado DATAMIN/DATAMAX" -#: plug-ins/file-fits/fits.c:221 +#: plug-ins/file-fits/fits.c:224 msgid "Export file in the FITS file format" msgstr "Exporta un archivo en el formato de archivo FITS" -#: plug-ins/file-fits/fits.c:222 +#: plug-ins/file-fits/fits.c:225 msgid "" "FITS exporting handles all image types except those with alpha channels." msgstr "" "La exportación a FITS puede gestionar todos los tipos de imagen excepto las " "que tienen canales alfa." -#: plug-ins/file-fits/fits.c:326 +#: plug-ins/file-fits/fits.c:325 msgid "FITS format does not support multiple layers." msgstr "El formato FITS no soporta múltiples capas." -#: plug-ins/file-fits/fits.c:409 +#: plug-ins/file-fits/fits.c:408 msgid "Error during opening of FITS file" msgstr "Error al abrir el archivo FITS" -#: plug-ins/file-fits/fits.c:422 plug-ins/file-fits/fits.c:600 +#: plug-ins/file-fits/fits.c:421 plug-ins/file-fits/fits.c:633 msgid "FITS file keeps no displayable images" msgstr "El archivo FITS no tiene imágenes visualizables" -#: plug-ins/file-fits/fits.c:516 +#: plug-ins/file-fits/fits.c:519 msgid "FITS HDU" msgstr "FITS HDU" -#: plug-ins/file-fits/fits.c:624 +#: plug-ins/file-fits/fits.c:657 msgid "FITS export cannot handle images with alpha channels" msgstr "FITS no puede manejar la exportación de imágenes con canales alfa" -#: plug-ins/file-fits/fits.c:990 +#: plug-ins/file-fits/fits.c:1023 msgid "Open FITS File" msgstr "Abrir archivo FITS" -#: plug-ins/file-fits/fits.c:995 plug-ins/gfig/gfig-dialog.c:1292 +#: plug-ins/file-fits/fits.c:1028 plug-ins/gfig/gfig-dialog.c:1292 #: plug-ins/gfig/gfig-dialog.c:1460 msgid "White" msgstr "Blanco" -#: plug-ins/file-fits/fits.c:1003 -#| msgid "By _DATAMIN/DATAMAX" +#: plug-ins/file-fits/fits.c:1036 msgid "By DATAMIN/DATAMAX" msgstr "Por DATAMIN/DATAMAX" @@ -7947,77 +9026,77 @@ msgstr "" "Desbordamiento al leer datos comprimidos. El archivo posiblemente está " "corrupto." -#: plug-ins/file-fli/fli-pika.c:181 plug-ins/file-fli/fli-pika.c:218 +#: plug-ins/file-fli/fli-pika.c:184 plug-ins/file-fli/fli-pika.c:221 msgid "AutoDesk FLIC animation" msgstr "Animación FLIC de Autodesk" -#: plug-ins/file-fli/fli-pika.c:184 +#: plug-ins/file-fli/fli-pika.c:187 msgid "Load FLI-movies" msgstr "Carga películas FLI" -#: plug-ins/file-fli/fli-pika.c:185 plug-ins/file-fli/fli-pika.c:223 +#: plug-ins/file-fli/fli-pika.c:188 plug-ins/file-fli/fli-pika.c:226 msgid "This is an experimental plug-in to handle FLI movies" msgstr "Este es un complemento experimental para manejar películas FLI" -#: plug-ins/file-fli/fli-pika.c:199 plug-ins/file-fli/fli-pika.c:237 +#: plug-ins/file-fli/fli-pika.c:202 plug-ins/file-fli/fli-pika.c:240 msgid "_From frame" msgstr "Desde _fotograma" -#: plug-ins/file-fli/fli-pika.c:200 +#: plug-ins/file-fli/fli-pika.c:203 msgid "Load beginning from this frame" msgstr "Cargar a partir de este fotograma" -#: plug-ins/file-fli/fli-pika.c:205 plug-ins/file-fli/fli-pika.c:243 +#: plug-ins/file-fli/fli-pika.c:208 plug-ins/file-fli/fli-pika.c:246 msgid "_To frame" msgstr "_Hasta fotograma" -#: plug-ins/file-fli/fli-pika.c:206 +#: plug-ins/file-fli/fli-pika.c:209 msgid "End loading with this frame" msgstr "Detener la carga con este fotograma" -#: plug-ins/file-fli/fli-pika.c:220 +#: plug-ins/file-fli/fli-pika.c:223 msgid "FLI Animation" msgstr "Animación FLI" -#: plug-ins/file-fli/fli-pika.c:222 +#: plug-ins/file-fli/fli-pika.c:225 msgid "Export FLI-movies" msgstr "Exportar películas FLI" -#: plug-ins/file-fli/fli-pika.c:238 +#: plug-ins/file-fli/fli-pika.c:241 msgid "Export beginning from this frame" msgstr "Exportar a partir de este fotograma" -#: plug-ins/file-fli/fli-pika.c:244 +#: plug-ins/file-fli/fli-pika.c:247 msgid "End exporting with this frame (or -1 for all frames)" msgstr "" "Finalizar la exportación con este fotograma (o -1 para todos los fotogramas)" -#: plug-ins/file-fli/fli-pika.c:587 +#: plug-ins/file-fli/fli-pika.c:578 #, c-format msgid "Frame %d (%ums)" msgstr "Fotograma %d (%ums)" -#: plug-ins/file-fli/fli-pika.c:614 +#: plug-ins/file-fli/fli-pika.c:605 #, c-format msgid "Failed to read frame %d. Possibly corrupt animation.\n" msgstr "" "Error al leer el fotograma %d. La animación posiblemente está corrupta.\n" -#: plug-ins/file-fli/fli-pika.c:945 +#: plug-ins/file-fli/fli-pika.c:936 msgid "Open FLIC Animation" msgstr "Abrir animación FLIC" -#: plug-ins/file-icns/file-icns-load.c:431 +#: plug-ins/file-icns/file-icns-load.c:433 #, c-format msgid "Error trying to open temporary %s file '%s' for icns loading: %s" msgstr "" "Error al intentar abrir el archivo %s temporal «%s» para la carga de icns: %s" #. ----- Open PSD file ----- -#: plug-ins/file-icns/file-icns-load.c:558 plug-ins/file-ico/ico-load.c:983 -#: plug-ins/file-jpeg/jpeg-load.c:600 plug-ins/file-psd/psd-thumb-load.c:72 -#: plug-ins/file-raw/file-darktable.c:513 -#: plug-ins/file-raw/file-rawtherapee.c:455 +#: plug-ins/file-icns/file-icns-load.c:560 plug-ins/file-ico/ico-load.c:1013 +#: plug-ins/file-jpeg/jpeg-load.c:601 plug-ins/file-psd/psd-thumb-load.c:72 +#: plug-ins/file-raw/file-darktable.c:517 +#: plug-ins/file-raw/file-rawtherapee.c:459 #, c-format msgid "Opening thumbnail for '%s'" msgstr "Abriendo miniatura de «%s»" @@ -8038,7 +9117,7 @@ msgstr "" "Tamaño de capa duplicado. \n" "No se exportará" -#: plug-ins/file-icns/file-icns-save.c:292 plug-ins/file-icns/file-icns.c:175 +#: plug-ins/file-icns/file-icns-save.c:292 plug-ins/file-icns/file-icns.c:178 msgid "Apple Icon Image" msgstr "Imagen de icono de Apple" @@ -8082,7 +9161,7 @@ msgstr "" "16x12, 16x16, 18x18, 24x24, 32x32, 36x36, 48x48, 64x64, 128x128, 256x256, " "512x512 o 1024x1024." -#: plug-ins/file-icns/file-icns.c:131 +#: plug-ins/file-icns/file-icns.c:134 msgid "Icns" msgstr "Icns" @@ -8132,27 +9211,27 @@ msgstr "" "programas. Algunas aplicaciones antiguas podrían no abrir este archivo " "correctamente." -#: plug-ins/file-ico/ico-dialog.c:256 +#: plug-ins/file-ico/ico-dialog.c:267 msgid "1 bpp, 1-bit alpha, 2-slot palette" msgstr "1 bpp, alfa de 1 bit, paleta de 2 elementos" -#: plug-ins/file-ico/ico-dialog.c:257 +#: plug-ins/file-ico/ico-dialog.c:268 msgid "4 bpp, 1-bit alpha, 16-slot palette" msgstr "4 bpp, alfa de 1 bit, paleta de 16 elementos" -#: plug-ins/file-ico/ico-dialog.c:258 +#: plug-ins/file-ico/ico-dialog.c:269 msgid "8 bpp, 1-bit alpha, 256-slot palette" msgstr "8 bpp, alfa de 1 bit, paleta de 256 elementos" -#: plug-ins/file-ico/ico-dialog.c:259 +#: plug-ins/file-ico/ico-dialog.c:270 msgid "24 bpp, 1-bit alpha, no palette" msgstr "24 bpp, alfa de 1 bit, sin paleta" -#: plug-ins/file-ico/ico-dialog.c:260 +#: plug-ins/file-ico/ico-dialog.c:271 msgid "32 bpp, 8-bit alpha, no palette" msgstr "32 bpp, alfa de 8 bits, sin paleta" -#: plug-ins/file-ico/ico-dialog.c:274 +#: plug-ins/file-ico/ico-dialog.c:286 msgid "Compressed (PNG)" msgstr "Comprimido (PNG)" @@ -8166,13 +9245,7 @@ msgstr "No se pudieron leer «%lu» bytes" msgid "Icon #%d has zero width or height" msgstr "El icono #%d tiene altura o anchura cero" -#. read successfully. add to image -#: plug-ins/file-ico/ico-load.c:639 -#, c-format -msgid "Icon #%i" -msgstr "Icono #%i" - -#: plug-ins/file-ico/ico-load.c:841 plug-ins/file-ico/ico-load.c:872 +#: plug-ins/file-ico/ico-load.c:868 plug-ins/file-ico/ico-load.c:899 msgid "Invalid ANI metadata" msgstr "Metadatos de ANI no válidos" @@ -8185,35 +9258,35 @@ msgstr "" "Llamada no interactiva con coordenadas del punto de acceso %d y %d con una " "imagen de %d iconos." -#: plug-ins/file-ico/ico.c:168 plug-ins/file-ico/ico.c:291 +#: plug-ins/file-ico/ico.c:175 plug-ins/file-ico/ico.c:298 msgid "Microsoft Windows icon" msgstr "Icono de Microsoft Windows" -#: plug-ins/file-ico/ico.c:196 plug-ins/file-ico/ico.c:316 +#: plug-ins/file-ico/ico.c:203 plug-ins/file-ico/ico.c:323 msgid "Microsoft Windows cursor" msgstr "Cursor de Microsoft Windows" -#: plug-ins/file-ico/ico.c:226 plug-ins/file-ico/ico.c:363 +#: plug-ins/file-ico/ico.c:233 plug-ins/file-ico/ico.c:370 msgid "Microsoft Windows animated cursor" msgstr "Cursor animado de Microsoft Windows" -#: plug-ins/file-ico/ico.c:230 +#: plug-ins/file-ico/ico.c:237 msgid "Loads files of Windows ANI file format" msgstr "Carga archivos con formato ANI de Windows" -#: plug-ins/file-ico/ico.c:272 +#: plug-ins/file-ico/ico.c:279 msgid "Loads a preview from a Windows ANI files" msgstr "Carga una vista previa de un archivo ANI de Windows" -#: plug-ins/file-ico/ico.c:367 plug-ins/file-ico/ico.c:368 +#: plug-ins/file-ico/ico.c:374 plug-ins/file-ico/ico.c:375 msgid "Saves files in Windows ANI file format" msgstr "Guarda archivos en el formato ANI de Windows" -#: plug-ins/file-ico/ico.c:384 +#: plug-ins/file-ico/ico.c:391 msgid "Cursor Name (Optional)" msgstr "Nombre del cursor (opcional)" -#: plug-ins/file-ico/ico.c:390 +#: plug-ins/file-ico/ico.c:397 msgid "Cursor Author (Optional)" msgstr "Autor del cursor (opcional)" @@ -8221,7 +9294,7 @@ msgstr "Autor del cursor (opcional)" msgid "JPEG preview" msgstr "Vista previa JPEG" -#: plug-ins/file-jpeg/jpeg-load.c:485 +#: plug-ins/file-jpeg/jpeg-load.c:486 #, c-format msgid "" "Error trying to open temporary %s file '%s' for jpeg metadata loading: %s" @@ -8242,76 +9315,174 @@ msgstr "Calculando tamaño del archivo…" msgid "File size: unknown" msgstr "Tamaño de archivo: desconocido" -#: plug-ins/file-jpeg/jpeg-save.c:886 +#: plug-ins/file-jpeg/jpeg-save.c:887 msgid "Enable preview to obtain the file size." msgstr "Activar la vista previa para obtener el tamaño del archivo." -#: plug-ins/file-jpeg/jpeg-save.c:891 plug-ins/file-psd/psd-save.c:2451 -#: plug-ins/file-tiff/file-tiff-save.c:1362 +#: plug-ins/file-jpeg/jpeg-save.c:892 plug-ins/file-psd/psd-save.c:2451 +#: plug-ins/file-tiff/file-tiff-save.c:1307 msgid "No soft-proofing profile" msgstr "No hay perfil de la prueba de impresión" #. Subsampling -#: plug-ins/file-jpeg/jpeg-save.c:940 +#: plug-ins/file-jpeg/jpeg-save.c:942 msgid "4:4:4 (best quality)" msgstr "4:4:4 (la mejor calidad)" -#: plug-ins/file-jpeg/jpeg-save.c:942 -msgid "4:2:2 horizontal (chroma halved)" -msgstr "4:2:2 horizontal (mitad de croma)" - #: plug-ins/file-jpeg/jpeg-save.c:944 -msgid "4:2:2 vertical (chroma halved)" -msgstr "4:2:2 vertical (mitad de croma)" +msgid "4:2:2 (chroma halved horizontally)" +msgstr "4:2:2 (croma dividido a la mitad horizontalmente)" #: plug-ins/file-jpeg/jpeg-save.c:946 +msgid "4:4:0 (chroma halved vertically)" +msgstr "4:4:0 (croma dividido a la mitad verticalmente)" + +#: plug-ins/file-jpeg/jpeg-save.c:948 msgid "4:2:0 (chroma quartered)" msgstr "4:2:0 (un cuarto de croma)" #. DCT method -#: plug-ins/file-jpeg/jpeg-save.c:960 +#: plug-ins/file-jpeg/jpeg-save.c:962 msgid "Fast Integer" msgstr "Entero rápido" -#: plug-ins/file-jpeg/jpeg-save.c:961 +#: plug-ins/file-jpeg/jpeg-save.c:963 msgid "Integer" msgstr "Entero" -#: plug-ins/file-jpeg/jpeg-save.c:962 +#: plug-ins/file-jpeg/jpeg-save.c:964 msgid "Floating-Point" msgstr "Coma flotante" -#: plug-ins/file-jpeg/jpeg.c:133 plug-ins/file-jpeg/jpeg.c:180 +#: plug-ins/file-jpeg/jpeg.c:136 plug-ins/file-jpeg/jpeg.c:183 msgid "JPEG image" msgstr "Imagen JPEG" -#: plug-ins/file-jpeg/jpeg.c:193 plug-ins/file-tiff/file-tiff-save.c:1326 +#: plug-ins/file-jpeg/jpeg.c:196 plug-ins/file-tiff/file-tiff.c:227 msgid "JPEG" msgstr "JPEG" -#: plug-ins/file-jpeg/jpeg.c:233 +#: plug-ins/file-jpeg/jpeg.c:207 +msgid "Quality of exported image" +msgstr "Calidad de la imagen exportada" + +#: plug-ins/file-jpeg/jpeg.c:212 +msgid "S_moothing" +msgstr "S_uavizado" + +#: plug-ins/file-jpeg/jpeg.c:213 +#, fuzzy +#| msgid "Bit depth of exported image" +msgid "Smoothing factor for exported image" +msgstr "Profundidad de bits de la imagen exportada" + +#: plug-ins/file-jpeg/jpeg.c:218 +msgid "Optimi_ze" +msgstr "Optimi_zar" + +#: plug-ins/file-jpeg/jpeg.c:219 +msgid "Use optimized tables during Huffman coding" +msgstr "Utilizar tablas optimizadas durante la codificación Huffman" + +#: plug-ins/file-jpeg/jpeg.c:224 +msgid "_Progressive" +msgstr "_Progresivo" + +#: plug-ins/file-jpeg/jpeg.c:225 +msgid "Create progressive JPEG images" +msgstr "Crear imágenes JPEG progresivas" + +#: plug-ins/file-jpeg/jpeg.c:230 +msgid "Export as CM_YK" +msgstr "Exportar como CM_YK" + +#: plug-ins/file-jpeg/jpeg.c:231 +#, fuzzy +#| msgid "Export a CMYK PSD image using the soft-proofing color profile" +msgid "Create a CMYK JPEG image using the soft-proofing color profile" +msgstr "Exportar una imagen PSD CMYK utilizando el perfil de color de prueba" + +#: plug-ins/file-jpeg/jpeg.c:236 msgid "Su_bsampling" msgstr "Su_bmuestreo" -#: plug-ins/file-jpeg/jpeg.c:251 +#: plug-ins/file-jpeg/jpeg.c:237 +msgid "" +"Sub-sampling type { 0 == 4:2:0 (chroma quartered), 1 == 4:2:2 (chroma halved " +"horizontally), 2 == 4:4:4 (best quality), 3 == 4:4:0 (chroma halved " +"vertically)" +msgstr "" +"Tipo de submuestreo { 0 == 4:2:0 (croma en cuartos), 1 == 4:2:2 (croma " +"dividido a la mitad horizontalmente), 2 == 4:4:4 (mejor calidad), 3 == 4: " +"4:0 (croma dividido a la mitad verticalmente)" + +#: plug-ins/file-jpeg/jpeg.c:247 +msgid "Baseline" +msgstr "Línea base" + +#: plug-ins/file-jpeg/jpeg.c:248 +msgid "" +"Force creation of a baseline JPEG (non-baseline JPEGs can't be read by all " +"decoders)" +msgstr "" +"Forzar la creación de un JPEG de referencia (los archivos JPEG que no son de " +"referencia no pueden ser leídos por todos los decodificadores)" + +#: plug-ins/file-jpeg/jpeg.c:254 msgid "Inter_val (MCU rows):" msgstr "Inter_valo (filas de MCU):" -#: plug-ins/file-jpeg/jpeg.c:258 +#: plug-ins/file-jpeg/jpeg.c:255 +msgid "Interval of restart markers (in MCU rows, 0 = no restart markers)" +msgstr "" +"Intervalo de marcadores de reinicio (en filas de MCU, 0 = sin marcadores de " +"reinicio)" + +#: plug-ins/file-jpeg/jpeg.c:261 msgid "_DCT method" msgstr "Método _DCT" -#: plug-ins/file-jpeg/jpeg.c:296 +#: plug-ins/file-jpeg/jpeg.c:262 +msgid "DCT method to use { INTEGER (0), FIXED (1), FLOAT (2) }" +msgstr "Método DCT que usar { INTEGER (0), FIXED (1), FLOAT (2) }" + +#: plug-ins/file-jpeg/jpeg.c:270 +msgid "_Use quality settings from original image" +msgstr "Usar los ajustes de calidad de la i_magen original" + +#: plug-ins/file-jpeg/jpeg.c:271 +msgid "" +"If the original image was loaded from a JPEG file using non-standard quality " +"settings (quantization tables), enable this option to get almost the same " +"quality and file size." +msgstr "" +"Si la imagen original se cargó a partir de un archivo JPEG utilizando " +"ajustes de calidad no estándar (tablas de cuantización), habilite esta " +"opción para obtener al menos la misma calidad y tamaño del archivo." + +#: plug-ins/file-jpeg/jpeg.c:293 +msgid "Sho_w preview in image window" +msgstr "Mostrar _vista previa en la ventana de la imagen" + +#: plug-ins/file-jpeg/jpeg.c:294 +msgid "Creates a temporary layer with an export preview" +msgstr "Crea una capa temporal con una vista previa de exportación" + +#: plug-ins/file-jpeg/jpeg.c:298 +msgid "Use _arithmetic coding" +msgstr "Utilizar codificación _aritmética" + +#: plug-ins/file-jpeg/jpeg.c:299 msgid "Older software may have trouble opening arithmetic-coded images" msgstr "" "El software antiguo puede tener problemas para abrir imágenes codificadas " "aritméticamente" -#: plug-ins/file-jpeg/jpeg.c:301 +#: plug-ins/file-jpeg/jpeg.c:304 msgid "Use restart mar_kers" msgstr "Usar mar_cadores de reinicio" -#: plug-ins/file-jpeg/jpeg.c:490 +#: plug-ins/file-jpeg/jpeg.c:476 msgid "JPEG format does not support multiple layers." msgstr "El formato JPEG no soporta múltiples capas." @@ -8428,7 +9599,7 @@ 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:2662 +#: plug-ins/file-psd/psd-load.c:3572 plug-ins/file-psd/psd-save.c:2665 msgid "Compatibility Notice" msgstr "Aviso de compatibilidad" @@ -8440,57 +9611,6 @@ msgstr "" "Este archivo PSD contiene características que\n" "aún no son totalmente compatibles con PIKA:" -#: plug-ins/file-psd/psd-load.c:3587 -msgid "Adjustment layers are not yet supported and will be dropped." -msgstr "Las capas de ajuste aún no son compatibles y se eliminarán." - -#: plug-ins/file-psd/psd-load.c:3591 -msgid "Metadata non-raster layers are not yet supported and will be dropped." -msgstr "" -"Las capas de metadatos que no son ráster no son compatibles y se eliminarán." - -#: plug-ins/file-psd/psd-load.c:3595 -msgid "" -"Fill layers are partially supported and will be converted to raster layers." -msgstr "" -"Las capas de relleno se admiten parcialmente y se convertirán en capas " -"ráster." - -#: plug-ins/file-psd/psd-load.c:3600 -msgid "" -"Text layers are partially supported and will be converted to raster layers." -msgstr "" -"Las capas de texto son parcialmente compatibles y se convertirán en capas " -"ráster." - -#: plug-ins/file-psd/psd-load.c:3605 -msgid "Linked layers are not yet supported and will be dropped." -msgstr "Las capas vinculadas aún no son compatibles y se eliminarán." - -#: plug-ins/file-psd/psd-load.c:3609 -msgid "" -"Vector masks are partially supported and will be converted to raster layers." -msgstr "" -"Las máscaras vectoriales son parcialmente compatibles y se convertirán en " -"capas ráster." - -#: plug-ins/file-psd/psd-load.c:3614 -msgid "Vector strokes are not yet supported and will be dropped." -msgstr "Los trazos vectoriales aún no son compatibles y se eliminarán." - -#: plug-ins/file-psd/psd-load.c:3618 -msgid "Layer effects are not yet supported and will be dropped." -msgstr "Los efectos de capa aún no son compatibles y se eliminarán." - -#: plug-ins/file-psd/psd-load.c:3622 -msgid "Smart objects are not yet supported and will be dropped." -msgstr "Los objetos inteligentes aún no son compatibles y se eliminarán." - -#. Translators: short for layer compositions -#: plug-ins/file-psd/psd-load.c:3627 -msgid "Layer comps are not yet supported and will be dropped." -msgstr "Las composiciones de capas aún no son compatibles y se eliminarán." - #: plug-ins/file-psd/psd-save.c:502 msgid "Error: Can't convert PIKA base imagetype to PSD mode" msgstr "" @@ -8518,7 +9638,7 @@ msgstr "" msgid "Export Image as PSD" msgstr "Exportar imagen como PSD" -#: plug-ins/file-psd/psd-save.c:2493 +#: plug-ins/file-psd/psd-save.c:2494 msgid "" "Duotone color space information from the original\n" "imported image will be used." @@ -8526,7 +9646,7 @@ msgstr "" "Se usará la información del espacio de color Bitonal\n" "de la imagen importada original." -#: plug-ins/file-psd/psd-save.c:2561 +#: plug-ins/file-psd/psd-save.c:2563 msgid "" "PSD files can store up to 998 paths. \n" "The rest will be discarded." @@ -8534,7 +9654,7 @@ msgstr "" "Los archivos PSD pueden almacenar hasta 998 rutas.\n" "Se descartará el resto." -#: plug-ins/file-psd/psd-save.c:2663 +#: plug-ins/file-psd/psd-save.c:2666 msgid "" "Legacy layer modes have been reported to have better compatibility with " "Photoshop. If you encounter display issues, consider switching to those " @@ -8554,27 +9674,27 @@ msgstr "" msgid "Unexpected end of file" msgstr "Final prematuro del archivo" -#: plug-ins/file-psd/psd.c:131 plug-ins/file-psd/psd.c:211 +#: plug-ins/file-psd/psd.c:136 plug-ins/file-psd/psd.c:216 msgid "Photoshop image" msgstr "Imagen de Photoshop" -#: plug-ins/file-psd/psd.c:160 +#: plug-ins/file-psd/psd.c:165 msgid "Photoshop image (merged)" msgstr "Imagen de Photoshop (combinada)" -#: plug-ins/file-psd/psd.c:234 +#: plug-ins/file-psd/psd.c:239 msgid "Assign a Clipping _Path" msgstr "Asignar una _ruta de recorte" -#: plug-ins/file-psd/psd.c:235 +#: plug-ins/file-psd/psd.c:240 msgid "Select a path to be the clipping path" msgstr "Seleccione una ruta para que sea la ruta de recorte" -#: plug-ins/file-psd/psd.c:241 +#: plug-ins/file-psd/psd.c:246 msgid "Clipping Path _Name" msgstr "_Nombre de la ruta de recorte" -#: plug-ins/file-psd/psd.c:242 +#: plug-ins/file-psd/psd.c:247 msgid "" "Clipping path name\n" "(ignored if no clipping path)" @@ -8582,11 +9702,11 @@ msgstr "" "Nombre de la ruta de recorte\n" "(ignorado si no hay ruta de recorte)" -#: plug-ins/file-psd/psd.c:248 +#: plug-ins/file-psd/psd.c:253 msgid "Path _Flatness" msgstr "_Planitud de la ruta" -#: plug-ins/file-psd/psd.c:249 +#: plug-ins/file-psd/psd.c:254 msgid "" "Clipping path flatness in device pixels\n" "(ignored if no clipping path)" @@ -8594,19 +9714,19 @@ msgstr "" "Planitud de la ruta de recorte en píxeles del dispositivo\n" "(se ignora si no hay ruta de recorte)" -#: plug-ins/file-psd/psd.c:255 +#: plug-ins/file-psd/psd.c:260 msgid "Export as _CMYK" msgstr "Exportar como _CMYK" -#: plug-ins/file-psd/psd.c:256 +#: plug-ins/file-psd/psd.c:261 msgid "Export a CMYK PSD image using the soft-proofing color profile" msgstr "Exportar una imagen PSD CMYK utilizando el perfil de color de prueba" -#: plug-ins/file-psd/psd.c:261 +#: plug-ins/file-psd/psd.c:266 msgid "Export as _Duotone" msgstr "Exportar como _Bitonal" -#: plug-ins/file-psd/psd.c:262 +#: plug-ins/file-psd/psd.c:267 msgid "" "Export as a Duotone PSD file if Duotone color space information was attached " "to the image when originally imported." @@ -8614,15 +9734,15 @@ msgstr "" "Exportar como un archivo PSD Bitonal si la información del espacio de color " "Bitonal estaba incluida en la imagen cuando se importó originalmente." -#: plug-ins/file-psd/psd.c:361 +#: plug-ins/file-psd/psd.c:367 msgid "Import PSD" msgstr "Importar PSD" -#: plug-ins/file-psd/psd.c:560 +#: plug-ins/file-psd/psd.c:538 msgid "Import PSD metadata" msgstr "Importar metadatos PSD" -#: plug-ins/file-psd/psd.c:564 +#: plug-ins/file-psd/psd.c:542 msgid "Metadata fill layers are not supported and will be dropped." msgstr "Las capas de relleno de metadatos no son compatibles y se eliminarán." @@ -8726,7 +9846,7 @@ msgstr "Raw Sigma X3F" msgid "Raw Arriflex ARI" msgstr "Raw Arriflex ARI" -#: plug-ins/file-raw/file-raw-placeholder.c:172 +#: plug-ins/file-raw/file-raw-placeholder.c:176 #, c-format msgid "" "There is no RAW loader installed to open '%s' files.\n" @@ -8745,84 +9865,164 @@ msgstr "" "\n" "Instale uno de ellos para cargar archivos RAW." -#: plug-ins/file-sgi/sgi.c:144 plug-ins/file-sgi/sgi.c:171 +#: plug-ins/file-sgi/sgi.c:147 plug-ins/file-sgi/sgi.c:174 msgid "Silicon Graphics IRIS image" msgstr "Imagen IRIS de Silicon Graphics" -#: plug-ins/file-sgi/sgi.c:147 +#: plug-ins/file-sgi/sgi.c:150 msgid "Loads files in SGI image file format" msgstr "Carga archivos en el formato de imagen SGI" -#: plug-ins/file-sgi/sgi.c:148 +#: plug-ins/file-sgi/sgi.c:151 msgid "This plug-in loads SGI image files." msgstr "Este complemento carga archivos de imagen SGI." -#: plug-ins/file-sgi/sgi.c:177 +#: plug-ins/file-sgi/sgi.c:180 msgid "Exports files in SGI image file format" msgstr "Exporta archivos en el formato de imagen SGI" -#: plug-ins/file-sgi/sgi.c:178 +#: plug-ins/file-sgi/sgi.c:181 msgid "This plug-in exports SGI image files." msgstr "Este complemento exporta archivos de imagen SGI." -#: plug-ins/file-sgi/sgi.c:191 +#: plug-ins/file-sgi/sgi.c:194 msgid "Compression _type" msgstr "_Tipo de compresión" -#: plug-ins/file-sgi/sgi.c:192 +#: plug-ins/file-sgi/sgi.c:195 msgid "Compression level (0 = none, 1 = RLE, 2 = ARLE)" msgstr "Nivel de compresión (0 = ninguno, 1 = RLE, 2 = ARLE)" -#: plug-ins/file-sgi/sgi.c:274 +#: plug-ins/file-sgi/sgi.c:276 msgid "SGI format does not support multiple layers." msgstr "El formato SGI no soporta múltiples capas." -#: plug-ins/file-sgi/sgi.c:342 +#: plug-ins/file-sgi/sgi.c:341 #, c-format msgid "Could not open '%s' for reading." msgstr "No se pudo abrir «%s» para lectura." -#: plug-ins/file-sgi/sgi.c:358 +#: plug-ins/file-sgi/sgi.c:357 #, c-format msgid "Invalid width: %hu" msgstr "Anchura no válida: %hu" -#: plug-ins/file-sgi/sgi.c:366 +#: plug-ins/file-sgi/sgi.c:365 #, c-format msgid "Invalid height: %hu" msgstr "Altura no válida: %hu" -#: plug-ins/file-sgi/sgi.c:374 +#: plug-ins/file-sgi/sgi.c:373 #, c-format msgid "Invalid number of channels: %hu" msgstr "Número de canales no válido: %hu" -#: plug-ins/file-sgi/sgi.c:655 +#: plug-ins/file-sgi/sgi.c:654 #, c-format msgid "Could not open '%s' for writing." msgstr "No se pudo abrir «%s» para escritura." -#: plug-ins/file-sgi/sgi.c:745 +#: plug-ins/file-sgi/sgi.c:744 msgid "No compression" msgstr "Sin compresión" -#: plug-ins/file-sgi/sgi.c:747 +#: plug-ins/file-sgi/sgi.c:746 msgid "RLE compression" msgstr "Compresión RLE" -#: plug-ins/file-sgi/sgi.c:749 +#: plug-ins/file-sgi/sgi.c:748 msgid "Aggressive RLE (not supported by SGI)" msgstr "RLE agresivo (no soportado por SGI)" -#: plug-ins/file-tiff/file-tiff.c:159 plug-ins/file-tiff/file-tiff.c:188 +#: plug-ins/file-tiff/file-tiff.c:162 plug-ins/file-tiff/file-tiff.c:191 msgid "TIFF or BigTIFF image" msgstr "Imagen TIFF o BigTIFF" -#: plug-ins/file-tiff/file-tiff.c:204 +#: plug-ins/file-tiff/file-tiff.c:207 msgid "TIFF" msgstr "TIFF" -#: plug-ins/file-tiff/file-tiff.c:459 +#: plug-ins/file-tiff/file-tiff.c:214 +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 +msgid "" +"The BigTIFF variant file format uses 64-bit offsets, hence supporting over " +"4GiB files and bigger" +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 +msgid "Co_mpression" +msgstr "_Compresión" + +#: plug-ins/file-tiff/file-tiff.c:222 +#, fuzzy +#| msgid "Compression _type" +msgid "Compression type" +msgstr "_Tipo de compresión" + +#: plug-ins/file-tiff/file-tiff.c:224 +msgid "LZW" +msgstr "LZW" + +#: plug-ins/file-tiff/file-tiff.c:225 +msgid "Pack Bits" +msgstr "Empaquetar bits" + +#: plug-ins/file-tiff/file-tiff.c:226 +msgid "Deflate" +msgstr "Desinflar" + +#: plug-ins/file-tiff/file-tiff.c:228 +msgid "CCITT Group 3 fax" +msgstr "Fax CCITT grupo 3" + +#: plug-ins/file-tiff/file-tiff.c:229 +msgid "CCITT Group 4 fax" +msgstr "Fax CCITT grupo 4" + +#: plug-ins/file-tiff/file-tiff.c:235 +msgid "" +"Keep the color data masked by an alpha channel intact (do not store " +"premultiplied components)" +msgstr "" +"Mantener intactos los datos de color enmascarados por un canal alfa (no " +"almacenar componentes premultiplicados)" + +#: plug-ins/file-tiff/file-tiff.c:242 +#, 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 +msgid "Save La_yers" +msgstr "Guardar ca_pas" + +#: plug-ins/file-tiff/file-tiff.c:248 +msgid "Save Layers" +msgstr "Guardar capas" + +#: plug-ins/file-tiff/file-tiff.c:253 +msgid "Crop L_ayers" +msgstr "Recortar c_apas" + +#: plug-ins/file-tiff/file-tiff.c:254 +msgid "Crop Layers" +msgstr "Recortar capas" + +#: plug-ins/file-tiff/file-tiff.c:259 +msgid "Save _GeoTIFF data" +msgstr "Guardar los datos _GeoTIFF" + +#: plug-ins/file-tiff/file-tiff.c:260 +msgid "Save GeoTIFF data" +msgstr "Guardar los datos GeoTIFF" + +#: plug-ins/file-tiff/file-tiff.c:446 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 " @@ -9022,8 +10222,8 @@ 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:1760 -#: plug-ins/file-tiff/file-tiff-load.c:1802 +#: plug-ins/file-tiff/file-tiff-load.c:1761 +#: plug-ins/file-tiff/file-tiff-load.c:1804 #, c-format msgid "" "Error trying to open temporary %s file '%s' for tiff metadata loading: %s" @@ -9031,38 +10231,38 @@ 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:1878 +#: plug-ins/file-tiff/file-tiff-load.c:1880 #, 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:1993 -#: plug-ins/file-tiff/file-tiff-load.c:2190 +#: plug-ins/file-tiff/file-tiff-load.c:1995 +#: plug-ins/file-tiff/file-tiff-load.c:2192 #, 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:2002 -#: plug-ins/file-tiff/file-tiff-load.c:2199 +#: plug-ins/file-tiff/file-tiff-load.c:2004 +#: plug-ins/file-tiff/file-tiff-load.c:2201 #, 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:2549 +#: plug-ins/file-tiff/file-tiff-load.c:2551 msgid "Import from TIFF" msgstr "Importar desde TIFF" -#: plug-ins/file-tiff/file-tiff-load.c:2554 -#: plug-ins/metadata/metadata-editor.c:5307 +#: plug-ins/file-tiff/file-tiff-load.c:2556 +#: plug-ins/metadata/metadata-editor.c:5533 msgid "_Import" msgstr "_Importar" -#: plug-ins/file-tiff/file-tiff-load.c:2570 +#: plug-ins/file-tiff/file-tiff-load.c:2572 msgid "_Show reduced images" msgstr "_Mostrar imágenes reducidas" @@ -9070,23 +10270,23 @@ msgstr "_Mostrar imágenes reducidas" #. 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:2604 +#: 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:2621 +#: plug-ins/file-tiff/file-tiff-load.c:2623 msgid "Process extra channel as:" msgstr "Procesar canal adicional como:" -#: plug-ins/file-tiff/file-tiff-load.c:2624 +#: plug-ins/file-tiff/file-tiff-load.c:2626 msgid "_Non-premultiplied alpha" msgstr "Alfa _no premultiplicado" -#: plug-ins/file-tiff/file-tiff-load.c:2625 +#: plug-ins/file-tiff/file-tiff-load.c:2627 msgid "Pre_multiplied alpha" msgstr "Alfa pre_multiplicado" -#: plug-ins/file-tiff/file-tiff-load.c:2626 +#: plug-ins/file-tiff/file-tiff-load.c:2628 msgid "Channe_l" msgstr "Cana_l" @@ -9119,7 +10319,7 @@ msgstr "Ha fallado un trazo de la imagen por lícnea escrita en la fila %d" msgid "Writing pages with different bit depth is strange." msgstr "Escribir páginas con distinta profundidad de bit es extraño." -#: plug-ins/file-tiff/file-tiff-save.c:1310 +#: plug-ins/file-tiff/file-tiff-save.c:1273 msgid "" "Warning: maximum TIFF file size exceeded. Retry as BigTIFF or with a " "different compression algorithm, or cancel." @@ -9128,27 +10328,7 @@ msgstr "" "intentarlo como BigTIFF o con un algoritmo de compresión diferente, o " "cancele." -#: plug-ins/file-tiff/file-tiff-save.c:1323 -msgid "LZW" -msgstr "LZW" - -#: plug-ins/file-tiff/file-tiff-save.c:1324 -msgid "Pack Bits" -msgstr "Empaquetar bits" - -#: plug-ins/file-tiff/file-tiff-save.c:1325 -msgid "Deflate" -msgstr "Desinflar" - -#: plug-ins/file-tiff/file-tiff-save.c:1327 -msgid "CCITT Group 3 fax" -msgstr "Fax CCITT grupo 3" - -#: plug-ins/file-tiff/file-tiff-save.c:1328 -msgid "CCITT Group 4 fax" -msgstr "Fax CCITT grupo 4" - -#: plug-ins/file-tiff/file-tiff-save.c:1386 +#: plug-ins/file-tiff/file-tiff-save.c:1332 msgid "" "The assigned soft-proofing profile is not a CMYK profile.\n" "This profile will not be included in the exported image." @@ -9156,19 +10336,19 @@ msgstr "" "Este perfil de prueba de impresión asignado no es un perfil CMYK.\n" "Este perfil no será incluido en la imagen exportada." -#: plug-ins/file-webp/file-webp.c:121 plug-ins/file-webp/file-webp.c:148 +#: plug-ins/file-webp/file-webp.c:124 plug-ins/file-webp/file-webp.c:151 msgid "WebP image" msgstr "Imagen WebP" -#: plug-ins/file-webp/file-webp.c:161 +#: plug-ins/file-webp/file-webp.c:164 msgid "WebP" msgstr "WebP" -#: plug-ins/file-webp/file-webp.c:168 +#: plug-ins/file-webp/file-webp.c:171 msgid "Source _type" msgstr "_Tipo de la fuente" -#: plug-ins/file-webp/file-webp.c:169 +#: plug-ins/file-webp/file-webp.c:172 msgid "" "WebP encoder preset (Default=0, Picture=1, Photo=2, Drawing=3, Icon=4, " "Text=5)" @@ -9176,66 +10356,66 @@ msgstr "" "Preajuste del codificador WebP (Predeterminado=0, Imagen=1, Foto=2, " "Dibujo=3, Icono=4, Texto=5)" -#: plug-ins/file-webp/file-webp.c:176 +#: plug-ins/file-webp/file-webp.c:179 msgid "Use lossless encoding" msgstr "Usar codificación sin pérdidas" -#: plug-ins/file-webp/file-webp.c:181 +#: plug-ins/file-webp/file-webp.c:184 msgid "Image _quality" msgstr "_Calidad de la imagen" -#: plug-ins/file-webp/file-webp.c:182 +#: plug-ins/file-webp/file-webp.c:185 msgid "Quality of the image" msgstr "Calidad de la imagen" -#: plug-ins/file-webp/file-webp.c:187 +#: plug-ins/file-webp/file-webp.c:190 msgid "Alpha q_uality" msgstr "C_alidad alfa" -#: plug-ins/file-webp/file-webp.c:188 +#: plug-ins/file-webp/file-webp.c:191 msgid "Quality of the image's alpha channel" msgstr "Calidad del canal alfa de la imagen" -#: plug-ins/file-webp/file-webp.c:193 +#: plug-ins/file-webp/file-webp.c:196 msgid "Use Sharp YU_V" msgstr "Usar YU_V nítida" #. TRANSLATORS: \xe2\x86\x92 is a Unicode #. * "Rightward Arrow" in UTF-8 encoding. #. -#: plug-ins/file-webp/file-webp.c:197 +#: plug-ins/file-webp/file-webp.c:200 msgid "Use sharper (but slower) RGB→YUV conversion" msgstr "Usar una conversión RGB→YUV más nítida (pero más lenta)" -#: plug-ins/file-webp/file-webp.c:202 +#: plug-ins/file-webp/file-webp.c:205 msgid "Loop _forever" msgstr "Bucle in_finito" -#: plug-ins/file-webp/file-webp.c:203 +#: plug-ins/file-webp/file-webp.c:206 msgid "Loop animation infinitely" msgstr "Reproducir la animación en bucle indefinidamente" -#: plug-ins/file-webp/file-webp.c:208 +#: plug-ins/file-webp/file-webp.c:211 msgid "_Minimize output size (slower)" msgstr "_Minimizar tamaño de salida (más lento)" -#: plug-ins/file-webp/file-webp.c:209 +#: plug-ins/file-webp/file-webp.c:212 msgid "Minimize output file size" msgstr "Minimizar el tamaño del archivo de salida" -#: plug-ins/file-webp/file-webp.c:214 +#: plug-ins/file-webp/file-webp.c:217 msgid "Max distance between _key-frames" msgstr "Distancia máxima entre _fotogramas clave" -#: plug-ins/file-webp/file-webp.c:215 +#: plug-ins/file-webp/file-webp.c:218 msgid "Maximum distance between keyframes" msgstr "Distancia máxima entre fotogramas clave" -#: plug-ins/file-webp/file-webp.c:220 +#: plug-ins/file-webp/file-webp.c:223 msgid "_Default delay between frames" msgstr "Retraso _predeterminado entre fotogramas" -#: plug-ins/file-webp/file-webp.c:221 +#: plug-ins/file-webp/file-webp.c:224 msgid "" "Default delay (in milliseconds) to use when timestamps for frames are not " "available or forced." @@ -9243,19 +10423,19 @@ msgstr "" "Retraso predeterminado (en milisegundos) que usar cuando las marcas de " "tiempo de los fotogramas no están disponibles o se fuerzan." -#: plug-ins/file-webp/file-webp.c:227 +#: plug-ins/file-webp/file-webp.c:230 msgid "Use default dela_y for all frames" msgstr "Usar el retraso predeterminado para todos los fotogramas" -#: plug-ins/file-webp/file-webp.c:228 +#: plug-ins/file-webp/file-webp.c:231 msgid "Force default delay on all frames" msgstr "Forzar el retraso predeterminado en todos los fotogramas" -#: plug-ins/file-webp/file-webp.c:233 +#: plug-ins/file-webp/file-webp.c:236 msgid "Save a_nimation" msgstr "Guardar _animación" -#: plug-ins/file-webp/file-webp.c:234 +#: plug-ins/file-webp/file-webp.c:237 msgid "Use layers for animation" msgstr "Usar capas para la animación" @@ -9276,7 +10456,7 @@ 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:2623 +#: plug-ins/gradient-flare/gradient-flare.c:2599 msgid "Default" msgstr "Predeterminada" @@ -9300,28 +10480,28 @@ msgstr "Icono" msgid "Text" msgstr "Texto" -#: plug-ins/file-webp/file-webp-load.c:107 +#: plug-ins/file-webp/file-webp-load.c:106 #, c-format msgid "Invalid WebP file '%s'" msgstr "Archivo WebP «%s» no válido." # //R ¿Drawables? -#: plug-ins/file-webp/file-webp-load.c:202 +#: plug-ins/file-webp/file-webp-load.c:195 #, c-format msgid "Failed to decode animated WebP file '%s'" msgstr "Falló al decodificar el archivo WebP animado «%s»" -#: plug-ins/file-webp/file-webp-load.c:210 +#: plug-ins/file-webp/file-webp-load.c:203 #, c-format msgid "Failed to decode animated WebP information from '%s'" msgstr "Fallo al descodificar la información del WebP animado desde «%s»" -#: plug-ins/file-webp/file-webp-load.c:229 +#: plug-ins/file-webp/file-webp-load.c:222 #, c-format msgid "Failed to decode animated WebP frame from '%s'" msgstr "Fallo al descodificar el fotograma del WebP animado desde «%s»" -#: plug-ins/file-webp/file-webp-load.c:234 +#: plug-ins/file-webp/file-webp-load.c:227 #, c-format msgid "Frame %d (%dms)" msgstr "Fotograma %d (%dms)" @@ -9377,7 +10557,7 @@ msgid "unknown error" msgstr "error desconocido" #: plug-ins/file-webp/file-webp-save.c:208 -#: plug-ins/file-webp/file-webp-save.c:608 +#: plug-ins/file-webp/file-webp-save.c:607 #, c-format msgid "Unable to open '%s' for writing: %s" msgstr "No se pudo abrir «%s» para escritura: %s" @@ -9434,15 +10614,15 @@ msgstr "El mismo" msgid "Random" msgstr "Aleatorio" -#: plug-ins/flame/flame.c:810 plug-ins/lighting/lighting-ui.c:855 +#: plug-ins/flame/flame.c:810 plug-ins/lighting/lighting-main.c:163 msgid "Linear" msgstr "Lineal" -#: plug-ins/flame/flame.c:811 plug-ins/lighting/lighting-ui.c:857 +#: plug-ins/flame/flame.c:811 plug-ins/lighting/lighting-main.c:165 msgid "Sinusoidal" msgstr "Sinuosidal" -#: plug-ins/flame/flame.c:812 plug-ins/lighting/lighting-ui.c:858 +#: plug-ins/flame/flame.c:812 plug-ins/lighting/lighting-main.c:166 msgid "Spherical" msgstr "Esférico" @@ -9486,8 +10666,7 @@ msgstr "Diamante" msgid "Ex" msgstr "Ex" -#: plug-ins/flame/flame.c:824 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:842 +#: plug-ins/flame/flame.c:824 plug-ins/fractal-explorer/fractal-explorer.c:260 msgid "Julia" msgstr "Julia" @@ -9511,10 +10690,9 @@ msgstr "Exponencial" msgid "Power" msgstr "Potencia" -#: plug-ins/flame/flame.c:830 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:991 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1032 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1073 +#: plug-ins/flame/flame.c:830 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" @@ -9534,7 +10712,7 @@ msgstr "Gran angular" msgid "Bubble" msgstr "Burbuja" -#: plug-ins/flame/flame.c:835 plug-ins/map-object/map-object-ui.c:465 +#: plug-ins/flame/flame.c:835 plug-ins/map-object/map-object-main.c:140 msgid "Cylinder" msgstr "Cilindro" @@ -9564,7 +10742,7 @@ msgstr "Llama" #: plug-ins/flame/flame.c:1096 plug-ins/pikaressionist/orientation.c:190 #: plug-ins/pikaressionist/size.c:199 -#: plug-ins/gradient-flare/gradient-flare.c:3082 +#: plug-ins/gradient-flare/gradient-flare.c:3046 msgid "_Edit" msgstr "_Editar" @@ -9608,19 +10786,17 @@ msgstr "Cámar_a" msgid "_Zoom:" msgstr "Amplia_ción:" -#: plug-ins/flame/flame.c:1296 plug-ins/gradient-flare/gradient-flare.c:2890 -#: plug-ins/lighting/lighting-ui.c:491 +#: 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:2894 -#: plug-ins/lighting/lighting-ui.c:508 +#: 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:541 +#: 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:998 +#: plug-ins/gradient-flare/gradient-flare.c:988 #, c-format msgid "" "No %s in pikarc:\n" @@ -9633,332 +10809,353 @@ msgstr "" "(%s «%s»)\n" "a su archivo %s." -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:557 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:633 msgid "Fractal Explorer" msgstr "Examinador de fractales" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:630 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:683 msgid "Re_altime preview" msgstr "Vista previa en tiempo re_al" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:638 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:691 msgid "If enabled the preview will be redrawn automatically" msgstr "Si activa esta opción la vista previa se redibujará automáticamente" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:641 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:694 msgid "R_edraw preview" msgstr "Redibujar _vista previa" -#. Zoom Options -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:649 -msgid "Zoom" -msgstr "Ampliación" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:662 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:715 msgid "Zoom _In" msgstr "_Ampliar" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:670 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:723 msgid "Zoom _Out" msgstr "Re_ducir" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:687 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:740 msgid "Undo last zoom change" msgstr "Deshacer el último cambio de ampliación" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:693 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:746 msgid "_Redo" msgstr "_Rehacer" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:697 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:750 msgid "Redo last zoom change" msgstr "Rehacer el último cambio de ampliación" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:714 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:758 msgid "_Parameters" msgstr "_Parámetros" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:717 -msgid "Fractal Parameters" -msgstr "Parámetros del fractal" +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:760 +msgid "_Colors" +msgstr "_Colores" -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:726 -#: plug-ins/map-object/map-object-ui.c:1078 -msgid "Left:" -msgstr "Izquierda:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:735 -#: plug-ins/map-object/map-object-ui.c:1078 -msgid "Right:" -msgstr "Derecha:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:744 -#: plug-ins/map-object/map-object-ui.c:1077 -msgid "Top:" -msgstr "Superior:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:753 -#: plug-ins/map-object/map-object-ui.c:1077 -msgid "Bottom:" -msgstr "Inferior:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:764 -msgid "" -"The higher the number of iterations, the more details will be calculated" -msgstr "Cuanto mayor sea el número de iteraciones, más detalles se calcularán" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:774 -msgid "CX:" -msgstr "CX:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:777 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:788 -msgid "Changes aspect of fractal" -msgstr "Cambia la apariencia del fractal" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:785 -msgid "CY:" -msgstr "CY:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:807 -msgid "Load a fractal from file" -msgstr "Cargar un fractal desde un archivo" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:815 -msgid "Reset parameters to default values" -msgstr "Restablecer parámetros a los valores predefinidos" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:824 -msgid "Save active fractal to file" -msgstr "Guardar el fractal actual en un archivo" - -#. Fractal type toggle box -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:827 -msgid "Fractal Type" -msgstr "Tipo de fractal" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:840 -msgid "Mandelbrot" -msgstr "Mandelbrot" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:844 -msgid "Barnsley 1" -msgstr "Barnsley 1" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:846 -msgid "Barnsley 2" -msgstr "Barnsley 2" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:848 -msgid "Barnsley 3" -msgstr "Barnsley 3" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:850 -msgid "Spider" -msgstr "Araña" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:852 -msgid "Man'o'war" -msgstr "Man'o'war" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:854 -msgid "Lambda" -msgstr "Lambda" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:856 -msgid "Sierpinski" -msgstr "Sierpinski" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:902 -msgid "Co_lors" -msgstr "Co_lores" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:915 -msgid "Number of colors:" -msgstr "Número de colores:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:917 -msgid "Change the number of colors in the mapping" -msgstr "Cambia el número de colores en el mapeo" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:926 -msgid "Use loglog smoothing" -msgstr "Usar suavizado «loglog»" - -# //R ¿Qué es esto de banding? -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:932 -msgid "Use log log smoothing to eliminate \"banding\" in the result" -msgstr "Usar suavizado «loglog» para evitar «bandas» en el resultado" - -#. Color Density frame -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:937 -msgid "Color Density" -msgstr "Densidad del color" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:946 -msgid "Red:" -msgstr "Rojo:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:948 -msgid "Change the intensity of the red channel" -msgstr "Cambiar la intensidad del canal rojo" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:956 -msgid "Green:" -msgstr "Verde:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:958 -msgid "Change the intensity of the green channel" -msgstr "Cambiar la intensidad del canal verde" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:966 -msgid "Blue:" -msgstr "Azul:" - -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:968 -msgid "Change the intensity of the blue channel" -msgstr "Cambiar la intensidad del canal azul" - -#. Color Function frame -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:976 -msgid "Color Functi