1
1
mirror of https://gitlab.gnome.org/GNOME/gimp.git synced 2025-10-06 01:12:40 +02:00

Compare commits

...

64 Commits

Author SHA1 Message Date
Alx Sa
9243da158f Merge branch 'alxsa-lcms2-fast-float' into 'master'
Issue #9536: Enable LCMS2 Fast Float plug-in

Closes #9536

See merge request GNOME/gimp!2391
2025-10-05 18:16:17 +00:00
Bruno Lopes
ebd6e64dc8 build/linux: Fix Flatpak building after gexiv2 dep declaration 2025-10-05 14:53:41 -03:00
Bruno Lopes
4768a4283d gitlab-ci: Add comment explaining Flatpak timeout 2025-10-05 13:45:55 -03:00
Bruno Lopes
fe4a698928 gitlab-ci: Bump Flatpak timeout for 90min again for rebuilding purposes
When we bump some dependency (e.g. Poppler), even the ones which
don't link to it will be rebuild, so 30min is not enough even
with the ORAS caching.
2025-10-05 13:41:27 -03:00
Bruno Lopes
d8d73266bc build/linux: Update poppler module to 25.10
Synced from
6d4124f7b8
2025-10-04 18:51:18 -03:00
Bruno Lopes
356c2baec5 gitlab-ci, build/windows: Remove forgotten comment about fixed #12284 2025-10-04 16:16:49 -03:00
Bruno Lopes
aea7042aa1 meson: Support Windows native paths (aka backslashes) on -Dprefix
Closes: #12284
2025-10-04 16:12:00 -03:00
Alan Mortensen
97944a5415 Update Danish translation
(cherry picked from commit d81cfcc325)
2025-10-04 12:48:26 +00:00
Alx Sa
a5182a010f tools: Fix missing cursor for MyPaint Brush tool
Resolves #15001
In the MyPaint Brushes v2 port (ea8b9dc1),
I implemented a cursor_update () function from the
parent class. However, I did not call the parent's
version of the function afterwards, so the MyPaint
Brush cursor was not being redrawn. This patch
adds the call to fix the cursor display issue.
2025-10-03 22:14:52 +00:00
Øyvind Kolås
9c2c5ff183 meson, app: depend on GEGL-0.4.64 2025-10-03 23:56:36 +02:00
Bruno Lopes
f09007507f Declare gexiv2 dependency on many targets (due to gimpmetadata.h)
Our build files were relying 'sysroot' to find gexiv2.h but this is
not possible with Apple Clang om which sysroot points to macOS SDK.
So, exotic environments like Homebrew were failing. Let's fix this.
2025-10-03 18:31:53 -03:00
Bruno Lopes
2b91551f4e gitlab-ci: Complete cbe56ff3 2025-10-03 09:03:26 -03:00
Bruno Lopes
cbe56ff388 gitlab-ci: Remove dangling MSYSTEM_PREFIX on Win job names
It makes them consistent with other non-Windows jobs so
easier to read.
2025-10-02 21:37:33 -03:00
Anders Jonsson
7cec3f52b9 .gitlab: fix template typo 2025-10-03 00:54:09 +02:00
Alx Sa
81c67e5614 tools: Don't commit Filter Tool without a filter
The Filter Tool is a "hidden" tool that we switch to
when applying a filter. Like other tools, it commits when
we save our image. However, we may no longer have an
active filter in the tool when we do so (like, after applying
an NDE filter). Because we check the drawable from the
filter to confirm whether we should force NDE or not,
this can cause a CRITICAL when we try to access a now
non-existent filter.

This patch extends the "if (filter_tool->filter)" check to
cover the full commit check process, to prevent the bug.
2025-10-02 12:07:25 +00:00
Øyvind Kolås
67fa72a94e meson, app: depend on babl-0.1.116 2025-10-02 13:22:29 +02:00
Yuri Chornoivan
6587256c3a Update Ukrainian translation 2025-10-02 08:21:41 +00:00
Bruno Lopes
ad9dbf2c8b tools: Drop bashism/gnushism in read command 2025-10-01 21:26:25 -03:00
Bruno Lopes
2f0bfc569b meson: Fix wrong debugging_format detection on clang-cl and msvc 2025-10-01 20:13:33 -03:00
Alx Sa
36330a271a tools: Prevent bucket fill on link/vector layers
Resolves #14993
We currently prevent paint tools from painting on
link or vector layers. However, we had not added this
protection to the bucket fill tool. This patch copies over
the relevant if statements to prevent this.
2025-10-01 13:23:09 +00:00
Jehan
baa4825880 app: use the new release/ alias URLs for the "Learn more" link of…
… Release Notes tab.
2025-10-01 14:40:18 +02:00
Jehan
8c910c2b6b tools: improve release stats.
- Interactively query the release version from standard input.
- Compute the logical previous version but also the previous release in
  time. For instance the logical previous release of GIMP 3.0.6 will be
  3.0.4 but the time-wise previous release will be 3.1.4.
- Some statistics will use the logical previous release whereas others
  the time-wise one.
2025-10-01 14:39:51 +02:00
Marco Ciampa
a025cfe41b Updated Italian translation 2025-10-01 12:37:59 +02:00
Jehan
41035c7589 plug-ins: fix memory management and handle multi-file zip.
We should not call archive_entry_free() since man
archive_read_next_header explicitly says that the returned entry is an
internal object:

> This is a convenience wrapper around archive_read_next_header2() that
> reuses an internal struct archive_entry object for each request.

The only reason why it was not crashing is that we were not properly
freeing the archive itself so internal objects were hanging! The man
archive_read says:

> Once you have finished reading data from the archive, you should call
> archive_read_close() to close the archive, then call archive_read_free()
> to release all resources, including all memory allocated by the library.

Therefore this code add archive_read_free() at the end and removes
archive_entry_free().

Furthermore we now verify if the zip archive contains any other file.
Unlike all other compression formats we were supporting until now, zip
is a full multi-file container format and we are always only trying to
read the first file listed in the archive. This likely means that this
file was not meant to be opened this way. In any case, still try to load
the first file as an image, yet raise a warning about the existence of
more files in the archive.
2025-09-30 20:14:01 +02:00
Jehan
7275569079 plug-ins: localize strings and improve extension list.
- Uppercase first letter of blurbs.
- Make the blurb and documentation strings localizable and localized.
- Add the compression format extension to the list of extensions. I am
  unsure why it was set as FIXME, because it does work perfectly (per
  tests) as a generic (de)compressor plug-in for any of the image
  formats we support. Not even this, but I am even putting the generic
  extension first, because sometimes we take the first listed extension
  of a load procedure to determine the source file format. Yet the only
  thing we can say *generically* about a file loaded by these procedures
  is that it was compressed with the associated container format!
- For the new zip-support, do not show xcf.zip and xcfzip extensions in
  the list. I don't think we want to promote these new extensions as
  standard XCF variants, even though in practice this will still work
  fine. Instead add hgt.zip (but again, after the generic zip, cf.
  previous point), because we know that this is a commonly used format
  combination for HGT files.
2025-09-30 19:53:36 +02:00
Jehan
dfafb7c6f2 NEWS: add new feature and clean out backported enhancements.
Various items have been moved to gimp-3-0 branch (commit f2c13d319e) and
some were already duplicated.
2025-09-30 17:50:39 +02:00
Aleksandr Prokudin
25d1b7f8c3 Update Russian translation 2025-09-30 17:12:29 +02:00
Bruno Lopes
0edf615333 libgimp: Improve .gir and .vapi dependencies by using unified list
To avoid bugs like: #14902
2025-09-30 11:29:51 -03:00
Aefgh Threenine
daf23e1a50 Update Thai translation 2025-09-29 23:54:22 +00:00
Alx Sa
b633b4b9c7 python: Remove layer offsets on ORA export
When exporting formats that use image procedures
(like PNG), if we don't remove the layer offsets then
the image is cut off on export. This is because we
size the image to the layer size, but then the layer offsets
move it off the canvas. This patch fixes the issue for
ORA export.
2025-09-29 18:55:20 -03:00
Yuri Chornoivan
cfa3fd6bb7 Update Ukrainian translation 2025-09-29 20:00:05 +00:00
Yuri Chornoivan
669685d1d8 Update Ukrainian translation 2025-09-29 19:51:36 +00:00
Alx Sa
f032153596 plug-ins: Add zip decompression support
This patch adds support for decompressing .zip files and
loading an image within. This allows us to load zipped
images like hgt.zip and other compressed formats.
2025-09-29 19:28:18 +00:00
Jehan
13639b1d3d NEWS: update. 2025-09-29 21:06:08 +02:00
Jehan
eb0bfe7bdb Issue #13553: pop an error dialog up only for specific GIO error.
This fixes 46d9a09698. There was a reason why this was not implemented
as an assert-type error nor as a user-facing error: network problems
happen.

We cannot pop an error up every time:

* The computer is offline! 😱 GIMP is not made to be run as a connected
  software and working on GIMP with a non-connected computer is a
  perfectly valid way of using GIMP.
* gimp.org is down (it's rare, but it happens and it should not have any
  impact to creators with GIMP).
* You are behind some kind of proxy or other complicated network
  configuration which GIO is not able to pass through.
* And any other reason which could make your GIMP not able to read the
  remote json file…

Instead let's check the more particular domain and error code, though
even this I hesitated between doing this change or simply reverting
commit 46d9a09698.
Indeed it's still quite a generic G_IO_ERROR_NOT_SUPPORTED error, so I
do hope we cannot get it in other normal conditions where reading a
remote link may fail. The last thing we want is GIMP popping up errors
which are neither bugs in our code, nor environment issues for which
anyone can do anything about.
2025-09-29 20:31:40 +02:00
Asier Saratsua Garmendia
393ca59e79 Update Basque translation 2025-09-29 17:59:37 +00:00
Jehan
3a698a05a1 plug-ins: only set the file if it's actually an inner XCF file.
Soon we will officially support .hgt.zip files (see !2483) but in fact,
even without this, the file-compressor actually support any other
formats we support, compressed into one of the container formats
supported by this plug-in.

This fixes such error message:

> gimp_image_set_file: failure to set file 'file:///home/jehan/Documents/gimp-splash-deleteme.png.gz' with extension 'gz'. The extension must be '.xcf' (or a compressed variant).
2025-09-29 17:46:33 +02:00
Jehan
f4a7da1ee3 app, pdb: similar to the previous commit, but for files loaded with…
… gimp_file_load().

We make sure that the load procedure associated to the file is the one
used for the inner-file (in case of imbricated files into container
formats).

Also let's set the imported file unless it's a XCF inner format.
2025-09-29 17:46:32 +02:00
Jehan
bb9d8df855 app: make sure we only consider the inner file load procedure to…
… determine if a file is XCF.

This was kinda already working for files loaded through the GUI. Yet the
code in file_open_file_proc_is_import() was assuming a file loaded
through the file-compressor plug-in is necessarily XCF.

Even though it is the original use, the code in file-compressor is
actually generic and is able to load any supported format additionally
compressed with gz, bz2 or xz.
Furthermore, we will soon support zip-ped imaged, explicitly to support
the format .hgt.zip which is quite common (see !2483). So remove any
logic of a file loaded by file-compressor as meaning it's a compressed
XCF.
2025-09-29 17:46:32 +02:00
Kolbjørn Stuestøl
78e68efd06 Update Norwegian Nynorsk translation 2025-09-29 15:15:57 +00:00
Ekaterine Papava
2fa82d51ee Update Georgian translation 2025-09-29 14:52:02 +00:00
Martin
f223dae9fe Update Slovenian translation 2025-09-29 13:21:27 +00:00
luzpaz
9daf5d2e5d libgimpconfig: fix typo in gimpconfig-params.c
Fixes source comment typo and modifies whitespace for readability.
2025-09-29 11:07:55 +00:00
Bruno Lopes
789af76a32 app: Move "Documentation" link one line up over (community) "Tutorials"
Users were thinking the tutorials are some kind of official docs,
but they are not maintained as the official GIMP help website,
they are more like informal documentation about GIMP made public.

Let's clarify this reordering the buttons.
2025-09-29 07:32:12 -03:00
Bruno Lopes
f9ba343558 build/windows: Stay on Inno 6.5.4 to avoid (potentially) broken 6.6.0 Dark Mode
It was announced by the devs on Google Groups that they are on preview state.

I will need time to conform our scripts to the upcoming 6.6.0.
So, let's not risk creating installers with broken UI.
2025-09-28 22:12:16 -03:00
Bruno Lopes
014aa5ae6f build/linux: Patch mypaint brushes on AppImage and Snap too
Following 2f6b7591
2025-09-28 21:39:00 -03:00
Bruno Lopes
47eac319b1 build/linux: Silence noisy warnings about GTK_MODULES
From GTK mouth:
https://gitlab.gnome.org/GNOME/gtk/-/blob/3.24.50/gtk/gtkmodules.c?ref_type=tags#L250
2025-09-28 19:58:25 -03:00
Bruno Lopes
3bde6195f6 build/windows, gimp-data: Prepare to Inno Setup 6.6.0 2025-09-28 18:19:18 -03:00
Bruno Lopes
b0689f565b build/linux: Little improvement on libheif plugins bundling 2025-09-28 08:25:27 -03:00
Bruno Lopes
1e46438ced build/linux: Fix libproxy/libpxbackend errors on Snap 2025-09-28 08:02:52 -03:00
Bruno Lopes
2b32496195 build/linux: Remove some uneeded lines after move to Trixie 2025-09-28 07:41:45 -03:00
Bruno Lopes
de62139894 build/linux: Fix GJS bundling on AppImage
It have an undeclared dependency on GioUnix typelib.
2025-09-28 07:40:20 -03:00
Bruno Lopes
f774ad7f16 Revert "Issue #13001: build/linux: Sandbox XDG_DATA_DIRS on AppImage"
This reverts commit bc095d5c83.

Sandboxing XDG_DATA_DIRS, while can fix the crash due to share/mime,
on the other hand makes impossible to call share/applications
associated with such mimes on host.

So, since we bumped the AppImage to Debian Trixie so the Glib
crash due to mime is gone, we can (and should) revert the
wrong sandboxing without problems.
2025-09-27 19:58:02 -03:00
Bruno Lopes
f53a843c3d gitlab-ci, build: Move to Debian Trixie on AppImage only
Fixes: #13001 #13106 #13492 #13647 #14779

AppImage jobs are now built with Trixie to adress #13001 and many others.

To have two Debian versions with less complexity possible, I needed to:
- Revert the prevalence of the AppImage CI (now nonreloc comes first);
- Revert the use of Clang on Debian (also to save 120MB from registry,
  since we now have 4 Docker images, each one with its own STEP cache!).
In short, .gitlab-ci.yml will look more like before I changing it a lot.
2025-09-27 18:58:18 -03:00
Bruno Lopes
46d9a09698 app: Use 'g_message' (like the help plug-in) when GVFSd-HTTP is not present
Closes #13553

Such issue tends to affect only AppImage users (e.g. when running it in
KDE installations). This is because AppImage files are not ran by
any host helper (e.g. snapd or flatpak) to connect to GVFSd and is
not possible to bundle GVFSd due to its own nature (it is daemon).

Since GVFS is listed in the INSTALL file as a required dependency, it is
fair enough to be more clear when it is not present, otherwise users will
have outdated GIMP without knowing (like happened in macOS in the past).

We are already doing this with GIMP help plug-in by the way. The
difference is that, at GIMP start, such techinical error message can
be surprising, but even so it is needed as feedback for fail on the
update check button in the end of day. Let's follow GIMP help on this.
2025-09-27 11:39:36 -03:00
Kolbjørn Stuestøl
355d695607 Update Norwegian Nynorsk translation 2025-09-27 11:44:30 +00:00
Alx Sa
714e9041d8 pdb: Set choice args to default in gimp-file-load
This patch resolves the same issue as 8021b464,
but for `gimp-file-load`.
2025-09-26 23:57:51 +00:00
Jehan
24c8f86c85 app: minor indentation cleanup. 2025-09-26 23:30:37 +02:00
Jehan
f50145c155 po: remove files which should not be in POTFILES.in.
This file is part of po-tags/ domain, and in fact, it's even in the
POTFILES.skip of the main po/ domain.
2025-09-26 21:53:28 +02:00
Gabriele
7f8298467b Issue #11869: use a custom AppMenu for macOS 2025-09-26 11:43:47 +00:00
Alx Sa
23a9758a7b libgimpwidgets: Update hex color as you type
This patch connects the gimp_color_hex_entry_events ()
function to "key-release-event" and adjusts the code
to update valid colors as you type. Pressing Enter
will work as before, converting back to the last valid
color if an invalid one is typed.
2025-09-25 11:48:17 +00:00
Jehan
0af9261980 app: fix rendering background of Colormap dockable.
The rgba variable would be used uninitialized. This needs to be moved
one loop level up so that the color extracted at each cell start
position is properly reused (and also so that the full transparent color
at no-entry position is properly set and reused too).
2025-09-25 01:27:54 +02:00
Martin
77d25750a7 Update Slovenian translation 2025-09-24 20:36:59 +00:00
Alx Sa
67f067183d libgimpcolor: Enable LCMS2 Fast Float plug-in
Adds support for loading and using the Little CMS
Fast Float plug-in. This plug-in should speed up
color conversions for 8/16 bit and floating point
precision operations. It can be turned off by changing
the "Optimize for" setting from Speed to Quality.
2025-08-10 10:49:02 +00:00
78 changed files with 22010 additions and 20729 deletions

View File

