Commit graph

56241 commits

Author SHA1 Message Date
Bruno Lopes
0c70a9fe00
app, build, plug-ins: Run interpreters conditionally on Windows console
Closes: #12642

Now, we will check at runtime if GIMP is not on a console and
use the corresponding _win.interp file on such case only.
2025-11-09 15:56:32 -03:00
Alx Sa
40fcefad9c actions: Fix "Merge Visible Path" behavior for vector layers
Similar to 0dd7d9a9, but preventing users from breaking
vector layers when using "Merge Visible Paths" to merge
the associated paths.
2025-11-09 18:33:43 +00:00
Jehan
832c0d4e7f desktop: add release news URL and make release date as TODO. 2025-11-09 17:35:05 +01:00
Jehan
0be9672d56 Issue #15260: allow translation of percent sign. 2025-11-09 17:34:10 +01:00
Jehan
1e57daa69f README: prepare for GIMP 3.2.0 RC1. 2025-11-09 17:20:56 +01:00
Alx Sa
ea3c4dfc5a core: Pass through group mask size matches render
In 85d381bd, we fixed pass through layer groups to match
the size of the group render, allowing for filter effects to
be applied on all layers below.
This patch extends that fix to layer masks created on pass
through layer groups. This allows you to create a mask and
then selectively hide/show effects on the layer below,
like a maskable adjustment layer.
2025-11-09 15:47:17 +00:00
Kolbjørn Stuestøl
95a55f78dd Update Norwegian Nynorsk translation 2025-11-09 15:35:28 +00:00
Bruno Lopes
28792d7517
build/windows: Fix gspawn* bundling now we proper attach to Windows console 2025-11-09 10:44:32 -03:00
Luming Zh
e7f8be3581 Update Chinese (China) translation 2025-11-09 01:05:16 +00:00
Jehan
d23e8f8606 desktop: add some release notes demos. 2025-11-08 23:21:26 +01:00
Jehan
b6821d050a NEWS: update. 2025-11-08 23:11:59 +01:00
Jehan
5070212903 libgimp: minor cosmetic spacing fix. 2025-11-08 22:44:20 +01:00
Jehan
926d5c6daa app, libgimp*, plug-ins: fix previous commit and add gimp_cairo_surface_get_buffer().
The previous commit was not taking into account usages of
gimp_cairo_surface_create_buffer(), other than the text layer rendering
usage, as it was focused on fixing #14970.

In particular, in other pieces of code, we were using a temporary
GeglBuffer as a way to edit the original Cairo surface but the syncing
back was not happening anymore. So previous commit was breaking all
thumbnails of layers or images, as well as PDF export for all raster
layers.

After some thought, I decided to implement a new function
gimp_cairo_surface_get_buffer() which would do what
gimp_cairo_surface_create_buffer() was doing, but adding a boolean flag
to declare whether or not we were expecting to sync back into the Cairo
surface's data. After all, when we don't need to sync back, better avoid
the useless work of copying possibly huge data.

I also added back the possibility of returning a linear-memory backed
buffer, after some discussion with pippin. Because for very small
surfaces, and if we are indeed looking to sync back into the source
Cairo surface, the advantages of using a linear buffer may still be
worth it, even though it's not true for the general case (where tiled
buffers will be much more efficient). I used 4096 (64^2 because our
current tile dimensions are 64 right now in GIMP), though this number is
kinda random and doesn't matter too much (it doesn't have to be the
square of the tile's width or height). I don't put any info about this
in the new function's documentation because developers should not have
any expectations on the type of buffer they get (only whether or not it
will sync back to the source).

As a consequence of all this, gimp_cairo_surface_create_buffer() has
been deprecated as of GIMP 3.2, though it will still work the same. The
new function will be recommended as a replacement.
2025-11-08 20:34:55 +01:00
Idriss Fekir
ade0bdc487 libgimpcolor: create gegl buffers with gegl_buffer_new instead of gegl_buffer_linear_new_from_data
Creating a gegl buffer from some data (e.g. cairo surface) through gegl_buffer_linear_new_from_data
causes crashes if the cairo surface is too big, because the gegl buffer will have only one huge tile
so tile_size will overflow if surface size > INT_MAX. Using the appropriate api, gegl will calculate
tile size and create the needed tiles automatically.
2025-11-08 20:11:09 +01:00
Gabriele Barbero
5d03bb847e core, widgets: ensure to add colors of GimpFillEditor in color history once
Previously, changing the color via the GimpFillEditor color button
immediately pushed each intermediate value into the color history,
polluting it with transient previews. Only the final choice
confirmed by the user should be recorded.

Now the color is recorded in the history only when the user explicitly
confirms the selection (e.g. OK/Apply), preventing noisy
history entries while preserving the expected behavior when a color
is accepted.

