- 07 Dec, 2017 3 commits
-
-
Michael Natterer authored
The free select tool now commits on double click inside a closed polygon, which caused the foreground select tool to switch modes in the middle of a click, breaking both its own and its parent class' state. Fixed by detecting whether the commit was done by double click and delaying the mode switch until after the parent class button release code is done. Unrelated: Don't call both COMMIT and HALT, the generic tool mechanism does that automatically now, forgot to port this file.
-
Jehan authored
Sorry!
-
Ell authored
-
- 06 Dec, 2017 10 commits
-
-
Jehan authored
Keep multi-threading disable on the cage transform operation. It is now fixed but is a lot much slower than when single-threaded, making it painful to use on bigger images. So let's reenable later if we can improve this. See bug 787663.
-
Stop recursion only when all 3 vertices of the triangle are outside the roi (left/right or above/below).
-
Jehan authored
The BaseApp json used for all 3 builds (stable, dev and nightly) is common so just keep the one made available in the flathub upstream repository. The patch also applies to the BaseApp only.
-
Jehan authored
This will only be used for our development/nightly flatpak builds and this submodule does not have to be pulled for normal GIMP development.
-
Ell authored
Override GimpLayer::get_effective_mode() in GimpGroupLayer, to perform strength-reduction of pass-through groups to normal groups under certain conditions (see gimp_group_layer_get_effective_mode() for the logic.) The main motivation for this is the fact that Photoshop uses pass- through mode as the default mode for groups, resulting in many PSDs using pass-through groups generously and unnecessarily. Since pass-through groups are more expensive that normal groups, reducing them to normal groups when possible can make a big difference. Note that, while the results of the strength-reduced composition are theoretically equivalent, there may be small differences in practice due to numerical errors, especially when using low precision. This is unlikely to be an issue, but, just in case, allow disabling this optimization using the GIMP_NO_PASS_THROUGH_STRENGTH_REDUCTION environment variable.
-
Ell authored
gimp_layer_get_effective_mode() returns the actual layer mode, blend space, comosite space, and composite mode used for the layer's mode node, allowing them to be different from the values of the corresponding layer properties. The aim is to allow us to replace expensive layer configurations with cheaper but equivalent ones transparently. This is used in the next commit to replace pass-through groups with normal groups under certain conditions. The effective values are computed by the new GimpLayer::get_effective_mode() virtual function. The default implementation provided by GimpLayer returns the corresponding layer properties as-is (replaceing AUTO with concrete values). Subclasses can override this function, providing more sophisticated logic.
-
Ell authored
When loading PSDs, insert layers to the image as the last step of layer creation, after writing the pixel data to their buffers, so that the data of child layers is available when their parent group's projection is subseqeuently invalidated; otherwise, we'd need an additional gimp_drawable_update() call after writing the data to the buffers.
-
Jehan authored
Temporarily disable multi-threading on the cage transform so that it performs sanely until it is fixed.
-
Ell authored
When building a linked working tree, $(top_srcdir)/.git is a regular file, and not a directory. Change the recipe for git-version.h to allow that.
-
- 05 Dec, 2017 11 commits
-
-
Alexandre Prokoudine authored
-
Ell authored
When attaching a layer as a floating selection to a drawable, unbind its visiblility from its activeness, as per the previous commit, and use its visibility to control the activeness of the drawable's floating selection filter. Properly update the drawable when the floating selection's visibility and excludes-backdrop properties change.
-
Ell authored
Add an "active" property to GimpFilter, which replaces its "visible" property. The new property assumes the lower-level role "visible" had -- controlling whether the filter has any effect as part of its parent filter-stack. Add a "visible" property to GimpItem, separate from the "active" property, which assumes the higher-level role "visible" had -- controlling whether the item is considered "visible", as per the GUI. By default, the item's "visible" property is bound to the filter's "active" property, so that changes in visibility directly affect the filter's "activeness"; this binding can be controlled using the new gimp_item_bind_visible_to_active() function. This distinction is currently necessary for floating selections. Floating selection layers must not be active in their parent stack, regardless of their visibility, in particular, so that their mode node doesn't hide the entire backdrop when their composite mode excludes the backdrop (i.e., when it's dst-atop or src-in). Instead, their visibility should affect the activeness of the floating-selection filter of the drawable they're attached to. This is handled by the next commit.
-
Ell authored
Currently, when a GimpFilter's visibility changes, we rely on its various visibility-changed signal handlers to rewire the filter node's graph to reflect the change. This has two main disadvantages: - There's no easy, generic way to toggle a filter's effect, especially one that is not subclassed, since GimpFilter only takes care of the case where visibility becomes FALSE, and does nothing by itself when it becomes TRUE again. - While GimpDrawable does handle the visibility => TRUE case, it doesn't disconnect the filter's input from its mode and (potentially) source nodes when it becomes invisible. As a result, while none of the drawable's graph is processed as part of the composition when not visible, the mode and source nodes do get invalidated when the filter's input is invalidated, such as while painting on a layer below the drawable. This is particularly bad for pass-through groups, since their source node can be an arbitrarily complex graph, whose invlidation incurs a nontrivial overhead. Instead, don't touch the filter's node at all when visibility changes, and rather have GimpFilterStack remove it from the graph entirely when the filter becomes invisible, and re-add it once it becomes visible again. This solves both of the above problems, as well as simplifies the code.
-
Ell authored
When merging a drawable filter, we call gimp_gegl_apply_cached_operation() on a node that's part of the drawable's filter stack graph. The function rewires the node's input, and doesn't restore its original input connection before returning, leaving the graph in an inconsistent state. Currently, this doesn't matter, since we remove the filter right after that, but the next commit expects the filter stack graph to remain consistent. Remember the original source node of "operation" in gimp_gegl_apply_cached_operation(), and restore it upon exit, to fix that.
-
Alexandre Prokoudine authored
-
-
Marco Ciampa authored
-
Jehan authored
This allows for easier code reading and changing.
-
Jehan authored
Current logics of dealing with duplicate accelerators was just to delete one randomly. This works ok in most case since we can't be in the head of people and can't know which one they want to keep (yet we can't keep both because that makes it very complicated to reset the shortcut appropriately by hand/GUI, without a tedious work of researching which other action uses the same shortcut. See commit 2a232398). There is still some cases where we can be a bit more clever than random deletion: when one of the accelerator is mapped to a non-existing action. In this case, let's delete this accelerator in priority. Not only the chances of this being the expected result are higher; but even worse, there is anyway no GUI way to delete the accelerator for the non-existing action! Thus you could try and reset your existing action's shortcut as many times as you want in the GUI, it would always end up deleted at next startup! Note that if the non-existing action's shortcut has no duplicate, it won't be deleted. This ensure that you could uninstall a plugin, then reinstall it later and still have your custom shortcuts saved in the meantime. A shortcut of a non-existing action will *only* be cleaned out if it is redundant with the shortcut of an existing action.
-
- 04 Dec, 2017 4 commits
-
-
Ell authored
Use gimp:buffer-source-validate, introduced in the previous commit, for the source node of GimpDrawables. This avoids threading issues with layer groups, or any other drawables that may use a validating buffer, by making sure the buffer is validated before any succeeding operations, and hence the associated graph is processed on the same thread as the parent composition. Restore multithreaded processing in GimpOperationLayerMode.
-
Ell authored
gimp:buffer-source-validate is a drop-in replacement for gegl:buffer-source, however, if the attached buffer has a validating tile-handler, it makes sure the required region is validated during process(). This avoids a situation in which validation happens in different worker threads at the same time during the processing of a succeeding operation; since validation is protected by the buffer's tile-storage mutex, this can result in either a deadlock (currently), or an effective fallback to single- threaded processing.
-
Ell authored
-
- 03 Dec, 2017 2 commits
-
-
Piotr Drąg authored
-
Thomas Manni authored
Do not use the bytes-per-pixel size of the input drawable. Use the bpp of the output format instead.
-
- 02 Dec, 2017 9 commits
-
-
Ell authored
When switching a group layer from pass-through mode to a non-pass- through mode, flush the projection synchrnously, to make sure that the projection's buffer gets properly invalidated at that point, and can be subsequently used as a source for the rest of the composition. Add a boolean 'pass_through' member to GimpGroupLayerPrivate, which indicates if the group is a pass-through group, and use it instead of checking the group's mode, so that we can detect that the group used to be a pass-through group when the mode changes, and to simplify the rest of the code.
-
-
Ell authored
The source node of pass-through groups doesn't use the projection's buffer, hence there's no need to invalidate it synchronously, which is faster.
-
Ell authored
... since we don't actually render anything, only invalidate.
-
Ell authored
Set the priority of group-layer projections according to the group layer's depth, so that top-level groups have a priority of 1 (compared to a priority of 0 for the image projection), and nested groups have a priority one greater than their parent (in other words, shallower groups have higher priority than deeper groups, all of which have lower priority than the image.) This makes pass-through groups much faster, in particular.
-
Ell authored
... which control the priority of the projection's idle source. The projection's priority is specified relatively to GIMP_PRIORITY_PROJECTION_IDLE (i.e., a priority of 1 results in an idle source with priority GIMP_PRIORITY_PROJECTION_IDLE + 1, etc.)
-
Ell authored
Add GimpViewable::ancestry-changed signal, which is emitted when the viewable's ancestry changes, i.e., when its parent, or the parent of one of its ancestors, changes. Add gimp_viewable_get_depth() function, which returns the viewable's depth in the hierarchy, i.e., its ancestor count.
-
Jehan authored
Thanks to Massimo for the solution!
-
Thomas Manni authored
-
- 01 Dec, 2017 1 commit
-
-
Michael Natterer authored
-