Commit graph

56952 commits

Author SHA1 Message Date
Anders Jonsson
fedaa92185 Update Swedish translation 2026-03-01 21:13:55 +00:00
Jehan
9a2193bb93 libgimp: adding API docs and clean up a bit the GimpCurve API.
In particular, I am getting rid of several of the properties, which are
really not that good (and even bogus for some, such as "n-points").
Properties tied together like this (number of elements stored in one
prop applying to the array stored in another prop) are often a bad idea
and only end up in messy code ending up in inconsistencies.

Instead let's use signals. I am keeping the "n-samples" for now as it
can clearly be considered more "stable" than "n-points" and not meant to
change.

We'll also have to make a decision on whether we really want to keep the
samples API in libgimp, or drop all current sample functions. Right now
we cannot actually create meaningful sample points.
2026-03-01 16:47:06 +01:00
Bruno Lopes
6e8928e823 gitlab-ci, build: Fail on warnings on Clang builds making them more useful
Thanks to various improvements on babl and GEGL repos they now build cleanly.
So, let's take advantage of Clang senstive semantic analysis on future builds.

For now, this is limited to such projects and on GNU Clang and Apple Clang,
since there is still a bit of work to do on Clang-CL (MSVC) side.
2026-03-01 11:16:22 -03:00
Bruno Lopes
24f8f6f68b app: Do not unconditionally force Playground on macOS
Very weird line of code.
2026-03-01 11:15:06 -03:00
Bruno Lopes
fcba50ffcd meson: Fix meson 1.10 warning about add_languages 2026-03-01 11:02:12 -03:00
Alx Sa
804991a215 libgimp, pdb: Allow access to GimpCurve in PDB
Adds a GimpCurve object and functions in libgimp.
Rather than creating a GimpCurve object in core and
passing it back and forth, we just pass the attributes
and reconstruct it across.
In the future, we may combine this with the app/core one
and put it in libgimpbase.
2026-03-01 13:41:35 +00:00
Shigeto YOSHIDA
66efbd003c Update Japanese translation 2026-03-01 09:32:37 +00:00
Shigeto YOSHIDA
261f7ea93a Update Japanese translation 2026-03-01 09:31:37 +00:00
Shigeto YOSHIDA
8fe95ab19f Add Japanese translation 2026-03-01 09:31:08 +00:00
Marco Ciampa
f0de69a5a7 Small typo in Italian translation 2026-03-01 00:50:33 +01:00
Jehan
3a53e4743e app: copy the buffer rather than using it as source.
I think the previous code should be OK, but I had some criticals when
painting with a paint tool in the area which got extended:

> (gimp:577203): GLib-GObject-CRITICAL **: 21:37:08.402: value "-31" of type 'gint' is invalid or out of range for property 'y' of type 'gint'

It looks like there lingering pieces from the negative offset in the
buffer, which is probably a bug in GEGL?
Anyway let's go the shorter route for now, which is to copy the buffer
with a different offset. I don't think it's less efficient either
anyway.
2026-02-28 21:52:10 +01:00
Jehan
4c15be6a56 app: fix merging filters with negative top-left point.
When merging filters whose rendering was expanding in negative
ccordinates, I realized that the drawable was not properly resized (it
was resized properly when the width/height increased, but not when the x
or y points became negative, even though this "cropped" part still
showed… until you saved and reloaded your XCF!).

The problem is that drawable buffers are always stored with (0, 0)
top-left and this was just confusing our existing code. So let's check
when trying to set a buffer with a non-(0, 0) origin, and update the
offset subsequently.

I hesitated with an alternative implementation which was to edit the
buffer applied to the drawable in gimp_drawable_merge_filters(). But I
figured this would be more future-proof for other similar cases, though
I hope I did not break any use case where this was actually considered a
normal case.
2026-02-28 21:04:05 +01:00
Marco Ciampa
018eafc146 Small typo in Italian translation 2026-02-28 17:43:32 +01:00
Waris
ed72b7d5df plug-ins: Import YUV OpenEXR chroma channels as RGB 2026-02-28 14:19:27 +00:00
kaushik_B
ca931fbe33 Issue #14972: Fix GimpLabelSpin CRITICAL warnings for small double ranges
During instantiation, the widget bypassed saving the PROP_DIGITS state
because the spinbutton was not populated, leaving digits at 0. This
forced the widget into an integer state, causing step calculations to
break for small fractional ranges (e.g., 0.001 to 1.0).

