Commit Graph

53894 Commits

Author SHA1 Message Date
Jehan 2c066afff9 Issue #12614: Successive layer effects should use a higher bit-depth as intermediary format.
While it's normal to be limited to the storage precision at drawable
level, we want to have as high precision as possible during processing.

Two pieces of code were problematic in this regard:

1. GimpApplicator had a "gegl:convert-format" node which was converting
   back to storage format after every effect. Instead only set this node
   after the last effect.
2. "gimp:mask-components" operation was working with the input format.
   Let's change this to work with the higher precision when comparing
   input and aux format (typically when aux was the output of a previous
   filter, now that we didn't convert format back to storage precision,
   the aux precision may be bigger).
2025-01-12 22:18:28 +01:00
Ekaterine Papava bd4530e580 Update Georgian translation 2025-01-12 19:51:00 +00:00
Alx Sa 54405ddd0f libgimp: Respect alpha setting in color widgets
When creating a color widget in GimpProcedureDialog, we
were not taking into account whether the parameter's
has_alpha boolean was set to FALSE. As a result, all color
widgets allowed for transparency.

This patch checks if the GimpColor's GParamSpec has_alpha value
is FALSE, and if so, sets the color widget's type to
GIMP_COLOR_AREA_FLAT to enforce no transparency for that color.
2025-01-12 19:10:27 +00:00
Alx Sa 2dd55d117c core: Don't assume filter has single operation
Resolves #12719 and #12721
In b78f3dad, we assume that a filter is being created for a
single operation. However, certain tools like Bucket Fill might
pass a GEGL Graph node instead. This causes the call to
gegl_node_get_gegl_operation () to return NULL, which then
crashes when we attempt to get the Operation Class.
This path verifies that we have a single operation before
attempting to go further with getting its class.
2025-01-12 13:42:42 +00:00
Bruno d4a7175a0f
build/windows: Crossbuilds are back and with UCRT (thanks to 'quasi-msys2')
Fixes: #11756

Context: Debian Bookworm only have GCC that links to MSVCRT C library.
Actually, crossroads is failing on our CI probably due to GCC-MSVCRT.
On Debian, there is GCC-UCRT too but it is marked as Experimental and
crossroad does not support it nor Clang-UCRT yet: GNOME/gimp!1860.

Some people reported crossroad working with GCC-MSVCRT in Fedora but
adding a brand new pipeline would be at least suboptimal to mantain.

So, we are temporarely moving from crossroad to quasi-msys2 project which
have UCRT support for both GCC and Clang (it takes compiler resources from
MSYS2). The compilers itself we will take from Debian Testing for parity
(they are standard GCC and Clang with proper CFLAGS set by quasi-msys2).
We may go back to Crossroad when it has UCRT support like quasi-msys2.
2025-01-11 18:32:39 -03:00
Alx Sa b78f3dadc6 core, pdb, xcf: Only load explicitly set filter names
We always save the filter name in XCFs,
even if the user did not intentionally set
it. This means that "default" names like
Gaussian Blur are not translated when
saved and loaded in XCFs.

This patch adds a new property,
"custom-name", to GimpDrawableFilter.
It is FALSE by default, and only set to
TRUE if the user provides a custom filter
name (currently only possible in the
public filter API). Based off this value,
we either use the saved filter name or
get it from the operation when saving and
loading a filter from the XCF.
2025-01-11 21:28:41 +00:00
Alx Sa 73f30b0dc6 plug-ins: Import DDS BC7 compression
This patch adds support for importing DDS images
with BC7 compression. The implementation references
ImageMagick's method.
2025-01-11 16:51:09 +00:00
lloyd konneker 994aa79724 ScriptFu: tests: test DrawableFilter class and its use sequences
No changes except to tests.
2025-01-11 10:07:40 -05:00
Alx Sa c9ccb77287 themes: Define background-image for entry and switch
Resolves #12682
Some system themes add a gradient background-image to
text input and toggle widgets. On dark theme, this can
make the text unreadable if the background-image is a similar
color. This patch defines the background-image as none, to
prevent the system theme from leaking in.
2025-01-11 13:55:59 +00:00
Alan Mortensen 8953232359 Update Danish translation 2025-01-11 09:46:54 +00:00
Ngọc Quân Trần 04e1f830a7 Update Vietnamese translation 2025-01-11 06:44:14 +00:00
Jehan d8a8d2f138 app: the "color-options-expanded" filter option is now bogus.
I missed this together with commit c3ef79b3ef. It's of no use now.
2025-01-10 23:43:31 +01:00
Jehan bc3b6e5927 app: do not migrate option (filter-tool-show-color-options). 2025-01-10 23:26:11 +01:00
Jehan c3ef79b3ef Issue #12577: get rid of the gamma hack.
What it was doing was casting the input buffer to another TRC, basically
pretending the data was what it was not. In particular, it was casting
linear input buffers to non-linear and all other TRCs to linear.