core: add spaces to fix alignment
2025-11-08 18:50:33 +01:00
Bruno Lopes
e1ca33df26
build/linux: Bump openjph module to 0.25.2 2025-11-08 14:12:48 -03:00
Bruno Lopes
3e3fffff65
app-tools: Port fixes from 89132717 and c79bf579 to gimp-debug-tool 2025-11-08 13:53:41 -03:00
Bruno Lopes
c79bf5790d
app, libgimp: Fix truncation and lack of color on attached Windows console 2025-11-08 12:02:56 -03:00
Martin
dc3cda93cb Update Slovenian translation 2025-11-08 14:24:19 +00:00
Bruno Lopes
8913271706
app: Catch CTRL + C signal on Windows attached console
This solves the second issue noted on the last paragraph of 9e795acb
2025-11-08 10:03:41 -03:00
Jehan
5ff80c7dfb app: fix duplicating link layers.
Link layer duplicates were reusing the same GimpLink as the original
layer, because the properties sync was done after we created a new link
object.
2025-11-08 13:34:16 +01:00
Sabri Ünal
3027db96ff dialogs: "Maximum Image Size" changed to "Maximum new image size"
Because of the real GUI string is "Maximum new image size", this patch
was necessary.
2025-11-08 08:56:48 -03:00
Jehan
8a0754a5be Issue #15121: link layer positioning problem.
Only store a PROP_TRANSFORM if there is a transform. Otherwise the
stored offsets are bogus and would only break the position at load.
2025-11-08 12:37:45 +01:00
Jehan
b2e70c5b89 Issue #15206: do not initialize transform tools when swapping tools…
… automatically.

We still initialize on manual swapping through the action.
2025-11-08 11:26:04 +01:00
Alx Sa
0dd7d9a936 actions: Fix "Delete Path" behavior for vector layers
Instead of deleting all selected paths except
for those attached to vector layers, we
stop the action and notify the user that
they can not delete paths attached to
vector layers.
2025-11-08 04:55:30 +00:00
Alx Sa
32c9d11fd1 widgets: Don't hardcode item column in blink_item ()
In gimp_item_tree_view_blink_item (), we
originally used "3" because that is the
item column in the layer and channel
dockables. However, the path dockable
item column is at "2" since it lacks a
filter column.

To make this more general, Jehan
suggested we create a
gimp_container_tree_view_get_main_column_position ()
function in GimpContainerTreeView that
finds and returns the column index of
the main item. Then, we use that function
in gimp_item_tree_view_blink_item ().
2025-11-08 04:55:30 +00:00
Luming Zh
e351203130 Update Chinese (China) translation 2025-11-08 01:54:57 +00:00
Luming Zh
a048b50a0b Update Chinese (China) translation 2025-11-08 01:48:37 +00:00
Gabriele Barbero
c5e9b51c0d Revert "core, display: Enable resize for GUI layer copying"
This reverts commit 975d1a4aa3.
2025-11-07 22:50:45 +00:00
Gabriele Barbero
50dfd8d9e9 core: enable the resize undo for drawables inside gimp_item_resize
This commit makes sure each layer has the resize undo enabled
when rezising, in order to make sure that are correctly added to the
undo step.
2025-11-07 22:50:45 +00:00
Idriss Fekir
cd2d2bd8bc GimpContainerEntry:Fix non unique names issue and wrong callback signature
Signature for "match-selected" signal on GtkEntryCompletion was wrong,
and code didn't handle the case of multiple resouces sharing the same
name. (e.g. 2 different fonts both named "Holiday").
2025-11-07 21:27:57 +00:00
Ekaterine Papava
8d212a2153 Update Georgian translation 2025-11-07 14:33:07 +00:00
Ekaterine Papava
06c00f48fd Update Georgian translation 2025-11-07 14:04:20 +00:00
Ekaterine Papava
ed5916f0c2 Update Georgian translation 2025-11-07 13:56:06 +00:00
Martin
ac7ea98923 Update Slovenian translation 2025-11-07 08:55:04 +00:00
Alx Sa
ac01a8b625 text: Add alpha when reverting text rasterization
Resolves #4275
Text layers should have transparency when they are
not rasterized. It is possible to remove the alpha channel
when a text layer is rasterized, which causes a CRITICAL
when gimp_text_layer_render () runs to re-render the
vector-based text layer when the rasterization is reverted.

This patch adds a check in the set_rasterized () function to
verify the text layer still has an alpha channel when it's being
converted back to a vector-based layer. If the alpha channel
was removed, it is restored before re-rendering.
2025-11-07 03:49:30 +00:00
Alx Sa
ab620151c5 core: Workaround for link layer monitoring on Windows
As of GLib 2.86.1-1, GFileMonitors created with the
G_FILE_MONITOR_WATCH_HARD_LINKS
flag are not monitored on Windows.
This means that link layers will not
automatically update when the external
source is edited.
We will temporarily use the
G_FILE_MONITOR_NONE flag on Windows
until this is resolved
2025-11-06 22:19:54 +00:00
Jehan
459f80a6de Revert "widgets: Update tool item visibility code"
This reverts commit 2ba6725761.