Added G_PARAM_CONSTRUCT to the digits property and moved the internal
assignment outside the spinbutton check so the correct initial state
is saved immediately.

Added a check to ensure step and page do not go out of range.
2026-02-28 13:19:04 +00:00
Bruno Lopes
b7d89728c4 app, libgimpthumb, plug-ins, tools: Fix POSIX namespace warnings on MSVC 2026-02-28 10:06:46 -03:00
Bruno Lopes
2cbfad8ef3 build/macos: Use symlinks instead of patches for macOS bundle structuring
This is way cleaner.
2026-02-27 12:14:09 -03:00
Bruno Lopes
dc1771918b app: Only show the installed locales for GIMP
Closes: #15468

There is no point on showing languages that can not be used.
This was confusing distro package and Windows installer users.
2026-02-26 20:51:09 -03:00
Alx Sa
3a4bd57da6 widgets: Turn off default search in GimpPrefsBox
Same patch as cb552d3d, just applied to GimpPrefsBox.
This was visible in the Preferences Dialog, where the same
unnecessary pop-up appeared in the side panel.
2026-02-26 19:15:13 +00:00
balooii balooii
d80ad177af Issue #13401: Fix crash opening channels after apply/undo drawable filter 2026-02-26 15:06:14 +00:00
Alx Sa
90273fe90a path: Add gimp_vector_layer_convert ()
When we copy and paste a vector layer,
we need to reattach its path to the
(potentially) new image. Similar to what
we did for NDE filters in 8db97f4e,
we convert the existing path if necessary
before continuing with the gimp_item_convert ()
process. This prevents several CRITICALs,
for instance when copying a group that
contains vector layers rather than the
vector layers directly.
2026-02-26 03:20:05 +00:00
Jehan
ad936482a2 Revert "Issue #15824: waterpixels filter on a selection appears to hang GIMP."
This reverts commit d91a8b2abe.

As reported by Liam on #15824, this commit was clearly wrong and
reintroduced the old cropping bug with multiple filters. Reverting.

The next commit was likely good, though the real hanging bug is — as far
as my test go — in the GEGL op itself. This second commit 75e665f0ed was
improving things, but obviously, as the bug is still in the op, it can
still be triggered. We'll have to fix the source bug next.
2026-02-25 23:51:56 +01:00
Alx Sa
918aea3df5 dialogs: Replace custom widget in Path Export dialog
This patch replaces adding a custom widget
to the Path Export dialog with a built-in
combobox from gtk_file_chooser_add_choice ().
This makes our code more compatible
with a future port to native file dialogs
in GTK3, without a loss of functionality.
2026-02-25 21:35:52 +00:00
Alan Mortensen
d29c7b8e6b Update Danish translation 2026-02-25 16:30:01 +00:00
Alan Mortensen
7c16c54317 Update Danish translation 2026-02-25 16:17:42 +00:00
Bruno Lopes
50d4043003 libgimp: Set _NT_SYMBOL_PATH for plug-ins when relocatable
This concludes 63f5ea9d by adding support to CodeView symbols from
plug-ins with DrMingw. (Should not be needed but DrMingw is buggy).
2026-02-25 11:51:34 -03:00
Bruno Lopes
a30fc5fb7b .gitlab: Update security template 2026-02-25 11:46:26 -03:00
Jehan
75e665f0ed Issue #15824: better detect the first filter.
Ah my previous commit was working fine with a selection in the "Use the
selection as input" case, but was still hanging when "Use the entire
layer as input" was chosen.

The detection of whether we were the first filter was not working fine
when adding a new filter. Now this should work in all cases.