As was noted in #1958, this was in fact a useful trick, yet it's still a
trick. Basically when it's needed, it's either:

1. because the operation implementation does not work in the technically
   correct space. Then the operation code should be fixed;
2. or because several work TRC are valid, then an option should be
   proposed by the operation;
3. or for artistic reasons, which people are free to implement as
   plug-ins or third-party filters, but it should not be a core GIMP
   feature.

Therefore for most cases where it felt needed, the real solution will be
to improve the operations' implementations.
2025-01-10 23:26:11 +01:00
Jacob Boerema 496b390724 app: add help-ids to the vector tool path actions
These were missing help ids and don't have tooltips either, while some
of these actions may not be clear to end users what they do.

This will allow us to have context sensitive help about these commands
in the manual.
2025-01-10 13:52:49 -05:00
Jehan 6f197416ec libgimp: switch the relative path to full path.
Without this, the relative path alone was not working fine, likely
because current working directory is not the plug-in dir.
2025-01-10 18:59:37 +01:00
Jehan 49e2abd9ad Issue #12326: Bug in locale directory checking in gimpplugin.c. 2025-01-10 18:43:31 +01:00
Jehan df6d9b63f7 app: fix localization of plug-ins on Linux.
This regression was added with MR !1551 (commit 7ccfad1716).
Localization was still working fine on the main processus, which made
the problem less obvious. But every plug-in would output such an error
on start:

> (border-average:257681): Gtk-WARNING **: 17:22:17.640: Locale not supported by C library.
> 	Using the fallback 'C' locale.

And the localization was indeed not working.
Apparently having a properly qualified locale, with both region and
encoding (e.g. "fr_FR.UTF-8") is fine, but any other contents was
breaking the whole locale.

Since it seems that this issue doesn't happen on Windows at all, let's
just not set LANG, except on Windows.
2025-01-10 18:43:31 +01:00
Jacob Boerema 473d07d364 plug-ins, exr: ensure dimensions are not outside our limits...
when loading an exr image.
While looking at the openexr fuzzed images I noticed we do not check
whether height or width are larger than our maximum.

Although this was caught in libgimp when trying to create the image,
let's add checks in the exr plug-in itself.
2025-01-09 18:32:50 -05:00
Rupert 565ead32b8 plug-ins: bmp import - simplify dest/offset handling
the offset to the dest buffer passed to the line-reading functions
wasn't counting bytes but items/values, which was slightly confusing.
Changed to not pass the offset at all, but rather a pointer to the
start of a line inside the buffer.
Also made rowstride count bytes, not values.
Made dest and rowstride local vars, as they are not used anywhere else.
2025-01-09 23:04:02 +00:00
Rupert 373f4821c3 plug-ins: bmp import - explicitly include RLE24 when setting channels...
...and precision
2025-01-09 23:04:02 +00:00
Rupert 71205f5b4e plug-ins: bmp import - height check was missing ABS()
bmp height can be negative
2025-01-09 23:04:02 +00:00
Rupert b702a8b5c5 plug-ins: bmp import - move set_default_masks() next to other mask funcs 2025-01-09 23:04:02 +00:00
Rupert 8ffa8d1c98 plug-ins: bmp import - simplify digest_masks() 2025-01-09 23:04:02 +00:00
Rupert d48ce04291 plug-ins: bmp import - add/clarify some comments 2025-01-09 23:04:02 +00:00
Rupert 5db4955d4d plug-ins: bmp import - rename rowbytes -> bytes_per_row
variable with identical purpose had different names in import and
export plug-in.
2025-01-09 23:04:02 +00:00
Rupert 1164b0baf8 plug-ins: bmp import - check compression type for 64bit bmps
BI_RGB is the only valid compression type for 64-bit bmps
2025-01-09 23:04:02 +00:00
Rupert c3b391a319 plug-ins: bmp import - call digest_masks() only when needed 2025-01-09 23:04:02 +00:00
Rupert df4d741275 plug-ins: bmp import - don't double-check eof
Removed unnecessary if(!eof) -- it's already part of the loop
condition.
2025-01-09 23:04:02 +00:00
lloyd konneker 8f1be83840 ScriptFu: tests: revise for recent changes to API circa 3.0rc2
No changes except to tests.

