forked from GNOME/gimp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNEWS
1316 lines (1206 loc) · 66.6 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
------------------------------
GNU Image Manipulation Program
Development Branch
------------------------------
This is the unstable branch of GIMP.
Overview of Changes from GIMP 2.99.10 to GIMP 2.99.12
=====================================================
Core:
- Added concept of "hidden item" to a GimpImage. This would allow to
process non attached items for internal processing more easily.
- Do not show a crosshair anymore when "Show brush outline" is
checked and "Show pointer for paint tools" is unchecked, if the
brush outline cannot be drawn (in which case a fallback 4-arcs
generic outline showing the size is displayed), for instance because
using a dynamic changing the size.
- When both "Show brush outline" and "Show pointer for paint tools"
are unchecked, show a minimal visual feedback of a few pixels only,
as conspicuous as possible, instead of a crosshair.
- Move and reorganize pointer-related settings in Preferences from
"Image Windows" to "Input Devices" tabs.
- On macOS, delay opening new images dropped on the application icon
in the dock to after GIMP is fully initialized.
- Some code reorganization and factorization of image colormap and
palette handling.
- Language changes will trigger plug-in query() call at next GIMP
restart. This allows to have strings in query() and stored in GIMP
config being re-localized.
- Keyboard grab removed from the canvas display, hence getting rid of
annoying grab permission warnings on Wayland.
- Preferences > Display > Transparency > Check style has now a new
option "Custom checks" allowing to select any RGB colors.
Tools:
- The "Fill by line art detection" mode of the Bucket Fill tool got
the following improvements:
* New "Stroke borders" option where you can select a paint tool
(except source tools) to stroke the fill mask before filling with
the color. The settings will be the ones as set on the
corresponding tool (except for the color).
* The options got reorganized in 3 sections (Line Art Detection,
Line Art Closure and Fill Borders) and some options were reworded.
This should hopefully make the now many options more
understandable.
- Full text layer's text size will now be changed when changing font
size in the text editor window, when no text is selected.
Graphical User Interface:
- New "Drag to Zoom" mode and speed settings in Preferences. Existing
drag-to-zoom behavior was linear depending only on pointer direction
(which makes it more or less time-based if we consider that pointer
events are regular). The new mode will take the actual distance
moved into account allowing to go faster or slower by dragging
further or not. The "speed" settings allows a finer zoom speed
control for both the old and new modes.
- Touchpad gesture rotation (2-finger pinch) on canvas now
implemented. Note that rotation or scaling by pinch are exclusive so
GIMP will detect the expected behavior through the initial movement
and will therefore lock on either rotation or scaling for the whole
duration of the pinch.
- Slight tweak of the "You will have to restart GIMP" popup: the list
now uses nicer "bullet point" characters and the nick (short
description) is shown rather than the internal property name.
Command Line Interface:
- Unless only one batch interpreter is available, there is no default
interpreter anymore (it used to be script-fu). Therefore if you set
`--batch` but not `--batch-interpreter`, GIMP will output an error
message and will list the available interpreters.
- GIMP will stop running the batch commands as soon as one command
fails (it won't try the following ones).
- A new `--quit` option allows you to quit GIMP immediately after
running the batch commands.
- If `--quit` is set and batch commands are run, the GIMP binary exit
code will propagate errors from any batch failure. Exit codes are
taken from command Linux error codes: 0 for success, 69 for service
unavailable (e.g. setting a non-existing interpreter name), 64 for
usage (e.g. not specifying any interpreter or calling errors), 70
for execution errors (bugs in the interpreter plug-in) and 130 for
canceling the call.
Plug-ins:
- BigTIFF: our TIFF plug-in now officially supports BigTIFF import and
export.
* Import was actually already working transparently if you had
a recent enough libtiff. Now the recent libtiff is enforced by
dependency requirements.
* Export support was added with a checkbox in the interactive dialog
and a new "bigtiff" argument in the "file-tiff-save" PDB
procedure.
* When an interactive export of ClassicTIFF fails for the explicit
reason of "Maximum TIFF file size exceeded", the export dialog is
raised again with a message proposing to try again as BigTIFF or
trying another compression algorithm.
This allows because discoverability and understandibility of the
issue, while not forcing BigTIFF export (since it might not be
supported everywhere).
- GIF: new option to specify a number of repeat for animated GIF
(rather than single run vs. infinite loop only).
- help-browser: rewritten to use GtkAction and GtkApplication, even
though it's now a deprecated plug-in (though it's a good example for
porting other plug-ins the same way).
- PNG: the format does not have any flag for linear RGB, but it can
simply include a linear profile (or a 1.0 gAMA chunk). Therefore
since we always attach the profile when importing (or transform the
gAMA chunk into a profile), we now always load PNG images as
non-linear backend.
- python-fu-eval and plug-in-script-fu-eval ported to new
GimpBatchProcedure class.
- JPEG:
* CMYK export is now possible. It currently uses the "Soft-proofing"
profile as set in Preferences.
* CMYK imported ported to GEGL/babl conversion.
- WebP: new option "Use Sharp YUV" available in non-lossless export.
It renders sharper edges at the cost of a slower export.
- DDS:
* 16-bit masks now supported.
* DDS images with single 16-bit channel support added.
* DDS images with 2 16-bit channels correctly converted to 16-bit
RGB images.
* More robust DDS loading.
* New "Flip image" option: some game engine require a flipped image.
Rather than flipping, exporting, unflipping process, let's have an
option to flip the result at export time.
- script-fu:
* Various updates to get the API back in shape.
* Porting doc updated.
- FLI:
* Internal type usage improvements, mnemonics added, etc.
* 1-frame animation now loaded correctly (it's not really an
animation then, yet it should still open!).
* Better error handling.
* Layer names now include the delay in ms.
* More robust FLI/FLC loading, double-checking data rather than
assuming that the file writer properly followed the specs.
- Several plug-ins now follow the user-set checkboard color
preferences, when relevant.
API:
- Changes in libgimpbase:
* gimp_checks_get_colors() added.
* gimp_checks_get_shades() removed (replaced by gimp_checks_get_colors())
- Changes in libgimp:
* New functions:
+ gimp_image_metadata_save_filter()
+ gimp_check_custom_color1()
+ gimp_check_custom_color2()
* New class:
+ GimpBatchProcedure: procedure usable as a batch interpreter on
command line.
* Protocol bumped to handle the check colors passed at call time on
the wire.
- Changes in libgimpwidgets:
* Freedesktop portal implementation of GimpPickButton now checks the
version of the XDG portal since `PickColor()` API only got added
in version 2.
Translations:
- New Galician and Georgian translations for the installer.
Build:
- libtiff dependency's minimum required version bumped to 4.0.0.
- gexiv2 dependency's minimum required version bumped to 0.14.0.
- Our meson/Debian CI now runs `meson dist` too.
- gvfs is marked as an expected dependency for GIMP (as a GIO module)
on Linux, since it seems we wouldn't have HTTP support without. This
is only written in the INSTALL file though, no tests are run on
configure time.
- The distribution stage now has a new `dev-docs` job containing both
the C API reference (gi-docgen) and the Python and Javascript (gjs)
ones (g-ir-doc).
- The `pdbgen` (generation of PDB source files) build step is finally
ported to meson too, which is a major step to one day consider this
build system out of the "experimental" zone.
- Windows installer's gettext files (.po) will now also contain
extracted comments from the source to give more context to
translators.
- Flatpak manifest upgraded with new version constraints so that the
flatpak-external-data-checker does not warn wrongly on major update
when we don't want to or can't update immediately.
- meson is now recommended for Windows and macOS builds and our
official installer and DMG respectively are now built (still from
CI) with meson.
- Flatpak manifest improved with version constraints for dependencies
where we should not update just yet (hence don't want new version
notifications).
- appstream-util replaced by appstreamcli for AppStream file testing
(requires appstreamcli 0.15.3 or over).
Overview of Changes from GIMP 2.99.8 to GIMP 2.99.10
====================================================
Core:
- Linked layers concept replaced by named sets of layers:
* One can now store your current selection of layers under any given
name and select it again later.
* You can also search for layers by their names with patterns
(as configured in Preferences, see next news item) and save this
pattern search if desired.
- Preferences > Interface now has an "Item search" with a dropdown
settings proposing the following values:
* Basic text search: this search does tokenization, case-folding and
UTF-8 normalization. Moreover ASCII alternates are compared, which
means that e.g. "e" would matched accented versions (such as "é"
or others).
* Glob pattern search: this is the GLib implementation of this
pattern syntax. It matches '*' (wildcard) and '?' (joker). GLib
docs notes also: "Note that in contrast to glob(), the '/'
character can be matched by the wildcards, there are no '[...]'
character ranges and '*' and '?' can not be escaped to include
them literally in a pattern."
* Regular expression search: Perl-compatible regular expressions as
implemented in GLib.
- New item visibility lock: forbidding to change the state of
visibility of a given item. This is useful when shift-clicking
massively items visibility, but you want to exclude some specific
items from the visibility switch.
- New internal API gimp_widget_blink_rect() to blink only specific
area of a widget, which may be useful for various notification-type
exchanges. This is used in particular to blink lock cells in
GimpItemTreeView in order to point attention to the reason why an
action is forbidden (e.g. when trying to paint on a layer with
pixels locked, a message would be shown on status bar and the "Lock
pixels" icon would blink).
- XCF version 16 with support of item sets.
- Wayland:
* Clean some popup code out of gtk_menu_popup() which is deprecated
and won't work anymore on Wayland (wrong positionning).
* Use GtkGestureDrag in ColorWheel module and ScrolledPreview widget
to avoid unwanted popups and make us future-proof for GTK4.
- macOS: various improvements for macOS support of the development
version. In particular the slowness issues have been solved and
various bugs have been fixed.
- The debug dialog only gets a backtrace of the main thread now,
because of some bugs in GDB locking GIMP when trying to get a full
backtrace for all threads.
- The line art data is now stored for a few additional minutes in the
user context after closing the bucket fill tool. This allows quick
switch between tools without forcing a recomputation of the line
art.
- Stroking a path with source tools (Clone, Heal…) is now possible
when the tool is active and a source was selected.
Technically it's more of a bug fix because the GUI existed as though
it was meant to work, but since the report has existed for more than
13 years and I'm not sure it has ever worked, it's worth writing it
here.
- Block the statusbar from needlessly triggering full canvas redraws
by not propagating its resize requests. This is quite a useful
optimization for macOS in particular (but any OS in general too).
- Alpha and position locks can now be set on layer groups. Alpha lock
on groups mostly works like pixel lock (except for the alpha channel
only). Position lock work both ways by forbidding moving child
layers but also parent layers.
- XCF version 17 with support of visibility locks, as well as ability
to set alpha or position locks on layer groups.
User Interface:
- Link icon removed from the Layers dockable.
- Lock icon its now made visible next to the "Eye" icon (visibility)
on each item row, where the Link icon was. It raises a popover to
switch all available locks (contents, position, visibility, alpha):
* This makes locks much more obvious rather than when they were at
the dockable header.
* This also works better with multiple selection of items (when one
selected item is locked and another is not, the lock button were
ending up in inconsistent state).
* This is clearer by showing or not icons (rather than always
showing several icons, yet with toggle design which is not even so
understandable depending on the theme used). If no locks are set,
nothing is shown; if only one lock is set, a specific icon is
shown; if several locks are set, a multi-lock icon is shown (and
one need to click to get the list of locks).
* Locks can now be set massively with shift and alt-click (see next
item) with the same logics as you can change visibility massively
on the eye button.
- Visibility (eye icon) and lock columns in the item dockables are
given an icon header to be more discoverable.
- Alt-click on eye and lock icons allows to massively switch
visibility/lock state but only within selected items (unlike
shift-click which switch within all items at same level).
- Channels and vectors are now multi-selectable (though actions may
have not been all updated yet to handle multiple items).
- On-hover indicators around inactive/unset eye/locked toggles in
Layer/Channels/Paths dialogs.
- GimpSpinScale made more compact.
- New "Welcome dialog" which appears only after a new installation or
an update, will show a few common links, and the release notes
(taken from the AppStream data, so they can even be localized).
- The new "Welcome dialog" comes with a new splash screen by Aryeom.
Tools:
- It is now possible to enable/disable dynamics in a single checkbox.
The dynamics "Dynamics Off" which used to be in the default list has
been removed as disabling dynamics is now equivalent and much faster
(it's also faster to get back to whatever dynamics you were using
before).
- A new action "context-dynamics-toggle" is available, allowing to
switch dynamics ON/OFF (see previous news item) with a shortcut.
- New option "Allow closing lines in selected layer" in the "Fill by
line art detection" mode of bucket fill tool. Basically this allows
to use the fill color (foreground or background color) as closure
color in the drawable to be filled. This is an additional step after
the line art computation to allow fast usage.
Plug-ins:
- PSD:
* new support for loading 16-bit per channel CMYK images.
* new support for files in LAB colorspace.
* new support for loading 32-bit per channel images (some code
existed yet may have never really worked).
* Add extra layer groups when loading PSD images with clipping
layers: PhotoShop handles clipping layers in a different way than
GIMP. The only way to have it look the same is by adding extra
layer groups. PSD layers that have clipping set, combined with the
first non clipping layer below it are grouped together in a new
layer group. Doing this results in the same image as the PSD
merged image unless there are other PSD elements in play that we
don't handle yet.
* PSD layers with clipping set need clip to backdrop as composite
mode: Certain PSD layers have a flag called clipping set to 1. We
were not handling this flag and had some reports about colors
bleeding where they were not supposed to. We are going to set
GIMP's layer composite_mode to GIMP_LAYER_COMPOSITE_CLIP_TO_BACKDROP,
which is the closest we can get to PhotoShop's clipping. With
this, the colors won't bleed anymore.
- JPEG XL:
* Bit depth now selectable in JXL export.
* Import in 8-bit and 16-bit integer precision now possible for
lossless images. (GIMP used to import all JXL images as 32-bit float
precision images).
* New very fast export settings: thunder and lightning (fastest).
* Compression slider is disabled for lossless.
- Screenshot:
* Remove KDE and GNOME screenshot portal in favor of Freedesktop
portal. Security restrictions make them more and more unsuable on
recent KDE and GNOME versions.
* Set the "interactive" option to TRUE for the Freedesktop API, so
that the screenshot options are presented immediately (instead of
taking a screenshot, then only proposing options to try again).
This is more consistent to how our non-D-Bus screenshot plug-in
used to work.
* Windows: cursor capture option now available.
- CUR: added load and export support for Microsoft Windows cursor
(.cur) files.
- HEIF: bit depth heuristic removed for the settings. The plug-in just
stores and set back the last used values as for other settings
instead of trying to be "clever".
- help-browser and webpage are now marked "unmaintained" and building
them is discouraged, except for developers. The reasons are: the
multiple problems for building, while it is not even available on
Windows anymore (and unsure if it will ever be solved anytime soon),
bringing features which nowadays most people have with browsers
installed by default on systems (allowing to read the manual and
take full webpage screenshots).
Build:
- Improved Coding Style document with commit message styling, git
usage, comment styling, natural language text rules, localization
and some section reorganization.
- GExiv2 dependency bumped to 0.12.2 (fixing bothersome warnings on
some unknown metadata domains).
- libjxl dependency bumped to 0.6.1.
- New meson option -Dcan-crosscompile-gir=true to force
GObject-Introspection generation even when cross-compiling (some
people manage to do it, e.g. with Yocto).
- Added .clang-format file and new CI pipeline to verify coding-style
issues in merge requests.
- New tool `flatpak-releases` to easily list and install specific
versions of our flatpak builds, which can be a great help when
debugging or trying to bisect with released binaries.
- Important refactoring of icon builds:
* Whether using meson or autotools, and whether installing vector
icons or raster ones (with --disable-vector-icons), the same lists
are always used and no icons are missing. The new custom tool
tools/generate-icon-makefiles.py makes sure the Makefile list is
in sync with the meson one.
The lists are committed in icons/icon-lists/ with a "usage
grouping" logics when possible.
* PNG versions for Color and Symbolic icon themes should not be
committed anymore. The Symbolic PNG version are generated with
GTK tool gtk-encode-symbolic-svg and the Color PNG version are
rendered with a new custom tool tools/colorsvg2png.c.
* New weekly CI to build with raster icons on meson and autotools
and making sure the build systems are well synced.
* Meson's -Dvec-icons option renamed to -Dvector-icons.
- meson dependency bumped to 0.53.0.
- We recommend fontconfig 2.13.95 or over on Windows where support for
user-installed fonts (feature appeared in Windows 1809) was
implemented. GIMP had its own workaround until now, which got
removed in this version.
- Optimization of the DLL search script for creating the Windows
installer, which made the "packaging-win*-native" jobs in particular
run from over 2 hours in some cases to about 10 minutes. So it's a
big gain for the creation wait for the Windows installer.
- GEGL minimum required version bumped to 0.4.36.
API:
- Vala bindings gimp-3.vapi and gimp-ui-3.vapi were renamed to
gimp-3.0.vapi and gimp-ui-3.0.vapi respectively in the autotools
build (now consistent with meson).
- Changes in libgimp:
* GimpStringArray type was removed in favor of GStrv. Various libgimp
API were updated to use GStrv, and relevant plug-in procedures with
GStrv arguments or return values were updated as well.
* New functions:
+ gimp_context_are_dynamics_enabled()
+ gimp_context_enable_dynamics().
+ gimp_item_get_lock_visibility()
+ gimp_item_set_lock_visibility()
+ gimp_pdb_run_procedure_config()
* Removed functions:
+ gimp_item_get_linked()
+ gimp_item_set_linked()
- Changes in libgimpui:
* New widgets:
+ GimpLabelColor (now used by default for GimpRGB properties in
GimpProcedureDialog)
+ GimpLabelEntry (now used by default for string properties in
GimpProcedureDialog)
+ GimpSpinScale (formerly a core-only widget, e.g. used by the
"Opacity" slider on the Layers dockable, moved to libgimpui to be
usable by plug-ins)
* New functions:
+ gimp_color_area_enable_drag()
+ gimp_event_triggers_context_menu(): alternative to
gdk_event_triggers_context_menu() with the additional ability of
using button release events as contextual menu triggering
(instead of press events), which might be prefered in some
cases. Other than this, it uses exactly the same conditions as
its GDK counterpart.
+ gimp_procedure_dialog_get_spin_scale()
+ gimp_prop_label_color_new().
+ gimp_prop_label_entry_new()
+ gimp_prop_spin_scale_new()
+ gimp_prop_widget_set_factor()
* Improved functions:
+ gimp_procedure_dialog_get_widget() can now generate widgets of
type GimpSpinScale (for int/double properties) and GimpLabelColor
or GimpColorButton (for GimpRGB properties).
+ gimp_procedure_dialog_get_color_widget() now only return
GimpLabelColor widgets (editable or not).
Documentation:
- API documentation is now built with `gi-docgen` instead of
`gtk-doc`. The syntax for in-comment documentation is slightly
changed.
- Important rework of the developer documentation has started in
devel-docs/.
Translations:
- 20 translations were updated: Basque, British English, Catalan,
Chinese (China), Danish, German, Greek, Hungarian, Italian, Kabyle,
Latvian, Lithuanian, Polish, Portuguese, Russian, Slovenian,
Spanish, Swedish, Ukrainian, Vietnamese.
Overview of Changes from GIMP 2.99.6 to GIMP 2.99.8
===================================================
Core:
- Selection display implementation now updated to more modern display
server logics when drawing to display buffer. This fixes selection
drawing in Wayland and macOS Big Sur.
- "Create a New Image" default action is "OK" so that hitting Enter in
text/number fields is equivalent to clicking OK.
- Paint tool core code can now receive multiple drawables as input
though it is disabled by default, unless a tool calls
gimp_paint_tool_enable_multi_paint() in its init() method. This is
only used in source tools so far.
- Clicking anywhere on toolbox empty space (dead areas between
buttons) or on Wilber's drop area, as well as on the toolbox buttons
themselves, actively focuses the canvas (similarly to the `Esc`
shortcut).
- Config folder migration for GIMP 3 with initial implementation.
- Action "view-rotate-reset" renamed to "view-reset" (resets both
flipping and rotate). New "view-rotate-reset" and "view-flip-reset"
for resetting rotation and flipping respectively.
- New GimpEarlyRc class replacing GimpLangRc for very early config
parsing (it used to be for language setting, now also for the
pointer input API choice on Windows).
- All g_memdup() ported to g_memdup2() thanks to GLib version bump.
- Various leaks and other bugs fixed, notably with several static
analyzer results
- Add metadata preference for saving thumbnail by default: saving a
thumbnail is closely related to the other metadata preferences,
but so far this was the only one that didn't have a preference for a
default user value. A new settings in the "Image Import & Export"
section of the Preferences allows to select whether thumbnail saving
should be enabled by default or not.
- Preferences now allows to select the input device API on Windows
(Wintab or Windows Ink), as Windows Pointer Input Stack (Windows
Ink) support was added recently in GTK3.
Tools:
- Clone, Heal and Perspective clone now work on multiple selected
layers. There are 2 new modes:
* When cloning while multiple drawables are being selected, each
drawable clones from itself to itself, i.e. every drawable is both
its source and target.
* When sourcing from multiple drawables then cloning into a single
drawable, the source is the composited image. This is similar to
"Sample Merged", except limited to a list of drawables.
User Interface:
- Layout of the Canvas Size dialog re-designed a bit more horizontally
after the template selector feature made it too high.
- Thumbnail icon feature was dropped: when images were opened, the
application icon used to be a composition of the active image and
the application icon (Wilber). This was confusing, hard to
distinguish and working on less and less platforms because of recent
OS and desktop rules or logics changes.
API:
- New gimp_display_present() function to present a specific display at
the top of the image display stack.
- New gimp_procedure_dialog_fill_expander() to create a GtkExpander in
procedure dialogs.
- All widgets within a same container in a GimpProcedureDialog are
added to their own GtkSizeGroup.
- New function gimp_export_thumbnail() to query the user settings (as
set in Preferences) on whether or not a file plug-in should export
the image thumbnail.
Plug-ins:
- PSD now supports bigger-than-4GiB files. File support was ported to
GIO API with 64-bit offsets, hence allowing loading correctly very
big files.
- PSD now supports loading up to 99 channels (specs say that 56 is the
max but some sample PSD files have more channels).
- PSB file format is now supported for loading.
- Scriptfu now handles GFile and GimpObjectArray types.
- 16-bit SGI images now supported (until now, they were loaded as
8-bit).
- file-webp ported to GimpSaveProcedureDialog.
- New JPEG XL plug-in (loading and exporting).
- Various cleaning replacing g_file_get_path() with g_file_peek_path()
Translations:
- New Vietnamese, Lithuanian and Portuguese translations for the
installer.
Build:
- Windows installer scripts updated to all supported languages.
- New "windows-installer-langs" unit test to detect discrepancies of
langs listed in build system, installer and gettext files.
- New CI jobs for Windows native builds with MSYS2.
- Less critical CI jobs (meson/clang build and cppcheck static
analysis) moved to a scheduled run for resource saving, and 32-bit
cross-built Windows job now only runnable manually.
- Windows installer now built as a CI job. The installer is not
signed. The installer creation happens on tags for releases and at
regular scheduled intervals for tests.
- Improved tag handling in the CI for transparent release process.
- New flatpak job (on scheduled interval) published on GNOME Nightly
repository.
- Windows installer and test flatpak (to download, no repository) can
now be built by a merge request CI when the labels "5. Windows
Installer" and/or "5. Flatpak package" are respectively set in the
MR labels.
- Scalable GIMP application icon is installed too.
- Generate SHA* checksums for CI-generated Windows installers.
- New `CODING_STYLE.md` document in repository for our coding style
rules.
- Configure: --enable-check-update now has an "auto" value.
Meson: -Dcheck-update is now a yes|no|platform-default combo.
The auto/platform-default value defaults to "yes" on Windows and
macOS and "no" on other platforms.
- GLib dependency's minimum required version bumped to 2.68.0.
- GEGL minimum required version bumped to 0.4.32.
- Flatpak nightly build now uses the new "fallback-x11" permission
instead of "x11" to prevent unnecessary X11 access while in Wayland.
- Fixes to codebase making GIMP 2.99 finally building and running on
macOS.
- Our flatpak manifests now use the flatpak-external-data-checker tool
with the Anitya backend allowing to monitor our dependencies and
ensure they are always up-to-date. All dependencies have been
updated accordingly.
- Our desktop file now lists a `StartupWMClass` tag to better
associate running GIMP windows with the application icon (and
possibly other metadata).
Overview of Changes from GIMP 2.99.4 to GIMP 2.99.6
===================================================
Core:
- Various fixes for Wayland support.
- Canvas Size dialog now displays a template selector to simply
resize the canvas to a known template. When the image's and
template's pixel density don't match, a choice will be proposed to
set the image's PPI to the template's one or to scale the template's
pixel size with the image's pixel density.
- Off-canvas guides are now allowed. Guides are not deleted anymore
when dropped off-canvas, but when dropped off-viewport.
- Pinch gesture is now possible on canvas for zooming in/out (works on
Wayland, not on X11; untested yet on *BSD, macOS, Windows and
others).
- GimpAction core class now stores a reason for explaining being
disabled. This can be used later for giving better hints on why some
effects or plug-ins are not usable in some situations. We already
had this feature, but by tweaking the action's tooltip, which
prevented this to have proper styling on GUIs and disrupted action
search (as the reason text was searched, hence may return actions it
should not).
- Copy|Cut-Paste could already operate on multiple layers, by merging
the result into a single layer. It will still do this when a
selection exists, yet will paste layers as-is otherwise. This makes
an alternative way to move layers, which is sometimes easier than
drag'n dropping (especially between separate images).
Tools:
- Paint Select tool got various improvements:
* apply a threshold on the image mask before triggering the
automatic expansion to simplify mask handling in the gegl
paint-select operation.
* enable viewport-based local selection.
- GEGL Operation tool is now moved into Filters > Generic menu because
it behaves more like a generic filter conceptually. As other
filters, the GEGL Operation action is now only active when there are
opened images.
API:
- The generate "Metadata" frame layout in a GimpSaveProcedureDialog
has been improved to always show the same number of columns to avoid
ugly layout with options on 3 columns, then 2 columns on the next
line (for instance).
- The "Reset" button in GimpProcedureDialog shows a down arrow to show
this is actually a button menu.
- "Save|Load Defaults" in GimpProcedureDialog are renamed as "Save
Settings" and "Load Saved Settings". The term "defaults" was not
very clear and could be confused with "factory defaults". Moreover
tooltips were added and the "Load Defaults" button is now only
sensitive if "Save Defaults" buttion has been hit at least once.
- Annotations improved.
- Drop g_object_notify() in favor of g_object_notify_by_pspec() in
various implementations to avoid a slight performance hit because of
a global lock.
- New function gimp_parasite_get_data() replacing gimp_parasite_data()
and gimp_parasite_data_size() in a GObject Introspection friendly
way.
- gimp_procedure_dialog_new() now allows a NULL title if a menu label
was set on the GimpProcedure with gimp_procedure_set_menu_label().
- gimp_progress_update() improved: do not update more than 20 times
per second and do not warn on stderr when too many progression steps
are outputted. Indeed we should not place the burden of deciding
whether there are too much or not enough progression updates on
plug-in developers. On the opposite, they should be encouraged to
update the progression as often as possible while libgimp will
handle the decision on whether it actually ignores the progression
step or not. This makes easier plug-in development and good
progression feedback of long process.
- GimpInt16Array was removed: it was used neither by GIMP core nor any
core plug-ins. If third-party plug-ins really need this type, they
may easily reintroduce it through GimpUint8Array (array of bytes) or
GimpInt32Array (using only a subrange).
- New function gimp_image_take_selected_layers() similar to
gimp_image_set_selected_layers() except that it takes a GList
(instead of a C array) and it takes ownership of the list pointer.
- New functions: gimp_procedure_set_sensitivity_mask() and
gimp_procedure_get_sensitivity_mask() for plug-ins to advertize when
a procedure should be sensitive (in particular relatively to
multi-drawable selection).
- GimpImageProcedure's run() functions now have an array of drawables
as argument (instead of a single drawable), to be consistent with
multi-drawable selection ability.
- New gimp_plug_in_error_quark() as a generic GQuark/GError domain for
plug-ins.
- Several functions were renamed to be consistent with our naming
scheme:
* s/gimp_parasite_name/gimp_parasite_get_name/
* s/gimp_parasite_flags/gimp_parasite_get_flags/
* s/gimp_image_base_type/gimp_image_get_base_type/
* s/gimp_image_width/gimp_image_get_width/
* s/gimp_image_height/gimp_image_get_height/
* s/gimp_drawable_bpp/gimp_drawable_get_bpp/
* s/gimp_drawable_width/gimp_drawable_get_width/
* s/gimp_drawable_height/gimp_drawable_get_height/
* s/gimp_drawable_offsets/gimp_drawable_get_offsets/
- gimp_parasite_data() and gimp_parasite_data_size() are replaced by
gimp_parasite_get_data() which is introspection friendly.
- libgimpconfig: GimpParasite can now be serialized. This is useful
when using a GimpParasite procedure argument, whose random contents
(possibly binary) can be stored across sessions.
- Move public classes to G_DECLARE_DERIVABLE_TYPE and
G_DECLARE_FINAL_TYPE in order not to expose useless variables to
plug-in developers.
- New function gimp_procedure_dialog_set_sensitive() sets
GimpProcedureDialog's widget sensitive value or binding.
- PDB procedure 'plug-in-autocrop-layer' multi-layer aware.
- GimpProcedureDialog now handles GimpRGB arguments.
Plug-ins:
- We dropped the dialog for the Freedesktop portal implementation of
the screenshot plug-in. Basically the Freedesktop portal provides
its own GUI with most options, so also showing ours is redundant.
Just directly call the portal and wait for the image in return.
- Color profile and comment is saved on each layer of a TIFF file to
prevent any ambiguity as TIFF allows its layers to have different
profiles.
- On PNG import, create an ICC profile out of the gAMA and/or cHRM
chunks, if any of them are present, if no color profile is set and
if the sRGB chunk is not present. This happens for RGB images as
well as grayscale images (creating respectively a RGB or grayscale
color profile).
- Improve PNG export in no-profile case with gAMA and cHRM chunks
(additionally to the sRGB chunk) according to PNG spec
recommendations. Moreover the "gamma" option has now been removed
because we just have proper core support of this metadata through
ICC profile creation now, which is just more powerful.
- "gamma" option for PNG export was removed (from GUI and
file-png-load PDB API) because it is now redundant as we have proper
support for this metadata.
- Various fixes and improvements to OpenRaster image support.
- PDF export now has progression.
- PSD import/export got multi-layer selection support.
- Qbist:
* make the applied pattern a bit more prominent by adding a
label about the center pattern of the 9x9 grid (which is the
selected one meant to be applied).
* last used values now stored with the new API, hence surviving
across sessions.
- benchmark-foreground-extract.py moved to gimp-data-extras.
- Various plug-ins now work with multiple selected drawables when
relevant.
Devel docs:
- Python 3 and Javascript API documentation are now generated inside
the build directory devel-docs/g-ir-docs/html/ (not installed right
now) if you configure the build with option --enable-g-ir-doc
(alternative for the meson build: -Dg-ir-doc=true but the docs ends
up incomplete so autotools build is advised, cf. #6362).
Translations:
- New Hebrew translation for the installer.
Build:
- Bumping minimum GEGL to version 0.4.30.
Overview of Changes from GIMP 2.99.2 to GIMP 2.99.4
===================================================
Core:
- Action search now always show all actions, even inactive ones. In
order not to clutter the results, inactive ones are shown after
active results (following the same match quality level).
Consequently the "Show unavailable actions" checkbox has been
removed from the `Preferences > Help System` dialog.
- Improve sample text logics for CJK fonts, showing different
sample characters for Korean and Japanese, making detection
at-a-glance of such fonts easier.
- With "Ask what to do" color profile policy, profile conversion at
image loading is not proposed anymore when the image's profile is
the preferred profile set in Preferences for the current image type
(currently it would only be discarded if the image's profile was the
built-in profile, now GIMP accounts for both cases).
- When file loading plug-ins are run, the file chooser dialog is now
hidden until the plug-in returns.
- GIMP tries to keep error dialogs above to raise awareness when they
arrive (not discovered later under other dialogs).
User Interface:
- GimpSpinScale widget improvements:
* The widget will grab focus when starting to edit the entry, and
in particular the current number will be fully selected (because
often we want to just type down a completely different number
accurately).
* Also when giving focus to the entry with middle click (from
anywhere inside the widget), the scale value doesn't change in the
same time anymore.
* Finally we can now target-click accurately the entry current value
to edit the entry (again, without changing the value and selecting
existing number fully) with the main button (usually left button).
Even though middle click is simpler because we don't have to be
accurate (we can middle-click anywhere in the spin scale widget),
it is hardly discoverable, whereas clicking a number entry which
is meant to be editable is the most common GUI interaction
expectation.
* To help feature discoverability, when hovering the widget, the
cursor will change and show a "grab" cursor when a click would
start an absolute edit (the cursor changes to "grabbing" when
actually clicking and dragging the scale) or a "text" cursor when
a click would focus the number entry. When Shift key is being
hold, the cursor is the one for the relative edit, wherever the
position over the widget. This should make discovering possible
interactions with the widget a lot easier.
- Various improvements in the Layers dockable (and similar tree view
widgets):
* The bigger thumbnail popup on long click (e.g. on a layer or mask
thumbnail) does not pop out when any modifier is hold (such as
Shift/Ctrl for multi-selection or any other modifier used for
alternative actions).
* Alternative actions which were available with modifier-clicks on
layer or mask thumbnails have been moved to an Alt+ modifier when
necessary, in order to not clash with multi-layer selection
interaction. In particular:
+ Ctrl-click on a mask to enable/disable it now moved to
Alt-Ctrl-click.
* The Shift+click and Ctrl+click actions on a layer thumbnail to add
and remove respectively a layer mask have been removed because the
much older feature for "Alpha to Selection" already use all the
Alt+ modifier combinations.
* The alternative Alt+ actions now only operate on the clicked layer
and not on the selection unlike the corresponding actions
(available through buttons, actions and menus). Also they do not
change the selection. So you can Alt+click a layer for "Alpha to
Selection", same as you can Alt+click a mask for showing it
without triggering a selection change. This allows these
alternative actions to not be redundant of the equivalent actions
but complementary with a slightly different targeting behavior.
* The various interactions with modifiers now catch the exact
modifier combination they require, hence avoiding interaction
cases running several actions (e.g. Alt-Ctrl on a layer thumbnail
removes the clicked layer's alpha channel from the selection
without modifying the selected layer while Ctrl only would modify
the selection).
Tools:
- New Paint Select tool in the playground. This is a tool prototype
which would hopefully end up as a quick binary selection tool.
- The new default dynamics is: "Pressure Size". This doesn't change
anything for common input devices (mouses, touchpad) yet would allow
tablet devices to directly show that pressure input is working on
first use. Until now, people would have the impression that tablets
are not working (even though GIMP 3 will have hotplug so it is
actually working from scratch) just because "Dynamics Off" was the
default.
Input Devices:
- Various improvements to the Input Devices editor:
* Do not show virtual devices and XTEST API (Linux/X11) device in
the Input Devices editor as they are useless from a configuration
standpoint.
* Only show the axes returned by GDK instead of the whole
list of possible axes, which made no sense.
* Show better names for axes, as returned by GDK, for instance a X
axis becomes often "Abs X" on a graphics tablet and "Rel X" on a
mouse or other devices made to work relatively.
* Don't show an empty list for devices with no axes, just don't show
the list widget at all.
* For each device, select by default the first axis with curve
ability, if any, (i.e. the Pressure axis if the device has one) in
order to make the dialog directly more useful and usable.
- Default tool have been set on different device sources:
* Pen devices (tablet styluses main input) now default to the
paintbrush tool.
* Eraser devices (tablet styluses back input) still defaults to
eraser tool.
* Touch screen (finger) defaults to Smudge tool.
* All other devices defaults to paintbrush (this was already the
case, but was broken for as long as I remember, now it should work
properly).
API:
- GimpFileEntry public variables were made private and a new function
has been added: gimp_file_entry_get_entry().
- New GimpScaleEntry and GimpColorScaleEntry widget classes and new
relevant API for these objects, replacing the former functions
creating various widgets and attaching them to a GtkGrid. This makes
for easier to use and less constrained GUI functions (with a lot
less arguments, as we try now to smartly generate appropriate
defaults for many options; gimp_scale_entry_new() in particular went
down from 17 arguments to 5), also better introspectability for
bindings, and finally it will be useful for automatic dialog
generation for plug-ins.
- New GimpLabeled class and subclasses: GimpLabelSpin,
GimpLabelIntWidget.
- Several new functions for GimpProcedureDialog for automatic dialog
generation based on input arguments. Though not mandatory, the
various functions allow to organize better the widgets.
- The GimpProcedureDialog class will now check that mnemonics are
present on every option, and also that there is no duplicate
mnemonics. It will print messages on stderr if any of these test
fails (so that it won't bother users but developers and translators
should be able to get feedback about missing/duplicate mnemonics).
- GimpSaveProcedure now has generic metadata support (with an API so
that an export procedure can declare whether it supports given
metadata types or contents).
Combined with a new subclass GimpSaveProcedureDialog (child of
GimpProcedureDialog), this ensures that:
* If a format supports a given metadata, they will always have an
auxiliary argument with the same name across plug-ins.
* The label and tooltips will also be always the same in the GUI.
* Order of metadata widgets will also stay consistent.
* The widgets will work the same (no more "Comment" text view
missing in one plug-in but present in another, or with an entry
here, and a text view there, and so on).
* The metadata frame will show an "(edit)" link which will run the
"plug-in-metadata-editor" plug-in. The eventual goal is to move
some generic logics to the metadata editor (when it makes sense)
and to raise awareness for metadata edition and viewing abilities.
This is still a work-in-progress which requires much more
improvements in said abilities.
- New gimp_get_num_processors() function for plug-ins to be able to
set their own multi-threading operations as configured in
Preferences.
Plug-ins:
- file-fli, file-tiff, file-jpeg and file-png updated to new dialog
generation API. In the most complicated case (file-jpeg), this
shaved 600 lines out of the plug-in code.
- file-heif:
- now uses gimp_get_num_processors() instead of
g_get_num_processors() (allowing to bypass system thread info).
- Realtime parameter is set for AOM encoder when Fast encoding
speed is selected by user.
- Ability to set pixel format (YUV444, RGB) is enabled
for >= libheif 1.10 to avoid issues in older versions.
- file-jp2 is now able to decode JPEG2000 files faster with
multi-threading, using the thread number settings returned by
gimp_get_num_processors().
- Improved plug-in debugging helper infrastructure: GIMP_PLUGIN_DEBUG
has a new `fatal-criticals` option and better defaults. Developer
documentation got some rewriting and debugging code benefited from
refactorization.
- py-slice.py moved to gimp-data-extras.
Installer:
- Various updates to adapt to the GIMP 2.99/3 build.
- Lua made optional.
Devel docs:
- Documentation to port GIMP 2.10 plug-ins to GIMP 3.0 has been
started in `devel-docs/GIMP3-plug-in-porting-guide/`. It is also
visible directly on out Gitlab instance with visual styling:
https://gitlab.gnome.org/GNOME/gimp/-/tree/master/devel-docs/GIMP3-plug-in-porting-guide
Build:
- Bumping minimum harfbuzz version to 1.0.5 for hb_ft_font_set_funcs().
- Bumping minimum pango version to 1.44.0 for pango_font_has_char().
- Bumping minimum GEGL to version 0.4.28.
Overview of Changes from GIMP 2.10.x to GIMP 2.99.2
===================================================
Core:
- Improved "space invasion".
- New extension format support (.gex a.k.a. GIMP Extension) which is
an archive containing various supported data. So far, it can
package: brushes, MyPaint brushes, dynamics, patterns, gradients,
palettes, tool presets, plug-ins, splash images and themes.
- New extension manager allowing to enable, disable or uninstall
installed extensions, with a dialog available in `Edit > Manage
Extensions`.
- Multi selection of layers now possible. Various tools and features
are now multi-selection aware.
- XCF format bumped to version 14 with awareness of multiple layer
selection.
- All code is year-2038-safe with deprecated time API replaced.
- "Alpha to Selection" various actions warn when the result selection
is empty.
- Color Profile Policy (import) now exposes a "Convert to Preferred
Profile" (fourth) choice and the import dialog default "Convert"
action will convert the image to the preferred profile (if any was