Commit Graph

313 Commits

Author SHA1 Message Date
a88c0ffb93 Change the license URL from http://www.gnu.org/licenses/ to https:// 2018-07-11 23:47:19 +02:00
Ell
c7779b51b0 app: use gimp_wait() to wait for histogram in threshold and levels tools
In the threshold and levels tools, use gimp_wait() to wait for
histogram calculation to complete before applying auto-adjustment,
so that a message is displayed in the meantime.  Allow the
operation to be canceled, in which case we simply abort the auto-
adjustment, but let the histogram calculation continue.
2018-05-29 16:07:48 -04:00
Ell
fd1e5883f8 app: implement GimpWaitable and GimpCancelable in GimpAsync
Have GimpAsync implement the GimpWaitable and GimpCancelable
interfaces, added in the previous two commits, instead of providing
its own public version of the corresponding functions.

Add gimp_async_cancel_and_wait() as a convenience function for both
canceling an async operation, and waiting for it to complete.

Adapt the rest of the code to the change.

(cherry picked from commit e2c56ef407)
2018-05-27 13:18:56 -04:00
Ell
b0ce645fe2 app: in GimpLevelsTool, calculate histogram asynchronously
In GimpLevelsTool, calculate the histogram of the target drawable
asynchronously, rather than synchronously, to avoid blocking the UI
while the histogram is calculated.
2018-05-11 14:01:42 -04:00
605123d79d app: add weak pointers for the curves and levels hisrogram view members
so we don't run into the same warnings on tool shotdown we already
fixed for tool startup.
2018-01-29 21:01:57 +01:00
cdf5bf6bf7 app: prevent warnings in gimp_levels_tool_config_notify()
Bail out if the levels dialog is not yet fully constructed.
2018-01-20 15:34:52 +01:00
b23f231a1a Bug 792470 - Some filters e.g. "Levels" are not added to "Repeat last" history
The four remaining "classic" color tools (Brightness-Contrast, Curves,
Levels and Threshold) are in fact just special UIs for otherwise
completely normal filter ops.

Add normal filter actions for them and invoke them like all
other filters, which makes them show up in the filter history
automatically.

The only small hack needed is to special case them in
gimp_gegl_procedure_execute_async() so the right tools are created
instead of the default GimpOperationTool. Also, blacklist the
automatically generated tools actions from action search and the
shortcut editor.
2018-01-14 15:42:29 +01:00
28bb108e1b app: use gimp_prop_boolean_icon_box_new() instead of the "Linear" toggle
in the curves and levels tools and in the histogram dockable.
2018-01-06 03:12:23 +01:00
54d3beab9c Bug 757444 - Curves and Levels should operate by default on linear RGB...
...and present linear RGB Histograms

This is step one: implement the feature at all (without new defaults
or proper GUI, cough).

Add boolean "linear" properties to GimpOperationPointFilter,
GimpCurvesConfig and GimpLevelsConfig.

In the filter, simply set the input/output formats to linear in
prepare().

In the curves and levels tools, add "Linear" toggles from hell,
like in the histogram dockable, and make sure things work right
wrt changing and resetting the property, switching from levels
to curves, and picking colors.

The result currently changes when switching a non-nop curves/levels
between perceptual and linear, because adjusting the parameters
between the spaces is not implemented yet.
2018-01-05 22:37:18 +01:00
dce93c7d7e Bug 762443 - Levels tool Output Level sliders works incorrectly
Add "clamp-input" (which clamps the input values to [0..1])
and "clamp-output" (which clips the final result to [0..1]),
properties, parameters and GUI to:

- GimpLevelsConfig
- GimpOperationLevels
- The levels tool dialog
- The gimp_drawable_levels() PDB API

The old deprecated gimp_levels() PDB API now sets both clamping
options to TRUE which restores the 2.8 behavior.

Also reorder some stuff in GimpLevelsConfig and elsewhere so the
levels parameters are always in the same order.
2018-01-02 18:47:20 +01:00
Ell
c5b88702e6 app: allow specifying a callback function for propgui pickers
Allow propgui constructors to specify an (optional) callback function
when creating pickers, to be called when a color/coordinate is picked,
similarly to controller callbacks.

Implement picker callback support in GimpFilterTool.  When the active
picker has an associated callback function, call it instead of the
class's color_picked() function.

Add lots of "#include <gegl.h>" to .c files that miss it, which is
now necessary, since this commit adds a Babl* parameter in
propgui-types.h.
2017-10-16 12:38:37 -04:00
c41e8eca86 Bug 785535 - Histogram not updating in real when filters are active
Add "gboolean with_filters" to gimp_drawable_calculate_histogram(),
which is passed as FALSE in almost all places, except the histogram
dockable where we want to see both the drawable's unmodified histogram
*and* the histogram after filters are applied.
2017-08-05 17:15:31 +02:00
0cb3e75f79 app: use a lot of g_clear_object() and g_clear_pointer()
More than 2000 lines of code less in app/, instead of