Mostly minor, except major changes to testing calls to gegl filters.
2025-01-09 16:43:48 -05:00
lloyd konneker b14b17fa53 ScriptFu: fix relay error when marshalling args
Broken in previous commit to this file.
An error return from script_fu_marshal_arg_to_value must be relayed.
2025-01-09 16:43:48 -05:00
lloyd konneker 54a53ae8b7 ScriptFu: tests: fix tests broken between 2.99 and 3.0rc2
No changes other than to test framework and tests.
2025-01-09 16:43:48 -05:00
Yuri Chornoivan ff192d25d3 Update Ukrainian translation 2025-01-09 21:38:41 +00:00
Alan Mortensen d41ab22493 Update Danish translation 2025-01-09 15:53:20 +00:00
Alexander Shopov 967e099026 Update Bulgarian translation 2025-01-09 08:59:23 +00:00
Alexander Shopov 6a36278ad3 Update Bulgarian translation 2025-01-09 08:57:16 +00:00
Alexander Shopov 6def179174 Update Bulgarian translation 2025-01-09 08:56:51 +00:00
Martin fc2c768f66 Update Slovenian translation 2025-01-08 21:14:10 +00:00
Jacob Boerema 9df18cb217 plug-ins, dds: fix #12660 failure to load certain DDS images...
that were written by older versions of GIMP.

The improved DDS reader that we got a year ago, caused us to be more
strict in determining what exact DDS format we are loading.

This causes failure in reading certain DDS images exported by older
versions of GIMP.

1. Both the A8 and A8L8 formats as written by GIMP, also wrote 0xff
in the masks of the green and blue channels, which should have been
set to 0, since they are unused. Because of this, they were not
recognized anymore by our import routine.

2. When the source layer didn't have an alpha channel, the BGR8 format
wrote a 24-bit format, which doesn't have any official representation
(only RGB8 exists). This also caused our import routine to fail for
this kind of image.

After updating our export in previous commits, this commit adjusts our
import routines to recognize and correctly load these images.
2025-01-08 14:26:26 -05:00
Jacob Boerema 6447add47b plug-ins, dds: export BGR8 as D3DFMT_X8B8G8R8
When the source image/layer didn't have an alpha channel, we were
exporting BGR8 as 24-bit B8G8R8, which is not an official D3D DDS
format.

For compatibility with other programs using DDS, let's instead use
D3DFMT_X8B8G8R8 which is 32-bit with the alpha channel being
ignored/set to 0.

See issue #12660 for more details.
2025-01-08 14:26:25 -05:00
Jacob Boerema a427dcdf4d plug-ins, dds: incorrect flags when exporting to l8 and l8a8 formats.
When exporting a dds with types l8 or l8a8 we were also setting the
green and blue masks to 0xff instead of using 0 (since these channels
are not used for these formats).
See issue #12660

Set these channel masks to 0 to be more conforming to dds standards
and update our plug-in revision.
2025-01-08 14:26:25 -05:00
Bruno be83d5aed5
gitlab-ci: Make Debian Docker image version easier to change and branch-aware
This is needed otherwise if we have a branch that relies on Debian testing and
other that relies on Debian stable their images would mix in the actual status.
2025-01-08 16:22:05 -03:00
Jacob Boerema e5b35622d6 plug-ins, exr: fix #12340 crash on loading unsupported exr type
When trying to load an exr type that GIMP can't handle we threw an
exception causing a crash of the plug-in.

This isn't very user friendly, so change this to show a less
disruptive error message that we can't load the image.
Removed "for reading" from the existing error message to better reflect
that it isn't necessarily always a problem reading the file.
2025-01-08 18:20:06 +00:00
Jacob Boerema f3d6c9326f image loading plug-in tests: add cmyk pam tests 2025-01-08 13:15:56 -05:00
Thomas Manni 43639e99fd app/widgets: do not use a reference to the active image in GimpColorFrame
...but use a signal handler for GimpImage::disconnect instead.

Fixes #12453
2025-01-08 17:23:16 +01:00
Anders Jonsson efbf084e3a Update Swedish translation 2025-01-08 15:56:09 +00:00
lloyd konneker fb3f8e7fe6 libgimp: fix #12494
Change the message for debugging proxy refs: say "DEBUG" instead of "ERROR".

This doesn't fix any logic.
The logic produces a spurious error msg often, scaring users.
The debug message can be seen and analyzed by devs.

Add a comment about what object proxies are normally reffed:
defaults for formal args of temporary procedures kept by persistent plugins.
2025-01-08 08:11:59 -05:00
lloyd konneker caf007b22c ScriptFu: fix #12696 improper reffing of object proxies
For old-style scripts calling script-fu-register.

Test case Demo>Clothify v2
2025-01-08 08:11:59 -05:00
lloyd konneker 3c197d9578 ScriptFu: scripts: fix two test scripts affected by changes to object array in PDB API 2025-01-08 12:00:59 +00:00
Alx Sa 1beb1f7464 core: Prevent crash when multiple channels are copied
Currently, we do not handle copying multiple channels.
The function call returns NULL but does not set an error
message - this causes a crash when we try to print out
error->message.
This patch changes the g_return_val_if_fail () call to an
IF statement, so that we can initialize the error object
with a message to prevent the crash.
2025-01-08 02:01:28 +00:00