I don't revert the previous commit, because I think it's fine anyway.
When we have a selection, unconditionally adding a cropping-before node
on the selection boundaries seems logical to me.
Hopefully it doesn't bring back any of the cropping issues we had on
filters, but so far I could not reproduce any.
2026-02-25 15:44:29 +01:00
Jehan
d91a8b2abe Issue #15824: waterpixels filter on a selection appears to hang GIMP. 2026-02-25 15:38:23 +01:00
Bruno Lopes
d8e0f2780c .gitlab: Remove .testing subdomain from URLs
The updated bug report pages were merged on master branch of WGO.
2026-02-25 10:59:09 -03:00
Jehan
b602a63778 plug-ins: also introspect libgimpui enum values into Script-Fu.
Since libgimpui also use GIMP_ as prefix in C, we won't ever have name
clashing with libgimp, so I also remove this prefix in Script-Fu.

E.g. GIMP_ASPECT_SQUARE is ASPECT-SQUARE in Script-Fu.
2026-02-25 14:49:23 +01:00
Alx Sa
664729a55c text: Reverting 03443ffc
Resolves #11409
After Jehan's update to
gimp_drawable_filter_refresh_crop () in
0157a958, it no longer calls the cropping
functions which this commit was intended
to work around.

Additionally, thanks to other changes in
the filter code since then, reverting this
commit resolves an issue where some
Render filters would not update as you
typed more characters.
2026-02-25 13:01:25 +00:00
Jehan
0dc65755fe NEWS: update. 2026-02-24 23:12:52 +01:00
Jehan
7296099388 Issue #13368: pressure curve is missing from the GimpDeviceInfoEditor.
This was happening on Wayland in my tests, and apparently on Windows
too, according to the report. I widely simplified the code. Now we don't
list of axis anymore, and therefore we don't allow to change these
(which was not working anyway, for as long as I remember, at least on
Linux, both X11 and Wayland).