if (instance->member)
  {
    g_object_unref/g_free/g_whatever (instance->member);
    instance->member = NULL;
  }

we now simply use

g_clear_object/pointer (&instance->member);
2017-07-15 18:42:44 +02:00
44d7a26613 app: remove GimpFilterTool's "drawable" member
and use GimpTool's drawable. I guess at some point tool->drawable was
somewhat unpredictable, this is not the case any longer.
2017-07-10 23:28:49 +02:00
29795a29eb app: remove all "has_settings" stuff from the GimpFilterTool API
Instead, use gimp_operation_config_list_properties() to figure if an
operation has editable properties directly in
gimp_filter_tool_get_operation().
2017-07-09 18:59:54 +02:00
bc708fb2fb app: fix curves and levels tool to not crash with how GimpFilterTool works now
The tool dialog can now be completely shut down and re-created, make
sure we don't run into dangling pointers in the time when there is no
dialog.
2017-07-05 12:24:47 +02:00
c682c5466c app: add an optional "label" to GimpTool which overrides GimpToolInfo's
Remove GimpFilterTool's "title" and use the GimpTool's "label" instead.
2017-07-04 22:31:17 +02:00
1f42d65e21 app: remove undo_desc, icon_name, help_id stuff from GimpFilterTool
and its subclasses. Simply use the new GimpTool APIs now.
2017-07-04 20:43:28 +02:00
89d611f291 app: GimpFilterTool: remove members "import_dialog_title"...
...and "export_dialog_title"

It's ridiculous to keep this code around for strings that are only
marginally different (and not better) than the strings we can generate
from other strings we have anyway.
2017-07-04 20:43:28 +02:00
00a9659c28 app: add virtual function GimpFilterTool::config_notify()
and call it from GimpFilterTool's "notify" callback. Remove signal
connections from all subblasses and instead implement ::config_notify().

The config object belongs to GimpFilterTool, and only GimpFilterTool
should know when it's created and can be connected to.
2017-07-03 00:45:59 +02:00
4f4d6b27cf app: register the "settings folder" (e.g. GIMPDIR/curves) with the settings type
and remove all settings_folder API and values from GimpFilterTool and
its subclasses.
2017-06-05 22:00:17 +02:00
Ell
bc4589968c app: in prop gui & co., allow picking outside drawable bounds
Add a boolean 'pick_abyss' parameter to GimpCreatePickerFunc.  When
this parameter is TRUE, the picker should pick outside the bounds
of the drawable.  Use FALSE for color pickers, and TRUE for position
pickers.
2017-05-03 11:03:36 -04:00
3aeebfa178 app: remove all class variables from GimpFilterToolClass
and add them as return values to GimpFilterToool::get_operation(), so
the tools is configured entirely per-instance now.

This makes get_operations()'s signature more evil, but helps making
GimpOperationTool less conplicated and convoluted.
2017-03-25 11:32:17 +01:00
dda54c1df8 Deprecate stock items for good and change all icon defines to GIMP_ICON_*
Try to sort all GIMP_ICON_* defines into FDO categories like in
https://specifications.freedesktop.org/icon-naming-spec/latest/ar01s04.html

Add defines for all icons we override, rename some icons to their FDO
standard names, and mark the ones we duplicate with a comment so we
don't forget to rename those to standard names in 3.0.
2017-03-05 16:01:59 +01:00
0d4dd11e2a Bug 777880 - better handling of sensitivity functions for channel combobox on threshold, levels and curves tools
- set the filter_tool->drawable before showing the tool gui.
- set the sensitivity functions for channel combobox of threshold,
  levels and curves tools dialogs only once during dialog creations.
- use the filter_tool->drawable inside the sensitivity functions
2017-01-29 14:07:06 +01:00
fc9da4c9a3 app: allow to toggle the histogram dialog between gamma and linear
Change GimpHistogram to take a "gboolean linear" parameter and always
honor that parameter, so both kinds of histograms can now be created
for all drawables.

Add a horrible "Linear" toggle to the histogram dockable which always
defaults to the active layer's actual pixel format, but can be
switched at any time. This UI is ugly and needs to change.

On the PDB, default to gamma-corrected if the plug-in is unaware of
higher precision, and to the drawable's native pixel format otherwise.

Other places using histograms (e.g. levels, curves) are unchanged.
2016-12-26 17:32:17 +01:00
13b1e6aafc app: clean up a lot of werid code in GimpColorOptions and GimpFilterOptions
First of all, derive GimpFilterOptions from GimpColorOptions, not the
other way around, which was a sick way of magically showing the right
options for various tools. That approach has failed and needed
additional hacks to do the right thing. Simply have the right class
hierarchy and call the right tool options GUI constructors and done.

Remove gimp_histogram_options_gui(), we don't need histogram scale
controls in tool options when we already have them next to the
histograms in the tool dialogs.