@@ -13,7 +13,7 @@ spec:
test_pipeline:
description: 'Pipelines used only for testing'
options:
- GIMP_CI_MESON_GCC #trigger the Debian GCC build (rare usefulness)
- GIMP_CI_MESON_CLANG #trigger the Debian Clang build (rare usefulness)
- GIMP_CI_RASTER_ICONS #trigger the Debian Clang build without vector icons (rare usefulness)
- GIMP_CI_CPPCHECK #trigger cppcheck (static code analysis)
- none
@@ -30,7 +30,7 @@ workflow:
##################################################
## 1. On MERGE REQUESTS, the following are triggered:
## - Abbreviated Linux Clang build
## - Abbreviated Linux build
## - Building quality tests (static code analysis)
## - clang-format (static code analysis)
## - Execution tests (dynamic code analysis)
@@ -44,7 +44,7 @@ workflow:
# GitLab is quite sensitive about rules 'if' order so be careful
## 3. On COMMITS except tags.
## - Linux Clang build
## - Linux build
## - Building quality tests (static code analysis)
## - Execution tests (dynamic code analysis)
## - Source tarball
@@ -84,6 +84,7 @@ workflow:
image: $CI_REGISTRY_IMAGE:build-debian-${DEB_VERSION}-${RUNNER}
variables:
DEB_VERSION: "bookworm"
UMFPACK: libumfpack5
RUNNER: "x86_64_v3"
# Common cloning procedure
GIT_DEPTH: "1"
@@ -102,24 +103,27 @@ stages:
- analysis
- distribution
## AppImage CI (Debian) ##
.debian:
## Common GNU/Linux 64-bit CI (Debian) ##
.debian-nonreloc:
extends: .default
rules:
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*Package:AppImage.*/'
interruptible: true
- if: '$GIMP_CI_APPIMAGE != null || "$[[ inputs.distribution_pipeline ]]" =~ /.*GIMP_CI_APPIMAGE.*/'
- <<: *CI_MERGE
- <<: *CI_COMMIT
variables: {}
- if: '$GIMP_CI_MESON_CLANG != null || "$[[ inputs.test_pipeline ]]" =~ /.*GIMP_CI_MESON_CLANG.*/'
variables:
CC: clang
CXX: clang++
CC_LD: lld
CXX_LD: lld
TOOLCHAIN: "clang lld"
VARIANT: -clang
- if: '$GIMP_CI_RASTER_ICONS != null || "$[[ inputs.test_pipeline ]]" =~ /.*GIMP_CI_RASTER_ICONS.*/'
variables:
MESON_OPTIONS: "-Dvector-icons=false"
VARIANT: "-raster"
- <<: *CI_RELEASE
parallel:
matrix:
- RUNNER: [aarch64, x86_64_v3]
tags:
- $RUNNER
variables:
CC: "clang"
CXX: "clang++"
CC_LD: lld
CXX_LD: lld
before_script:
- export GIMP_PREFIX="${CI_PROJECT_DIR}/_install-${RUNNER}"
timeout: 30m
@@ -138,13 +142,12 @@ stages:
- export GI_TYPELIB_PATH="${GIMP_PREFIX}/${LIB_DIR}/${LIB_SUBDIR}girepository-1.0${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
- printf "\e[0Ksection_end:`date +%s`:environ\r\e[0K\n"
deps-debian:
extends: .debian
deps-debian-nonreloc:
extends: .debian-nonreloc
stage: dependencies
image: quay.io/buildah/stable
variables:
GIT_STRATEGY: none
PKGCONF_RELOCATABLE_OPTION: '-Dpkgconfig.relocatable=true'
script:
- export BUILDAH_FORMAT=docker
- export STORAGE_DRIVER=vfs
@@ -158,16 +161,15 @@ deps-debian:
- echo "RUN apt-get install -qq -y --no-install-recommends ca-certificates" >> Dockerfile
## Build-time only dependencies
- echo "RUN apt-get install -qq -y --no-install-recommends \\" >> Dockerfile
- echo "appstream
- echo "${TOOLCHAIN:-build-essential}
appstream
bison
clang
desktop-file-utils
flex
gi-docgen
git
gobject-introspection
libgtk-3-bin
lld
meson
valac
xsltproc" >> Dockerfile
@@ -194,6 +196,7 @@ deps-debian:
libgtk-3-dev
libgudev-1.0-dev
libheif-dev
$LIBHEIF_PLUGINS
libjson-glib-dev
libjxl-dev
liblcms2-dev
@@ -209,7 +212,7 @@ deps-debian:
librsvg2-dev
libsuitesparse-dev
libtiff-dev
libumfpack5
$UMFPACK
libunwind-dev
libwebp-dev
libwmf-dev
@@ -226,10 +229,12 @@ deps-debian:
- echo "RUN printf \"\e[0Ksection_start:`date +%s`:environ[collapsed=true]\r\e[0KPreparing build environment\n\"" >> Dockerfile2;
- echo "ENV PKG_CONFIG_PATH=\"${GIMP_PREFIX}/lib/$([ "$(uname -m)" = 'aarch64' ] && echo "aarch64-linux-gnu/" || echo "x86_64-linux-gnu/")pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}\"" >> Dockerfile2;
- echo "ENV XDG_DATA_DIRS=\"${GIMP_PREFIX}/share:/usr/share${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}\"" >> Dockerfile2;
- echo "ENV CC=\"$CC\"" >> Dockerfile2;
- echo "ENV CXX=\"$CXX\"" >> Dockerfile2;
- echo "ENV CC_LD=\"$CC_LD\"" >> Dockerfile2;
- echo "ENV CXX_LD=\"$CXX_LD\"" >> Dockerfile2;
- if [ "$VARIANT" = "-clang" ]; then
echo "ENV CC=\"$CC\"" >> Dockerfile2;
echo "ENV CXX=\"$CXX\"" >> Dockerfile2;
echo "ENV CC_LD=\"$CC_LD\"" >> Dockerfile2;
echo "ENV CXX_LD=\"$CXX_LD\"" >> Dockerfile2;
fi
- echo "ENV CLICOLOR_FORCE=\"1\"" >> Dockerfile2;
- echo "RUN printf \"\e[0Ksection_end:`date +%s`:environ\r\e[0K\n\"" >> Dockerfile2;
# Build some dependencies
@@ -259,11 +264,88 @@ deps-debian:
- gegl/_build-${RUNNER}/config.h
expire_in: 2 hours
gimp-debian-nonreloc:
extends: .debian-nonreloc
needs: ["deps-debian-nonreloc"]
stage: build
variables:
GIT_SUBMODULE_STRATEGY: recursive
script:
- *ENVIRON
# Check building
- printf "\e[0Ksection_start:`date +%s`:gimp_build[collapsed=true]\r\e[0KBuilding GIMP\n"
- meson setup _build-${RUNNER} -Dprefix="${GIMP_PREFIX}"
-Dfile-plug-ins-test=true
$MESON_OPTIONS
- cd _build-${RUNNER}
- ninja
- printf "\e[0Ksection_end:`date +%s`:gimp_build\r\e[0K\n"
# Check execution
- printf "\e[0Ksection_start:`date +%s`:gimp_test[collapsed=true]\r\e[0KTesting GIMP execution\n"
- ninja test
- printf "\e[0Ksection_end:`date +%s`:gimp_test\r\e[0K\n"
# Check source
- printf "\e[0Ksection_start:`date +%s`:gimp_tar[collapsed=true]\r\e[0KChecking GIMP source\n"
- if [ $(git diff |wc -l) -ne 0 ]; then
printf "ERROR. A generated file was updated without the source:\n";
git diff;
exit 1;
fi
- if [ "$VARIANT" != "-clang" ] && [ "$VARIANT" != "-raster" ] && [ "$CI_PIPELINE_SOURCE" != "merge_request_event" ]; then
ninja dist > ninja_dist.log 2>&1 || { cat ninja_dist.log; exit 1; };
fi
- printf "\e[0Ksection_end:`date +%s`:gimp_tar\r\e[0K\n"
# Check install
- printf "\e[0Ksection_start:`date +%s`:gimp_install[collapsed=true]\r\e[0KChecking GIMP installation\n"
- ninja install > ninja_install.log 2>&1 || { cat ninja_install.log; exit 1; };
- printf "\e[0Ksection_end:`date +%s`:gimp_install\r\e[0K\n"
artifacts:
paths:
- _install-${RUNNER}/
- _build-${RUNNER}/meson-logs/meson-log.txt
- _build-${RUNNER}/meson-dist/
- _build-${RUNNER}/config.h
reports:
junit: "_build-${RUNNER}/meson-logs/testlog.junit.xml"
expire_in: 2 days
## AppImage CI (Debian) ##
.debian:
extends: .debian-nonreloc
rules:
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*Package:AppImage.*/'
interruptible: true
- if: '$GIMP_CI_APPIMAGE != null || "$[[ inputs.distribution_pipeline ]]" =~ /.*GIMP_CI_APPIMAGE.*/'
- <<: *CI_RELEASE
parallel:
matrix:
- RUNNER: [aarch64, x86_64_v3]
tags:
- $RUNNER
variables:
#FIXME: remove this variables: key and go back to relying on .default DEB_VERSION on GIMP 3.3/3.4
DEB_VERSION: "trixie"
UMFPACK: libumfpack6
LIBHEIF_PLUGINS: "libheif-plugin-dav1d libheif-plugin-aomenc libheif-plugin-libde265 libheif-plugin-x265 libheif-plugin-j2kdec libheif-plugin-j2kenc"
deps-debian:
extends: .debian
stage: !reference [deps-debian-nonreloc, stage]
image: !reference [deps-debian-nonreloc, image]
variables:
GIT_STRATEGY: none
PKGCONF_RELOCATABLE_OPTION: '-Dpkgconfig.relocatable=true'
script:
- !reference [deps-debian-nonreloc, script]
artifacts: !reference [deps-debian-nonreloc, artifacts]
gimp-debian:
extends: .debian
needs: ["deps-debian"]
stage: build
stage: !reference [gimp-debian-nonreloc, stage]
variables:
#FIXME: remove this variables: key and go back to relying on gimp-debian-nonreloc variables: on GIMP 3.3/3.4
GIT_SUBMODULE_STRATEGY: recursive
script:
- *ENVIRON
@@ -293,85 +375,6 @@ gimp-debian:
expire_in: 2 days
## GNU/Linux 64-bit CIs (Debian) ##
.debian-nonreloc:
extends: .debian
rules:
- <<: *CI_MERGE
- <<: *CI_COMMIT
variables: {}
- if: '$GIMP_CI_MESON_GCC != null || "$[[ inputs.test_pipeline ]]" =~ /.*GIMP_CI_MESON_GCC.*/'
variables:
CC: "cc"
CXX: "c++"
CC_LD: bfd
CXX_LD: bfd
VARIANT: "-gcc"
- if: '$GIMP_CI_RASTER_ICONS != null || "$[[ inputs.test_pipeline ]]" =~ /.*GIMP_CI_RASTER_ICONS.*/'
variables:
MESON_OPTIONS: "-Dvector-icons=false"
VARIANT: "-raster"
- <<: *CI_RELEASE
parallel:
matrix:
- RUNNER: x86_64_v3
tags: []
deps-debian-nonreloc:
extends: .debian-nonreloc
stage: !reference [deps-debian, stage]
image: !reference [deps-debian, image]
variables:
GIT_STRATEGY: none
script:
- !reference [deps-debian, script]
artifacts: !reference [deps-debian, artifacts]
gimp-debian-nonreloc:
extends: .debian-nonreloc
needs: ["deps-debian-nonreloc"]
stage: !reference [gimp-debian, stage]
variables: !reference [gimp-debian, variables]
script:
- *ENVIRON
# Check building
- printf "\e[0Ksection_start:`date +%s`:gimp_build[collapsed=true]\r\e[0KBuilding GIMP\n"
- meson setup _build-${RUNNER} -Dprefix="${GIMP_PREFIX}"
-Dfile-plug-ins-test=true
$MESON_OPTIONS
- cd _build-${RUNNER}
- ninja
- printf "\e[0Ksection_end:`date +%s`:gimp_build\r\e[0K\n"
# Check execution
- printf "\e[0Ksection_start:`date +%s`:gimp_test[collapsed=true]\r\e[0KTesting GIMP execution\n"
- ninja test
- printf "\e[0Ksection_end:`date +%s`:gimp_test\r\e[0K\n"
# Check source
- printf "\e[0Ksection_start:`date +%s`:gimp_tar[collapsed=true]\r\e[0KChecking GIMP source\n"
- if [ $(git diff |wc -l) -ne 0 ]; then
printf "ERROR. A generated file was updated without the source:\n";
git diff;
exit 1;
fi
- if [ "$VARIANT" != "-gcc" ] && [ "$VARIANT" != "-raster" ] && [ "$CI_PIPELINE_SOURCE" != "merge_request_event" ]; then
ninja dist > ninja_dist.log 2>&1 || { cat ninja_dist.log; exit 1; };
fi
- printf "\e[0Ksection_end:`date +%s`:gimp_tar\r\e[0K\n"
# Check install
- printf "\e[0Ksection_start:`date +%s`:gimp_install[collapsed=true]\r\e[0KChecking GIMP installation\n"
- ninja install > ninja_install.log 2>&1 || { cat ninja_install.log; exit 1; };
- printf "\e[0Ksection_end:`date +%s`:gimp_install\r\e[0K\n"
artifacts:
paths:
- _install-${RUNNER}/
- _build-${RUNNER}/meson-logs/meson-log.txt
- _build-${RUNNER}/meson-dist/
- _build-${RUNNER}/config.h
reports:
junit: "_build-${RUNNER}/meson-logs/testlog.junit.xml"
expire_in: 2 days
## Flatpak CI (Fedora) ##
.flatpak:
extends: .default
@@ -392,7 +395,8 @@ gimp-debian-nonreloc:
MESON_DIST: 0
before_script:
- export GIMP_PREFIX="${CI_PROJECT_DIR}/_install"
timeout: 30m
#30min is enough only if no module was updated/rebuilt, we need more time in case of module bumps
timeout: 90m
deps-flatpak:
extends: .flatpak
@@ -529,10 +533,7 @@ gimp-snap:
STORE_OPTION: '-Dms-store=true'
parallel:
matrix:
- RUNNER: windows-aarch64
MSYSTEM_PREFIX: clangarm64
- RUNNER: win32-ps
MSYSTEM_PREFIX: clang64
- RUNNER: [windows-aarch64, win32-ps]
tags:
- $RUNNER
variables:
@@ -540,8 +541,8 @@ gimp-snap:
#meson.build forces non-relocatable .pc. See: https://github.com/mesonbuild/meson/issues/14346
PKGCONF_RELOCATABLE_OPTION: '-Dpkgconfig.relocatable=true'
before_script:
# FIXME:'gimpenv' have buggy code about Windows paths. See: https://gitlab.gnome.org/GNOME/gimp/-/issues/12284
- $GIMP_PREFIX = "$PWD\_install-$MSYSTEM_PREFIX".Replace('\', '/')
- if (-not $env:MSYSTEM_PREFIX) { $env:MSYSTEM_PREFIX = if ((Get-WmiObject Win32_ComputerSystem).SystemType -like 'ARM64*') { 'clangarm64' } else { 'clang64' }}
- $GIMP_PREFIX = "$PWD\_install-$env:MSYSTEM_PREFIX"
timeout: 30m
.win_environ: &WIN_ENVIRON
@@ -562,9 +563,9 @@ deps-win:
- build\windows\1_build-deps-msys2.ps1
artifacts:
paths:
- _install-$MSYSTEM_PREFIX/
- babl/_build-$MSYSTEM_PREFIX/meson-logs/meson-log.txt
- gegl/_build-$MSYSTEM_PREFIX/meson-logs/meson-log.txt
- _install-*/
- babl/_build-*/meson-logs/meson-log.txt
- gegl/_build-*/meson-logs/meson-log.txt
expire_in: 2 hours
gimp-win:
@@ -580,14 +581,14 @@ gimp-win:
- build\windows\2_build-gimp-msys2.ps1
artifacts:
paths:
- gimp-$MSYSTEM_PREFIX/
- _build-$MSYSTEM_PREFIX/meson-logs/meson-log.txt
- _build-$MSYSTEM_PREFIX/done-dll.list
- gimp-*/
- _build-*/meson-logs/meson-log.txt
- _build-*/done-dll.list
# Needed by dist-installer-weekly and dist-store-weekly
- _build-$MSYSTEM_PREFIX/config.h
- _build-$MSYSTEM_PREFIX/plug-ins/file_associations.list
- _build-$MSYSTEM_PREFIX/build/windows/installer/
- _build-$MSYSTEM_PREFIX/build/windows/store/
- _build-*/config.h
- _build-*/plug-ins/file_associations.list
- _build-*/build/windows/installer/
- _build-*/build/windows/store/
expire_in: 2 days
@@ -596,12 +597,10 @@ gimp-win:
extends: .win
parallel:
matrix:
- RUNNER: win32-ps
MSYSTEM_PREFIX: mingw32
- RUNNER: [win32-ps]
variables:
MSYSTEM_PREFIX: mingw32
MINGW_PACKAGE_PREFIX: mingw-w64-i686
CC: cc
CXX: c++
deps-win-eol:
extends: .win-eol

View File

@@ -24,7 +24,7 @@ https://gitlab.gnome.org/GNOME/gimp/-/issues/?sort=updated_desc&state=all&label_
- "Be considerate and respectful". This is our main rule.
E.g. avoid negative emotional writing which only generates more upsetting
interactions.
- Stay on topic by writting only one bug per report created.
- Stay on topic by writing only one bug per report created.
- Add full (not cropped) screenshots or other files using the clip button on GitLab. -->
### Reproduction

View File

@@ -12,4 +12,4 @@
Only human created works please!
- You can request the devs to allow installable packages to be
generated from this MR by writting ~Package: in the comments -->
generated from this MR by writing ~Package: in the comments -->

28
NEWS
View File

@@ -11,8 +11,6 @@ Overview of Changes from GIMP 3.1.4 to GIMP 3.2-RC1
Core:
- Improve Export to SVG of paths by not exporting the DTD and adding
an explicit SVG version.
- macOS: "Quit" from the dock's right-click menu will now follow our
standard Quit procedure, by intercepting the
applicationShouldTerminate signal, instead of forcing the
@@ -26,16 +24,13 @@ Graphical User Interface:
- "Monitor Linked Image" and "Discard Link Information" menu items
added to Layer menu when the selected layer is a link layer.
- Palette Import dialog now display file format filters, both to let
users hide irrelevant files from view and to highlight which formats
we support.
- The GimpColorHexEntry will now update the chosen color as you type.
- Use a standard, yet extended, AppMenu on macOS.
Plug-Ins:
- Fixed vulnerabilities: ZDI-CAN-27684, ZDI-CAN-27863, ZDI-CAN-27878,
ZDI-CAN-27836, ZDI-CAN-27823, ZDI-CAN-27793
- macOS: improved handling of plug-in icons which were flashing in
macOS dock.
- file-compressor: add zip decompression support. This allows support
for .hgt.zip files, as well as other formats compressed with zip.
API:
@@ -83,22 +78,9 @@ API:
* gimp_procedure_add_link_layer_argument
* gimp_procedure_add_link_layer_aux_argument
* gimp_procedure_add_link_layer_return_value
* gimp_link_layer_get_mime_type
- New libgimp class: GimpLinkLayer
Build:
- CI:
* Linux builds ported from unmaintained Kaniko to Buildah.
* Colored output and .pdb support for builds of dependency using
CMake.
* Ability to apply remote patches on dependency builds.
* New job "branches-check" to warn about dead branches.
- We now build Exiv2 ourselves on Windows as a temporary workaround to
issue #12626.
- release-stats.sh script updated to generate text directly pastable
into our release news.
- Improved packages binary caching with ORAS for Flatpak.
Overview of Changes from GIMP 3.1.2 to GIMP 3.1.4
=================================================

View File

@@ -307,13 +307,8 @@ gint n_dialogs_dockable_actions = G_N_ELEMENTS (dialogs_dockable_actions);
static const GimpStringActionEntry dialogs_toplevel_actions[] =
{
{ "dialogs-preferences", GIMP_ICON_PREFERENCES_SYSTEM,
#if defined(PLATFORM_OSX)
NC_("dialogs-action", "_Settings..."),
NC_("dialogs-action", "_Settings..."),
#else
NC_("dialogs-action", "_Preferences"),
NC_("dialogs-action", "_Preferences"),
#endif
{ NULL },
NC_("dialogs-action", "Open the preferences dialog"),
"gimp-preferences-dialog",
@@ -360,8 +355,6 @@ static const GimpStringActionEntry dialogs_toplevel_actions[] =
{ "dialogs-about", GIMP_ICON_HELP_ABOUT,
#if defined(G_OS_WIN32)
NC_("dialogs-action", "About GIMP"),
#elif defined(PLATFORM_OSX)
NC_("dialogs-action", "About"),
#else /* UNIX: use GNOME HIG */
NC_("dialogs-action", "_About"),
#endif

View File

@@ -101,6 +101,6 @@ libappactions = static_library('appactions',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Actions"',
dependencies: [
gegl, gdk_pixbuf, gtk3,
gegl, gdk_pixbuf, gtk3, gexiv2,
],
)

View File

@@ -44,7 +44,7 @@ libappconfig = static_library('appconfig',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Config"',
dependencies: [
cairo, gegl, gdk_pixbuf, gio, gio_specific, libmypaint,
cairo, gegl, gdk_pixbuf, gexiv2, gio, gio_specific, libmypaint,
],
)

View File

@@ -539,16 +539,16 @@ welcome_dialog_create_welcome_page (Gimp *gimp,
/* "globe with meridians" emoticone in UTF-8. */
"\xf0\x9f\x8c\x90",
_("GIMP website"), "https://www.gimp.org/");
welcome_add_link (GTK_GRID (grid), 0, &row,
/* "graduation cap" emoticone in UTF-8. */
"\xf0\x9f\x8e\x93",
_("Tutorials"),
"https://www.gimp.org/tutorials/");
welcome_add_link (GTK_GRID (grid), 0, &row,
/* "open book" emoticone in UTF-8. */
"\xf0\x9f\x93\x96",
_("Documentation"),
"https://docs.gimp.org/");
welcome_add_link (GTK_GRID (grid), 0, &row,
/* "graduation cap" emoticone in UTF-8. */
"\xf0\x9f\x8e\x93",
_("Community Tutorials"),
"https://www.gimp.org/tutorials/");
/* XXX: should we add API docs for plug-in developers once it's
* properly set up? */
@@ -1125,10 +1125,19 @@ welcome_dialog_create_release_page (Gimp *gimp,
tmp = g_strdup_printf (GIMP_VERSION);
if (GIMP_MINOR_VERSION % 2 == 0 && ! strstr (tmp, "RC"))
release_link = g_strdup_printf ("https://www.gimp.org/release-notes/gimp-%d.%d.html",
GIMP_MAJOR_VERSION, GIMP_MINOR_VERSION);
{
if (GIMP_MICRO_VERSION == 0 && ! strstr (tmp, "RC"))
release_link = g_strdup_printf ("https://www.gimp.org/release-notes/gimp-%d.%d.html",
GIMP_MAJOR_VERSION, GIMP_MINOR_VERSION);
else
release_link = g_strdup_printf ("https://www.gimp.org/release/%d.%d.%d/",
GIMP_MAJOR_VERSION, GIMP_MINOR_VERSION,
GIMP_MICRO_VERSION);
}
else
release_link = g_strdup ("https://www.gimp.org/");
{
release_link = g_strdup ("https://www.gimp.org/");
}
g_free (tmp);
widget = gtk_link_button_new_with_label (release_link, _("Learn more"));

View File

@@ -464,12 +464,10 @@ gimp_image_window_constructed (GObject *object)
}
}
#ifndef GDK_WINDOWING_QUARTZ
/* Docs says that macOS always returns FALSE but we actually want to create
* our custom macOS menu.
*/
#ifdef GDK_WINDOWING_QUARTZ
menus_quartz_app_menu (private->gimp);
#else
use_app_menu = gtk_application_prefers_app_menu (GTK_APPLICATION (private->gimp->app));
#endif /* !GDK_WINDOWING_QUARTZ */
if (use_app_menu)
{
@@ -482,6 +480,7 @@ gimp_image_window_constructed (GObject *object)
gtk_application_set_app_menu (GTK_APPLICATION (private->gimp->app),
G_MENU_MODEL (app_menu_model));
}
#endif
/* Create the hbox that contains docks and images */
private->hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);

View File

@@ -122,6 +122,6 @@ libappdisplay = static_library('appdisplay',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Display"',
dependencies: [
gegl, gtk3, cairo,
gegl, gtk3, cairo, gexiv2
],
)

View File

@@ -16,6 +16,7 @@ libappfiledata = static_library('appfiledata',
cairo,
gdk_pixbuf,
gegl,
gexiv2,
libarchive,
],
)

View File

@@ -248,7 +248,15 @@ file_open_image (Gimp *gimp,
{
if (image)
{
/* Only set the load procedure if it hasn't already been set. */
/* Only set the load procedure if it hasn't already been set.
* The reason is that we want to know the information of the
* inner format, in case loading the file went through
* intermediate container file formats procedures, typically
* the procedures registered by the file-compressor plug-in.
*
* E.g. it could be used for our compressed XCF, but also for
* commonly compressed formats such as .hgt.zip.
*/
if (! gimp_image_get_load_proc (image))
gimp_image_set_load_proc (image, file_proc);
@@ -815,7 +823,9 @@ file_open_link_image (Gimp *gimp,
layer = gimp_link_layer_new (image, link);
gimp_image_add_layer (image, layer, NULL, 0, FALSE);
gimp_image_set_load_proc (image, gimp_link_get_load_proc (link));
if (! gimp_image_get_load_proc (image))
gimp_image_set_load_proc (image, gimp_link_get_load_proc (link));
file_proc = gimp_image_get_load_proc (image);
if (mime_type)
*mime_type = g_slist_nth_data (file_proc->mime_types_list, 0);
@@ -945,14 +955,11 @@ file_open_file_proc_is_import (GimpPlugInProcedure *file_proc)
proc_name = gimp_object_get_name (file_proc);
return (g_strcmp0 (proc_name, "gimp-xcf-load") != 0 &&
/* Assuming that all file-compressor file are XCF.
* So far, this is always true with current file-compressor
* implementation.
*/
g_strcmp0 (proc_name, "file-gz-load") != 0 &&
g_strcmp0 (proc_name, "file-bz2-load") != 0 &&
g_strcmp0 (proc_name, "file-xz-load") != 0);
/* Even when loading through an intermediate container format plug-in
* (e.g. file-compressor), the stored procedure shall be the inner
* format.
*/
return (g_strcmp0 (proc_name, "gimp-xcf-load") != 0);
}
static gboolean

View File

@@ -11,6 +11,6 @@ libappfile = static_library('appfile',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-File"',
dependencies: [
gegl, gdk_pixbuf,
gegl, gdk_pixbuf, gexiv2
],
)

View File

@@ -56,5 +56,6 @@ libappgegl = static_library('appgegl',
cairo,
gegl,
gdk_pixbuf,
gexiv2
],
)

View File

@@ -414,8 +414,30 @@ gimp_check_updates_callback (GObject *source,
{
gchar *uri = g_file_get_uri (G_FILE (source));
#ifndef GIMP_CONSOLE_COMPILATION
if (error->domain == G_IO_ERROR &&
error->code == G_IO_ERROR_NOT_SUPPORTED)
{
#ifndef G_OS_WIN32
g_message ("%s: loading of %s failed: %s\n\n%s",
G_STRFUNC, uri, error->message,
_("Perhaps you are missing GIO backends and need "
"to install GVFS?"));
#else
g_message ("%s: loading of %s failed: %s\n\n%s",
G_STRFUNC, uri, error->message,
_("Perhaps you are missing GIO backends."));
#endif /* G_OS_WIN32 */
}
else
{
g_printerr ("%s: loading of %s failed: %s\n", G_STRFUNC,
uri, error->message);
}
#else
g_printerr ("%s: loading of %s failed: %s\n", G_STRFUNC,
uri, error->message);
#endif /* GIMP_CONSOLE_COMPILATION */
g_free (uri);
g_clear_error (&error);

View File

@@ -31,7 +31,7 @@ libappgui = static_library('appgui',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-GUI"',
dependencies: [
cairo, gegl, gdk_pixbuf, gio_specific, gtk3
cairo, gegl, gdk_pixbuf, gexiv2, gio_specific, gtk3
],
install: false,
)

View File

@@ -20,6 +20,10 @@
#include <gegl.h>
#include <gtk/gtk.h>
#ifdef PLATFORM_OSX
#include <AppKit/AppKit.h>
#endif
#include "libgimpbase/gimpbase.h"
#include "menus-types.h"
@@ -52,7 +56,11 @@
/* private variables */
static gboolean menurc_deleted = FALSE;
static gboolean menurc_deleted = FALSE;
#ifdef PLATFORM_OSX
static Gimp *unique_gimp = NULL;
#endif
/* public functions */
@@ -542,3 +550,115 @@ menus_get_image_manager_singleton (Gimp *gimp)
return image_ui_manager;
}
#ifdef PLATFORM_OSX
@interface GimpappMenuHandler : NSObject
@end
@implementation GimpappMenuHandler
+ (void) gimpShowAbout:(id) sender
{
GimpUIManager *ui_manager = menus_get_image_manager_singleton (unique_gimp);
gimp_ui_manager_activate_action (ui_manager, "dialogs", "dialogs-about");
}
+ (void) gimpShowWelcomeDialog:(id) sender
{
GimpUIManager *ui_manager = menus_get_image_manager_singleton (unique_gimp);
gimp_ui_manager_activate_action (ui_manager, "dialogs", "dialogs-welcome");
}
+ (void) gimpShowPreferences:(id) sender
{
GimpUIManager *ui_manager = menus_get_image_manager_singleton (unique_gimp);
gimp_ui_manager_activate_action (ui_manager, "dialogs", "dialogs-preferences");
}
+ (void) gimpShowInputDevices:(id) sender
{
GimpUIManager *ui_manager = menus_get_image_manager_singleton (unique_gimp);
gimp_ui_manager_activate_action (ui_manager, "dialogs", "dialogs-input-devices");
}
+ (void) gimpShowKeyboardShortcuts:(id) sender
{
GimpUIManager *ui_manager = menus_get_image_manager_singleton (unique_gimp);
gimp_ui_manager_activate_action (ui_manager, "dialogs", "dialogs-keyboard-shortcuts");
}
+ (void) gimpQuit:(id) sender
{
GimpUIManager *ui_manager = menus_get_image_manager_singleton (unique_gimp);
gimp_ui_manager_activate_action (ui_manager, "file", "file-quit");
}
@end
void
menus_quartz_app_menu (Gimp *gimp)
{
NSMenu *main_menu;
NSMenuItem *app_menu_item;
NSMenu *app_menu;
NSInteger last_index;
NSMenuItem *item;
g_return_if_fail (GIMP_IS_GIMP (gimp));
unique_gimp = gimp;
main_menu = [NSApp mainMenu];
app_menu_item = [main_menu itemAtIndex:0];
app_menu = [app_menu_item submenu];
/* On macOS, some standard menu items (e.g. "Hide", "Hide Others", "Show All", "Quit")
* are automatically provided by the system rather than created by our application.
* For the items we need to customize, we override their default behavior with our own
* implementations. In addition, we extend the menu with extra entries specific to
* our applications functionality. */
[app_menu setTitle:@"GIMP"];
/* About */
item = [app_menu itemAtIndex:0];
[item setTarget:[GimpappMenuHandler class]];
[item setAction:@selector (gimpShowAbout:)];
/* Welcome Dialog */
item = [[NSMenuItem alloc] initWithTitle:@"Welcome Dialog"
action:@selector (gimpShowWelcomeDialog:)
keyEquivalent:@""];
[item setTarget:[GimpappMenuHandler class]];
[app_menu insertItem:item atIndex:1];
/* Settings */
item = [app_menu itemAtIndex:3];
[item setTarget:[GimpappMenuHandler class]];
[item setAction:@selector (gimpShowPreferences:)];
/* Input Devices */
item = [[NSMenuItem alloc] initWithTitle:@"Input Devices"
action:@selector (gimpShowInputDevices:)
keyEquivalent:@""];
[item setTarget:[GimpappMenuHandler class]];
[app_menu insertItem:item atIndex:4];
/* Keyboard Shortcuts */
item = [[NSMenuItem alloc] initWithTitle:@"Keyboard Shortcuts"
action:@selector (gimpShowKeyboardShortcuts:)
keyEquivalent:@""];
[item setTarget:[GimpappMenuHandler class]];
[app_menu insertItem:item atIndex:5];
/* Quit */
last_index = [app_menu numberOfItems] - 1;
item = [app_menu itemAtIndex:last_index];
[item setTarget:[GimpappMenuHandler class]];
[item setAction:@selector (gimpQuit:)];
}
#endif

View File

@@ -31,3 +31,7 @@ void menus_remove (Gimp *gimp);
GimpMenuFactory * menus_get_global_menu_factory (Gimp *gimp);
GimpUIManager * menus_get_image_manager_singleton (Gimp *gimp);
#ifdef PLATFORM_OSX
void menus_quartz_app_menu (Gimp *gimp);
#endif

View File

@@ -16,6 +16,6 @@ libappmenus = static_library('appmenus',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Menus"',
dependencies: [
gegl, gtk3
gegl, gtk3, gexiv2
],
)

View File

@@ -25,6 +25,6 @@ libapplayermodeslegacy = static_library('applayermodeslegacy',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Layer-Modes-Legacy"',
dependencies: [
cairo, gegl, gdk_pixbuf,
cairo, gegl, gdk_pixbuf, gexiv2
],
)

View File

@@ -50,5 +50,6 @@ libapplayermodes = static_library('applayermodes',
cairo,
gegl,
gdk_pixbuf,
gexiv2
],
)

View File

@@ -66,7 +66,7 @@ libappoperations = static_library('appoperations',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Operations"',
dependencies: [
cairo, gegl, gdk_pixbuf,
cairo, gegl, gdk_pixbuf, gexiv2
],
)

View File

@@ -63,6 +63,6 @@ libapppaint = static_library('apppaint',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Paint"',
dependencies: [
cairo, gegl, gdk_pixbuf, libmypaint,
cairo, gegl, gdk_pixbuf, gexiv2, libmypaint,
],
)

View File

@@ -22,6 +22,6 @@ libapppath = static_library('apppath',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Path"',
dependencies: [
cairo, gegl, gdk_pixbuf,
cairo, gegl, gdk_pixbuf, gexiv2
],
)

View File

@@ -84,8 +84,17 @@ file_load_invoker (GimpProcedure *procedure,
gimp_value_array_index (new_args, 1));
for (i = 2; i < proc->num_args; i++)
if (G_IS_PARAM_SPEC_STRING (proc->args[i]))
g_value_set_static_string (gimp_value_array_index (new_args, i), "");
if (GIMP_IS_PARAM_SPEC_CHOICE (proc->args[i]))
{
GParamSpecString *string_spec = G_PARAM_SPEC_STRING (proc->args[i]);
g_value_set_static_string (gimp_value_array_index (new_args, i),
string_spec->default_value);
}
else if (G_IS_PARAM_SPEC_STRING (proc->args[i]))
{
g_value_set_static_string (gimp_value_array_index (new_args, i), "");
}
return_vals =
gimp_pdb_execute_procedure_by_name_args (gimp->pdb,
@@ -103,7 +112,16 @@ file_load_invoker (GimpProcedure *procedure,
{
GimpImage *image =
g_value_get_object (gimp_value_array_index (return_vals, 1));
gimp_image_set_load_proc (image, file_proc);
if (! gimp_image_get_load_proc (image))
/* Leave the initial load procedure if it already exists as
* it will give information about the source format. See
* similar code in file_open_image().
*/
gimp_image_set_load_proc (image, file_proc);
if (! gimp_image_get_file (image))
gimp_image_set_imported_file (image, file);
}
}

View File

@@ -75,7 +75,7 @@ libapppdb = static_library('apppdb',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-PDB"',
dependencies: [
cairo, gegl, gdk_pixbuf,
cairo, gegl, gdk_pixbuf, gexiv2
],
)
@@ -85,7 +85,7 @@ libappinternalprocs = static_library('appinternalprocs',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-PDB"',
dependencies: [
cairo, gegl, gdk_pixbuf, pangocairo, pango,
cairo, gegl, gdk_pixbuf, gexiv2, pangocairo, pango,
],
sources: [
pdbgen

View File

@@ -56,6 +56,6 @@ libappplugin = static_library('appplug-in',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Plug-In"',
dependencies: [
cairo, gegl, gdk_pixbuf,
cairo, gegl, gdk_pixbuf, gexiv2,
],
)

View File

@@ -28,6 +28,6 @@ libapppropgui = static_library('apppropgui',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-PropGUI"',
dependencies: [
gegl, gtk3,
gegl, gtk3, gexiv2
],
)

View File

@@ -464,7 +464,7 @@ sanity_check_babl (void)
#define BABL_REQUIRED_MAJOR 0
#define BABL_REQUIRED_MINOR 1
#define BABL_REQUIRED_MICRO 114
#define BABL_REQUIRED_MICRO 116
babl_get_version (&babl_major_version,
&babl_minor_version,
@@ -502,7 +502,7 @@ sanity_check_gegl (void)
#define GEGL_REQUIRED_MAJOR 0
#define GEGL_REQUIRED_MINOR 4
#define GEGL_REQUIRED_MICRO 62
#define GEGL_REQUIRED_MICRO 64
gegl_get_version (&gegl_major_version,
&gegl_minor_version,

View File

@@ -42,6 +42,6 @@ libapptext = static_library('apptext',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Text"',
dependencies: [
gegl, gdk_pixbuf, harfbuzz, pangocairo, pangoft2,
gegl, gdk_pixbuf, gexiv2, harfbuzz, pangocairo, pangoft2,
],
)

View File

@@ -39,6 +39,7 @@
#include "core/gimpimageproxy.h"
#include "core/gimpitem.h"
#include "core/gimplineart.h"
#include "core/gimplinklayer.h"
#include "core/gimppickable.h"
#include "core/gimppickable-contiguous-region.h"
#include "core/gimpprogress.h"
@@ -50,6 +51,8 @@
#include "operations/layer-modes/gimp-layer-modes.h"
#include "path/gimpvectorlayer.h"
#include "widgets/gimphelp-ids.h"
#include "widgets/gimpwidgets-utils.h"
@@ -620,7 +623,21 @@ gimp_bucket_fill_tool_button_press (GimpTool *tool,
return;
}
if (gimp_item_is_content_locked (GIMP_ITEM (drawable), &locked_item))
if (gimp_item_is_link_layer (GIMP_ITEM (drawable)))
{
gimp_tool_message_literal (tool, display,
_("Link layers must be rasterized "
"before they can be painted on."));
return;
}
else if (gimp_item_is_vector_layer (GIMP_ITEM (drawable)))
{
gimp_tool_message_literal (tool, display,
_("Vector layers must be rasterized "
"before they can be painted on."));
return;
}
else if (gimp_item_is_content_locked (GIMP_ITEM (drawable), &locked_item))
{
gimp_tool_message_literal (tool, display,
_("The selected layer's pixels are locked."));

View File

@@ -562,48 +562,50 @@ gimp_filter_tool_control (GimpTool *tool,
case GIMP_TOOL_ACTION_COMMIT:
if (filter_tool->filter)
drawable = gimp_drawable_filter_get_drawable (filter_tool->filter);
/* TODO: Expand non-destructive editing to other drawables
* besides layers and channels */
if ((! GIMP_IS_LAYER (drawable) && ! GIMP_IS_CHANNEL (drawable)) ||
GIMP_IS_LAYER_MASK (drawable) ||
(! filter_tool->existing_filter && options->merge_filter))
non_destructive = FALSE;
if (filter_tool->operation)
{
gegl_node_get (filter_tool->operation,
"operation", &operation_name,
NULL);
drawable = gimp_drawable_filter_get_drawable (filter_tool->filter);
if (! g_strcmp0 (operation_name, "gegl:nop"))
/* TODO: Expand non-destructive editing to other drawables
* besides layers and channels */
if ((! GIMP_IS_LAYER (drawable) && ! GIMP_IS_CHANNEL (drawable)) ||
GIMP_IS_LAYER_MASK (drawable) ||
(! filter_tool->existing_filter && options->merge_filter))
non_destructive = FALSE;
/* TODO: Once we can serialize GimpDrawable, remove so that filters with
* aux nodes can be non-destructive */
if (gegl_node_has_pad (filter_tool->operation, "aux") ||
/* GEGL graph is dangerous even without using third-party
* effects, because it may run any effect. E.g. it can
* run sink effects overwriting any local files with user
* rights. We leave a way in through an environment
* variable because it is a useful tool for GEGL ops
* developers but it should only be set while knowing what
* you are doing.
*/
(g_strcmp0 (operation_name, "gegl:gegl") == 0 &&
g_getenv ("GIMP_ALLOW_GEGL_GRAPH_LAYER_EFFECT") == NULL))
non_destructive = FALSE;
if (filter_tool->operation)
{
gegl_node_get (filter_tool->operation,
"operation", &operation_name,
NULL);
g_free (operation_name);
if (! g_strcmp0 (operation_name, "gegl:nop"))
non_destructive = FALSE;
/* TODO: Once we can serialize GimpDrawable, remove so that
* filters with aux nodes can be non-destructive */
if (gegl_node_has_pad (filter_tool->operation, "aux") ||
/* GEGL graph is dangerous even without using third-party
* effects, because it may run any effect. E.g. it can
* run sink effects overwriting any local files with user
* rights. We leave a way in through an environment
* variable because it is a useful tool for GEGL ops
* developers but it should only be set while knowing what
* you are doing.
*/
(g_strcmp0 (operation_name, "gegl:gegl") == 0 &&
g_getenv ("GIMP_ALLOW_GEGL_GRAPH_LAYER_EFFECT") == NULL))
non_destructive = FALSE;
g_free (operation_name);
}
/* Ensure that filters applied to group, vector or link layers are
* non-destructive */
if (GIMP_IS_GROUP_LAYER (drawable) ||
gimp_item_is_vector_layer (GIMP_ITEM (drawable)) ||
gimp_item_is_link_layer (GIMP_ITEM (drawable)))
non_destructive = TRUE;
}
/* Ensure that filters applied to group, vector or link layers are non-destructive */
if (GIMP_IS_GROUP_LAYER (drawable) ||
gimp_item_is_vector_layer (GIMP_ITEM (drawable)) ||
gimp_item_is_link_layer (GIMP_ITEM (drawable)))
non_destructive = TRUE;
gimp_filter_tool_commit (filter_tool, non_destructive);
break;
}

View File

@@ -127,6 +127,8 @@ static void gimp_mybrush_tool_cursor_update (GimpTool *tool,
options->view_zoom = (gimp_zoom_model_get_factor (shell->zoom) > 0.0f) ?
gimp_zoom_model_get_factor (shell->zoom) : 1.0f;
options->view_rotation = shell->rotate_angle;
GIMP_TOOL_CLASS (parent_class)->cursor_update (tool, coords, state, display);
}
static void

View File

@@ -143,6 +143,6 @@ libapptools = static_library('apptools',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Tools"',
dependencies: [
gegl, gtk3,
gegl, gtk3, gexiv2,
],
)

View File

@@ -222,7 +222,7 @@ gimp_palette_view_button_press (GtkWidget *widget,
gimp_palette_view_select_entry (view, entry);
/* Usually the menu is provided by a GimpEditor.
* Make sure it's also run by returning FALSE here */
* Make sure it's also run by returning FALSE here */
return FALSE;
}
else if (bevent->button == 1)

View File

@@ -161,13 +161,12 @@ gimp_view_renderer_palette_render (GimpViewRenderer *renderer,
if ((y % renderpal->cell_height) == 0)
{
guchar rgba[4];
gint n = 0;
guchar *d = row;
for (x = 0; x < renderer->width; x++, d += 4)
{
guchar rgba[4];
if ((x % renderpal->cell_width) == 0)
{
if (list && n < renderpal->columns &&

View File

@@ -280,6 +280,6 @@ libappwidgets = static_library('appwidgets',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-Widgets"',
dependencies: [
gegl, gtk3,
gegl, gtk3, gexiv2,
],
)

View File

@@ -13,6 +13,6 @@ libappxcf = static_library('appxcf',
include_directories: [ rootInclude, rootAppInclude, ],
c_args: '-DG_LOG_DOMAIN="Gimp-XCF"',
dependencies: [
cairo, gegl, gdk_pixbuf, zlib
cairo, gegl, gdk_pixbuf, gexiv2, zlib
],
)

View File

@@ -304,6 +304,7 @@ prep_pkg "xapps-common"
bund_usr "$UNIX_PREFIX" "share/glib-*/schemas"
### Glib commonly required modules
bund_usr "$UNIX_PREFIX" "lib/gvfs/*.so"
bund_usr "$UNIX_PREFIX" "lib/libproxy/libpxbackend*.so" --dest "${LIB_DIR}/${LIB_SUBDIR}"
bund_usr "$UNIX_PREFIX" "lib/gio/modules/*"
conf_app GIO_MODULE_DIR "${LIB_DIR}/${LIB_SUBDIR}gio/modules"
conf_app GIO_EXTRA_MODULES "" --no-expand
@@ -324,6 +325,7 @@ conf_app GTK_PATH "${LIB_DIR}/${LIB_SUBDIR}gtk-3.0"
prep_pkg "ibus-gtk3"
bund_usr "$UNIX_PREFIX" "lib/gtk-3.0/*.*.*/immodules/*.so" --bundler
conf_app GTK_IM_MODULE_FILE "${LIB_DIR}/${LIB_SUBDIR}gtk-3.0/*.*.*/immodules.cache"
conf_app GTK_MODULES "" --no-expand
## Core features
bund_usr "$GIMP_PREFIX" "lib/libbabl*"
@@ -352,9 +354,16 @@ bund_usr "$GIMP_PREFIX" "etc/gimp"
## Other features and plug-ins
### mypaint brushes
bund_usr "$UNIX_PREFIX" "share/mypaint-data/2.0"
####https://salsa.debian.org/multimedia-team/mypaint-brushes/-/merge_requests/2
for myb in $(find "$USR_DIR/share/mypaint-data/2.0/brushes/Dieterle" -iname "*.myb"); do
sed -i -e 's|surfacemap_x|gridmap_x|g' -e 's|surfacemap_y|gridmap_y|g' $myb;
done
### Needed for 'th' word breaking in Text tool etc
bund_usr "$UNIX_PREFIX" "share/libthai"
conf_app LIBTHAI_DICTDIR "share/libthai"
### Needed for file-heif work
bund_usr "$UNIX_PREFIX" "lib/libheif/plugins/*.so"
conf_app LIBHEIF_PLUGIN_PATH "${LIB_DIR}/${LIB_SUBDIR}libheif/plugins"
### Needed for full CJK and Cyrillic support in file-pdf
bund_usr "$UNIX_PREFIX" "share/poppler"
### Needed for file-ps work. See: #14785
@@ -375,9 +384,6 @@ if [ "$GIMP_UNSTABLE" ] || [ -z "$GIMP_RELEASE" ]; then
### Needed for GTK inspector
bund_usr "$UNIX_PREFIX" "lib/libEGL*"
bund_usr "$UNIX_PREFIX" "lib/libGL*"
bund_usr "$UNIX_PREFIX" "lib/dri*"
#TODO: remove this on Debian Trixie (which have Mesa 24.2)
conf_app LIBGL_DRIVERS_PATH "${LIB_DIR}/${LIB_SUBDIR}dri"
fi
### Debug dialog
bund_usr "$GIMP_PREFIX" "bin/gimp-debug-tool*" --dest "libexec"
@@ -391,7 +397,8 @@ wipe_usr ${LIB_DIR}/*.pyc
conf_app PYTHONDONTWRITEBYTECODE "1" --no-expand
#### JavaScript plug-ins support
bund_usr "$UNIX_PREFIX" "bin/gjs*"
bund_usr "$UNIX_PREFIX" "lib/gjs/girepository-1.0/Gjs*" --dest "${LIB_DIR}/${LIB_SUBDIR}girepository-1.0"
bund_usr "$UNIX_PREFIX" "lib/gjs/girepository-*/Gjs*.typelib" --dest "${LIB_DIR}/${LIB_SUBDIR}girepository-1.0"
bund_usr "$UNIX_PREFIX" "lib/girepository-*/GioUnix*.typelib"
####FIXME: lua crashes with loop: See: #11895
#bund_usr "$UNIX_PREFIX" "bin/luajit" --rename "lua"
#bund_usr "$UNIX_PREFIX" "lib/liblua5.1-lgi*"

View File

@@ -8,11 +8,11 @@ if [ -z "$APPDIR" ]; then
fi
## Minimum runtime-sandboxed paths. See: #13527, #13603 and #13001
## Minimum runtime paths. See: #13527 and #13603
export PATH="${APPDIR}/usr/bin/:$PATH"
unset LD_PRELOAD
unset LD_LIBRARY_PATH
export XDG_DATA_DIRS="${APPDIR}/usr/share/"
export XDG_DATA_DIRS="${APPDIR}/usr/share/:$XDG_DATA_DIRS"
## Other needed runtime paths (added by 3_dist-gimp-goappimage.sh)

View File

@@ -29,6 +29,7 @@
"--filesystem=/tmp",
"--filesystem=xdg-run/gvfs",
"--filesystem=xdg-run/gvfsd",
"--unset-env=GTK_MODULES",
"--talk-name=org.gtk.vfs.*",
"--talk-name=org.freedesktop.FileManager1",
"--talk-name=org.gnome.Shell.Screenshot",
@@ -98,10 +99,8 @@
],
"buildsystem": "meson",
"config-opts": [
"-Dintrospection=false",
"-Dpython3=false",
"-Dtools=false",
"-Dvapi=false"
"-Dtools=false"
],
"modules": [
{
@@ -244,8 +243,8 @@
"sources": [
{
"type": "archive",
"url": "https://poppler.freedesktop.org/poppler-25.09.1.tar.xz",
"sha256": "0c1091d01d3dd1664a13816861e812d02b29201e96665454b81b52d261fad658",
"url": "https://poppler.freedesktop.org/poppler-25.10.0.tar.xz",
"sha256": "6b5e9bb64dabb15787a14db1675291c7afaf9387438cc93a4fb7f6aec4ee6fe0",
"x-checker-data": {
"type": "anitya",
"project-id": 3686,

View File

@@ -21,14 +21,16 @@ apps:
desktop: usr/share/applications/gimp.desktop
environment:
HOME: $SNAP_REAL_HOME
#Matting Leving support on FG select
LD_LIBRARY_PATH: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/blas:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/lapack:$LD_LIBRARY_PATH
#Internet connection and Matting Leving support on FG select
LD_LIBRARY_PATH: $SNAP/gnome-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libproxy:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/blas:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/lapack:$LD_LIBRARY_PATH
#JavaScript plug-ins support
GI_TYPELIB_PATH: $SNAP/gnome-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/gjs/girepository-1.0:$GI_TYPELIB_PATH
#AVIF, HEIC and HEJ2 plug-ins support
LIBHEIF_PLUGIN_PATH: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libheif/plugins
#PostScript plug-in support
GS_LIB: $SNAP/usr/share/ghostscript/10.02.1/Resource/Init
#Acessibility support
GTK_MODULES: ""
slots:
- dbus-gimp
plugs:
@@ -164,3 +166,7 @@ parts:
# get gimp icon for proper desktop integration
cp $CRAFT_STAGE/usr/share/icons/hicolor/scalable/apps/gimp.svg $CRAFT_PRIME/gimp
craftctl default
#https://salsa.debian.org/multimedia-team/mypaint-brushes/-/merge_requests/2
for myb in $(find "$CRAFT_PRIME/usr/share/mypaint-data/2.0/brushes/Dieterle" -iname "*.myb"); do
sed -i -e 's|surfacemap_x|gridmap_x|g' -e 's|surfacemap_y|gridmap_y|g' $myb;
done

View File

@@ -32,8 +32,7 @@ if ($GITLAB_CI)
# Prepare env
if (-not $GIMP_PREFIX)
{
#FIXME:'gimpenv' have buggy code about Windows paths. See: https://gitlab.gnome.org/GNOME/gimp/-/issues/12284
$GIMP_PREFIX = "$PWD\..\_install".Replace('\', '/')
$GIMP_PREFIX = "$PWD\..\_install"
}
Invoke-Expression ((Get-Content .gitlab-ci.yml | Select-String 'win_environ\[' -Context 0,7) -replace '> ','' -replace '- ','')

View File

@@ -26,7 +26,7 @@ Write-Output "$([char]27)[0Ksection_start:$(Get-Date -UFormat %s -Millisecond 0)
## Install or Update Inno (if needed)
## (We need to ensure that TLS 1.2 is enabled because of some runners)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest https://jrsoftware.org/download.php/is.exe -OutFile ..\is.exe
Invoke-WebRequest https://files.jrsoftware.org/is/6/innosetup-6.5.4.exe -OutFile ..\is.exe
$inno_version_downloaded = (Get-Item ..\is.exe).VersionInfo.ProductVersion -replace ' ',''
$broken_inno = Get-ChildItem $env:TMP -Filter *.isl.bak -ErrorAction SilentlyContinue
$inno_version = Get-ItemProperty Registry::'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup*' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty DisplayVersion

View File

@@ -140,10 +140,12 @@
;3 INSTALLER SOURCE
#define ASSETS_DIR BUILD_DIR + "\build\windows\installer"
;3.1.1 Icons and other files
#define ASSETS_DIR BUILD_DIR + "\build\windows\installer"
#include ASSETS_DIR + "\splash-dimensions.h"
#define WIZARD_SMALL_IMAGE ASSETS_DIR + "\gimp.scale-100.bmp," + ASSETS_DIR + "\gimp.scale-125.bmp," + ASSETS_DIR + "\gimp.scale-150.bmp," + ASSETS_DIR + "\gimp.scale-175.bmp," + ASSETS_DIR + "\gimp.scale-200.bmp," + ASSETS_DIR + "\gimp.scale-225.bmp," + ASSETS_DIR + "\gimp.scale-250.bmp"
#define WIZARD_IMAGE ASSETS_DIR + "\install-end.scale-100.bmp," + ASSETS_DIR + "\install-end.scale-125.bmp," + ASSETS_DIR + "\install-end.scale-150.bmp," + ASSETS_DIR + "\install-end.scale-175.bmp," + ASSETS_DIR + "\install-end.scale-200.bmp," + ASSETS_DIR + "\install-end.scale-225.bmp," + ASSETS_DIR + "\install-end.scale-250.bmp"
;3.1.2 Installer lang files
[Languages]
@@ -247,8 +249,9 @@ AlwaysShowDirOnReadyPage=yes
WizardStyle=modern
WizardSizePercent=100
WizardResizable=no
WizardSmallImageFile={#ASSETS_DIR}\gimp.scale-100.bmp,{#ASSETS_DIR}\gimp.scale-125.bmp,{#ASSETS_DIR}\gimp.scale-150.bmp,{#ASSETS_DIR}\gimp.scale-175.bmp,{#ASSETS_DIR}\gimp.scale-200.bmp,{#ASSETS_DIR}\gimp.scale-225.bmp,{#ASSETS_DIR}\gimp.scale-250.bmp
WizardImageFile={#ASSETS_DIR}\install-end.scale-100.bmp,{#ASSETS_DIR}\install-end.scale-125.bmp,{#ASSETS_DIR}\install-end.scale-150.bmp,{#ASSETS_DIR}\install-end.scale-175.bmp,{#ASSETS_DIR}\install-end.scale-200.bmp,{#ASSETS_DIR}\install-end.scale-225.bmp,{#ASSETS_DIR}\install-end.scale-250.bmp
WizardImageAlphaFormat=defined
WizardSmallImageFile={#WIZARD_SMALL_IMAGE}
WizardImageFile={#WIZARD_IMAGE}
WizardImageStretch=yes
[LangOptions]
DialogFontName=Segoe UI

View File

@@ -48,7 +48,7 @@ if have_vala and have_gobject_introspection
'goat-exercise-vala.vala',
include_directories: [ rootInclude, ],
dependencies: [
libgimp_vapi, libgimpui_vapi, gtk3, gegl, math,
libgimp_vapi, libgimpui_vapi, libgimpui_dep, math,
],
c_args: [
'-DGETTEXT_PACKAGE="@0@"'.format('org.gimp.extension.goat-exercises'),

View File

@@ -361,6 +361,32 @@ libgimpui_introspectable = [
]
if glib.version().version_compare('>=2.86')
if not platform_windows
gio_specific_gir = 'GioUnix-2.0'
gio_specific_vapi = 'gio-unix-2.0'
else
gio_specific_gir = 'GioWin32-2.0'
gio_specific_vapi = 'gio-windows-2.0'
endif
else
gio_specific_gir = ''
gio_specific_vapi = ''
endif
libgimp_deps_table = [
{ 'gir': 'Babl-0.1', 'vapi': 'babl-0.1', },
{ 'gir': 'cairo-1.0', 'vapi': 'cairo-1.0', },
{ 'gir': 'GdkPixbuf-2.0', 'vapi': 'gdk-pixbuf-2.0', },
{ 'gir': 'Gegl-0.4', 'vapi': 'gegl-0.4', },
{ 'gir': 'Gio-2.0', 'vapi': 'gio-2.0', },
{ 'gir': gio_specific_gir, 'vapi': gio_specific_vapi, },
{ 'gir': 'GLib-2.0', 'vapi': 'glib-2.0', },
{ 'gir': 'GObject-2.0', 'vapi': 'gobject-2.0', },
{ 'gir': 'Pango-1.0', 'vapi': 'gtk+-3.0', },
]
libgimp = library('gimp-'+ gimp_api_version,
libgimp_sources,
include_directories: rootInclude,
@@ -395,6 +421,7 @@ libgimp_dep = declare_dependency(
cairo,
gdk_pixbuf,
gegl,
gexiv2,
],
link_with: [
libgimp,
@@ -412,7 +439,6 @@ libgimpui = library('gimpui-'+ gimp_api_version,
libgimpui_sources,
dependencies: [
libgimp_dep,
gexiv2,
gtk3,
],
sources: [
@@ -489,23 +515,12 @@ elif get_option('b_sanitize') != 'none'
warnings += gobject_introspection_warning
else
have_gobject_introspection = true
libgimp_gir_includes = [
'Babl-0.1',
'cairo-1.0',
'GdkPixbuf-2.0',
'Gegl-0.4',
'Gio-2.0',
'GLib-2.0',
'GObject-2.0',
'Pango-1.0',
]
if glib.version().version_compare('>=2.86')
if not platform_windows
libgimp_gir_includes += [ 'GioUnix-2.0' ]
else
libgimp_gir_includes += [ 'GioWin32-2.0' ]
libgimp_gir_includes = []
foreach dep : libgimp_deps_table
if dep['gir'] != ''
libgimp_gir_includes += [dep['gir']]
endif
endif
endforeach
gir_args = [
'-DGIMP_COMPILATION',
@@ -569,23 +584,12 @@ else
endif
if have_vala
vapi_deps = [
'babl-0.1',
'cairo-1.0',
'gdk-pixbuf-2.0',
'gegl-0.4',
'gio-2.0',
'glib-2.0',
'gobject-2.0',
'gtk+-3.0',
]
if glib.version().version_compare('>=2.86')
if not platform_windows
vapi_deps += [ 'gio-unix-2.0' ]
else
vapi_deps += [ 'gio-windows-2.0' ]
vapi_deps = []
foreach dep : libgimp_deps_table
if dep['vapi'] != ''
vapi_deps += [dep['vapi']]
endif
endif
endforeach
libgimp_vapi = gnome.generate_vapi('gimp-' + gimp_api_version,
sources: libgimp_gir[0],

View File

@@ -26,6 +26,9 @@
#include <string.h>
#include <lcms2.h>
#ifdef HAVE_LCMS_FAST_FLOAT_PLUGIN
#include <lcms2_fast_float.h>
#endif
#include <gio/gio.h>
#include <gegl.h>
@@ -128,6 +131,10 @@ gimp_color_transform_class_init (GimpColorTransformClass *klass)
G_TYPE_NONE, 1,
G_TYPE_DOUBLE);
#ifdef HAVE_LCMS_FAST_FLOAT_PLUGIN
cmsPlugin (cmsFastFloatExtensions ());
#endif
cmsSetLogErrorHandler (lcms_error_handler);
}

View File

@@ -36,7 +36,7 @@ libgimpcolor = library('gimpcolor-' + gimp_api_version,
libgimpcolor_sources,
include_directories: rootInclude,
dependencies: [
cairo, gdk_pixbuf, gegl, lcms, math,
cairo, gdk_pixbuf, gegl, gexiv2, lcms, math,
],
c_args: [ '-DG_LOG_DOMAIN="LibGimpColor"', '-DGIMP_COLOR_COMPILATION', ],
link_with: [ libgimpbase, ],

View File

@@ -307,8 +307,8 @@ gimp_config_param_spec_duplicate (GParamSpec *pspec)
const gchar *type_name = g_type_name (value_type);
if (value_type == G_TYPE_FILE ||
/* These types are not visibile in libgimpconfig so we compare
* with type names instead.
/* These types are not visible in libgimpconfig
* so we compare with type names instead.
*/
g_strcmp0 (type_name, "GimpImage") == 0 ||
g_strcmp0 (type_name, "GimpDisplay") == 0 ||

View File

@@ -70,7 +70,7 @@ libgimpconfig = library('gimpconfig-' + gimp_api_version,
libgimpconfig_sources,
include_directories: rootInclude,
dependencies: [
cairo, gdk_pixbuf, gegl, gio, gio_specific,
cairo, gdk_pixbuf, gegl, gexiv2, gio, gio_specific,
],
c_args: [ '-DG_LOG_DOMAIN="LibGimpConfig"', '-DGIMP_CONFIG_COMPILATION', ],
link_with: [

View File

@@ -19,7 +19,7 @@ libgimpmodule = library('gimpmodule-' + gimp_api_version,
libgimpmodule_sources,
include_directories: rootInclude,
dependencies: [
gegl, gio, glib, gmodule,
gegl, gexiv2, gio, glib, gmodule,
],
c_args: [ '-DG_LOG_DOMAIN="LibGimpModule"', '-DGIMP_MODULE_COMPILATION', ],
link_with: [

View File

@@ -65,7 +65,7 @@ libgimpthumb = library('gimpthumb-'+ gimp_api_version,
libgimpthumb_sources,
include_directories: rootInclude,
dependencies: [
gegl, glib, gobject, gdk_pixbuf, gio,
gegl, gexiv2, glib, gobject, gdk_pixbuf, gio,
],
c_args: [ '-DG_LOG_DOMAIN="LibGimpThumb"', '-DGIMP_THUMB_COMPILATION', ],
link_with: [

View File

@@ -163,16 +163,19 @@ gimp_color_hex_entry_init (GimpColorHexEntry *entry)
gtk_entry_set_completion (GTK_ENTRY (entry), completion);
g_object_unref (completion);
g_signal_connect (entry, "focus-out-event",
G_CALLBACK (gimp_color_hex_entry_events),
NULL);
g_signal_connect (entry, "key-press-event",
G_CALLBACK (gimp_color_hex_entry_events),
NULL);
g_signal_connect_object (entry, "focus-out-event",
G_CALLBACK (gimp_color_hex_entry_events),
NULL, 0);
g_signal_connect_object (entry, "key-press-event",
G_CALLBACK (gimp_color_hex_entry_events),
NULL, 0);
g_signal_connect_object (entry, "key-release-event",
G_CALLBACK (gimp_color_hex_entry_events),
NULL, 0);
g_signal_connect (completion, "match-selected",
G_CALLBACK (gimp_color_hex_entry_matched),
entry);
g_signal_connect_object (completion, "match-selected",
G_CALLBACK (gimp_color_hex_entry_matched),
entry, 0);
}
static void
@@ -263,7 +266,8 @@ static gboolean
gimp_color_hex_entry_events (GtkWidget *widget,
GdkEvent *event)
{
GimpColorHexEntry *entry = GIMP_COLOR_HEX_ENTRY (widget);
GimpColorHexEntry *entry = GIMP_COLOR_HEX_ENTRY (widget);
gboolean check_color = FALSE;
switch (event->type)
{
@@ -271,39 +275,52 @@ gimp_color_hex_entry_events (GtkWidget *widget,
{
GdkEventKey *kevent = (GdkEventKey *) event;
if (kevent->keyval != GDK_KEY_Return &&
kevent->keyval != GDK_KEY_KP_Enter &&
kevent->keyval != GDK_KEY_ISO_Enter)
break;
/* else fall through */
if (kevent->keyval == GDK_KEY_Return ||
kevent->keyval == GDK_KEY_KP_Enter ||
kevent->keyval == GDK_KEY_ISO_Enter)
check_color = TRUE;
}
case GDK_KEY_RELEASE:
case GDK_FOCUS_CHANGE:
{
const gchar *text;
gchar buffer[8];
guchar rgb[3];
gsize len;
text = gtk_entry_get_text (GTK_ENTRY (widget));
len = strlen (text);
gegl_color_get_pixel (entry->color, babl_format ("R'G'B' u8"), rgb);
g_snprintf (buffer, sizeof (buffer), "%.2x%.2x%.2x", rgb[0], rgb[1], rgb[2]);
if (g_ascii_strcasecmp (buffer, text) != 0)
if (len >= 6 || check_color)
{
GeglColor *color = NULL;
gsize len = strlen (text);
gegl_color_get_pixel (entry->color, babl_format ("R'G'B' u8"),
rgb);
g_snprintf (buffer, sizeof (buffer), "%.2x%.2x%.2x",
rgb[0], rgb[1], rgb[2]);
if (len > 0 &&
((color = gimp_color_parse_hex_substring (text, len)) ||
(color = gimp_color_parse_name (text))))
if (g_ascii_strcasecmp (buffer, text) != 0)
{
gimp_color_hex_entry_set_color (entry, color);
g_object_unref (color);
}
else
{
gtk_entry_set_text (GTK_ENTRY (entry), buffer);
GeglColor *color = NULL;
gint position;
position = gtk_editable_get_position (GTK_EDITABLE (widget));
if (len > 0 &&
((color = gimp_color_parse_hex_substring (text, len)) ||
(color = gimp_color_parse_name (text))))
{
gimp_color_hex_entry_set_color (entry, color);
g_object_unref (color);
if (! check_color)
gtk_editable_set_position (GTK_EDITABLE (entry),
position);
}
else if (event->type == GDK_FOCUS_CHANGE || check_color)
{
gtk_entry_set_text (GTK_ENTRY (entry), buffer);
}
}
}
}

View File

@@ -207,7 +207,7 @@ libgimpwidgets = library('gimpwidgets-'+ gimp_api_version,
libgimpwidgets_sources,
include_directories: rootInclude,
dependencies: [
gegl, gtk3, lcms, math, mscms
gegl, gexiv2, gtk3, lcms, math, mscms
],
c_args: [ '-DG_LOG_DOMAIN="LibGimpWidgets"', '-DGIMP_WIDGETS_COMPILATION', ],
link_with: [

View File

@@ -128,7 +128,7 @@ fs = import('fs')
cc = meson.get_compiler('c')
cxx = meson.get_compiler('cpp')
prefix = get_option('prefix')
prefix = get_option('prefix').replace('\\', '/')
buildtype = get_option('buildtype')
exec_ver = '-' + gimp_app_version
@@ -334,6 +334,9 @@ if get_option('buildtype') == 'debug' or get_option('buildtype') == 'debugoptimi
if not platform_windows
# DWARF symbols for GCC and LLDB on Unix
debugging_format = 'native'
elif cc.get_argument_syntax() == 'msvc'
# CodeView symbols for DIA or DbgHelp debuggers and LLDB on Windows
debugging_format = 'Native'
elif platform_windows and get_option('win-debugging') == 'native' and cc.has_argument('-gcodeview') and cc.has_link_argument('-Wl,--pdb=') and cc.get_id() == 'clang'
# CodeView symbols for DIA or DbgHelp debuggers and LLDB on Windows
debugging_format = 'native'
@@ -406,7 +409,7 @@ winsock = platform_windows ? cc.find_library('ws2_32') : no_dep
mscms = platform_windows ? cc.find_library('mscms') : no_dep
atk_minver = '2.4.0'
atk = dependency('atk', version: '>='+atk_minver)
babl_minver = '0.1.114'
babl_minver = '0.1.116'
babl = dependency('babl-0.1', version: '>='+babl_minver, required: false)
if not babl.found()
# babl changed its pkg-config name from 'babl' to 'babl-0.1' in version
@@ -428,7 +431,7 @@ freetype2_minver = '2.1.7'
freetype2 = dependency('freetype2', version: '>='+freetype2_minver)
gdk_pixbuf_minver = '2.30.8'
gdk_pixbuf = dependency('gdk-pixbuf-2.0', version: '>='+gdk_pixbuf_minver)
gegl_minver = '0.4.62'
gegl_minver = '0.4.64'
gegl = dependency('gegl-0.4', version: '>='+gegl_minver)
exiv2_minver = '0.27.4'
exiv2 = dependency('exiv2', version: '>='+exiv2_minver)
@@ -473,6 +476,10 @@ json_glib_minver = '1.2.6'
json_glib = dependency('json-glib-1.0', version: '>='+json_glib_minver)
lcms_minver = '2.8'
lcms = dependency('lcms2', version: '>='+lcms_minver)
if cc.has_header('lcms2_fast_float.h')
conf.set('HAVE_LCMS_FAST_FLOAT_PLUGIN', 1)
endif
libmypaint_minver = '1.5.0'
libmypaint = dependency('libmypaint', version: '>='+libmypaint_minver)
mypaint_brushes = dependency('mypaint-brushes-2.0')
@@ -2046,7 +2053,7 @@ pkgconfig.generate(libgimpui,
# Install native debug data (.pdb) on Windows
# Ideally meson should take care of it automatically.
# See: https://github.com/mesonbuild/meson/issues/12977
if platform_windows and debugging_format == 'native'
if platform_windows and debugging_format == 'native' and cc.get_argument_syntax() != 'msvc'
install_win_debug_script = find_program('build/windows/2_bundle-gimp-uni_sym.py')
meson.add_install_script(install_win_debug_script)
endif

View File

@@ -1,6 +1,6 @@
modules_deps = [
gtk3, babl, gegl, math,
gtk3, babl, gegl, gexiv2, math,
]
color_selector_libs = [

View File

@@ -76,8 +76,17 @@ HELP
gimp_value_array_index (new_args, 1));
for (i = 2; i < proc->num_args; i++)
if (G_IS_PARAM_SPEC_STRING (proc->args[i]))
g_value_set_static_string (gimp_value_array_index (new_args, i), "");
if (GIMP_IS_PARAM_SPEC_CHOICE (proc->args[i]))
{
GParamSpecString *string_spec = G_PARAM_SPEC_STRING (proc->args[i]);
g_value_set_static_string (gimp_value_array_index (new_args, i),
string_spec->default_value);
}
else if (G_IS_PARAM_SPEC_STRING (proc->args[i]))
{
g_value_set_static_string (gimp_value_array_index (new_args, i), "");
}
return_vals =
gimp_pdb_execute_procedure_by_name_args (gimp->pdb,
@@ -95,7 +104,16 @@ HELP
{
GimpImage *image =
g_value_get_object (gimp_value_array_index (return_vals, 1));
gimp_image_set_load_proc (image, file_proc);
if (! gimp_image_get_load_proc (image))
/* Leave the initial load procedure if it already exists as
* it will give information about the source format. See
* similar code in file_open_image().
*/
gimp_image_set_load_proc (image, file_proc);
if (! gimp_image_get_file (image))
gimp_image_set_imported_file (image, file);
}
}

View File

@@ -88,6 +88,8 @@
#include "libgimp/stdplugins-intl.h"
#include <archive.h>
#include <archive_entry.h>
#include <zlib.h>
#include <bzlib.h>
#include <lzma.h>
@@ -201,6 +203,9 @@ static gboolean xz_load (GFile *infi
GFile *outfile);
static gboolean xz_export (GFile *infile,
GFile *outfile);
static gboolean zip_load (GFile *infile,
GFile *outfile);
static goffset get_file_info (GFile *file);
@@ -215,58 +220,77 @@ static const CompressorEntry compressors[] =
{
N_("gzip archive"),
"application/x-gzip",
"xcf.gz,xcfgz", /* FIXME "xcf.gz,gz,xcfgz" */
"gz,xcf.gz,xcfgz",
"0,string,\037\213",
".xcfgz",
".gz",
"file-gz-load",
"loads files compressed with gzip",
"This procedure loads files in the gzip compressed format.",
N_("Loads files compressed with gzip"),
N_("This procedure loads files in the gzip compressed format."),
gzip_load,
"file-gz-export",
"saves files compressed with gzip",
"This procedure saves files in the gzip compressed format.",
N_("Exports files compressed with gzip"),
N_("This procedure exports files in the gzip compressed format."),
gzip_export
},
{
N_("bzip archive"),
"application/x-bzip",
"xcf.bz2,xcfbz2", /* FIXME "xcf.bz2,bz2,xcfbz2" */
"bz2,xcf.bz2,xcfbz2",
"0,string,BZh",
".xcfbz2",
".bz2",
"file-bz2-load",
"loads files compressed with bzip2",
"This procedure loads files in the bzip2 compressed format.",
N_("Loads files compressed with bzip2"),
N_("This procedure loads files in the bzip2 compressed format."),
bzip2_load,
"file-bz2-export",
"saves files compressed with bzip2",
"This procedure saves files in the bzip2 compressed format.",
N_("Exports files compressed with bzip2"),
N_("This procedure exports files in the bzip2 compressed format."),
bzip2_export
},
{
N_("xz archive"),
"application/x-xz",
"xcf.xz,xcfxz", /* FIXME "xcf.xz,xz,xcfxz" */
"xz,xcf.xz,xcfxz",
"0,string,\3757zXZ\x00",
".xcfxz",
".xz",
"file-xz-load",
"loads files compressed with xz",
"This procedure loads files in the xz compressed format.",
N_("Loads files compressed with xz"),
N_("This procedure loads files in the xz compressed format."),
xz_load,
"file-xz-export",
"saves files compressed with xz",
"This procedure saves files in the xz compressed format.",
N_("Exports files compressed with xz"),
N_("This procedure exports files in the xz compressed format."),
xz_export
},
{
N_("zip archive"),
"application/zip",
"zip,hgt.zip",
"0,string,PK\x03\x04",
".xcfzip",
".zip",
"file-zip-load",
N_("Loads files compressed with zip"),
N_("This procedure loads files in the zip compressed format."),
zip_load,
NULL,
NULL,
NULL,
NULL
}
};
@@ -297,7 +321,8 @@ compressor_query_procedures (GimpPlugIn *plug_in)
const CompressorEntry *compressor = &compressors[i];
list = g_list_append (list, g_strdup (compressor->load_proc));
list = g_list_append (list, g_strdup (compressor->save_proc));
if (compressor->save_proc)
list = g_list_append (list, g_strdup (compressor->save_proc));
}
return list;
@@ -322,14 +347,14 @@ compressor_create_procedure (GimpPlugIn *plug_in,
(gpointer) compressor, NULL);
gimp_procedure_set_documentation (procedure,
compressor->load_blurb,
compressor->load_help,
_(compressor->load_blurb),
_(compressor->load_help),
name);
gimp_file_procedure_set_magics (GIMP_FILE_PROCEDURE (procedure),
compressor->magic);
}
else if (! strcmp (name, compressor->save_proc))
else if (compressor->save_proc && ! strcmp (name, compressor->save_proc))
{
procedure = gimp_export_procedure_new (plug_in, name,
GIMP_PDB_PROC_TYPE_PLUGIN,
@@ -339,8 +364,8 @@ compressor_create_procedure (GimpPlugIn *plug_in,
gimp_procedure_set_image_types (procedure, "RGB*, GRAY*, INDEXED*");
gimp_procedure_set_documentation (procedure,
compressor->save_blurb,
compressor->save_help,
_(compressor->save_blurb),
_(compressor->save_help),
name);
}
@@ -387,8 +412,7 @@ compressor_load (GimpProcedure *procedure,
gimp_plug_in_set_pdb_error_handler (gimp_procedure_get_plug_in (procedure),
GIMP_PDB_ERROR_HANDLER_PLUGIN);
image = load_image (compressor, file, run_mode,
&status, &error);
image = load_image (compressor, file, run_mode, &status, &error);
return_vals = gimp_procedure_new_return_values (procedure, status, error);
@@ -526,9 +550,17 @@ load_image (const CompressorEntry *compressor,
if (image)
{
GFile *xcf_file;
*status = GIMP_PDB_SUCCESS;
gimp_image_set_file (image, file);
if ((xcf_file = gimp_image_get_xcf_file (image)))
/* Replace the temporary file with the actual source file, but
* only if the inner format was actually XCF.
*/
gimp_image_set_file (image, file);
g_clear_object (&xcf_file);
}
else
{
@@ -1018,6 +1050,79 @@ xz_export (GFile *infile,
return ret;
}
static gboolean
zip_load (GFile *infile,
GFile *outfile)
{
gboolean ret;
FILE *in;
FILE *out;
struct archive *a;
struct archive_entry *entry;
gint r;
ret = FALSE;
in = NULL;
out = NULL;
in = g_fopen (g_file_peek_path (infile), "rb");
if (!in)
goto out;
out = g_fopen (g_file_peek_path (outfile), "wb");
if (! out)
goto out;
if ((a = archive_read_new ()))
{
const gchar *name = gimp_file_get_utf8_name (infile);
archive_read_support_format_all (a);
r = archive_read_open_filename (a, name, 10240);
if (r != ARCHIVE_OK)
{
archive_read_close (a);
archive_read_free (a);
goto out;
}
if (archive_read_next_header (a, &entry) == ARCHIVE_OK)
{
r = archive_read_data_into_fd (a, fileno (out));
if (r != ARCHIVE_OK)
{
archive_read_close (a);
archive_read_free (a);
goto out;
}
ret = TRUE;
if (archive_read_next_header (a, &entry) != ARCHIVE_EOF)
/* Leave a chance for the load to succeed (in case the first
* file happens to be an image file), yet still warns. This
* procedure expects that the archive contains a single
* file.
*/
g_message (_("This zip archive contains more than one file."));
}
archive_read_close (a);
archive_read_free (a);
}
out:
if (in)
fclose (in);
if (out)
fclose (out);
return ret;
}
/* get file size from a filename */
static goffset
get_file_info (GFile *file)

View File

@@ -10,9 +10,7 @@ common_plugins_list = [
{ 'name': 'colormap-remap', },
{ 'name': 'compose', },
{ 'name': 'contrast-retinex', },
{ 'name': 'crop-zealous',
'deps': [ gtk3, gegl, gdk_pixbuf, cairo, ],
},
{ 'name': 'crop-zealous' },
{ 'name': 'curve-bend', },
{ 'name': 'decompose', },
{ 'name': 'depth-merge', },
@@ -20,7 +18,7 @@ common_plugins_list = [
{ 'name': 'destripe', },
{ 'name': 'file-cel', },
{ 'name': 'file-compressor',
'deps': [ gegl, gdk_pixbuf, cairo, gio, liblzma, pango, bz2, zlib, ],
'deps': [ gio, libarchive, liblzma, pango, bz2, zlib, ],
},
{ 'name': 'file-csource', },
{ 'name': 'file-dicom', },
@@ -28,34 +26,32 @@ common_plugins_list = [
{ 'name': 'file-gbr', },
{ 'name': 'file-gegl', },
{ 'name': 'file-gif-load',
'deps': [ gtk3, gegl, gdk_pixbuf, cairo, zlib, ],
'deps': [ zlib, ],
},
{ 'name': 'file-gif-export', },
{ 'name': 'file-gih', },
{ 'name': 'file-glob',
'deps': [ gtk3, gegl, gdk_pixbuf, cairo, ],
},
{ 'name': 'file-glob', },
{ 'name': 'file-header', },
{ 'name': 'file-html-table', },
{ 'name': 'file-paa', },
{ 'name': 'file-pat', },
{ 'name': 'file-pcx', },
{ 'name': 'file-pdf-load',
'deps': [ gtk3, gegl, gdk_pixbuf, poppler ],
'deps': [ poppler ],
},
{ 'name': 'file-pix', },
{ 'name': 'file-png',
'deps': [ gtk3, gegl, libpng, lcms ],
'deps': [ libpng, lcms ],
},
{ 'name': 'file-pnm', },
{ 'name': 'file-psp',
'deps': [ gtk3, gegl, zlib, ],
'deps': [ zlib, ],
},
{ 'name': 'file-raw-data', },
{ 'name': 'file-seattle-filmworks', },
{ 'name': 'file-sunras', },
{ 'name': 'file-svg',
'deps': [ gtk3, gegl, rsvg, ],
'deps': [ rsvg, ],
},
{ 'name': 'file-tga', },
{ 'name': 'file-tim', },
@@ -88,26 +84,26 @@ common_plugins_list = [
if libaa.found()
common_plugins_list += {
'name': 'file-aa',
'deps': [ gtk3, gegl, gdk_pixbuf, libaa, ],
'deps': [ libaa, ],
}
endif
if have_heif
common_plugins_list += { 'name': 'file-heif',
'deps': [ gtk3, gegl, libheif, gexiv2, lcms, ],
'deps': [ libheif, lcms, ],
}
endif
if openjpeg.found()
common_plugins_list += { 'name': 'file-jp2',
'deps': [ gtk3, gegl, gdk_pixbuf, openjpeg, ],
'deps': [ openjpeg, ],
}
endif
if libjxl.found() and libjxl_threads.found()
common_plugins_list += {
'name': 'file-jpegxl',
'deps': [ gtk3, gegl, gexiv2, libjxl, libjxl_threads, ],
'deps': [ libjxl, libjxl_threads, ],
}
endif
@@ -117,57 +113,55 @@ if libmng.found()
mng_cflags = [ '-DMNG_USE_DLL' ]
endif
common_plugins_list += { 'name': 'file-mng',
'deps': [ gtk3, gegl, libmng, libpng, ],
'deps': [ libmng, libpng, ],
'cflags': mng_cflags,
}
endif
if cairopdf.found()
common_plugins_list += { 'name': 'file-pdf-export',
'deps': [ gtk3, gegl, gdk_pixbuf, poppler, cairo, cairopdf ],
'deps': [ poppler, cairopdf ],
}
endif
if ghostscript.found()
common_plugins_list += { 'name': 'file-ps',
'deps': [ gtk3, gegl, gdk_pixbuf, ghostscript, ],
'deps': [ ghostscript, ],
}
endif
if wmf.found()
common_plugins_list += { 'name': 'file-wmf',
'deps': [ gtk3, gegl, wmf, ],
'deps': [ wmf, ],
}
endif
if xmc.found()
common_plugins_list += { 'name': 'file-xmc',
'deps': [ gtk3, gegl, xmc, ],
'deps': [ xmc, ],
}
endif
if libxpm.found()
common_plugins_list += { 'name': 'file-xpm',
'deps': [ gtk3, gegl, libxpm, ],
'deps': [ libxpm, ],
}
endif
if have_qoi
common_plugins_list += {
'name': 'file-qoi',
'deps': [ gtk3, gegl, ],
}
endif
if libiff.found() and libilbm.found()
common_plugins_list += {
'name': 'file-iff',
'deps': [ gtk3, gegl, libiff, libilbm, ],
'deps': [ libiff, libilbm, ],
}
elif have_ilbm
common_plugins_list += {
'name': 'file-iff',
'deps': [ gtk3, gegl, ],
}
endif
@@ -178,7 +172,6 @@ endif
if platform_linux
common_plugins_list += {
'name': 'file-desktop-link',
'deps': [ gtk3, gegl, gdk_pixbuf, cairo, ],
}
endif
if not platform_windows
@@ -187,7 +180,7 @@ endif
if get_option('webkit-unmaintained')
common_plugins_list += { 'name': 'web-page',
'deps': [ gtk3, gegl, gdk_pixbuf, webkit, ],
'deps': [ webkit, ],
}
endif
@@ -195,7 +188,7 @@ plugin_custom_targets = []
foreach plugin : common_plugins_list
plugin_name = plugin.get('name')
plugin_sources = [ plugin.get('sources', plugin_name + '.c') ]
plugin_deps = plugin.get('deps', [ gtk3, gegl, gdk_pixbuf, ])
plugin_deps = plugin.get('deps', [])
plugin_cflags = plugin.get('cflags', [])
if platform_windows
@@ -241,7 +234,7 @@ foreach plugin : common_plugins_list
libgimpui,
libgimpwidgets,
],
dependencies: [ plugin_deps, math ],
dependencies: [ plugin_deps, math, libgimpui_dep ],
c_args: plugin_cflags,
win_subsystem: 'windows',
install: true,

View File

@@ -28,7 +28,7 @@ help_plugin_lib = static_library('help_plugin',
plugin_sources,
include_directories: [ rootInclude, ],
dependencies: [
gtk3, gegl, cairo, gio, gdk_pixbuf,
libgimpui_dep, gio,
],
install: false,
)

View File

@@ -229,7 +229,7 @@ def export_ora(procedure, run_mode, image, file, options, metadata, config, data
tmp_img.set_palette(image.get_palette())
tmp_layer = Gimp.Layer.new_from_drawable (drawable, tmp_img)
tmp_layer.set_visible (False)
tmp_layer.set_offsets (0, 0)
tmp_img.insert_layer (tmp_layer, None, 0)
pdb_proc = Gimp.get_pdb().lookup_procedure('file-png-export')

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gimp-plug-ins\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gimp/issues\n"
"POT-Creation-Date: 2025-09-04 09:35+0000\n"
"PO-Revision-Date: 2025-09-04 19:10+0300\n"
"POT-Creation-Date: 2025-10-02 00:31+0000\n"
"PO-Revision-Date: 2025-10-02 11:21+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
@@ -42,7 +42,7 @@ msgstr "Приклад додатка мовою C"
#: plug-ins/common/qbist.c:254 plug-ins/common/sample-colorize.c:425
#: plug-ins/common/smooth-palette.c:193 plug-ins/common/sparkle.c:301
#: plug-ins/common/sphere-designer.c:3199 plug-ins/common/tile.c:222
#: plug-ins/common/tile-small.c:312 plug-ins/common/van-gogh-lic.c:242
#: plug-ins/common/tile-small.c:311 plug-ins/common/van-gogh-lic.c:242
#: plug-ins/common/warp.c:344 plug-ins/common/wavelet-decompose.c:179
#: plug-ins/flame/flame.c:297 plug-ins/fractal-explorer/fractal-explorer.c:427
#: plug-ins/gfig/gfig.c:213 plug-ins/gimpressionist/gimp.c:184
@@ -568,7 +568,7 @@ msgstr "_Кількість сегментів"
msgid "Number of segments in blinds"
msgstr "Кількість сегментів у жалюзі"
#: plug-ins/common/blinds.c:165 plug-ins/map-object/map-object-ui.c:408
#: plug-ins/common/blinds.c:165 plug-ins/map-object/map-object-ui.c:412
msgid "Orient_ation"
msgstr "_Орієнтація"
@@ -603,7 +603,7 @@ msgstr "Жалюзі"
#.
#. * Create the "background" layer to hold the image...
#.
#: plug-ins/common/blinds.c:260 plug-ins/common/compose.c:1230
#: plug-ins/common/blinds.c:260 plug-ins/common/compose.c:1234
#: plug-ins/common/decompose.c:642 plug-ins/common/file-cel.c:475
#: plug-ins/common/file-cel.c:480 plug-ins/common/file-dicom.c:765
#: plug-ins/common/file-farbfeld.c:307 plug-ins/common/file-gegl.c:446
@@ -1711,36 +1711,36 @@ msgstr "Не вдається отримати шари зображення %d"
msgid "Composing"
msgstr "Збирання"
#: plug-ins/common/compose.c:1075 plug-ins/common/compose.c:1475
#: plug-ins/common/compose.c:1079 plug-ins/common/compose.c:1479
msgid "At least one image is needed to compose"
msgstr "Для збирання треба принаймні одне зображення"
#: plug-ins/common/compose.c:1096
#: plug-ins/common/compose.c:1100
msgid "Drawables have different size"
msgstr "Малюнки мають різні розміри"
#: plug-ins/common/compose.c:1124
#: plug-ins/common/compose.c:1128
msgid "Images have different size"
msgstr "Зображення мають різний розмір"
#: plug-ins/common/compose.c:1142
#: plug-ins/common/compose.c:1146
msgid "Error in getting layer IDs"
msgstr "Помилка отримання ідентифікатора шару"
#: plug-ins/common/compose.c:1275
#: plug-ins/common/compose.c:1279
msgid "Compose"
msgstr "Зібрати"
#: plug-ins/common/compose.c:1290
#: plug-ins/common/compose.c:1294
msgid "Compose Channels"
msgstr "Зібрати канали"
#. Channel representation grid
#: plug-ins/common/compose.c:1305
#: plug-ins/common/compose.c:1309
msgid "Channel Representations"
msgstr "Представлення каналу"
#: plug-ins/common/compose.c:1365
#: plug-ins/common/compose.c:1369
msgid "Mask value"
msgstr "Значення маски"
@@ -2009,7 +2009,7 @@ msgstr "Неможливо виконувати дії з порожнім ви
#: plug-ins/common/file-pcx.c:490 plug-ins/common/file-pcx.c:533
#: plug-ins/common/file-png.c:800 plug-ins/common/file-png.c:1370
#: plug-ins/common/file-ps.c:1158 plug-ins/common/file-ps.c:3738
#: plug-ins/common/file-psp.c:2634 plug-ins/common/file-psp.c:2684
#: plug-ins/common/file-psp.c:2638 plug-ins/common/file-psp.c:2688
#: plug-ins/common/file-qoi.c:275 plug-ins/common/file-raw-data.c:608
#: plug-ins/common/file-raw-data.c:796 plug-ins/common/file-raw-data.c:1841
#: plug-ins/common/file-seattle-filmworks.c:232
@@ -2102,7 +2102,7 @@ msgstr "Переставити дві криві"
#. The Reset button
#: plug-ins/common/curve-bend.c:1232 plug-ins/common/sphere-designer.c:2654
#: plug-ins/common/tile-small.c:523 plug-ins/gimpressionist/preview.c:182
#: plug-ins/common/tile-small.c:522 plug-ins/gimpressionist/preview.c:182
#: plug-ins/ifs-compose/ifs-compose.c:912
msgid "_Reset"
msgstr "_Скинути"
@@ -2702,7 +2702,7 @@ msgstr "«%s»: Кінець файлу або помилка при читан
#. * Open the file for writing...
#.
#: plug-ins/common/file-cel.c:825 plug-ins/common/file-farbfeld.c:364
#: plug-ins/common/file-gif-export.c:939 plug-ins/common/file-html-table.c:360
#: plug-ins/common/file-gif-export.c:939 plug-ins/common/file-html-table.c:358
#: plug-ins/common/file-jp2.c:1804 plug-ins/common/file-jpegxl.c:1389
#: plug-ins/common/file-pcx.c:1083 plug-ins/common/file-pix.c:636
#: plug-ins/common/file-png.c:1915 plug-ins/common/file-pnm.c:1623
@@ -2723,116 +2723,194 @@ msgstr "Експортування «%s»"
msgid "C source code"
msgstr "Програма на C"
#: plug-ins/common/file-csource.c:125
#: plug-ins/common/file-csource.c:125 plug-ins/common/file-csource.c:127
msgid "Dump image data in RGB(A) format for C source"
msgstr ""
"Створити дамп даних зображення у форматі RGB(A) для початкового коду C"
#: plug-ins/common/file-csource.c:127
msgid "CSource cannot be run non-interactively."
msgstr "CSource не можна запускати у неінтерактивному режимі."
#: plug-ins/common/file-csource.c:135
#: plug-ins/common/file-csource.c:136
msgid "C-Source"
msgstr "Початковий код C"
#: plug-ins/common/file-csource.c:149
#: plug-ins/common/file-csource.c:150
msgid "_Prefixed name"
msgstr "Назва з преіксом"
#: plug-ins/common/file-csource.c:150
#: plug-ins/common/file-csource.c:151
msgid "Prefixed name"
msgstr "Назва з префіксом"
#: plug-ins/common/file-csource.c:155
#: plug-ins/common/file-csource.c:156
msgid "Comme_nt"
msgstr "Коентар"
#: plug-ins/common/file-csource.c:156
#: plug-ins/common/file-csource.c:157
msgid "Comment"
msgstr "Коментар"
#: plug-ins/common/file-csource.c:164
#: plug-ins/common/file-csource.c:165
msgid "Save comment to _file"
msgstr "Зберегти коментар у фа_йлі"
#: plug-ins/common/file-csource.c:165
#: plug-ins/common/file-csource.c:166
msgid "Save comment"
msgstr "Зберегти коментар"
#: plug-ins/common/file-csource.c:170
#: plug-ins/common/file-csource.c:171
msgid "Use GLib types (guint_8*)"
msgstr "Використовувати типи GLib (guint_8*)"
#: plug-ins/common/file-csource.c:171
#: plug-ins/common/file-csource.c:172
msgid "Use GLib types"
msgstr "Використовувати типи GLib"
#: plug-ins/common/file-csource.c:176
#: plug-ins/common/file-csource.c:177
msgid "Save alpha channel (RG_BA/RGB)"
msgstr "Зберегти а_льфа-канал (RGBA/RGB)"
#: plug-ins/common/file-csource.c:177
#: plug-ins/common/file-csource.c:178
msgid "Save the alpha channel"
msgstr "Зберегти альфа-канал"
#: plug-ins/common/file-csource.c:182
#: plug-ins/common/file-csource.c:183
msgid "Save as RGB565 (1_6-bit)"
msgstr "Зберегти як RGB565 (1_6 біт)"
#: plug-ins/common/file-csource.c:183
#: plug-ins/common/file-csource.c:184
msgid "Use RGB565 encoding"
msgstr "Використовувати кодування RGB565"
#: plug-ins/common/file-csource.c:188
#: plug-ins/common/file-csource.c:189
msgid "_Use macros instead of struct"
msgstr "Ви_користовувати макроси замість структур"
#: plug-ins/common/file-csource.c:189
#: plug-ins/common/file-csource.c:190
msgid "Use C macros"
msgstr "Використати макрос C"
#: plug-ins/common/file-csource.c:194
#: plug-ins/common/file-csource.c:195
msgid "Use _1 bit Run-Length-Encoding"
msgstr "Використовувати _1-бітове RLE"
#: plug-ins/common/file-csource.c:195
#: plug-ins/common/file-csource.c:196
msgid "Use run-length-encoding"
msgstr "Використовувати RLE"
#: plug-ins/common/file-csource.c:200 plug-ins/pagecurl/pagecurl.c:262
#: plug-ins/common/file-csource.c:201 plug-ins/pagecurl/pagecurl.c:262
msgid "Opaci_ty"
msgstr "Неп_розорість"
#: plug-ins/common/file-csource.c:201 plug-ins/pagecurl/pagecurl.c:263
#: plug-ins/common/file-csource.c:202 plug-ins/pagecurl/pagecurl.c:263
msgid "Opacity"
msgstr "Непрозорість"
#: plug-ins/common/file-compressor.c:216
#: plug-ins/common/file-compressor.c:221
msgid "gzip archive"
msgstr "архів gzip"
#: plug-ins/common/file-compressor.c:229
msgid "Loads files compressed with gzip"
msgstr "Завантажує файли, які стиснуто за допомогою gzip"
#: plug-ins/common/file-compressor.c:230
#| msgid ""
#| "This plug-in loads files in the various Netpbm portable file formats."
msgid "This procedure loads files in the gzip compressed format."
msgstr "Ця процедура завантажує файли у стисненому форматі gzip."
#: plug-ins/common/file-compressor.c:234
msgid "Exports files compressed with gzip"
msgstr "Експортує файли, які стиснуто за допомогою gzip"
#: plug-ins/common/file-compressor.c:235
#| msgid "Exports files in the PNM file format"
msgid "This procedure exports files in the gzip compressed format."
msgstr "Ця процедура експортує файли у стисненому форматі gzip."
#: plug-ins/common/file-compressor.c:240
msgid "bzip archive"
msgstr "архів bzip"
#: plug-ins/common/file-compressor.c:248
msgid "Loads files compressed with bzip2"
msgstr "Завантажує файли, які стиснуто за допомогою bzip2"
#: plug-ins/common/file-compressor.c:249
#| msgid ""
#| "This plug-in loads files in the various Netpbm portable file formats."
msgid "This procedure loads files in the bzip2 compressed format."
msgstr "Ця процедура завантажує файли у стисненому форматі bzip2."
#: plug-ins/common/file-compressor.c:253
msgid "Exports files compressed with bzip2"
msgstr "Експортує файли, які стиснуто за допомогою bzip2"
#: plug-ins/common/file-compressor.c:254
#| msgid ""
#| "This plug-in loads files in the various Netpbm portable file formats."
msgid "This procedure exports files in the bzip2 compressed format."
msgstr "Ця процедура експортує файли у стисненому форматі bzip2."
#: plug-ins/common/file-compressor.c:259
msgid "xz archive"
msgstr "архів xz"
#: plug-ins/common/file-compressor.c:447
#: plug-ins/common/file-compressor.c:267
msgid "Loads files compressed with xz"
msgstr "Завантажує файли, які стиснуто за допомогою xz"
#: plug-ins/common/file-compressor.c:268
#| msgid ""
#| "This plug-in loads files in the various Netpbm portable file formats."
msgid "This procedure loads files in the xz compressed format."
msgstr "Ця процедура завантажує файли у стисненому форматі xz."
#: plug-ins/common/file-compressor.c:272
#| msgid "Error reading compressed data. "
msgid "Exports files compressed with xz"
msgstr "Експортує файли, які стиснуто за допомогою xz"
#: plug-ins/common/file-compressor.c:273
#| msgid "Exports files in the PNM file format"
msgid "This procedure exports files in the xz compressed format."
msgstr "Ця процедура експортує файли у стисненому форматі xz."
#: plug-ins/common/file-compressor.c:278
msgid "zip archive"
msgstr "архів zip"
#: plug-ins/common/file-compressor.c:286
msgid "Loads files compressed with zip"
msgstr "Завантажує файли, які стиснуто за допомогою zip"
#: plug-ins/common/file-compressor.c:287
#| msgid ""
#| "This plug-in loads files in the various Netpbm portable file formats."
msgid "This procedure loads files in the zip compressed format."
msgstr "Ця процедура завантажує файли у стисненому форматі zip."
#: plug-ins/common/file-compressor.c:471
msgid "No sensible file extension, saving as compressed XCF."
msgstr "Немає потрібного розширення, зберігається як стиснутий XCF."
#: plug-ins/common/file-compressor.c:467
#: plug-ins/common/file-compressor.c:491
#, c-format
msgid "Compressing '%s'"
msgstr "Стиснення «%s»"
#: plug-ins/common/file-compressor.c:505
#: plug-ins/common/file-compressor.c:529
msgid "No sensible file extension, attempting to load with file magic."
msgstr "Немає потрібного розширення, спроба визначення типу за вмістом файлу."
#. Leave a chance for the load to succeed (in case the first
#. * file happens to be an image file), yet still warns. This
#. * procedure expects that the archive contains a single
#. * file.
#.
#: plug-ins/common/file-compressor.c:1110
msgid "This zip archive contains more than one file."
msgstr "В архіві zip міститься декілька файлів."
#: plug-ins/common/file-desktop-link.c:114
msgid "Desktop Link"
msgstr "Посилання .desktop"
@@ -2907,14 +2985,11 @@ msgstr ""
#, c-format
msgid "'%s' has a bpp of %d which GIMP cannot handle."
msgstr ""
"«%s» використовує кількість бітів на піксель %d, з якою не може працювати"
" GIMP."
"«%s» використовує кількість бітів на піксель %d, з якою не може працювати "
"GIMP."
#: plug-ins/common/file-dicom.c:719
#, c-format
#| msgid ""
#| "'%s':\n"
#| "Image width is larger than GIMP can handle"
msgid "'%s' has a larger image size (%d x %d) than GIMP can handle."
msgstr ""
"«%s» містить зображення більшого розміру (%d x %d), ніж може обробляти GIMP."
@@ -2923,16 +2998,15 @@ msgstr ""
#, c-format
msgid "'%s' has samples per pixel of %d which GIMP cannot handle."
msgstr ""
"«%s» використовує кількість семплів на піксель %d, з якою не може працювати"
" GIMP."
"«%s» використовує кількість семплів на піксель %d, з якою не може працювати "
"GIMP."
#: plug-ins/common/file-dicom.c:741
#, c-format
#| msgid "Overflow reading compressed data. Possibly corrupt file."
msgid "'%s' has not enough pixel data. Possibly corrupt image."
msgstr ""
"«%s» не має достатнього обсягу даних пікселів. Ймовірно, зображення"
" пошкоджено."
"«%s» не має достатнього обсягу даних пікселів. Ймовірно, зображення "
"пошкоджено."
#: plug-ins/common/file-dicom.c:1543
msgid "Cannot save images with alpha channel."
@@ -3499,20 +3573,20 @@ msgstr "Розмірість"
msgid "How many dimensions the animated brush has"
msgstr "Кількість розмірностей анімаційного пензля"
#: plug-ins/common/file-gih.c:521
#: plug-ins/common/file-gih.c:529
msgid "Width Mismatch!"
msgstr "Невідповідність ширини!"
#: plug-ins/common/file-gih.c:522
#: plug-ins/common/file-gih.c:530
msgid "Height Mismatch!"
msgstr "Невідповідність висоти!"
#: plug-ins/common/file-gih.c:569
#: plug-ins/common/file-gih.c:577
#, c-format
msgid "Displays as a %d × %d grid on each layer"
msgstr "Показує як ґратку %d × %d на кожному шарі"
#: plug-ins/common/file-gih.c:755
#: plug-ins/common/file-gih.c:763
msgid "Ranks:"
msgstr "Кількість кадрів:"
@@ -3877,7 +3951,7 @@ msgstr "_Інтервал між комірками"
msgid "The amount of cell spacing."
msgstr "Об'єм інтервалу між комірками."
#: plug-ins/common/file-html-table.c:610
#: plug-ins/common/file-html-table.c:608
msgid ""
"You are about to create a huge\n"
"HTML file which will most likely\n"
@@ -3887,19 +3961,19 @@ msgstr ""
"HTML-файл, який майже напевне\n"
"призведе до збою вашого переглядача."
#: plug-ins/common/file-html-table.c:628
#: plug-ins/common/file-html-table.c:626
msgid "Warning"
msgstr "Попередження"
#: plug-ins/common/file-html-table.c:642
#: plug-ins/common/file-html-table.c:640
msgid "HTML Page Options"
msgstr "Параметри HTML-сторінки"
#: plug-ins/common/file-html-table.c:653
#: plug-ins/common/file-html-table.c:651
msgid "Table Creation Options"
msgstr "Параметри створення таблиці"
#: plug-ins/common/file-html-table.c:673
#: plug-ins/common/file-html-table.c:671
msgid "Table Options"
msgstr "Параметри таблиці"
@@ -3922,9 +3996,6 @@ msgstr "В ILBM не міститься даних зображення — йм
#: plug-ins/common/file-iff.c:363
#, c-format
#| msgid ""
#| "'%s':\n"
#| "Invalid color map"
msgid "Invalid ILBM colormap size"
msgstr "Некоректний розмір карти кольорів ILBM"
@@ -4944,6 +5015,7 @@ msgstr ""
"Software: %s"
#: plug-ins/common/file-pix.c:582
#, c-format
msgid "Invalid Esm Software PIX file"
msgstr "Некоректний файл PIX Esm Software"
@@ -5528,7 +5600,7 @@ msgstr ""
"Якщо увімкнено, при експортуванні буде збережено пропорції. Якщо не буде "
"увімкнено, буде використано значення ширини і висоти."
#: plug-ins/common/file-ps.c:565 plug-ins/map-object/map-object-ui.c:719
#: plug-ins/common/file-ps.c:565 plug-ins/map-object/map-object-ui.c:723
msgid "Rotation"
msgstr "Обертання"
@@ -5797,97 +5869,97 @@ msgstr "Помилка читання фрагмента інформації к
msgid "Invalid channel type %d in channel information chunk"
msgstr "Хибний тип каналу %d у фрагменті інформації каналу"
#: plug-ins/common/file-psp.c:2281 plug-ins/common/file-psp.c:2298
#: plug-ins/common/file-psp.c:2283 plug-ins/common/file-psp.c:2300
#, c-format
msgid "Error reading tube data chunk"
msgstr "Помилка при читання фрагмента даних тюбика"
#: plug-ins/common/file-psp.c:2385 plug-ins/common/file-psp.c:2401
#: plug-ins/common/file-psp.c:2389 plug-ins/common/file-psp.c:2405
#, c-format
msgid "Error reading selection chunk"
msgstr "Помилка зчитування фрагмента позначеного"
#: plug-ins/common/file-psp.c:2394
#: plug-ins/common/file-psp.c:2398
#, c-format
msgid "Invalid selection chunk size"
msgstr "Некоректний розмір фрагмента позначеного"
#: plug-ins/common/file-psp.c:2418
#: plug-ins/common/file-psp.c:2422
#, c-format
msgid "Error reading end of selection chunk"
msgstr "Помилка зчитування кінця фрагмента позначеного"
#: plug-ins/common/file-psp.c:2443
#: plug-ins/common/file-psp.c:2447
#, c-format
msgid "Error reading extended block chunk header"
msgstr "Помилка при читанні заголовка фрагмента розширеного блока"
#: plug-ins/common/file-psp.c:2451
#: plug-ins/common/file-psp.c:2455
#, c-format
msgid "Invalid extended block chunk header"
msgstr "Некоректний заголовок фрагмента розширеного блоку"
#: plug-ins/common/file-psp.c:2462
#: plug-ins/common/file-psp.c:2466
#, c-format
msgid "Invalid extended block chunk size"
msgstr "Некоректний розмір фрагмента розширеного блоку"
#: plug-ins/common/file-psp.c:2483
#: plug-ins/common/file-psp.c:2487
#, c-format
msgid "Error reading extended chunk grid data"
msgstr "Помилка зчитування даних ґратки розширеного фрагмента"
#: plug-ins/common/file-psp.c:2511
#: plug-ins/common/file-psp.c:2515
#, c-format
msgid "Error reading extended chunk guide data"
msgstr "Помилка при читанні розширеного фрагмента даних напрямної"
#: plug-ins/common/file-psp.c:2529
#: plug-ins/common/file-psp.c:2533
#, c-format
msgid "Invalid guide orientation"
msgstr "Некоректна орієнтація напрямної"
#: plug-ins/common/file-psp.c:2543
#: plug-ins/common/file-psp.c:2547
#, c-format
msgid "Error reading extended block chunk"
msgstr "Помилка зчитування фрагмента розширеного блоку"
#: plug-ins/common/file-psp.c:2569 plug-ins/common/file-psp.c:2581
#: plug-ins/common/file-psp.c:2592
#: plug-ins/common/file-psp.c:2573 plug-ins/common/file-psp.c:2585
#: plug-ins/common/file-psp.c:2596
#, c-format
msgid "Error reading colorprofile chunk"
msgstr "Помилка під час читання фрагмента профілю кольорів"
#: plug-ins/common/file-psp.c:2645
#: plug-ins/common/file-psp.c:2649
#, c-format
msgid "Error reading file header."
msgstr "Помилка при читанні заголовка файлу."
#: plug-ins/common/file-psp.c:2652
#: plug-ins/common/file-psp.c:2656
#, c-format
msgid "Incorrect file signature."
msgstr "Хибна сигнатура файлу."
#: plug-ins/common/file-psp.c:2666
#: plug-ins/common/file-psp.c:2670
#, c-format
msgid "Unsupported PSP file format version %d.%d."
msgstr "Непідтримувана версія формату файлу PSP %d.%d."
#: plug-ins/common/file-psp.c:2686
#: plug-ins/common/file-psp.c:2690
msgid "invalid block size"
msgstr "хибний розмір блока"
#: plug-ins/common/file-psp.c:2695
#: plug-ins/common/file-psp.c:2699
#, c-format
msgid "Duplicate General Image Attributes block."
msgstr "Повторний блок загальних атрибутів зображення."
#: plug-ins/common/file-psp.c:2723
#: plug-ins/common/file-psp.c:2727
#, c-format
msgid "Missing General Image Attributes block."
msgstr "Відсутній блок загальних атрибутів зображення."
#: plug-ins/common/file-psp.c:2848
#: plug-ins/common/file-psp.c:2852
#, c-format
msgid "Exporting not implemented yet."
msgstr "Експорт ще не реалізовано."
@@ -6677,7 +6749,6 @@ msgstr "«%s»: некоректні розміри, %u x %u"
#: plug-ins/common/file-wbmp.c:517
#, c-format
#| msgid "Failed to read frame %d. Possibly corrupt animation.\n"
msgid "Read failure at position %u. Possibly corrupt image."
msgstr "Помилка читання на позиції %u. Ймовірно, зображення пошкоджено."
@@ -7271,7 +7342,6 @@ msgstr "Помилка позиціювання"
#: plug-ins/common/file-xwd.c:1692
#, c-format
#| msgid "Failed to read frame %d. Possibly corrupt animation.\n"
msgid "Invalid colormap offset. Possibly corrupt image."
msgstr "Некоректний зсув карти кольорів. Ймовірно, зображення пошкоджено."
@@ -7647,7 +7717,7 @@ msgstr "Надати зображенню вигляд головоломки-п
msgid "Jigsaw puzzle look"
msgstr "Вигляд складанки"
#: plug-ins/common/jigsaw.c:483 plug-ins/common/tile-small.c:503
#: plug-ins/common/jigsaw.c:483 plug-ins/common/tile-small.c:502
msgid "_Horizontal"
msgstr "Г_оризонтально"
@@ -7655,7 +7725,7 @@ msgstr "Г_оризонтально"
msgid "Number of pieces going across"
msgstr "Кількість частин вздовж горизонталі"
#: plug-ins/common/jigsaw.c:489 plug-ins/common/tile-small.c:513
#: plug-ins/common/jigsaw.c:489 plug-ins/common/tile-small.c:512
msgid "_Vertical"
msgstr "_Вертикально"
@@ -7700,6 +7770,7 @@ msgid "Assembling jigsaw"
msgstr "Складання головоломки"
#: plug-ins/common/jigsaw.c:791
#, c-format
msgid "draw_jigsaw: bad style\n"
msgstr "draw_jigsaw: помилковий стиль\n"
@@ -8598,7 +8669,7 @@ msgstr "Н_ове зображення"
msgid "Create a new image"
msgstr "Створення нового зображення"
#: plug-ins/common/tile.c:258 plug-ins/common/tile-small.c:375
#: plug-ins/common/tile.c:258 plug-ins/common/tile-small.c:374
msgid "Tiling"
msgstr "Укладання черепиці"
@@ -8610,57 +8681,57 @@ msgstr "Черепиця"
msgid "Tile to New Size"
msgstr "Розмір площі покриття"
#: plug-ins/common/tile-small.c:270
#: plug-ins/common/tile-small.c:269
msgid "_Small Tiles..."
msgstr "_Дрібна черепиця..."
#: plug-ins/common/tile-small.c:274
#: plug-ins/common/tile-small.c:273
msgid "Tile image into smaller versions of the original"
msgstr "Створити зображення з маленьких копій оригіналу"
#: plug-ins/common/tile-small.c:284
#: plug-ins/common/tile-small.c:283
msgid "_n²"
msgstr "_n²"
#: plug-ins/common/tile-small.c:285
#: plug-ins/common/tile-small.c:284
msgid "Number of tiles to make"
msgstr "Кількість створених плиток"
#: plug-ins/common/tile-small.c:330
#: plug-ins/common/tile-small.c:329
msgid "Region selected for filter is empty."
msgstr "Вибрана для фільтра область порожня."
#: plug-ins/common/tile-small.c:441
#: plug-ins/common/tile-small.c:440
msgid "Small Tiles"
msgstr "Дрібна черепиця"
#. Area for buttons etc
#. Flip
#: plug-ins/common/tile-small.c:490 plug-ins/ifs-compose/ifs-compose.c:724
#: plug-ins/common/tile-small.c:489 plug-ins/ifs-compose/ifs-compose.c:724
msgid "Flip"
msgstr "Віддзеркалення"
#: plug-ins/common/tile-small.c:539
#: plug-ins/common/tile-small.c:538
msgid "A_ll tiles"
msgstr "_Усіх секторів"
#: plug-ins/common/tile-small.c:552
#: plug-ins/common/tile-small.c:551
msgid "Al_ternate tiles"
msgstr "Кожного д_ругого сектору"
#: plug-ins/common/tile-small.c:565
#: plug-ins/common/tile-small.c:564
msgid "_Explicit tile"
msgstr "Вкааного сектору"
#: plug-ins/common/tile-small.c:570
#: plug-ins/common/tile-small.c:569
msgid "Ro_w:"
msgstr "_Рядок:"
#: plug-ins/common/tile-small.c:595
#: plug-ins/common/tile-small.c:594
msgid "Col_umn:"
msgstr "Ст_овпчик:"
#: plug-ins/common/tile-small.c:627
#: plug-ins/common/tile-small.c:626
#: plug-ins/fractal-explorer/fractal-explorer.c:1358
#: plug-ins/gimpressionist/orientmap.c:527
#: plug-ins/gimpressionist/presets.c:1064 plug-ins/gimpressionist/sizemap.c:400
@@ -8669,11 +8740,11 @@ msgid "_Apply"
msgstr "_Застосувати"
#. Widget for selecting the Opacity
#: plug-ins/common/tile-small.c:643
#: plug-ins/common/tile-small.c:642
msgid "O_pacity:"
msgstr "_Непрозорість:"
#: plug-ins/common/tile-small.c:654
#: plug-ins/common/tile-small.c:653
msgid "Number of Segments"
msgstr "Кількість сегментів"
@@ -15260,7 +15331,7 @@ msgstr "_Відстань"
msgid "Distance of observer from surface"
msgstr "Відстань спостерігача від поверхні"
#: plug-ins/lighting/lighting-ui.c:247 plug-ins/map-object/map-object-ui.c:363
#: plug-ins/lighting/lighting-ui.c:247 plug-ins/map-object/map-object-ui.c:367
msgid "Recompute preview image"
msgstr "Переобчислити перегляд зображення"
@@ -15280,7 +15351,7 @@ msgstr "_Параметри"
msgid "_Light"
msgstr "Сітло"
#: plug-ins/lighting/lighting-ui.c:272 plug-ins/map-object/map-object-ui.c:406
#: plug-ins/lighting/lighting-ui.c:272 plug-ins/map-object/map-object-ui.c:410
msgid "_Material"
msgstr "_Матеріал"
@@ -15292,16 +15363,16 @@ msgstr "Мапа _рельєфу"
msgid "_Environment Map"
msgstr "Мапа с_ередовища"
#: plug-ins/lighting/lighting-ui.c:281 plug-ins/map-object/map-object-ui.c:419
#: plug-ins/lighting/lighting-ui.c:281 plug-ins/map-object/map-object-ui.c:423
msgid "General Options"
msgstr "Загальні параметри"
#: plug-ins/lighting/lighting-ui.c:313 plug-ins/map-object/map-object-ui.c:455
#: plug-ins/lighting/lighting-ui.c:313 plug-ins/map-object/map-object-ui.c:459
msgid "Light Settings"
msgstr "Параметри світла"
#: plug-ins/lighting/lighting-ui.c:332 plug-ins/map-object/map-object-ui.c:487
#: plug-ins/map-object/map-object-ui.c:699
#: plug-ins/lighting/lighting-ui.c:332 plug-ins/map-object/map-object-ui.c:491
#: plug-ins/map-object/map-object-ui.c:703
#: plug-ins/print/print-page-layout.c:385
msgid "Position"
msgstr "Позиція"
@@ -15616,81 +15687,81 @@ msgstr "Дов_жина циліндра"
msgid "Cylinder length"
msgstr "Довжина циліндра"
#: plug-ins/map-object/map-object-ui.c:315
#: plug-ins/map-object/map-object-ui.c:319
msgid "Map to Object"
msgstr "Проекція"
#: plug-ins/map-object/map-object-ui.c:351
#: plug-ins/map-object/map-object-ui.c:355
msgid "_Preview!"
msgstr "_Перегляд"
#: plug-ins/map-object/map-object-ui.c:381
#: plug-ins/map-object/map-object-ui.c:385
msgid "Show _wireframe"
msgstr "Показати _каркас"
#: plug-ins/map-object/map-object-ui.c:390
#: plug-ins/map-object/map-object-ui.c:394
msgid "Update preview _live"
msgstr "Оновити перегляд _живих"
#: plug-ins/map-object/map-object-ui.c:400
#: plug-ins/map-object/map-object-ui.c:404
msgid "O_ptions"
msgstr "_Параметри"
#: plug-ins/map-object/map-object-ui.c:402
#: plug-ins/map-object/map-object-ui.c:406
msgid "Li_ght"
msgstr "Св_ітло"
#: plug-ins/map-object/map-object-ui.c:404
#: plug-ins/map-object/map-object-ui.c:408
msgid "_Viewpoint"
msgstr "_Точка перегляду"
#: plug-ins/map-object/map-object-ui.c:411
#: plug-ins/map-object/map-object-ui.c:415
msgid "Sp_here"
msgstr "Сера"
#: plug-ins/map-object/map-object-ui.c:413
#: plug-ins/map-object/map-object-ui.c:417
msgid "_Box"
msgstr "_Паралелепіпед"
#: plug-ins/map-object/map-object-ui.c:415
#: plug-ins/map-object/map-object-ui.c:419
msgid "C_ylinder"
msgstr "_Циліндр"
#: plug-ins/map-object/map-object-ui.c:473
#: plug-ins/map-object/map-object-ui.c:477
msgid "Direction Vector"
msgstr "Вектор напрямку"
#: plug-ins/map-object/map-object-ui.c:544
#: plug-ins/map-object/map-object-ui.c:547
msgid "Viewpoint Position"
msgstr "Позиція точки перегляду"
#: plug-ins/map-object/map-object-ui.c:566
#: plug-ins/map-object/map-object-ui.c:569
msgid "First Axis"
msgstr "Перша вісь"
#: plug-ins/map-object/map-object-ui.c:586
#: plug-ins/map-object/map-object-ui.c:589
msgid "Second Axis"
msgstr "Друга вісь"
#: plug-ins/map-object/map-object-ui.c:642
#: plug-ins/map-object/map-object-ui.c:646
msgid "Intensity Levels"
msgstr "Рівні інтенсивності"
#: plug-ins/map-object/map-object-ui.c:656
#: plug-ins/map-object/map-object-ui.c:660
msgid "Reflectivity"
msgstr "Коефіцієнт відбиття"
#: plug-ins/map-object/map-object-ui.c:759
#: plug-ins/map-object/map-object-ui.c:859
#: plug-ins/map-object/map-object-ui.c:763
#: plug-ins/map-object/map-object-ui.c:863
#: plug-ins/print/print-page-layout.c:254
msgid "Size"
msgstr "Розмір"
#: plug-ins/map-object/map-object-ui.c:772
#: plug-ins/map-object/map-object-ui.c:776
msgid "Map Images to Box Faces"
msgstr "Спроектувати на площину паралелепіпеда"
#: plug-ins/map-object/map-object-ui.c:840
#: plug-ins/map-object/map-object-ui.c:844
msgid "Images for the Cap Faces"
msgstr "Зображення для основного циліндра"
@@ -17013,6 +17084,9 @@ msgstr "Не знайдено драйвера TWAIN. Не можна скори
msgid "Transferring data from scanner/camera"
msgstr "Отримання даних зі сканера/камери"
#~ msgid "CSource cannot be run non-interactively."
#~ msgstr "CSource не можна запускати у неінтерактивному режимі."
#, c-format
#~ msgid "File size: %s"
#~ msgstr "Розмір файлу: %s"

View File

@@ -671,8 +671,6 @@ app/xcf/xcf-write.c
app-tools/gimp-debug-tool.c
data/tags/gimp-tags-default.xml.in
menus/brush-editor-menu.ui
menus/brushes-menu.ui
menus/buffers-menu.ui

1556
po/eu.po

File diff suppressed because it is too large Load Diff

146
po/it.po
View File

@@ -45,8 +45,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gimp 2.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-23 16:13+0200\n"
"PO-Revision-Date: 2025-09-23 16:09+0200\n"
"POT-Creation-Date: 2025-10-01 12:30+0200\n"
"PO-Revision-Date: 2025-10-01 12:37+0200\n"
"Last-Translator: Marco Ciampa <ciampix@posteo.net>\n"
"Language-Team: gimp@erlug.linux.it\n"
"Language: it\n"
@@ -124,7 +124,15 @@ msgstr ""
msgid "If you wanted to quit immediately instead, call GIMP with --quit."
msgstr "Se invece si desidera uscire immediatamente, chiamare GIMP con --quit."
#: ../app/gimp-update.c:444
#: ../app/gimp-update.c:424
msgid "Perhaps you are missing GIO backends and need to install GVFS?"
msgstr "Forse mancano i backend GIO e bisogna installare GVFS?"
#: ../app/gimp-update.c:429
msgid "Perhaps you are missing GIO backends."
msgstr "Forse mancano i backend GIO."
#: ../app/gimp-update.c:466
#, c-format
msgid ""
"A new version of GIMP (%s) was released.\n"
@@ -2535,8 +2543,8 @@ msgid "Enter a description for the marker"
msgstr "Inserire una descrizione per il marcatore"
#: ../app/actions/data-commands.c:90 ../app/actions/documents-commands.c:393
#: ../app/actions/file-commands.c:234 ../app/dialogs/file-open-dialog.c:253
#: ../app/dialogs/file-open-dialog.c:295
#: ../app/actions/file-commands.c:234 ../app/dialogs/file-open-dialog.c:254
#: ../app/dialogs/file-open-dialog.c:300
#: ../app/dialogs/file-open-location-dialog.c:217
#: ../app/dialogs/file-open-location-dialog.c:233
#: ../app/display/gimpdisplayshell-dnd.c:646
@@ -3053,134 +3061,124 @@ msgctxt "dialogs-action"
msgid "Open the dashboard"
msgstr "Apri il cruscotto"
#: ../app/actions/dialogs-actions.c:311 ../app/actions/dialogs-actions.c:312
msgctxt "dialogs-action"
msgid "_Settings..."
msgstr "Impo_stazioni..."
#: ../app/actions/dialogs-actions.c:314 ../app/actions/dialogs-actions.c:315
#: ../app/actions/dialogs-actions.c:310 ../app/actions/dialogs-actions.c:311
msgctxt "dialogs-action"
msgid "_Preferences"
msgstr "_Preferenze"
#: ../app/actions/dialogs-actions.c:318
#: ../app/actions/dialogs-actions.c:313
msgctxt "dialogs-action"
msgid "Open the preferences dialog"
msgstr "Apri la finestra delle preferenze"
#: ../app/actions/dialogs-actions.c:323
#: ../app/actions/dialogs-actions.c:318
msgctxt "dialogs-action"
msgid "_Input Devices Editor"
msgstr "Editor dispositivi di _ingresso"
#: ../app/actions/dialogs-actions.c:324
#: ../app/actions/dialogs-actions.c:319
msgctxt "dialogs-action"
msgid "_Input Devices"
msgstr "Dispositivi di _ingresso"
#: ../app/actions/dialogs-actions.c:326
#: ../app/actions/dialogs-actions.c:321
msgctxt "dialogs-action"
msgid "Open the input devices editor"
msgstr "Apri la modifica dei dispositivi d'ingresso"
#: ../app/actions/dialogs-actions.c:331
#: ../app/actions/dialogs-actions.c:326
msgctxt "dialogs-action"
msgid "_Keyboard Shortcuts Editor"
msgstr "Editor _tasti scorciatoia"
#: ../app/actions/dialogs-actions.c:332
#: ../app/actions/dialogs-actions.c:327
msgctxt "dialogs-action"
msgid "_Keyboard Shortcuts"
msgstr "_Tasti scorciatoia"
#: ../app/actions/dialogs-actions.c:334
#: ../app/actions/dialogs-actions.c:329
msgctxt "dialogs-action"
msgid "Open the keyboard shortcuts editor"
msgstr "Apri la modifica dei tasti scorciatoia"
#: ../app/actions/dialogs-actions.c:339
#: ../app/actions/dialogs-actions.c:334
msgctxt "dialogs-action"
msgid "_Modules Dialog"
msgstr "Finestra _moduli"
#: ../app/actions/dialogs-actions.c:340
#: ../app/actions/dialogs-actions.c:335
msgctxt "dialogs-action"
msgid "_Modules"
msgstr "_Moduli"
#: ../app/actions/dialogs-actions.c:342
#: ../app/actions/dialogs-actions.c:337
msgctxt "dialogs-action"
msgid "Open the module manager dialog"
msgstr "Apri finestra di gestione moduli"
#: ../app/actions/dialogs-actions.c:347
#: ../app/actions/dialogs-actions.c:342
msgctxt "dialogs-action"
msgid "_Tip of the Day"
msgstr "Suggerimenti del _giorno"
#: ../app/actions/dialogs-actions.c:349
#: ../app/actions/dialogs-actions.c:344
msgctxt "dialogs-action"
msgid "Show some helpful tips on using GIMP"
msgstr "Mostra alcuni utili suggerimenti sull'uso di GIMP"
#: ../app/actions/dialogs-actions.c:354
#: ../app/actions/dialogs-actions.c:349
msgctxt "dialogs-action"
msgid "Welcome Dialog"
msgstr "Finestra di benvenuto"
#: ../app/actions/dialogs-actions.c:356
#: ../app/actions/dialogs-actions.c:351
msgctxt "dialogs-action"
msgid "Show information on running GIMP release"
msgstr "Mostra informazioni sulla versione di GIMP in esecuzione"
#: ../app/actions/dialogs-actions.c:362 ../app/actions/dialogs-actions.c:369
#: ../app/actions/dialogs-actions.c:357 ../app/actions/dialogs-actions.c:362
msgctxt "dialogs-action"
msgid "About GIMP"
msgstr "Informazioni su GIMP"
#: ../app/actions/dialogs-actions.c:364
msgctxt "dialogs-action"
msgid "About"
msgstr "Informazioni"
#: ../app/actions/dialogs-actions.c:366
#: ../app/actions/dialogs-actions.c:359
msgctxt "dialogs-action"
msgid "_About"
msgstr "_Informazioni"
#: ../app/actions/dialogs-actions.c:374
#: ../app/actions/dialogs-actions.c:367
msgctxt "dialogs-action"
msgid "_Search and Run a Command"
msgstr "Cerca ed e_segui un comando"
#: ../app/actions/dialogs-actions.c:376
#: ../app/actions/dialogs-actions.c:369
msgctxt "dialogs-action"
msgid "Search commands by keyword, and run them"
msgstr "Cerca comandi per parola-chiave e li esegue"
#: ../app/actions/dialogs-actions.c:382
#: ../app/actions/dialogs-actions.c:375
msgctxt "dialogs-action"
msgid "Manage _Extensions"
msgstr "Gestione _estensioni"
#: ../app/actions/dialogs-actions.c:384
#: ../app/actions/dialogs-actions.c:377
msgctxt "dialogs-action"
msgid "Manage Extensions: search, install, uninstall, update."
msgstr "Gestione estensioni: cerca, installa, disinstalla, aggiorna."
#: ../app/actions/dialogs-actions.c:448
#: ../app/actions/dialogs-actions.c:441
msgid "Tool_box"
msgstr "Pannello strumenti"
#: ../app/actions/dialogs-actions.c:449
#: ../app/actions/dialogs-actions.c:442
msgid "Raise the toolbox"
msgstr "Alza il pannello strumenti"
#: ../app/actions/dialogs-actions.c:453
#: ../app/actions/dialogs-actions.c:446
msgid "New Tool_box"
msgstr "Nuovo pannello strum_enti"
#: ../app/actions/dialogs-actions.c:454
#: ../app/actions/dialogs-actions.c:447
msgid "Create a new toolbox"
msgstr "Crea un nuovo pennello strumenti"
@@ -12988,7 +12986,7 @@ msgstr ""
#: ../app/core/gimp-contexts.c:153 ../app/core/gimp-internal-data.c:338
#: ../app/core/gimptooloptions.c:361 ../app/gui/modifiers.c:191
#: ../app/gui/session.c:449 ../app/menus/menus.c:480
#: ../app/gui/session.c:449 ../app/menus/menus.c:488
#: ../app/widgets/gimpdevices.c:226
#, c-format
msgid "Deleting \"%s\" failed: %s"
@@ -14960,11 +14958,11 @@ msgstr "Lunghezza massima chiusura diritta"
msgid "Maximum straight length (in pixels) to close the line art"
msgstr "Lunghezza massima retta (in pixel) per chiudere il tratteggio"
#: ../app/core/gimplink.c:255
#: ../app/core/gimplink.c:256
msgid "The file got deleted"
msgstr "Il file è stato eliminato"
#: ../app/core/gimplink.c:349
#: ../app/core/gimplink.c:351
msgid "No file was set"
msgstr "Nessun file impostato"
@@ -16146,10 +16144,15 @@ msgid "Search extensions matching these keywords"
msgstr "Cerca le estensioni che corrispondono a queste parole chiave"
#: ../app/dialogs/file-open-dialog.c:142 ../app/dialogs/file-open-dialog.c:168
#: ../app/dialogs/file-open-dialog.c:286
#: ../app/dialogs/file-open-dialog.c:291
msgid "Open layers"
msgstr "Apri livelli"
#: ../app/dialogs/file-open-dialog.c:258
#, c-format
msgid "Opening '%s' failed."
msgstr "L'apertura di '%s' è fallita."
#: ../app/dialogs/file-open-location-dialog.c:74
msgid "Open Location"
msgstr "Apri posizione"
@@ -18867,13 +18870,13 @@ msgid "GIMP website"
msgstr "Il sito di GIMP"
#: ../app/dialogs/welcome-dialog.c:545
msgid "Tutorials"
msgstr "Guide"
#: ../app/dialogs/welcome-dialog.c:550
msgid "Documentation"
msgstr "Documentazione"
#: ../app/dialogs/welcome-dialog.c:550
msgid "Community Tutorials"
msgstr "Guide della comunità"
#. XXX: should we add API docs for plug-in developers once it's
#. * properly set up?
#. Welcome message: right
@@ -19920,26 +19923,26 @@ msgstr "Clic e trascina per spostare il punto cardine"
msgid "Click-Drag to shear"
msgstr "Clic e trascina per inclinare"
#: ../app/file/file-open.c:264
#: ../app/file/file-open.c:272
#, c-format
msgid "%s plug-in returned SUCCESS but did not return an image"
msgstr "Il plug-in %s ha risposto successo ma non ha restituito un'immagine"
#: ../app/file/file-open.c:275
#: ../app/file/file-open.c:283
#, c-format
msgid "%s plug-in could not open image"
msgstr "Il plug-in %s non poteva aprire l'immagine"
#: ../app/file/file-open.c:690
#: ../app/file/file-open.c:698
msgid "Image doesn't contain any layers"
msgstr "L'immagine non contiene nessun livello"
#: ../app/file/file-open.c:748
#: ../app/file/file-open.c:756
#, c-format
msgid "Opening '%s' failed: %s"
msgstr "L'apertura di \"%s\" è fallita: %s"
#: ../app/file/file-open.c:836
#: ../app/file/file-open.c:846
#, c-format
msgid ""
"Only platform-native file paths are supported: '%s' cannot be opened as link."
@@ -19947,11 +19950,11 @@ msgstr ""
"Sono supportati solo i percorsi file nativi della piattaforma: '%s' non può "
"essere aperto come collegamento."
#: ../app/file/file-open.c:978 ../app/file/file-save.c:132
#: ../app/file/file-open.c:985 ../app/file/file-save.c:132
msgid "Not a regular file"
msgstr "Non è un file normale"
#: ../app/file/file-open.c:987 ../app/file/file-save.c:141
#: ../app/file/file-open.c:994 ../app/file/file-save.c:141
msgid "Permission denied"
msgstr "Permesso negato"
@@ -21716,11 +21719,7 @@ msgstr "Ruota livello vettoriale"
msgid "Transform Vector Layer"
msgstr "Trasforma livello vettoriale"
#: ../app/path/gimpvectorlayer.c:526
msgid "Discard Vector Informations"
msgstr "Abbandona le informazioni vettoriali"
#: ../app/path/gimpvectorlayer.c:669
#: ../app/path/gimpvectorlayer.c:526 ../app/path/gimpvectorlayer.c:669
msgid "Discard Vector Information"
msgstr "Abbandona le informazioni vettoriali"
@@ -22277,7 +22276,7 @@ msgstr "Autoritaglio immagine"
msgid "Autocrop layer"
msgstr "Autoritaglio livello"
#: ../app/pdb/image-cmds.c:2556
#: ../app/pdb/image-cmds.c:2564
msgid ""
"Image resolution is out of bounds, using the default resolution instead."
msgstr ""
@@ -22306,43 +22305,48 @@ msgstr "Trasformazione 2D"
msgid "2D Transforming"
msgstr "Trasformazione 2D in corso"
#: ../app/pdb/link-layer-cmds.c:67 ../app/pdb/link-layer-cmds.c:89
#, c-format
msgid "Failed to create link layer"
msgstr "Impossibile creare livello collegato"
#: ../app/pdb/path-cmds.c:325
msgid "Remove path stroke"
msgstr "Rimuovi delineatura del tracciato"
#: ../app/pdb/path-cmds.c:362
msgid "Close path stroke"
msgstr "Chiudi la delineatura del tracciato"
msgstr "Chiudi delineatura tracciato"
#: ../app/pdb/path-cmds.c:401
msgid "Reverse path stroke"
msgstr "Inverti delineatura del tracciato"
msgstr "Inverti delineatura tracciato"
#: ../app/pdb/path-cmds.c:446
msgid "Translate path stroke"
msgstr "Trasla la delineatura del tracciato"
msgstr "Trasla delineatura tracciato"
#: ../app/pdb/path-cmds.c:491
msgid "Scale path stroke"
msgstr "Scala la delineatura del tracciato"
msgstr "Scala delineatura tracciato"
#: ../app/pdb/path-cmds.c:538
msgid "Rotate path stroke"
msgstr "Ruota la delineatura del tracciato"
msgstr "Ruota delineatura tracciato"
#: ../app/pdb/path-cmds.c:583 ../app/pdb/path-cmds.c:632
msgid "Flip path stroke"
msgstr "Rifletti la delineatura del tracciato"
msgstr "Rifletti delineatura tracciato"
#: ../app/pdb/path-cmds.c:761 ../app/pdb/path-cmds.c:884
#: ../app/pdb/path-cmds.c:1114
msgid "Add path stroke"
msgstr "Aggiungi la delineatura del tracciato"
msgstr "Aggiungi delineatura tracciato"
#: ../app/pdb/path-cmds.c:938 ../app/pdb/path-cmds.c:994
#: ../app/pdb/path-cmds.c:1058
msgid "Extend path stroke"
msgstr "Estendi la delineatura del tracciato"
msgstr "Estendi delineatura tracciato"
#: ../app/pdb/pdb-cmds.c:1185 ../app/pdb/pdb-cmds.c:1227
#, c-format
@@ -24333,7 +24337,7 @@ msgstr "Selezione sconosciuta"
#: ../app/tools/gimpforegroundselecttool.c:667
msgid "press Enter to preview."
msgstr "premere invio l'anteprima."
msgstr "premere invio per l'anteprima."
#: ../app/tools/gimpforegroundselecttool.c:669
msgid "press Escape to exit preview or Enter to apply."
@@ -27751,7 +27755,7 @@ msgstr "Informazioni varie"
msgid "Select fields"
msgstr "Seleziona campi"
#. Tranlators: "N/A" is an abbreviation for "not available"
#. Translators: "N/A" is an abbreviation for "not available"
#: ../app/widgets/gimpdashboard.c:3323
msgctxt "dashboard-value"
msgid "N/A"

144
po/ka.po
View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gimp\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gimp/issues\n"
"POT-Creation-Date: 2025-09-24 03:08+0000\n"
"PO-Revision-Date: 2025-09-24 07:08+0200\n"
"POT-Creation-Date: 2025-09-29 13:22+0000\n"
"PO-Revision-Date: 2025-09-29 16:50+0200\n"
"Last-Translator: Ekaterine Papava <papava.e@gtu.ge>\n"
"Language-Team: Georgian <(nothing)>\n"
"Language: ka\n"
@@ -160,7 +160,15 @@ msgstr ""
msgid "If you wanted to quit immediately instead, call GIMP with --quit."
msgstr "თუ გნებავთ გასვლა დაუყოვნებლივ, გამოიძახეთ GIMP პარამეტრით --quit."
#: app/gimp-update.c:444
#: app/gimp-update.c:421
msgid "Perhaps you are missing GIO backends and need to install GVFS?"
msgstr "ალბათ არ გაქვთ GIO-ის უკანაბოლოები და გჭირდებათ, დააყენოთ GVFS?"
#: app/gimp-update.c:426
msgid "Perhaps you are missing GIO backends."
msgstr "ალბათ არ გაქვთ GIO-ის უკანაბოლოები."
#: app/gimp-update.c:458
#, c-format
msgid ""
"A new version of GIMP (%s) was released.\n"
@@ -2533,8 +2541,8 @@ msgid "Enter a description for the marker"
msgstr "შეიყვანეთ სანიშნის აღწერა"
#: app/actions/data-commands.c:90 app/actions/documents-commands.c:393
#: app/actions/file-commands.c:234 app/dialogs/file-open-dialog.c:253
#: app/dialogs/file-open-dialog.c:295
#: app/actions/file-commands.c:234 app/dialogs/file-open-dialog.c:254
#: app/dialogs/file-open-dialog.c:300
#: app/dialogs/file-open-location-dialog.c:217
#: app/dialogs/file-open-location-dialog.c:233
#: app/display/gimpdisplayshell-dnd.c:646 app/widgets/gimplayertreeview.c:796
@@ -3047,134 +3055,124 @@ msgctxt "dialogs-action"
msgid "Open the dashboard"
msgstr "სამუშაო მაგიდის ფანჯრის გახსნა"
#: app/actions/dialogs-actions.c:311 app/actions/dialogs-actions.c:312
msgctxt "dialogs-action"
msgid "_Settings..."
msgstr "_მორგება..."
#: app/actions/dialogs-actions.c:314 app/actions/dialogs-actions.c:315
#: app/actions/dialogs-actions.c:310 app/actions/dialogs-actions.c:311
msgctxt "dialogs-action"
msgid "_Preferences"
msgstr "გამართვა"
#: app/actions/dialogs-actions.c:318
#: app/actions/dialogs-actions.c:313
msgctxt "dialogs-action"
msgid "Open the preferences dialog"
msgstr "გამართვის ფანჯრის გახსნა"
#: app/actions/dialogs-actions.c:323
#: app/actions/dialogs-actions.c:318
msgctxt "dialogs-action"
msgid "_Input Devices Editor"
msgstr "შემომტანი მოწობილობები_ს რედაქტორი"
#: app/actions/dialogs-actions.c:324
#: app/actions/dialogs-actions.c:319
msgctxt "dialogs-action"
msgid "_Input Devices"
msgstr "შემომტანი მოწყობილობები"
#: app/actions/dialogs-actions.c:326
#: app/actions/dialogs-actions.c:321
msgctxt "dialogs-action"
msgid "Open the input devices editor"
msgstr "შემომტანი მოწყობილობების ფანჯრის გახსნა"
#: app/actions/dialogs-actions.c:331
#: app/actions/dialogs-actions.c:326
msgctxt "dialogs-action"
msgid "_Keyboard Shortcuts Editor"
msgstr "კლავიატურის მალსახმობების _რედაქტორი"
#: app/actions/dialogs-actions.c:332
#: app/actions/dialogs-actions.c:327
msgctxt "dialogs-action"
msgid "_Keyboard Shortcuts"
msgstr "კლავიატურის მალსახმობები"
#: app/actions/dialogs-actions.c:334
#: app/actions/dialogs-actions.c:329
msgctxt "dialogs-action"
msgid "Open the keyboard shortcuts editor"
msgstr "კლავიატურის მალსახმობების ფანჯრის გახსნა"
#: app/actions/dialogs-actions.c:339
#: app/actions/dialogs-actions.c:334
msgctxt "dialogs-action"
msgid "_Modules Dialog"
msgstr "_მოდულების ფანჯარა"
#: app/actions/dialogs-actions.c:340
#: app/actions/dialogs-actions.c:335
msgctxt "dialogs-action"
msgid "_Modules"
msgstr "_მოდულები"
#: app/actions/dialogs-actions.c:342
#: app/actions/dialogs-actions.c:337
msgctxt "dialogs-action"
msgid "Open the module manager dialog"
msgstr "მოდულების ფანჯრის გახსნა"
#: app/actions/dialogs-actions.c:347
#: app/actions/dialogs-actions.c:342
msgctxt "dialogs-action"
msgid "_Tip of the Day"
msgstr "დღის მინიშნება"
#: app/actions/dialogs-actions.c:349
#: app/actions/dialogs-actions.c:344
msgctxt "dialogs-action"
msgid "Show some helpful tips on using GIMP"
msgstr "რამდენიმე გამოსადეგი რჩევა GIMP-ის მოხმარების შესახებ"
#: app/actions/dialogs-actions.c:354
#: app/actions/dialogs-actions.c:349
msgctxt "dialogs-action"
msgid "Welcome Dialog"
msgstr "პირველი ფანჯარა"
#: app/actions/dialogs-actions.c:356
#: app/actions/dialogs-actions.c:351
msgctxt "dialogs-action"
msgid "Show information on running GIMP release"
msgstr "GIMP-ის გაშვებული რელიზის შესახებ ინფორმაციის ჩვენება"
#: app/actions/dialogs-actions.c:362 app/actions/dialogs-actions.c:369
#: app/actions/dialogs-actions.c:357 app/actions/dialogs-actions.c:362
msgctxt "dialogs-action"
msgid "About GIMP"
msgstr "GIMP-ის შესახებ"
#: app/actions/dialogs-actions.c:364
msgctxt "dialogs-action"
msgid "About"
msgstr "შესახებ"
#: app/actions/dialogs-actions.c:366
#: app/actions/dialogs-actions.c:359
msgctxt "dialogs-action"
msgid "_About"
msgstr "_შესახებ"
#: app/actions/dialogs-actions.c:374
#: app/actions/dialogs-actions.c:367
msgctxt "dialogs-action"
msgid "_Search and Run a Command"
msgstr "მოძებნა და ბრძანების _გაშვება"
#: app/actions/dialogs-actions.c:376
#: app/actions/dialogs-actions.c:369
msgctxt "dialogs-action"
msgid "Search commands by keyword, and run them"
msgstr "ბრძანებების პირობით ძებნა და მათი გაშვება"
#: app/actions/dialogs-actions.c:382
#: app/actions/dialogs-actions.c:375
msgctxt "dialogs-action"
msgid "Manage _Extensions"
msgstr "გაფართოებების მართვა"
#: app/actions/dialogs-actions.c:384
#: app/actions/dialogs-actions.c:377
msgctxt "dialogs-action"
msgid "Manage Extensions: search, install, uninstall, update."
msgstr "გაფართოებების მართვა: მოძებნეთ, დააყენეთ, წაშალეთ, განაახლეთ."
#: app/actions/dialogs-actions.c:448
#: app/actions/dialogs-actions.c:441
msgid "Tool_box"
msgstr "ხელს_აწოები"
#: app/actions/dialogs-actions.c:449
#: app/actions/dialogs-actions.c:442
msgid "Raise the toolbox"
msgstr "ხელსაწყოების აწევა"
#: app/actions/dialogs-actions.c:453
#: app/actions/dialogs-actions.c:446
msgid "New Tool_box"
msgstr "ხელსაწყოების ა_ხალი პანელი"
#: app/actions/dialogs-actions.c:454
#: app/actions/dialogs-actions.c:447
msgid "Create a new toolbox"
msgstr "ხელსაწყოების ახალი პანელის შექმნა"
@@ -12706,7 +12704,7 @@ msgstr ""
#: app/core/gimp-contexts.c:153 app/core/gimp-internal-data.c:338
#: app/core/gimptooloptions.c:361 app/gui/modifiers.c:191 app/gui/session.c:449
#: app/menus/menus.c:480 app/widgets/gimpdevices.c:226
#: app/menus/menus.c:488 app/widgets/gimpdevices.c:226
#, c-format
msgid "Deleting \"%s\" failed: %s"
msgstr "\"%s\"-ის წაშლა ჩაიშალა: %s"
@@ -14617,11 +14615,11 @@ msgstr ""
msgid "Maximum straight length (in pixels) to close the line art"
msgstr ""
#: app/core/gimplink.c:255
#: app/core/gimplink.c:256
msgid "The file got deleted"
msgstr "ფაილი წაიშალა"
#: app/core/gimplink.c:349
#: app/core/gimplink.c:351
msgid "No file was set"
msgstr "ფაილი დაყენებული არ იყო"
@@ -15397,7 +15395,7 @@ msgstr "ბოლოს შემოწმების თარიღი %s %s"
#: app/dialogs/about-dialog.c:609
#, c-format
msgid "Up to date as of %s at %s"
msgstr ""
msgstr "განახლებულია %s %s თარიღი/დროისთვის"
#: app/dialogs/about-dialog.c:837
msgid "GIMP is brought to you by"
@@ -15788,10 +15786,15 @@ msgid "Search extensions matching these keywords"
msgstr "გაფართოებების საკვანძო სიტყვებით ძებნა"
#: app/dialogs/file-open-dialog.c:142 app/dialogs/file-open-dialog.c:168
#: app/dialogs/file-open-dialog.c:286
#: app/dialogs/file-open-dialog.c:291
msgid "Open layers"
msgstr "ფენების გახსნა"
#: app/dialogs/file-open-dialog.c:258
#, c-format
msgid "Opening '%s' failed."
msgstr "'%s'-ის გახსნის შეცდომა."
#: app/dialogs/file-open-location-dialog.c:74
msgid "Open Location"
msgstr "მდებარეობის გახსნა"
@@ -16067,7 +16070,7 @@ msgstr "ნიღბის ინვერსია"
#: app/dialogs/layer-add-mask-dialog.c:200
msgid "_Edit mask immediately"
msgstr ""
msgstr "ნიღბის დაუოვნ_ებლივი ჩასწორება"
#: app/dialogs/layer-add-mask-dialog.c:235
msgid "Please select a channel first"
@@ -16188,6 +16191,8 @@ msgstr "დონე: %s, სიცოცხლეები: %s"
#: app/dialogs/lebl-dialog.c:150
msgid "Left/Right to move, Space to fire, 'p' to pause, 'q' to quit"
msgstr ""
"მარცხნივ/მარჯვნივ გადასაადგილებლად, ჰარე სასროლად, 'p' დასაპაუზებლად, 'q' "
"გასასვლელად"
#: app/dialogs/lebl-dialog.c:816
msgid "Killer GEGLs from Outer Space"
@@ -16359,35 +16364,35 @@ msgstr "ყველა პალიტრის ფაილი (*.*)"
#: app/dialogs/palette-import-dialog.c:910
msgid "GIMP Palette (*.gpl)"
msgstr ""
msgstr "GIMP-ის პალიტრა (*.gpl)"
#: app/dialogs/palette-import-dialog.c:916
msgid "Adobe Color Table (*.act)"
msgstr ""
msgstr "Adobe-ის ფერების ცხრილი (*.act)"
#: app/dialogs/palette-import-dialog.c:922
msgid "Adobe Color Swatch (*.aco)"
msgstr ""
msgstr "Adobe Color Swatch (*.aco)"
#: app/dialogs/palette-import-dialog.c:928
msgid "Adobe Color Book (*.acb)"
msgstr ""
msgstr "Adobe Color Book (*.acb)"
#: app/dialogs/palette-import-dialog.c:934
msgid "Adobe Swatch Exchange (*.ase)"
msgstr ""
msgstr "Adobe Swatch Exchange (*.ase)"
#: app/dialogs/palette-import-dialog.c:940
msgid "Cascading Style Sheet (*.css)"
msgstr ""
msgstr "Cascading Style Sheet (*.css)"
#: app/dialogs/palette-import-dialog.c:946
msgid "JASC or RIFF Palette (*.pal)"
msgstr ""
msgstr "JASC or RIFF Palette (*.pal)"
#: app/dialogs/palette-import-dialog.c:952
msgid "SwatchBooker (*.sbz)"
msgstr ""
msgstr "SwatchBooker (*.sbz)"
#: app/dialogs/preferences-dialog.c:215
msgid "Reset All Preferences"
@@ -18436,13 +18441,13 @@ msgid "GIMP website"
msgstr "GIMP-ის ვებგვერდი"
#: app/dialogs/welcome-dialog.c:545
msgid "Tutorials"
msgstr "სახელმძღვანელოები"
#: app/dialogs/welcome-dialog.c:550
msgid "Documentation"
msgstr "დოკუმენტაცია"
#: app/dialogs/welcome-dialog.c:550
msgid "Community Tutorials"
msgstr "მომხმარებლების ნაწერი სახელმძღვანელოები"
#. XXX: should we add API docs for plug-in developers once it's
#. * properly set up?
#. Welcome message: right
@@ -20734,7 +20739,7 @@ msgstr "გაძლიერება"
#: app/paint/gimpmybrushoptions.c:129
msgid "Adjust strength of input pressure"
msgstr ""
msgstr "შეყვანის წნევის სიძლიერის გასწორება"
#: app/paint/gimpmybrushoptions.c:153
msgid "Erase with this brush"
@@ -20913,7 +20918,7 @@ msgstr "გამეორება"
#: app/paint/gimppaintoptions.c:381
msgid "How fade is repeated as you paint"
msgstr ""
msgstr "როგორ მეორდება მინავლება ხატვისას"
#: app/paint/gimppaintoptions.c:393 app/tools/gimpgradientoptions.c:282
#: app/tools/gimppaintoptions-gui.c:398
@@ -21187,11 +21192,7 @@ msgstr "ვექტორული ფენის შებრუნება"
msgid "Transform Vector Layer"
msgstr "ვექტორული ფენის ტრანსფორმირება"
#: app/path/gimpvectorlayer.c:526
msgid "Discard Vector Informations"
msgstr "ვექტორის ინფორმაციების მოცილება"
#: app/path/gimpvectorlayer.c:669
#: app/path/gimpvectorlayer.c:526 app/path/gimpvectorlayer.c:669
msgid "Discard Vector Information"
msgstr "ვექტორის ინფორმაციის მოცილება"
@@ -26963,7 +26964,7 @@ msgstr "სხვა ინფორმაცია"
msgid "Select fields"
msgstr "აირჩიეთ ველები"
#. Tranlators: "N/A" is an abbreviation for "not available"
#. Translators: "N/A" is an abbreviation for "not available"
#: app/widgets/gimpdashboard.c:3323
msgctxt "dashboard-value"
msgid "N/A"
@@ -29300,6 +29301,17 @@ msgctxt "edit-action"
msgid "Undo History Menu"
msgstr "დაბრუნების ისტორია"
#~ msgctxt "dialogs-action"
#~ msgid "_Settings..."
#~ msgstr "_მორგება..."
#~ msgctxt "dialogs-action"
#~ msgid "About"
#~ msgstr "შესახებ"
#~ msgid "Discard Vector Informations"
#~ msgstr "ვექტორის ინფორმაციების მოცილება"
#~ msgctxt "vector-mode"
#~ msgid "Edit"
#~ msgstr "ჩასწორება"

764
po/nn.po

File diff suppressed because it is too large Load Diff

1127
po/ru.po

File diff suppressed because it is too large Load Diff

109
po/sl.po
View File

@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GIMP master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gimp/issues\n"
"POT-Creation-Date: 2025-09-24 05:10+0000\n"
"PO-Revision-Date: 2025-09-24 13:26+0200\n"
"POT-Creation-Date: 2025-09-29 12:38+0000\n"
"PO-Revision-Date: 2025-09-29 15:20+0200\n"
"Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n"
"Language-Team: Martin Srebotnjak <miles@filmsi.net>\n"
"Language: sl\n"
@@ -178,7 +178,15 @@ msgstr ""
msgid "If you wanted to quit immediately instead, call GIMP with --quit."
msgstr "Če želite namesto tega takoj prenehati, pokličite GIMP s --quit."
#: app/gimp-update.c:444
#: app/gimp-update.c:421
msgid "Perhaps you are missing GIO backends and need to install GVFS?"
msgstr "Morda vam manjka ogrodje GIO in morate namestiti GVFS?"
#: app/gimp-update.c:426
msgid "Perhaps you are missing GIO backends."
msgstr "Morda vam manjka ogrodje GIO."
#: app/gimp-update.c:458
#, c-format
msgid ""
"A new version of GIMP (%s) was released.\n"
@@ -2570,8 +2578,8 @@ msgid "Enter a description for the marker"
msgstr "Vnesite opis oznake"
#: app/actions/data-commands.c:90 app/actions/documents-commands.c:393
#: app/actions/file-commands.c:234 app/dialogs/file-open-dialog.c:253
#: app/dialogs/file-open-dialog.c:295
#: app/actions/file-commands.c:234 app/dialogs/file-open-dialog.c:254
#: app/dialogs/file-open-dialog.c:300
#: app/dialogs/file-open-location-dialog.c:217
#: app/dialogs/file-open-location-dialog.c:233
#: app/display/gimpdisplayshell-dnd.c:646 app/widgets/gimplayertreeview.c:796
@@ -3086,134 +3094,124 @@ msgctxt "dialogs-action"
msgid "Open the dashboard"
msgstr "Odpri nadzorno ploščo"
#: app/actions/dialogs-actions.c:311 app/actions/dialogs-actions.c:312
msgctxt "dialogs-action"
msgid "_Settings..."
msgstr "_Nastavitve …"
#: app/actions/dialogs-actions.c:314 app/actions/dialogs-actions.c:315
#: app/actions/dialogs-actions.c:310 app/actions/dialogs-actions.c:311
msgctxt "dialogs-action"
msgid "_Preferences"
msgstr "_Nastavitve"
#: app/actions/dialogs-actions.c:318
#: app/actions/dialogs-actions.c:313
msgctxt "dialogs-action"
msgid "Open the preferences dialog"
msgstr "Odpre pogovorno okno nastavitev"
#: app/actions/dialogs-actions.c:323
#: app/actions/dialogs-actions.c:318
msgctxt "dialogs-action"
msgid "_Input Devices Editor"
msgstr "V_hodne naprave (okno)"
#: app/actions/dialogs-actions.c:324
#: app/actions/dialogs-actions.c:319
msgctxt "dialogs-action"
msgid "_Input Devices"
msgstr "V_hodne naprave"
#: app/actions/dialogs-actions.c:326
#: app/actions/dialogs-actions.c:321
msgctxt "dialogs-action"
msgid "Open the input devices editor"
msgstr "Odpre urejevalnik vhodnih naprav"
#: app/actions/dialogs-actions.c:331
#: app/actions/dialogs-actions.c:326
msgctxt "dialogs-action"
msgid "_Keyboard Shortcuts Editor"
msgstr "_Tipke za bližnjico (okno)"
#: app/actions/dialogs-actions.c:332
#: app/actions/dialogs-actions.c:327
msgctxt "dialogs-action"
msgid "_Keyboard Shortcuts"
msgstr "_Tipke za bližnjico"
#: app/actions/dialogs-actions.c:334
#: app/actions/dialogs-actions.c:329
msgctxt "dialogs-action"
msgid "Open the keyboard shortcuts editor"
msgstr "Odpre urejevalnik tipk za bližnjice"
#: app/actions/dialogs-actions.c:339
#: app/actions/dialogs-actions.c:334
msgctxt "dialogs-action"
msgid "_Modules Dialog"
msgstr "_Gradniki (okno)"
#: app/actions/dialogs-actions.c:340
#: app/actions/dialogs-actions.c:335
msgctxt "dialogs-action"
msgid "_Modules"
msgstr "_Gradniki"
#: app/actions/dialogs-actions.c:342
#: app/actions/dialogs-actions.c:337
msgctxt "dialogs-action"
msgid "Open the module manager dialog"
msgstr "Odpri pogovorno okno upravitelja gradnikov"
#: app/actions/dialogs-actions.c:347
#: app/actions/dialogs-actions.c:342
msgctxt "dialogs-action"
msgid "_Tip of the Day"
msgstr "_Nasvet dneva"
#: app/actions/dialogs-actions.c:349
#: app/actions/dialogs-actions.c:344
msgctxt "dialogs-action"
msgid "Show some helpful tips on using GIMP"
msgstr "Pokaže priročne namige pri delu s programom GIMP"
#: app/actions/dialogs-actions.c:354
#: app/actions/dialogs-actions.c:349
msgctxt "dialogs-action"
msgid "Welcome Dialog"
msgstr "Pogovorno okno dobrodošlice"
#: app/actions/dialogs-actions.c:356
#: app/actions/dialogs-actions.c:351
msgctxt "dialogs-action"
msgid "Show information on running GIMP release"
msgstr "Pokaži informacije o zagonu izdaje GIMP"
#: app/actions/dialogs-actions.c:362 app/actions/dialogs-actions.c:369
#: app/actions/dialogs-actions.c:357 app/actions/dialogs-actions.c:362
msgctxt "dialogs-action"
msgid "About GIMP"
msgstr "O programu GIMP"
#: app/actions/dialogs-actions.c:364
msgctxt "dialogs-action"
msgid "About"
msgstr "O programu"
#: app/actions/dialogs-actions.c:366
#: app/actions/dialogs-actions.c:359
msgctxt "dialogs-action"
msgid "_About"
msgstr "_O programu"
#: app/actions/dialogs-actions.c:374
#: app/actions/dialogs-actions.c:367
msgctxt "dialogs-action"
msgid "_Search and Run a Command"
msgstr "_Najdi in zaženi ukaz"
#: app/actions/dialogs-actions.c:376
#: app/actions/dialogs-actions.c:369
msgctxt "dialogs-action"
msgid "Search commands by keyword, and run them"
msgstr "Poiščite ukaze po ključnih besedah in jih zaženite"
#: app/actions/dialogs-actions.c:382
#: app/actions/dialogs-actions.c:375
msgctxt "dialogs-action"
msgid "Manage _Extensions"
msgstr "Upravljaj _razširitve"
#: app/actions/dialogs-actions.c:384
#: app/actions/dialogs-actions.c:377
msgctxt "dialogs-action"
msgid "Manage Extensions: search, install, uninstall, update."
msgstr "Upravljanje razširitev: iskanje, namestitev, odstranitev, posodobitev."
#: app/actions/dialogs-actions.c:448
#: app/actions/dialogs-actions.c:441
msgid "Tool_box"
msgstr "O_rodjarna"
#: app/actions/dialogs-actions.c:449
#: app/actions/dialogs-actions.c:442
msgid "Raise the toolbox"
msgstr "Privzdigni orodjarno"
#: app/actions/dialogs-actions.c:453
#: app/actions/dialogs-actions.c:446
msgid "New Tool_box"
msgstr "Nova o_rodjarna"
#: app/actions/dialogs-actions.c:454
#: app/actions/dialogs-actions.c:447
msgid "Create a new toolbox"
msgstr "Ustvari novo orodjarno"
@@ -7664,7 +7662,7 @@ msgstr "Slikajte vzdolž poti z zadnjimi vrednostmi"
#: app/actions/paths-actions.c:135
msgctxt "paths-action"
msgid "Co_py Paths"
msgstr "Ko_piraj poti"
msgstr "Ko_piraj poti"
#: app/actions/paths-actions.c:140
msgctxt "paths-action"
@@ -12908,7 +12906,7 @@ msgstr ""
#: app/core/gimp-contexts.c:153 app/core/gimp-internal-data.c:338
#: app/core/gimptooloptions.c:361 app/gui/modifiers.c:191 app/gui/session.c:449
#: app/menus/menus.c:480 app/widgets/gimpdevices.c:226
#: app/menus/menus.c:488 app/widgets/gimpdevices.c:226
#, c-format
msgid "Deleting \"%s\" failed: %s"
msgstr "Brisanje »%s« ni uspelo: %s"
@@ -14866,11 +14864,11 @@ msgstr "Največja dolžina ravnega sklenjanja"
msgid "Maximum straight length (in pixels) to close the line art"
msgstr "Največja ravna dolžina (v slikovnih točkah) za zapiranje črt"
#: app/core/gimplink.c:255
#: app/core/gimplink.c:256
msgid "The file got deleted"
msgstr "Datoteka je izbrisana"
#: app/core/gimplink.c:349
#: app/core/gimplink.c:351
msgid "No file was set"
msgstr "Nobena datoteka ni nastavljena"
@@ -16043,10 +16041,15 @@ msgid "Search extensions matching these keywords"
msgstr "Išči razširitve, ki se ujemajo s temi ključnimi besedami"
#: app/dialogs/file-open-dialog.c:142 app/dialogs/file-open-dialog.c:168
#: app/dialogs/file-open-dialog.c:286
#: app/dialogs/file-open-dialog.c:291
msgid "Open layers"
msgstr "Odpri plasti"
#: app/dialogs/file-open-dialog.c:258
#, c-format
msgid "Opening '%s' failed."
msgstr "Odpiranje »%s« ni uspelo."
#: app/dialogs/file-open-location-dialog.c:74
msgid "Open Location"
msgstr "Odpri naslov"
@@ -18735,13 +18738,13 @@ msgid "GIMP website"
msgstr "Spletišče GIMP"
#: app/dialogs/welcome-dialog.c:545
msgid "Tutorials"
msgstr "Priročniki"
#: app/dialogs/welcome-dialog.c:550
msgid "Documentation"
msgstr "Dokumentacija"
#: app/dialogs/welcome-dialog.c:550
msgid "Community Tutorials"
msgstr "Vadnice iz skupnosti"
#. XXX: should we add API docs for plug-in developers once it's
#. * properly set up?
#. Welcome message: right
@@ -21534,11 +21537,7 @@ msgstr "Zasukaj vektorsko plast"
msgid "Transform Vector Layer"
msgstr "Preoblikuj vektorsko plast"
#: app/path/gimpvectorlayer.c:526
msgid "Discard Vector Informations"
msgstr "Zavrzi podatke o vektorju"
#: app/path/gimpvectorlayer.c:669
#: app/path/gimpvectorlayer.c:526 app/path/gimpvectorlayer.c:669
msgid "Discard Vector Information"
msgstr "Zavrzi podatke o vektorju"
@@ -27443,7 +27442,7 @@ msgstr "Drugi podatki"
msgid "Select fields"
msgstr "Izberite polja"
#. Tranlators: "N/A" is an abbreviation for "not available"
#. Translators: "N/A" is an abbreviation for "not available"
#: app/widgets/gimpdashboard.c:3323
msgctxt "dashboard-value"
msgid "N/A"

18194
po/th.po

File diff suppressed because it is too large Load Diff

131
po/uk.po
View File

@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gimp\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gimp/issues\n"
"POT-Creation-Date: 2025-09-24 14:14+0000\n"
"PO-Revision-Date: 2025-09-24 18:56+0300\n"
"POT-Creation-Date: 2025-09-29 19:28+0000\n"
"PO-Revision-Date: 2025-09-29 22:51+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
@@ -182,7 +182,15 @@ msgstr ""
"Якщо ви хочете негайно завершити роботу програми, запустіть GIMP з "
"параметром --quit."
#: app/gimp-update.c:444
#: app/gimp-update.c:424
msgid "Perhaps you are missing GIO backends and need to install GVFS?"
msgstr "Можливо, не вистачає механізму GIO, і треба встановити GVFS?"
#: app/gimp-update.c:429
msgid "Perhaps you are missing GIO backends."
msgstr "Можливо, у вас не вистачає модулів обробки GIO."
#: app/gimp-update.c:466
#, c-format
msgid ""
"A new version of GIMP (%s) was released.\n"
@@ -2574,8 +2582,8 @@ msgid "Enter a description for the marker"
msgstr "Введіть опис позначки"
#: app/actions/data-commands.c:90 app/actions/documents-commands.c:393
#: app/actions/file-commands.c:234 app/dialogs/file-open-dialog.c:253
#: app/dialogs/file-open-dialog.c:295
#: app/actions/file-commands.c:234 app/dialogs/file-open-dialog.c:254
#: app/dialogs/file-open-dialog.c:300
#: app/dialogs/file-open-location-dialog.c:217
#: app/dialogs/file-open-location-dialog.c:233
#: app/display/gimpdisplayshell-dnd.c:646 app/widgets/gimplayertreeview.c:796
@@ -3090,134 +3098,124 @@ msgctxt "dialogs-action"
msgid "Open the dashboard"
msgstr "Відкрити панель приладів"
#: app/actions/dialogs-actions.c:311 app/actions/dialogs-actions.c:312
msgctxt "dialogs-action"
msgid "_Settings..."
msgstr "_Параметри..."
#: app/actions/dialogs-actions.c:314 app/actions/dialogs-actions.c:315
#: app/actions/dialogs-actions.c:310 app/actions/dialogs-actions.c:311
msgctxt "dialogs-action"
msgid "_Preferences"
msgstr "_Параметри"
#: app/actions/dialogs-actions.c:318
#: app/actions/dialogs-actions.c:313
msgctxt "dialogs-action"
msgid "Open the preferences dialog"
msgstr "Відкрити діалог параметрів програми"
#: app/actions/dialogs-actions.c:323
#: app/actions/dialogs-actions.c:318
msgctxt "dialogs-action"
msgid "_Input Devices Editor"
msgstr "Редактор пристроїв _введення"
#: app/actions/dialogs-actions.c:324
#: app/actions/dialogs-actions.c:319
msgctxt "dialogs-action"
msgid "_Input Devices"
msgstr "Пристрої _вводу"
#: app/actions/dialogs-actions.c:326
#: app/actions/dialogs-actions.c:321
msgctxt "dialogs-action"
msgid "Open the input devices editor"
msgstr "Відкрити редактор пристроїв вводу"
#: app/actions/dialogs-actions.c:331
#: app/actions/dialogs-actions.c:326
msgctxt "dialogs-action"
msgid "_Keyboard Shortcuts Editor"
msgstr "Редактор _комбінацій клавіш"
#: app/actions/dialogs-actions.c:332
#: app/actions/dialogs-actions.c:327
msgctxt "dialogs-action"
msgid "_Keyboard Shortcuts"
msgstr "_Комбінації клавіш"
#: app/actions/dialogs-actions.c:334
#: app/actions/dialogs-actions.c:329
msgctxt "dialogs-action"
msgid "Open the keyboard shortcuts editor"
msgstr "Відкрити діалог налаштування комбінацій клавіш"
#: app/actions/dialogs-actions.c:339
#: app/actions/dialogs-actions.c:334
msgctxt "dialogs-action"
msgid "_Modules Dialog"
msgstr "Вікно _модулів"
#: app/actions/dialogs-actions.c:340
#: app/actions/dialogs-actions.c:335
msgctxt "dialogs-action"
msgid "_Modules"
msgstr "_Модулі"
#: app/actions/dialogs-actions.c:342
#: app/actions/dialogs-actions.c:337
msgctxt "dialogs-action"
msgid "Open the module manager dialog"
msgstr "Відкрити діалог керування модулями"
#: app/actions/dialogs-actions.c:347
#: app/actions/dialogs-actions.c:342
msgctxt "dialogs-action"
msgid "_Tip of the Day"
msgstr "По_рада дня"
#: app/actions/dialogs-actions.c:349
#: app/actions/dialogs-actions.c:344
msgctxt "dialogs-action"
msgid "Show some helpful tips on using GIMP"
msgstr "Показати збірку корисних порід з використання GIMP"
#: app/actions/dialogs-actions.c:354
#: app/actions/dialogs-actions.c:349
msgctxt "dialogs-action"
msgid "Welcome Dialog"
msgstr "Вікно вітання"
#: app/actions/dialogs-actions.c:356
#: app/actions/dialogs-actions.c:351
msgctxt "dialogs-action"
msgid "Show information on running GIMP release"
msgstr "Показати відомості щодо запущеного випуску GIMP"
#: app/actions/dialogs-actions.c:362 app/actions/dialogs-actions.c:369
#: app/actions/dialogs-actions.c:357 app/actions/dialogs-actions.c:362
msgctxt "dialogs-action"
msgid "About GIMP"
msgstr "Про програму GIMP"
#: app/actions/dialogs-actions.c:364
msgctxt "dialogs-action"
msgid "About"
msgstr "Про програму"
#: app/actions/dialogs-actions.c:366
#: app/actions/dialogs-actions.c:359
msgctxt "dialogs-action"
msgid "_About"
msgstr "_Про програму"
#: app/actions/dialogs-actions.c:374
#: app/actions/dialogs-actions.c:367
msgctxt "dialogs-action"
msgid "_Search and Run a Command"
msgstr "_Пошук і запуск команди"
#: app/actions/dialogs-actions.c:376
#: app/actions/dialogs-actions.c:369
msgctxt "dialogs-action"
msgid "Search commands by keyword, and run them"
msgstr "Пошук команд за ключовим словом та їх запуск"
#: app/actions/dialogs-actions.c:382
#: app/actions/dialogs-actions.c:375
msgctxt "dialogs-action"
msgid "Manage _Extensions"
msgstr "Керування _розширеннями"
#: app/actions/dialogs-actions.c:384
#: app/actions/dialogs-actions.c:377
msgctxt "dialogs-action"
msgid "Manage Extensions: search, install, uninstall, update."
msgstr "Керування розширеннями: пошук, встановлення, вилучення, оновлення."
#: app/actions/dialogs-actions.c:448
#: app/actions/dialogs-actions.c:441
msgid "Tool_box"
msgstr "Панель _інструментів"
#: app/actions/dialogs-actions.c:449
#: app/actions/dialogs-actions.c:442
msgid "Raise the toolbox"
msgstr "Підняти вгору панель інструментів"
#: app/actions/dialogs-actions.c:453
#: app/actions/dialogs-actions.c:446
msgid "New Tool_box"
msgstr "Додати п_анель інструментів"
#: app/actions/dialogs-actions.c:454
#: app/actions/dialogs-actions.c:447
msgid "Create a new toolbox"
msgstr "Створити нову панель інструментів"
@@ -12956,7 +12954,7 @@ msgstr ""
#: app/core/gimp-contexts.c:153 app/core/gimp-internal-data.c:338
#: app/core/gimptooloptions.c:361 app/gui/modifiers.c:191 app/gui/session.c:449
#: app/menus/menus.c:480 app/widgets/gimpdevices.c:226
#: app/menus/menus.c:488 app/widgets/gimpdevices.c:226
#, c-format
msgid "Deleting \"%s\" failed: %s"
msgstr "Не вдалось вилучити «%s»: %s"
@@ -16103,10 +16101,16 @@ msgid "Search extensions matching these keywords"
msgstr "Шукати розширення за цими ключовими словами"
#: app/dialogs/file-open-dialog.c:142 app/dialogs/file-open-dialog.c:168
#: app/dialogs/file-open-dialog.c:286
#: app/dialogs/file-open-dialog.c:291
msgid "Open layers"
msgstr "Відкрити шари"
#: app/dialogs/file-open-dialog.c:258
#, c-format
#| msgid "Opening '%s' failed: %s"
msgid "Opening '%s' failed."
msgstr "Не вдалося відкрити «%s»."
#: app/dialogs/file-open-location-dialog.c:74
msgid "Open Location"
msgstr "Відкривання адреси"
@@ -18800,13 +18804,14 @@ msgid "GIMP website"
msgstr "Сайт GIMP"
#: app/dialogs/welcome-dialog.c:545
msgid "Tutorials"
msgstr "Підручники"
#: app/dialogs/welcome-dialog.c:550
msgid "Documentation"
msgstr "Документація"
#: app/dialogs/welcome-dialog.c:550
#| msgid "Tutorials"
msgid "Community Tutorials"
msgstr "Підручники спільноти"
#. XXX: should we add API docs for plug-in developers once it's
#. * properly set up?
#. Welcome message: right
@@ -19860,26 +19865,26 @@ msgstr "Натисніть і перетягніть, щоб пересунут
msgid "Click-Drag to shear"
msgstr "Натисніть і перетягніть для перекошування"
#: app/file/file-open.c:264
#: app/file/file-open.c:272
#, c-format
msgid "%s plug-in returned SUCCESS but did not return an image"
msgstr "Доповнення %s успішно завершило роботу, але не повернуло зображення."
#: app/file/file-open.c:275
#: app/file/file-open.c:283
#, c-format
msgid "%s plug-in could not open image"
msgstr "Доповненню %s не вдалось відкрити зображення"
#: app/file/file-open.c:690
#: app/file/file-open.c:698
msgid "Image doesn't contain any layers"
msgstr "Зображення не містить шарів"
#: app/file/file-open.c:748
#: app/file/file-open.c:756
#, c-format
msgid "Opening '%s' failed: %s"
msgstr "Не вдалось відкрити «%s»: %s"
#: app/file/file-open.c:836
#: app/file/file-open.c:846
#, c-format
msgid ""
"Only platform-native file paths are supported: '%s' cannot be opened as link."
@@ -19887,11 +19892,11 @@ msgstr ""
"Передбачено підтримку лише рідних для платформи шляхів до файлів: «%s» не "
"можна відкривати як посилання."
#: app/file/file-open.c:978 app/file/file-save.c:132
#: app/file/file-open.c:985 app/file/file-save.c:132
msgid "Not a regular file"
msgstr "Не є звичайним файлом"
#: app/file/file-open.c:987 app/file/file-save.c:141
#: app/file/file-open.c:994 app/file/file-save.c:141
msgid "Permission denied"
msgstr "Доступ заборонений"
@@ -21621,11 +21626,7 @@ msgstr "Обертати векторний шар"
msgid "Transform Vector Layer"
msgstr "Перетворити векторний шар"
#: app/path/gimpvectorlayer.c:526
msgid "Discard Vector Informations"
msgstr "Відкинути дані щодо векторних елементів"
#: app/path/gimpvectorlayer.c:669
#: app/path/gimpvectorlayer.c:526 app/path/gimpvectorlayer.c:669
msgid "Discard Vector Information"
msgstr "Відкинути дані щодо векторних елементів"
@@ -22196,7 +22197,6 @@ msgstr "2D перетворення"
#: app/pdb/link-layer-cmds.c:67 app/pdb/link-layer-cmds.c:89
#, c-format
#| msgid "Failed to create text layer"
msgid "Failed to create link layer"
msgstr "Не вдалось створити шар посилання"
@@ -27559,7 +27559,7 @@ msgstr "Різноманітні відомості"
msgid "Select fields"
msgstr "Виберіть поля"
#. Tranlators: "N/A" is an abbreviation for "not available"
#. Translators: "N/A" is an abbreviation for "not available"
#: app/widgets/gimpdashboard.c:3323
msgctxt "dashboard-value"
msgid "N/A"
@@ -29937,6 +29937,17 @@ msgctxt "edit-action"
msgid "Undo History Menu"
msgstr "Меню журналу скасувань"
#~ msgctxt "dialogs-action"
#~ msgid "_Settings..."
#~ msgstr "_Параметри..."
#~ msgctxt "dialogs-action"
#~ msgid "About"
#~ msgstr "Про програму"
#~ msgid "Discard Vector Informations"
#~ msgstr "Відкинути дані щодо векторних елементів"
#~ msgctxt "vector-mode"
#~ msgid "Edit"
#~ msgstr "Редагувати"

View File

@@ -10,7 +10,7 @@ gimptool = executable('gimptool' + exec_ver,
'gimptool.c',
include_directories: rootInclude,
dependencies: [
gegl, gtk3,
gegl, gtk3, gexiv2
],
link_with: [
libgimpbase,
@@ -25,7 +25,7 @@ gimp_test_clipboard = executable('gimp-test-clipboard' + exec_ver,
'gimp-test-clipboard.c',
include_directories: rootInclude,
dependencies: [
gegl, gtk3,
gegl, gtk3, gexiv2
],
install: true,
)

View File

@@ -20,45 +20,77 @@
############################################
#### Usage ####
if [ "$#" -ne 2 -a "$#" -ne 1 ]; then
echo "Usage: $0 <GIMP_TAG_PREV> <GIMP_TAG_CUR>"
echo
echo " GIMP_TAG_PREV: last tag release or commit (non-included in stats)"
echo " ex: GIMP_2_9_6"
echo " GIMP_TAG_CUR: current tag release or commit (included in stats); ex: GIMP_2_9_8"
echo " ex: GIMP_2_9_8."
echo " Optional. If absent, statistics up to HEAD."
exit 1
fi
printf "GIMP version to release: "; read ver
PREV=$1
git --no-pager show $PREV >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "First tag is unknown: $PREV"
exit 2
fi
if [ -z "$ver" ]; then
TAG="HEAD"
PREV_TAG=$(git ls-remote --tags --exit-code --refs "https://gitlab.gnome.org/GNOME/gimp.git" |grep -o "GIMP_[0-9]*_[0-9]*_[0-9]*" | sort --version-sort | tail -1)
INTERMEDIATE_TAG=$PREV_TAG
if [ "$#" = 2 ]; then
CUR=$2
git --no-pager show $CUR >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Second tag is unknown: $CUR"
exit 2
fi
is_dev_release=1
else
CUR='HEAD'
major=$(echo "$ver" | cut -d'.' -f1)
minor=$(echo "$ver" | cut -d'.' -f2)
micro=$(echo "$ver" | cut -d'.' -f3)
TAG=GIMP_${major}_${minor}_${micro}
git --no-pager show $TAG >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Tag is unknown: $TAG"
exit 1
fi
is_dev_release=$((minor % 2))
if [ $((micro % 2)) -ne 0 ]; then
echo "Releases must have an even micro version."
exit 1
fi
# The previous tag will be in the same branch. For instance 3.0.4 is
# previous to 3.0.6 even if we may have released 3.1 versions
# in-between.
PREV_TAG=$(git ls-remote --tags --exit-code --refs "https://gitlab.gnome.org/GNOME/gimp.git" |grep -o "GIMP_[0-9]*_[0-9]*_[0-9]*" | sort --version-sort | grep -B1 $TAG | head -1)
# The intermediate tag is the actual version we released before.
INTERMEDIATE_TAG=$(git ls-remote --tags --sort=taggerdate --exit-code --refs "https://gitlab.gnome.org/GNOME/gimp.git" |grep -o "GIMP_[0-9]*_[0-9]*_[0-9]*" | grep -B1 $TAG | head -1)
fi
prev_date=`git log -1 --format=%ci $PREV`
cur_date=`git log -1 --format=%ci $CUR`
#if [ $is_dev_release -eq 0 ]; then
#read -p "Previous stable GIMP version:" ver
#elif [ $micro -eq 0 ];
#else
#read -p "Previous GIMP version:" ver
#fi
prevmajor=$(echo "$1" | cut -d'_' -f2)
prevminor=$(echo "$1" | cut -d'_' -f3)
prevmicro=$(echo "$1" | cut -d'_' -f4)
prevmajor=$(echo "$PREV_TAG" | cut -d'_' -f2)
prevminor=$(echo "$PREV_TAG" | cut -d'_' -f3)
prevmicro=$(echo "$PREV_TAG" | cut -d'_' -f4)
major=$(echo "$2" | cut -d'_' -f2)
minor=$(echo "$2" | cut -d'_' -f3)
micro=$(echo "$2" | cut -d'_' -f4)
intmajor=$(echo "$INTERMEDIATE_TAG" | cut -d'_' -f2)
intminor=$(echo "$INTERMEDIATE_TAG" | cut -d'_' -f3)
intmicro=$(echo "$INTERMEDIATE_TAG" | cut -d'_' -f4)
echo "Previous Release: $prevmajor.$prevminor.$prevmicro"
if [ "$PREV_TAG" != "$INTERMEDIATE_TAG" ]; then
echo "Intermediate Release: $intmajor.$intminor.$intmicro"
fi
#if [ $((prevmicro % 2)) -ne 0 ]; then
#echo "Releases must have an even micro version."
#exit 1
#fi
#if [ $is_dev_release -eq 0 ]; then
#if [ $((prevminor % 2)) -ne 0 ]; then
#echo "$ver is not a stable version."
#exit 1
#fi
#fi
prev_date=`git log -1 --format=%ci $PREV_TAG`
int_date=`git log -1 --format=%ci $INTERMEDIATE_TAG`
cur_date=`git log -1 --format=%ci $TAG`
get_issues_mrs()
{
@@ -116,7 +148,7 @@ count_contributors()
folders=$1
text=$2
contributors=`git --no-pager shortlog -sn $PREV..$CUR -- $folders`
contributors=`git --no-pager shortlog -sn $PREV_TAG..$TAG -- $folders`
if [ -n "$contributors" ]; then
contributors=`echo "$contributors" | cut -f2`
n_contributors=`echo "$contributors" | wc -l`
@@ -152,11 +184,16 @@ count_repo_contributors()
text=$3
prev_tag=$4
cur_tag=$5
since_date=$6
cd $repo
git fetch origin > /dev/null 2>&1
if [ -z "$cur_tag" ]; then
contributors=`git --no-pager shortlog -sn --since="$prev_date" --until="$cur_date" origin/$branch`
if [ -z "$since_date" ]; then
contributors=`git --no-pager shortlog -sn --since="$prev_date" --until="$cur_date" origin/$branch`
else
contributors=`git --no-pager shortlog -sn --since="$since_date" --until="$cur_date" origin/$branch`
fi
else
contributors=`git --no-pager shortlog -sn $prev_tag..$cur_tag`
fi
@@ -177,15 +214,20 @@ count_repo_contributors()
cd - > /dev/null
}
echo "Copy the below text into your release news:"
echo
echo "-------------------------------------------"
echo
echo "Since [GIMP $prevmajor.$prevminor.$prevmicro](/release/$prevmajor.$prevminor.$prevmicro/), in the main GIMP repository:"
echo
echo "* $closed_issues reports were closed as FIXED."
echo "* $merged_mrs merge requests were merged."
# Main stats:
contribs=`git --no-pager shortlog -s -n $PREV..$CUR`
contribs=`git --no-pager shortlog -s -n $PREV_TAG..$TAG`
contribs_n=`printf "$contribs" | wc -l`
commits_n=`git log --oneline $PREV..$CUR | wc -l`
commits_n=`git log --oneline $PREV_TAG..$TAG | wc -l`
echo "* $commits_n commits were pushed."
@@ -195,16 +237,16 @@ echo "* $commits_n commits were pushed."
#commits_rate=$(( $commits_n / $days_n ))
#echo "Start date: $prev_date - End date: $cur_date"
#echo "Between $PREV and $CUR, $contribs_n people contributed $commits_n commits to GIMP."
#echo "Between $PREV_TAG and $TAG, $contribs_n people contributed $commits_n commits to GIMP."
#echo "This is an average of $commits_rate commits a day."
#echo
#echo "Statistics on all files:" `git diff --shortstat $PREV..$CUR 2>/dev/null`
#echo "Statistics on all files:" `git diff --shortstat $PREV_TAG..$TAG 2>/dev/null`
#echo
#echo "Total contributor list:"
#printf "$contribs"
# Translation stats:
i18n=`git --no-pager log --stat $PREV..$CUR -- po* | grep "Updated\? .* \(translation\|language\)"`
i18n=`git --no-pager log --stat $PREV_TAG..$TAG -- po* | grep "Updated\? .* \(translation\|language\)"`
i18n=`printf "$i18n" | sed "s/ *Updated\? \(.*\) \(translation\|language\).*/\\1/" | sort | uniq`
i18n_n=`printf "$i18n" | wc -l`
# It seems that if the last line has no newline, wc does not count it.
@@ -214,7 +256,7 @@ i18n_comma=`printf "$i18n" | paste -s -d, | sed 's/,/, /g'`
echo "* $i18n_n translations were updated: $i18n_comma."
#echo "Statistics on C files:" `git diff --shortstat $PREV..$CUR -- "*.[ch]" 2>/dev/null`
#echo "Statistics on C files:" `git diff --shortstat $PREV_TAG..$TAG -- "*.[ch]" 2>/dev/null`
echo
echo "$contribs_n people contributed changes or fixes to GIMP $major.$minor.$micro codebase (order
@@ -229,7 +271,7 @@ count_contributors 'themes/*/*.css themes/*/*png' "%d theme designers: %s"
meson_builds=`find . -name meson.build -not -path gimp-data`
count_contributors "meson_options.txt $meson_builds .gitlab-ci.yml build" "%d build, packaging or CI contributors: %s"
count_contributors 'data/ etc/ desktop/ menus/ docs/ devel-docs/ NEWS INSTALL.in' "%d contributors on other types of resources: %s"
count_repo_contributors "gimp-data" main "The gimp-data submodule had %d commits by %d contributors: %s"
count_repo_contributors "gimp-data" main "The gimp-data submodule had %d commits by %d contributors: %s" "" "" $int_date
count_data_contributors 'images' "%d image creators: %s"
count_data_contributors 'icons/*.svg icons/*.png' "%d icon designers: %s"
count_data_contributors 'cursors' "%d cursor designers: %s"
@@ -251,23 +293,23 @@ echo "number of commits):"
echo
echo "* Our UX tracker had $ux_closed_issues reports closed as FIXED."
babl_ver=`get_latest_from_meson babl $CUR`
prev_babl_ver=`get_latest_from_meson babl $PREV`
babl_ver=`get_latest_from_meson babl $TAG`
prev_babl_ver=`get_latest_from_meson babl $PREV_TAG`
if [ "$babl_ver" != "$prev_babl_ver" ]; then
prev_tag=`get_tag_from_version BABL $prev_babl_ver`
cur_tag=`get_tag_from_version BABL $babl_ver`
count_repo_contributors "../babl" master "babl $babl_ver is made of %d commits by %d contributors: %s" $prev_tag $cur_tag
fi
gegl_ver=`get_latest_from_meson gegl $CUR`
prev_gegl_ver=`get_latest_from_meson gegl $PREV`
gegl_ver=`get_latest_from_meson gegl $TAG`
prev_gegl_ver=`get_latest_from_meson gegl $PREV_TAG`
if [ "$gegl_ver" != "$prev_gegl_ver" ]; then
prev_tag=`get_tag_from_version GEGL $prev_gegl_ver`
cur_tag=`get_tag_from_version GEGL $gegl_ver`
count_repo_contributors "../gegl" master "GEGL $gegl_ver is made of %d commits by %d contributors: %s" $prev_tag $cur_tag
fi
count_repo_contributors "../ctx.graphics" dev "[ctx](https://ctx.graphics/) had %d commits since $prevmajor.$prevminor.$prevmicro release by %d contributors: %s"
count_repo_contributors "../ctx.graphics" dev "[ctx](https://ctx.graphics/) had %d commits since $intmajor.$intminor.$intmicro release by %d contributors: %s"
count_repo_contributors "../gimp-test-images" main "The \`gimp-test-images\` (unit testing repository) repository had %d commits by %d contributors: %s"
count_repo_contributors "../gimp-macos-build" master "The \`gimp-macos-build\` (macOS packaging scripts) release had %d commits by %d contributors: %s"
# TODO: