1. 09 Dec, 2017 3 commits
    • João Sebastião de Oliveira Bueno's avatar
    • Jehan's avatar
      Bug 791352 - Screenshot delay is broken for region shots in GNOME. · 614bcf6d
      Jehan authored
      Delay should indeed happen before root and window screenshots, but must
      happen in-between region selection and region screenshot.
      
      One can notice that the logics is different for Windows screenshot in
      X11. The reason is that X11 window screenshot has an additional window
      selection step (and therefore delay must happen in between selection and
      actual screenshot). Window screenshot in Wayland doesn't have this step
      and simply screenshots whatever is the currently active Window.
      614bcf6d
    • Jehan's avatar
      Bug 791352 - Screenshot delay is broken for region-grab screenshot. · d9cd4b61
      Jehan authored
      Fix first the delay in X11.
      Actually both for region and window screenshots, it makes no sense to
      delay *before* region or window selection. Usually when one uses a
      delay, the point is to prepare in-between selection and shot. For
      instance, I often used a delay to snap the contents of a menu because
      PrintScreen key would not work when a menu is opened. So I would set a
      delay, select my window/region, then quickly open the menu before the
      delay is counting down. This would not be possible with the way delay
      occurred (before selection), which just has no use that I can see of.
      d9cd4b61
  2. 08 Dec, 2017 9 commits
    • Jehan's avatar
      libgimpwidgets: add private headers for GimpPickButton implementations. · ef6559b3
      Jehan authored
      Though forward declarations of the implementations are ok, it is cleaner
      to have proper header files for each variant (default, kwin, quartz
      right now). Of course these new header files are not installed and must
      be kept private for build only.
      ef6559b3
    • Jehan's avatar
      Bug 780375 - Color picker won't pick on Wayland. · 06bbf3e4
      Jehan authored
      Add support for KWin API, for KDE on Wayland.
      Unfortunately though, KWin's "pick" API seems to have failures, so I
      fallback to the default color picking when this happens. This will still
      not work on Wayland, but at least won't cause regression for color
      picking on KDE/X11.
      See also KDE bug: https://bugs.kde.org/show_bug.cgi?id=387720
      06bbf3e4
    • Jehan's avatar
      plug-ins: fix indentation. · 3f1dcaad
      Jehan authored
      The risk of search and replace. Bad me!
      3f1dcaad
    • Jehan's avatar
      Bug 781020 - GIMP UI vector icons are drawn way too small. · 3023227f
      Jehan authored
      Though the bug was mostly fixed, it seems to still happen on Windows XP,
      where apparently no content type had been registered for SVG.
      GTK+ developers don't seem too keen to patch GTK+ 2.24 for a platform
      which they don't support anymore.
      
      Also if not mistaken, GIMP does not officially support Windows XP
      anymore either. A patch though has already been provided by Edward E.
      and it really doesn't look like it could break anything since it just
      adds a last "else if" when everything else failed (and inside a #ifdef
      affecting only WIN32 builds).
      So let's just add it in our builds at least. We still don't have support
      for it, but I see no reason to just refuse a minor patch which won't
      break anything else.
      3023227f
    • Jehan's avatar
      Bug 791360 - Add Screenshot implementation for KDE/Wayland. · b9034e26
      Jehan authored
      Only thing I could not properly figure out yet is how to select an area.
      The "screenshotArea" method is there in KDE API, but it needs
      coordinates and I can't find the API to grab coordinates in Wayland (as
      in GNOME shell API).
      b9034e26
    • Ell's avatar
      app: update GimpContainerView row expanded state ... · 5d544c2a
      Ell authored
      ... when inserting/reordering items
      
      Otherwise, newly inserted/reordered group layers are always
      collapsed.
      5d544c2a
    • Ell's avatar
      app: copy expanded state of duplicated items · 4c554179
      Ell authored
      ... so that duplicated group layers maintain the expanded state of
      the original.
      4c554179
    • Ell's avatar
      app: remove redundant opacity clamp from gimp_layer_new() · 06f41db6
      Ell authored
      The opacity will be clamped by gimp_layer_set_opacity().
      06f41db6
    • Ell's avatar
      Bug 791386 - New layer with AUTO everything always uses normal mode · 776b4a9a
      Ell authored
      In gimp_layer_new(), set opacity and mode using the setter
      functions, instead of modifying the members directly, so that all
      the necessary side effects take place.
      776b4a9a
  3. 07 Dec, 2017 5 commits
  4. 06 Dec, 2017 10 commits
    • Jehan's avatar
      app: add/update some comments. · f28cb1c5
      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.
      f28cb1c5
    • Massimo Valentini's avatar
      Bug 787663 - Cage tool creates artifacts with multi-threading · f727e885
      Massimo Valentini authored and Jehan's avatar Jehan committed
      Stop recursion only when all 3 vertices of the triangle are outside the
      roi (left/right or above/below).
      f727e885
    • Jehan's avatar
      build: remove flatpak files duplicated in the flathub repository. · 63f830be
      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.
      63f830be
    • Jehan's avatar
      build: add the flathub stable repository as a submodule. · 580782dc
      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.
      580782dc
    • Ell's avatar
      app: strength-reduce pass-through groups to normal groups · fa9a023c
      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.
      fa9a023c
    • Ell's avatar
      app: add gimp_layer_get_effective_mode() · bdba43e4
      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.
      bdba43e4
    • Ell's avatar
      plug-ins: in file-psd, insert layers to image after writing buffers · 67e68575
      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.
      67e68575
    • Ell's avatar
      app: remove gimp_filter_is_active() prototype · 93ed1048
      Ell authored
      Leftover from commit f5d1686a, not
      actually defined.
      93ed1048
    • Jehan's avatar
      Bug 787663 - Cage tool creates artifacts with multi-threading. · 87aaf576
      Jehan authored
      Temporarily disable multi-threading on the cage transform so that it
      performs sanely until it is fixed.
      87aaf576
    • Ell's avatar
      app: fix git-version.h when building linked working tree · 09c2ba4c
      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.
      09c2ba4c
  5. 05 Dec, 2017 11 commits
    • Alexandre Prokoudine's avatar
      Update Russian translation · 7b6d040f
      Alexandre Prokoudine authored
      7b6d040f
    • Ell's avatar
      app: handle visbility/excludes-backdrop changes in floating sel. · 6a7c0d62
      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.
      6a7c0d62
    • Ell's avatar
      app: add GimpFilter::active property; move ::visible to GimpItem · f5d1686a
      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.
      f5d1686a
    • Ell's avatar
      app: exclude invisible filters from filter-stack graph · e02cb6ad
      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.
      e02cb6ad
    • Ell's avatar
      app: restore operation src node in gimp_gegl_apply_[cached_]operation() · 73d7a81a
      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.
      73d7a81a
    • Alexandre Prokoudine's avatar
    • l's avatar
      Update Spanish translation · 9f1e3de4
      l authored and Administrator's avatar Administrator committed
      9f1e3de4
    • Marco Ciampa's avatar
      Updated Italian translation · 94a6ba90
      Marco Ciampa authored
      94a6ba90
    • Jehan's avatar
      app: migrate plug-in-gauss shortcuts to filters-gaussian-blur. · 5aa94284
      Jehan authored
      Since commit ff59aebb, blur-gauss plug-in and the associated
      "plug-in-gauss" action don't exist anymore. Migrate any custom shortcut
      to "filters-gaussian-blur", which is the expected replacement.
      See also bug 775931.
      5aa94284
    • Jehan's avatar
      app: reorder alphabetically changed action paths in migration code. · 482b907c
      Jehan authored
      This allows for easier code reading and changing.
      482b907c
    • Jehan's avatar
      Bug 775931 - Shortcut for non-existing action shadows existing one. · 81d9da0c
      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.
      81d9da0c
  6. 04 Dec, 2017 2 commits
    • Ell's avatar
      Bug 790810 - Nested layer groups lead to a deadlock with multithreading · 4e4c1cd5
      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.
      4e4c1cd5
    • Ell's avatar
      app: add gimp:buffer-source-validate operation · dec2375a
      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.
      dec2375a