Commit graph

54336 commits

Author SHA1 Message Date
Alexander Shopov
fb10438965 Update Bulgarian translation 2025-03-17 11:06:33 +00:00
Luming Zh
a0876355ff Update Chinese (China) translation 2025-03-17 10:57:18 +00:00
Luming Zh
8cecce1081 Update Chinese (China) translation 2025-03-17 10:34:11 +00:00
Martin
1282293b18 Update Slovenian translation 2025-03-17 01:09:59 +00:00
Jehan
9785099e5a Release GIMP 3.0.0. 2025-03-17 01:44:19 +01:00
Bruno Lopes
8cb3f0ff66
build/linux: Ensure that 'ld-linux' have .debug symbols
x86_64 have a peculiar path so this trick is needed.
2025-03-16 19:27:31 -03:00
Bruno Lopes
4e073a6788
build/linux: Do not bundle 'gdk-pixbuf-query-loaders' .debug symbol 2025-03-16 19:27:27 -03:00
Jehan
599f209238 desktop: update release date. 2025-03-16 23:06:32 +01:00
Jehan
60119602be desktop: fourth screenshot, by Liam! 2025-03-16 22:58:52 +01:00
Jehan
8ae4c9d066 NEWS: update. 2025-03-16 22:03:56 +01:00
Bruno Lopes
4c8c64aa46
build/linux: Remove leftover from previous try of .debug on AppImage
It is not needed because the .debug files are bundled.
2025-03-16 17:43:01 -03:00
Yuri Chornoivan
492e429881 Update Ukrainian translation 2025-03-16 20:20:41 +00:00
Bruno Lopes
958e82d5e9
build/linux: Bundle deps .debug symbols on AppImage with 'debuginfod' 2025-03-16 17:14:54 -03:00
Jehan
ba4dae9cd9 desktop: update the screenshots. 2025-03-16 20:32:04 +01:00
Jehan
8c077d50d1 plug-ins: revert the multi-threading code.
The whole multi-threading changes in the help plug-in seem to badly
break on macOS. See discussion in reopened #12898.
We decided to get rid of it for now and see later if we need to
reimplement this (after understanding what is going on).

Revert "plug-ins: fix #13049 Calling help on unknown help-id causes..."

This reverts commit 7d153bcc6d.

Revert "plug-ins/help: fix thread unnecessarily waiting when locale_parse failed"

This reverts commit fd0ccfa16c.

Revert "plug-ins/help: fix crash when locale is NULL"

This reverts commit 4075add5b4.

Revert "plug-ins: fix failing to access help from within GIMP"

This reverts commit 38f0527ebc.

Revert "plug-ins: add some better error handling when the docs XML request/parsing fails."

This reverts commit 543bb374a8.

Revert "plug-ins: try to load the gimp-help.xml file in a thread."

This reverts commit f2d47e910b.
2025-03-16 19:30:47 +01:00
Kolbjørn Stuestøl
34e35f3fd5 Update Norwegian Nynorsk translation 2025-03-16 17:09:44 +00:00
Øyvind Kolås
fc35864880 meson, app: depend on GEGL-0.4.56 2025-03-16 15:38:41 +01:00
Bruno Lopes
dc53786acd
build/linux: Update README regarding versioning 2025-03-16 07:02:44 -03:00
Bruno Lopes
b0b4c513ff
build/linux: Make gimp module a bit more alike the one on Beta manifest 2025-03-15 21:30:50 -03:00
Bruno Lopes
d4f51fdd77
build/linux: No need to set PYTHONHOME on AppImage
Closes: #13050
2025-03-15 20:45:11 -03:00
Bruno Lopes
ce33dab5f1
build/linux: Add error message to runtime version check 2025-03-15 17:13:15 -03:00
Bruno Lopes
5b3ffcb64e
build/windows: Auto instruct MSIX maintainer about self-sign certificate
Partially reverts dd4b687d
2025-03-15 16:26:06 -03:00
Alx Sa
206273c6b5 core: Add version 23 to XCF switch statement
Resolves #13124
In 3f3b29ba we bumped XCF version to 23 due to
new blending spaces. However, we did not update
the version check switch statement to accept this
version. This patch adds a new case to handle version
23.
2025-03-15 18:23:07 +00:00
Alx Sa
a723fe27b3 plug-ins: Fix crash when exporting indexed ICNS images
Resolves #12880
Same problem as in 4cd3360d, just applied to exported ICNS icons instead.
2025-03-15 17:34:03 +00:00
Alx Sa
a034283cb0 plug-ins: Import/Export color profiles for PNG-based ICNS files
Resolves #12880
Since ICNS stores full PNGs for some icon types, it's
possible for them to have a color profile stored in
their iCCP chunk. This patch enables the existing
metadata option to save color profiles, then passes
that choice to the PNG procedure when exporting. Since the new widget affects the existing flowbox,
we also define a minimum height to prevent cutting
off the first row.

Loading is trickier since other software could
potentially combine PNGs with different color profiles
in the ICNS. GIMP does not yet support per-layer
profiles, so for now we'll follow the way the TIFF
importer does it and just attach the first color profile
we come across while loading.
2025-03-15 17:34:03 +00:00
Bruno Lopes
36e788abec
build/windows: Make MINGW_PACKAGE_PREFIX detection more subtle 2025-03-15 14:04:10 -03:00
Alx Sa
133bd2d432 plug-ins: Fix crash when exporting indexed HTML tables
Resolves #13122
The HTML table code expects RGB or Grayscale pixels
when creating a "BGCOLOR" attribute in the table.
This patch defines the capabilities of the exporter
in GimpExportOptions and retrieves a suitable image
with gimp_export_options_get_image ().
2025-03-15 15:18:14 +00:00
Alx Sa
4cd3360d53 python: Fix crash when exporting indexed ORA images
Exporting ORA images involves first creating PNGs of
the layers. To do this, we create separate images for
each layer with Gimp.Image.new ().
However, if the original image was indexed, we lose
the palette when passing the temporary image to
the PDB call. This caused us to try saving a NULL
palette, which resulted in the crash.

This patch adds a check if the image is indexed, and
copies over the palette to the temporary image.
2025-03-15 02:36:20 +00:00
Bruno Lopes
a091b6b2d8
build/windows: Update MSIX README to mention Stable entry 2025-03-14 19:57:05 -03:00
Jehan
26caad3f3b NEWS: update. 2025-03-14 22:55:41 +01:00
Bruno Lopes
df9f812b59
build/linux: Fix comment style about Lua on AppImage script
Let's put links only about toolkit (go-appimage and appimagetool) issues
2025-03-14 18:04:48 -03:00
Jehan
c381390615 Issue #12636: _gimp_gp_param_def_to_param_spec throws WARNING on…
… a build of type "release".

Thanks to Lloyd Konneker for their original diagnosis of this issue!
2025-03-14 21:52:19 +01:00
Bruno Lopes
6adc6aa23f
gitlab-ci: Add build-id to AppImage
This is needed to proper update check.
2025-03-14 16:01:09 -03:00
Jehan
5272618512 app: fix wrong offset of layer buffer with pass-through groups. 2025-03-14 18:53:57 +01:00
Jacob Boerema
3ee85e422b plug-ins: fix #13107 failure to read exported grayscale DDS image
When exporting a grayscale image with alpha channel as DDS while
choosing "default" format, we did not set the DDPF_LUMINANCE flag,
but instead used DDPF_RGB, on loading in the 3.0 branch this caused
a failure to read this format due to unrecognized combination of
settings.

First we make sure that on exporting to also set DDPF_LUMINANCE for
grayscale with alpha.
Second we also make sure to zero the blue and green mask fields,
since that is the expected value when these fields are not used.

To support this type of older exported DDS images, we add an extra
format definition for this unusual combination of DDS settings,
that way we recognize them when opening and are able to load them.
2025-03-14 12:23:42 -04:00
Alx Sa
4d8073a3a0 widgets: Prevent crash when converting to indexed image
Resolves #13092
GIMP crashed when converting an image to indexed mode,
if the user first changed the color in the Configure Grid
Dialogue. This was because signals were not being
properly disconnected from GimpColorMapSelection
after the dialogue was closed.

Jehan found the solution, to replace 
g_signal_connect_swapped () calls with
g_signal_connect_object () and flags set to
G_CONNECT_SWAPPED to retain the original
behavior. This ensures the signals are disconnected
after the widget is destroyed on dialogue close.
2025-03-14 15:18:48 +00:00
Bruno Lopes
e139e016a5
gitlab-ci: Install 'python3-gi-cairo' for full introspection
Closes #13105

Differently from MacPorts and MSYS2 packages, this isn't auto installed.
2025-03-13 21:11:21 -03:00
Jehan
bf144eba1b Issue #13057: partly rendered passthrough layer group inside passthrough layer group.
So the problem was that the duplicated image (as returned by
gimp_export_options_get_image()) was not fully rendered. I think it is
related to the computed size of pass-through group layers (whose borders
may show actually smaller than their actual render which is in fact
composited with below layers).

I am not perfectly happy with my solution as I'd have prefered fixing
the source issue, but it is good enough, just a few before GIMP 3.0
release.
2025-03-14 00:54:31 +01:00
Jehan
8bf314f47a app: use the mode node output on a pass-through group with no filter.
The call to gimp_drawable_merge_filters() on a group set a buffer to the
group layer (a bit like when we rasterize text layer) which was why it
worked fine. But when the group had no filter, we didn't have this side
effect.
So let's make sure we use the mode node output as our merged layer's
buffer in such case.

Also when the bottom layer (to merge) is a pass-through group, we don't
want to disconnect its input.
2025-03-14 00:54:31 +01:00
Alx Sa
40fe4fc62f plug-ins: Convert Print Preview for images with higher bit depth
Resolves #13104
print_preview_get_thumbnail () crashes when trying
to display thumbnails where the image's precision is
higher than 8 BPC. While the plan is to rewrite/replace
this plug-in, for now, we'll duplicate the drawable's
image and convert to 8BPC to prevent issues.
2025-03-13 23:22:51 +00:00
Alx Sa
f576531bec plug-ins: Fix palette being blacked out on indexed ICO export
Resolves #13099
For indexed ICO images, we get the palette from a
temporary image during export. Since the palette is
tied to the image, when we convert the temp image to
RGB and then delete it, the GimpPalette is lost and
the image is exported as pure black.

This patch resolves the issue by calling
gimp_palette_get_colors () to get the actual GeglColors,
then adding them to a new palette with
gimp_palette_new (). As this is separate from the
temporary image, it is retained after the call to
ico_image_get_reduced_buf ().
2025-03-13 03:25:26 +00:00
Jacob Boerema
acead5642e plug-ins, tests: add tests for more file formats...
using example files from the nomacs testset.
2025-03-12 21:51:19 +00:00
Alx Sa
731766e9bc vectors: Remove debug printout when Snap to Active Path on
Resolves #13096
In 5a43a464, some debug output was added to help
diagnosis a problem when Snap to Active Path was
turned on. The issue seemed mostly resolved in e57ad0f8,
but the print statements were left in. This leads to
slowdown when moving layers while Snap is enabled
(due to the continuous print statements).

As it's been 19 years since the original commit, it
should be fine to remove these debug statements
to boost performance.
2025-03-12 20:29:54 +00:00
Alx Sa
8fd1d229dc plug-ins: Fix reading/writing NULL clipping paths for PSD
Previously, we did not check if the clipping path name
was properly converted to ISO-8859-1 from UTF-8
before saving. g_convert can return NULL if it fails,
which means we wrote NULL (causing a crash on load).

To resolve, this patch adds a check if the clipping path
name is NULL on load, warns the user, and then
stops loading the clipping path resource.
On export, we fall back to ASCII instead if the conversion
to ISO-8859-1 fails.
2025-03-12 20:06:25 +00:00
Bruno Lopes
4497c906c1
build/linux: Fix AppImage crashing due to lack of Xapp gschemas
Closes: #13082
2025-03-12 13:24:32 -03:00
Jehan
f628b1715f Issue #13058: passthrough layer groups with filters don't merge correctly. 2025-03-11 17:18:42 +01:00
Jehan
388e346a5c app: further fix merging a pass-through group when opacity < 1.0.
Just using the output of the group is not enough since the pass-through
mode cannot be reused for the normal layer (and anyway all below layers
will have been removed). This still works out with a full-opacity
pass-through, but for lesser opacity, what we want is to replace with
not just the group's render, but in fact the render after the
compositing node.

As far as my tests go, we should now have exactly the same render before
and after merging a pass-through group, whatever the group opacity.
2025-03-11 17:18:42 +01:00
Alx Sa
7013fad34d core: Use selection when updating GimpBrushClipboard...
...and GimpPatternClipboard

Resolves #10046
After 1b64fdf5, gimp_get_clipboard_object () no longer
returns a merged version of the selected area.
This affected the Clipboard Brush, Clipboard Mask,
and Clipboard Pattern, causing them to always use the
entire image instead.

To restore the 2.10 behavior, we check if the pasted
image has a selection. If so, then we call 
gimp_selection_extract () to get the buffer of the
selected area. We also need to unreference this
buffer afterwards, so a boolean check is added once
the buffer has been copied over to the brush and
pattern.
2025-03-11 12:40:08 +00:00
Jehan
f3eb02b2f0 app: merging a pass-through group should merge all visible layers below it.
Existing logic to merge a pass-through group layer was wrong because it
was changing the global rendering of the image as though the group was
in fact in Normal mode.

Instead a pass-through group can be kinda considered as a Normal group
which would contain not only its children, but also all visible sister
layers below it. Therefore the new pass-through group merging will be
taking the real pass-through group render into the new layer (we don't
change the original group's mode before copying the render anymore), set
to Normal mode, then we remove not only the pass-through group but all
its big sister layers below it on same level.

Organizational-wise, it may seem unexpected because "merging" this group
leaks outside it (getting rid of not only the children but also the big
sisters and cousins). Nevertheless this is exactly how this group mode
works after all. So let's go full-in.

After discussing on IRC with Wormnest and NikcDC, we decided that it was
worth doing this specific merge the technically proper way, and we would
just educate people through the docs on why this group mode is very
particular this way.
After all, if someone absolutely wants the old-style merge, they can
always manually change the group to Normal mode first before merging.
But if they let to "Pass-Through", we should assume this is the render
they want.
2025-03-11 12:43:43 +01:00
Jehan
db8be0c28c app: fix order of context reset when exitting.
Some data in a GimpContext may have a reference to a GimpImage. In
particular there may be a GimpLineArt when the bucket fill tool is ON
when exiting GIMP.

In such a case, gimp_exit_idle_cleanup_stray_images() would see a
remaining GimpImage, would believe it's a stray image left by a plug-in,
output an INFO message and free it, which would in turn produce various
CRITICALs when actually finalizing the GimpContext.

Therefore we move gimp_contexts_exit() into gimp_exit(), and not when
disposing of the Gimp object (which happens too late).
2025-03-11 12:43:43 +01:00