This too is wrong. First it mentions "visible-vertical" and
"visible-horizontal" properties of GtkAction, but this is not it! Two
similarly named properties are also on GtkToolItem and these are not
deprecated! Looking at the code, tool_button is a GimpToolButton, whose
parenting indeed goes up to GtkToolItem (and that's obviously not an
action anyway).

Secondly, it creates other bugs, in particular I now sometimes have a
completely empty toolbox. That's clearly wrong.

Reverting for now. Issue #9813 will have to be fixed differently.
2025-11-06 22:00:21 +01:00
Jehan
3215e6c967 Revert "app/widgets: Guard against division by zero"
This reverts commit ee421da346.

This is wrong. This case should not happen, or if it does, this is very
likely not the proper fix. In fact, it was trying to fix a bug created
in commit 2ba6725761 which is also wrong (and which I'm going to revert
next).

See also my comment in Gitlab:
ee421da346 (note_2596612)
2025-11-06 21:55:00 +01:00
Jehan
782eca9f19 NEWS: update. 2025-11-06 18:19:38 +01:00
Bruno Lopes
0f4cb01a7d
build/linux: Update openexr, poppler and suitesparse modules
Synced from: 805e07d1fc
2025-11-06 13:26:40 -03:00
Alx Sa
587c260eff plug-ins: Add option to close via ESC key
Resolves #15221
Unlike most of our plug-ins, Animation Playback
and ImageMap use GtkWindows so they're
not wired to close when the user presses
Escape.
To standardize this with other plug-ins,
this patch adds an entry for Escape in the
existing ImageMap key-press-event function
and adds this functions to Animation Playback.
This patch also fixes a crash in Animation Playback
that occurs if you use the arrow keys to
move the frame slider to the left when
you're at 0, due to it trying to pass an index
of -1 to the frame array.
2025-11-06 07:33:06 +00:00
Ondřej Míchal
ee421da346 app/widgets: Guard against division by zero
Resolves crashes happening occasionally when opening GIMP.

Maybe related to 2ba6725761bfa687fcab0f259712fcdd8aac0bdd?
2025-11-06 05:06:09 +02:00
Ondřej Míchal
c3fcbd0019 plug-ins: Port from GimpScaleEntry to GimpSpinScale
This ports some plug-ins using directly the GimpScaleEntry API.

The only plugins left now are

- gimpressionist,
- gradient-flare, and
- CML explorer.

Helps with https://gitlab.gnome.org/Teams/GIMP/Design/gimp-ux/-/issues/503.
2025-11-06 05:06:09 +02:00
Ondřej Míchal
1548905e59 plug-ins: Port from GimpScaleEntry to GimpSpinScale
This ports the use of the widget in all plug-ins using the
GimpProcedureDialog API.

Helps with https://gitlab.gnome.org/Teams/GIMP/Design/gimp-ux/-/issues/503.
2025-11-06 05:06:09 +02:00
Alx Sa
66d544c5d5 plug-ins: Remove duplicate labels in Fractal Explorer
Since GimpProcedureDialog automatically adds labels
to GimpChoice parameters when they're displayed in the
GUI, we don't need to add "Red", "Green", or "Blue" labels
to the frames that contain the radio buttons like we did in
2.10.
2025-11-06 02:36:03 +00:00
Alx Sa
2ba6725761 widgets: Update tool item visibility code
"visible-vertical" and "visible-horizontal" attributes
of GtkActions were deprecated in GTK 3.10, and since
the GAction port, we don't set them anyway on actions.
This seems to have impacted the ability to toggle a toolbutton's
visibility when a toolitem's "show" property is changed.
This patch replaced the deprecated "visibile-vertical" and
"visible-vertical" properties with a single "visible" property,
which consistently updates when the eye icon is toggled in
GimpToolEditor.
2025-11-05 17:05:52 +00:00
Ondřej Míchal
a8da6d3ba5 libgimpwidgets: Cast ints to doubles before division 2025-11-05 18:48:29 +02:00
Jacob Boerema
b962bdbddd plug-ins: crash on exporting dds with invalid number of mipmaps
Closes #15226

When you previously exported a dds with the pre-existing mipmaps,
that will be the option selected in the export dialog the next time.

If, however, that next time there were an incorrect number of mipmaps
available, the option was grayed out, but selected. Exporting then
caused a crash due to less mipmap layers being available than expected.

When writing the dds settings we need to update that setting in our
config object, so that's what we add here. Also remove updating the
local variable since that will not be used anymore in this function.
2025-11-05 09:28:54 -05:00
Alx Sa
96a921f4d5 actions: Remove image from container after deletion
Resolves #9285
In images_delete_image_cmd_callback (), we dereference
images which we want to delete. This works for images created
via the GUI. However, images created via PDB scripts are not
automatically connected to the display if created with no layers.
If you try to delete them, they will be dereferenced but will still
in the ImageView dockable. This can cause a crash if you try to
access the container again, since it will point to an unreferenced
variable.

This patch removes the image from the container first before
dereferencing it, to prevent the crash.
2025-11-05 05:44:30 +00:00