As for the pressure curve, we just show it unconditionally for any
device of type "Pen". It may mean that it might show on some rare stylus
devices with no pressure support, but in such case, it will just be a
bogus curve (it won't break the device).
And then we'll avoid all the flimsy heuristic trying to guess if a
device is supposed to have pressure sensitivity, which especially became
bad in Wayland as we have this information only on proximity. It means
that if you don't approach the stylus and were trying to set up your
pen's pressure curve with a mouse, no curve would appear!

Add to this that gdk_device_list_axes() seems very broken on Wayland and
was always returning GDK_NONE for all axis (even when only using it on
various device signal handlers, per advices by Carlos on IRC), at least
anyhow I tried to make it work, our heuristic to detect when an axis
should be ignored was completely broken on Wayland as well.

A simpler logic should work better and makes the code simpler to read
too.

It's also one less usage of GtkListStore, which is good for future GTK
versions where it got deprecated!
2026-02-24 22:54:48 +01:00
Alx Sa
1282384417 core: Update filter area if changed
Previously, we only updated an NDE filter's
`filter_area` if the filter itself contained a
width or height property.
However, the filter_area is also used by
GimpDrawableFilter to indicate where we
should draw the filter, and needs to be
updated if we scale/rotate/shear the layer
and change its dimensions.

This patch moves the code so that the
filter_area width and height is always
updated if we pass a GeglRectangle in to
gimp_drawable_filter_refresh_crop ().
2026-02-24 11:32:08 +00:00
Bruno Lopes
75ea18ad00 build/linux: Explain a bit type2-runtime peculiar check 2026-02-23 22:15:47 -03:00
Bruno Lopes
0ceff50cd9 build/linux: Add comment about colored output on Flatpak 2026-02-23 21:55:42 -03:00
Jehan
87810ae6fe app: make explicit that "White Balance" auto effect works in linear space.
This commit doesn't actually changes anything, but it fixes the
gimp_histogram_new() call, since the argument is supposed to be a
GimpTRCType, not a boolean. Yet GIMP_TRC_LINEAR is the first value in
the enum type, so it's indeed the same as FALSE.
I also set the "trc" property to "gimp:levels" config object explicitly,
to the same TRC value as the histogram, so that this doesn't depend on
the default anymore (which is linear too, right now; so this part
doesn't change a thing here again), and therefore would survive to any
possible default change in the future.

Note that it was considered to set this all to non-linear, just as it
used to be in 2.10, as requested in #15738. After discussing it with
Øyvind on IRC, we concluded that working in linear space may be a nicer
default for this feature, as we'd be doing a "meaningful rebalancing of
photon count per component". Now there may be cases where doing a
white-balancing in non-linear may yield better result, of course. For
these case, you may still go to "Levels", set to non-linear, and hit
"Auto Input Levels". This is exactly the same code runing (but in
non-linear space). The "White Balance" action still needs to be the
simple non-GUI option and keeping work in linear seems like the more
appropriate default here.
2026-02-24 01:36:32 +01:00
Alx Sa
bc02381f14 widgets: Hide move handle in Text Editor window
Since the Text Editor window uses the same
GimpTextStyleEditor widget as the on-canvas editor,
it also shows the Move handle (which doesn't work
in the Text Editor window). This patch simply hides it
so it doesn't confuse users.
2026-02-23 17:42:28 +00:00
Alx Sa
6755fa8b8d plug-ins: Fix warning in Qbist dialog_save ()
It is possible for qbist_info.path to be NULL, which
makes gtk_file_chooser_set_filename () throw a warning
about a NULL filename in save_dialog ().
This patch adds the same guard to that call as QBist
already has in load_dialog (), to make sure we have
an existing file name before trying to set it.
2026-02-23 15:40:12 +00:00
Bruno Lopes
9e392656ab build/linux: Update openexr and libwmf modules 2026-02-22 18:02:00 -03:00
Alx Sa
b9d4e315e8 core: Adjust logic for gimp_drawable_filter_refresh_crop ()
In 0157a958, we prevent the NDE crop refresh
code from running unless the filter's crop
enabled is TRUE. However, this prevents
the width and height settings built into
certain filters from running, separate from
the crop nodes in GimpDrawableFilter.
This patch moves the check to only cover
the calls to gimp_drawable_filter_set_crop ().
This should fix the width/height update issue
without causing a regression to #14442.
2026-02-22 18:10:15 +00:00
Bruno Lopes
21f88c1a72 .gitlab: Update performance template 2026-02-22 13:02:53 -03:00
Bruno Lopes
4a6dab23ca .gitlab: Update feature template
From https://gimp.org/bugs/report.html:

> Related to bug reports are enhancement requests. It is recommended to discuss enhancements with developers first, for instance on IRC or in the forums. This is to make sure that the enhancement requests that are filed are well-specified and aligned with the overall goals the developers have for GIMP.
2026-02-22 12:50:04 -03:00
Bruno Lopes
ee939f7d89 .gitlab: Detailed report instructions were moved to gimp-web
See: d2c4038abd

Our practice of writing everything on the template made the page on gimp-web
fall into oblivion. This was suboptiomal since the template got very big and
hard to read, with many reporters not filling it at all.

So, let's try to improve cleaning the template and directing them to gimp-web,
which have images and such that should clarify how to make good reports.
2026-02-22 12:28:23 -03:00
Alx Sa
581afd1516 core: Fix GEGL warning after bucket fill
In 6279d7b7, I did not free the GEGL buffer created
by gimp_pickable_get_buffer_with_effects ().
This resulted in an "EEEEeEeek! 1 GeglBuffers leaked"
warning on exit, which of course could cumulate.

This patch makes to sure to clear out the src_buffer
both times it's used.
2026-02-22 00:28:16 +00:00
Bruno Lopes
693f46dc67 gitlab-ci: Only push image to Registry if it was changed
This is pretty obvious and will speed up Snap builds a bit,
since the Ubuntu/Snap image is the biggest on Container Registry.
2026-02-21 21:11:13 -03:00
Bruno Lopes
eecd0cdd14 gitlab-ci: Build Docker images without OCI runtime
chroot is closer to how Kaniko behaved and it is how the FD
ci-templates behave on gimp-web and gimp-web-devel CI.
2026-02-21 21:10:42 -03:00
Alexander Alexandrov Shopov
24f1dd6956 Update Bulgarian translation 2026-02-21 18:07:02 +00:00
Alexander Alexandrov Shopov
53d55f0e1d Update Bulgarian translation 2026-02-21 17:44:58 +00:00