Also remove gimp_histogram_options_connect_view() and use a simple
g_object_bind_property() instead.
2016-05-13 22:06:14 +02:00
6a9ce551cb app: rename GimpImageMapTool to GimpFilterTool 2016-05-10 13:52:24 +02:00
f4cb2dd881 Bug 109161 - Improve Histogram with Luminance Channel
Add a luminance channel to GimpHistogram
2016-04-18 19:35:06 +01:00
27cf1e5e6f app: finish the levels dialog widget grouping
seems I didn't consistently group things in indented GimpFrame widgets
last time I cleaned up here. Should be better now. Also change the
"Auto" button to "Auto Input Levels" to make things clearer.
2016-01-24 21:39:31 +01:00
8c09210d7d app: move stuff from GimpOperationTool to GimpImageMapTool
Add new string members to GimpImageMapTool and use them instead of the
resp. fields of GimpToolInfo. Change ::get_operation() to return the
operation name and a lot of strings for the UI, and create both the
GeglNode and the config object in GimpOperationTool. Lots of various
cleanups in GimpImageMapTool subclasses. This is an intermediate state
on the way of making the whole filter applying mechanism more generic
and less depending on subclasses.
2016-01-22 21:28:33 +01:00
ebcd7cacbb app: redo widget grouping in the levels dialog, still far from good
but a bit more logical. This totally needs to change again.
2015-09-01 22:33:42 +02:00
0ff7ab3712 app: Fix typo
Pointed out by prokoudine on irc after it was introduced in e2bdfd41
2015-08-31 20:24:50 -04:00
e2bdfd41e2 Bug 750954 - Make tips of the "Black point" and "White point" buttons...
...in the Levels dialog explain the difference between them

Improve the tooltips of the pick buttons to say

"Pick FOO point for {all channels|the selected channel}"
2015-08-31 00:09:22 +02:00
29427fa4f1 app: port GimpImageMapTool settings import/export to streams
Simplifies and centralizes error checking and reporting.
2014-07-04 18:31:00 +02:00
b4cdecb4c3 app: port the curves and levels cruft format loaders to GIO 2014-07-04 13:18:01 +02:00
4e6a6079f4 app: port levels cruft format saving to GIO 2014-07-02 23:45:16 +02:00
8c8135a881 app: port GimpImageMapTool's settings API from filename to GFile 2014-07-01 15:13:02 +02:00
f50b215d16 app: add a default impl of GimpImageMapTool::reset()
and chain up where possible instead of duplicating that code.
2014-05-16 16:22:31 +02:00
17167594ea app: use the newly added libgimpwidgets icon name APIs 2014-05-07 21:32:09 +02:00
0d2d1c3752 app: port most of app's GUI from stock IDs to icon names
There is still quite some stock ID rendering around, stay tuned...
2014-05-07 15:30:38 +02:00
7385e030dd app, libgimp: add increment parameters to gimp_prop_widget_set_factor()
Step and page increments can't be reasonable calculated or guessed
based on the GUI widget's factor, so pass them each time we call
set_factor(). This change reintroduces sane ranges for the levels tool
for != u8 images again.
2014-02-03 22:57:51 +01:00
f79bff0719 Increase Levels, Curves increments to 10000.
1000 increments is not enough for just barely noticeable
shadow adjustments in linear gamma color spaces.
2013-12-26 15:41:02 +01:00
caf73f5f35 Add support for both gamma-corrected and linear for all bit depths
- Add new enum GimpComponentType which contains u8, u16, u32 etc.
- Change GimpPrecision to be u8-linear, u8-gamma, u16-linear etc.
- Add all the needed formats to gimp-babl.c
- Bump the XCF version to 5 and make sure version 4 with the old
  GimpPrecision enum values is loaded correctly

This change blows up the precision enums in "New Image" and
Image->Precision so we can test all this stuff. It is undecided what
format will be user-visible options in 2.10.
2013-06-23 16:51:24 +02:00
6280e4933a app: add gimp_handle_bar_connect_events()
to replace 3 completely ugly signal connections, repeated in 4 places.
2013-06-17 22:13:48 +02:00
640189d01e app: merge levels_linear_gamma_update() into its only caller
also reorder some functions to be in vtable order.
2013-06-17 22:07:31 +02:00
234a05845f app: use prop widgets in GimpLevelsTool, and generally clean up a bit 2013-06-17 02:07:10 +02:00
6c97908a9e app: add "gboolean gamma_corrected" to gimp_histogram_new()
so we can make histograms of the gamma-corrected image data. Pass
TRUE all over the place so the histogram works perceptually. This
needs more thinking...
2013-06-12 01:02:25 +02:00
a7f42de4c0 app: turn GimpHistorgram into a GimpObject, no other changes 2013-06-11 21:23:32 +02:00
875b1705fc app: don't ROUND() all input/output values to int in GimpLevelsTool
That was a leftover from before the change to 0..100 sliders for
non-8-bit images. Spoted by Elle Stone.
2013-06-10 21:51:15 +02:00