Getting colder with our second freeze... it's 3.31.91 release day and string freeze, upload a tarball and lock those strings 🏂

  1. 16 Feb, 2019 17 commits
    • Ell's avatar
      app: in gimppaintcore-loops, unsuppress COMBINE_PAINT_MASK_TO_CANVAS_BUFFER algorithm · de1ac871
      Ell authored
      In gimppaintcore-loops, unsuppress the
      COMBINE_PAINT_MASK_TO_CANVAS_BUFFER algorithm (partially
      reverts commit b717ead1.)
      In gimp_paint_core_paste() it's always used together with
      CANVAS_BUFFER_TO_PAINT_BUF_ALPHA, which matches a combined
      algorithm, preventing it from being called, however, it can still
      be called through gimp_paint_core_replace(), which uses it
      together with CANVAS_BUFFER_TO_COMP_MASK, which doesn't have a
      combined algorithm.  We can, however, filter out
      COMBINE_PAINT_MASK_TO_CANVAS_BUFFER is matched (since the combined
      algorithm will be matched beforehand when both algorithms are
      (cherry picked from commit 6fe57a94)
    • Ell's avatar
      app: in gimp:mask-components, handle half-precision float formats · 99130068
      Ell authored
      (cherry picked from commit 7c1429d1)
    • Ell's avatar
      app: in GimpDrawableFilter, don't mask-out alpha comonent for alpha-less drawables · d424a418
      Ell authored
      In gimp_drawable_filter_sync_affect(), don't mask-out the filter's
      alpha component when the drawable doesn't have an alpha channel,
      since this is no longer necessary -- we now explicitly convert the
      output to the drawable format as part of the graph -- and it
      prevents the gimp:mask-components node from becoming a NOP.
      (cherry picked from commit af2c7d1b)
    • Ell's avatar
      app: set/clear component-mask alpha-bit of alpha-less drawables, to make mask uniform · 353951a4
      Ell authored
      In gimp_drawable_get_active_mask(), when the drawable doesn't have
      an alpha channel, set or clear the mask's alpha bit, according to
      the state of the other bits, so that it never gets in the way of a
      fully set/clear mask.  The value of the alpha bit doesn't matter
      when there's no alpha channel, however, having a uniform mask
      allows us to skip component masking altogether.
      Additionally, provide a default implementation for
      GimpDrawable::get_active_mask() which returns a full mask, and
      remove the equivalent implementation for GimpChannel.
      (cherry picked from commit 1b900bfa)
    • Michael Natterer's avatar
      app, plug-ins: move brush (gbr) saving to the core · a04e24ce
      Michael Natterer authored
      just the export logic remains in the plug-in, just as for patterns.
      (cherry picked from commit 90164c49)
    • Michael Natterer's avatar
      plug-ins: forward the error message if file-pat-save-internal fails · c08932ca
      Michael Natterer authored
      (cherry picked from commit b71ebcea)
    • Ell's avatar
      app: in gimppaintcore-loops, in MaskComponents::finalize_step(), chain up · 339368f5
      Ell authored
      (cherry picked from commit e513e9e0)
    • Ell's avatar
      app: use MASK_COMPONENTS algorithm in gimp_paint_core_{paste,replace}() · b6546536
      Ell authored
      Remove the mask_components_onto() gimppaintcore-loops function, and
      the GimpPaintCore::comp_buffer member.  Instead, in
      gimp_paint_core_paste() and gimp_paint_core_replace(), use the
      MASK_COMPONENTS algorithm, added in the previous commit.
      (cherry picked from commit c7d8d9ba)
    • Ell's avatar
      app: in gimppaintcore-loops, add MASK_COMPONENTS algorithm · c4430b3d
      Ell authored
      In gimppaintcore-loops, add a new MASK_COMPONENTS algorithm, which
      masks the output of compositing into the destination buffer,
      according to a component mask.  The algorithm uses the same code as
      gimp:mask-comopnents, and can be used as part of a
      gimp_paint_core_loops_process() pipeline, instead of using a
      separate function.
      (cherry picked from commit 08fa46ea)
    • Ell's avatar
      app: in gimppaintcore-loops, add [Temp]CompBuffer algorithm helper-classes · fe69dd22
      Ell authored
      In gimppaintcore-loops, add a CompBuffer algorithm helper-class,
      which provides access to the output buffer used for compositing,
      to be used by the DO_LAYER_BLEND algorithm instead of the
      destination buffer.
      CompVuffer itself doesn't provide the storage for the buffer; this
      is rather the responsibility of the algorithms that use it.  The
      TempCompBuffer algorithm helper-class provides temporary storage
      for the compositing buffer, and can be used by algorithms that need
      a temporary buffer.
      (cherry picked from commit 858f30a6)
    • Ell's avatar
      app: in gimppaintcore-loops, mark algorithms as mandatory/suppressed · ada81567
      Ell authored
      In gimppaintcore-loops, use {Mandatory,Supressed}AlgorithmDispatch,
      added in the previous commit, to mark certain algorithms as always
      occuring, or never occuring, in all hierarchies.
      (cherry picked from commit b717ead1)
    • Ell's avatar
      app: in gimppaintcore-loops, add {Mandatory,Suppressed}AlgorithmDispatch · 8b862969
      Ell authored
      In gimppaintcore-loops, add MandatoryAlgorithmDispatch and
      SuppressedAlgorithmDispatch class templates, which implement
      dispatch functions suitable for algorithms which are always part of
      the hierarchy, or never part of the hierarchy, respectively.  Using
      one of these classes as the dispatch function for a given algorithm
      verifies that the algorithm is/isn't included in the requested-
      algorithm set, but doesn't otherwise increase the number of
      instanciated hierarchies, since only one of these cases has to be
      (cherry picked from commit fc7ffc71)
    • Ell's avatar
      app: in gimppaintcore-loops, remove individual-algorithm functions · 3dd2cf27
      Ell authored
      In gimppaintcore-loops, remove the individual-algorithm convenience
      functions, which are merely wrappers around
      gimp_paint_core_loops_process(), and aren't used anywhere anymore.
      This allows us to avoid instanciating certain algorithm-hierarchies
      which aren't used in practice, as will be done by the following
      (cherry picked from commit 95761db5)
    • Ell's avatar
      app: improve gimp:mask-components · 02b8845a
      Ell authored
      Add specialized versions of gimp:mask-components for 8-, 16-, and
      32-bpc formats, to improve efficiency, and to preserve the contents
      of masked-out components exactly.
      Provide public functions for format-selection and processing, which
      we'll use in the painting code, instead of reimplementing component
      (cherry picked from commit ee156b8f)
    • Ell's avatar
      app: convert gimp:mask-components to C++ · 3925ae5f
      Ell authored
      ... in preperation for next commit.
      (cherry picked from commit a7f7a485)
    • Snehalata B Shirude's avatar
      Update Marathi translation · 07dd124e
      Snehalata B Shirude authored
    • Snehalata B Shirude's avatar
      Update Marathi translation · 08746b7e
      Snehalata B Shirude authored
  2. 15 Feb, 2019 3 commits
  3. 14 Feb, 2019 8 commits
    • Piotr Drąg's avatar
      Update Polish translation · 9a30591b
      Piotr Drąg authored
    • Ell's avatar
      app: #include <string.h> in gimpoperationreplace.c · 3847404d
      Ell authored
      ... for memset().
      (cherry picked from commit 0cf77b0a)
    • Ell's avatar
      app: change behavior of REPLACE mode for fully-transparent pixels · d4976dfc
      Ell authored
      When the result of compositing has an alpha value of 0, the
      corresponding color value is not mathematically defined.
      Currently, all out layer modes opt to preserve the destination's
      color value in this case.  However, REPLACE mode is different
      enough to warrant a different behavior:
      Unlike the other layer modes, when the compositing opacity
      approaches 0 or 1, the output color value approaches the
      destination or source color values, respectively, regardless of the
      output alpha value.  When the opacity doesn't approach 0 or 1, the
      output color value generally doesn't approach a limit as the output
      alpha value approaches 0, however, when both the destination and
      source alpha values are equal, the output color value is always a
      simple linear interpolation between the destination and source
      color values, according to the opacity.  In other words, this means
      that it's reasonable to simply use the above linear interpolation
      for the output color value, whenever the output alpha value is 0.
      Since filters are commonly combined with the input using REPALCE
      mode with full opacity, this has the effect that filters may now
      modify the color values of fully-transparent pixels.  This is
      generally desirable, IMO, especially for point filters.  Indeed,
      painting with REPLACE mode (i.e., with tools that use
      gimp_paint_core_replace()) behaved excatly as described above, and
      had this property, before we switched gimp_paint_core_replace() to
      use the common compositing code; this created a discrepancy between
      painting and applying filters, which is now gone.
      A side effect of this change is that we can now turn gimp:replace
      into a NOP when the opacity is 100% and there's no mask, which
      avoids the compositing step when applying filters.  We could
      previously only apply this optimization to PASS_THROUGH mode, which
      is a subclass of REPLACE mode.
      Note that the discussion above concerns the UNION composite mode,
      which is the only mode we currently use REPLACE in.  We modify the
      rest of the composite modes to match the new behavior:
      CLIP_TO_BACKDROP always preserves the color values of the
      destionation, CLIP_TO_LAYER always preserves the color values of
      the source, and INTERSECTION always produces fully-zeroed pixels.
      (cherry picked from commit 27e8f452)
    • Ell's avatar
      app: remove gimp_gegl_replace() · f8449654
      Ell authored
      Remove gimp_gegl_replace(), which is not used anywhere since the
      last commit.  It's redundant with the rest of our compositing code,
      in particular, gimp:replace and gimp:mask-components.
      (cherry picked from commit d2f84131)
    • Ell's avatar
      app: remove gimp_drawable_replace_buffer() · 116e8a6d
      Ell authored
      Remove gimp_drawable_replace_buffer(), which is no longer used
      anywhere since commits ddb69b77 and
      3451ffb6.  This eliminates
      redundancy, since all compositing is now done through the layer-
      mode code.
      Furthermore, gimp_drawable_replace_buffer() used the drawable's
      active-component array, whose layout depends on the image mode, as
      an argument to gimp_gegl_replace(), which always expects an RGBA
      component array, resulting in broken component masking in non-RGB
      (cherry picked from commit 2074accb)
    • Jehan's avatar
      app: gimp_edgel_region_area() may return < 0 for non-closed zones. · 0fef0a55
      Jehan authored
      The algorithm to compute a zone area by following its border only works
      well for fully closed zones. It may return negative values otherwise.
      Let's just assume the created zone is big in this case (which may or may
      not be the case, but this is the safe case as it does not prevent
      closure creation).
      (cherry picked from commit 0636c302)
    • Rodrigo Lledó Milanca's avatar
      Update Spanish translation · daf7754e
      Rodrigo Lledó Milanca authored
    • Jehan's avatar
      Issue #2961: minor coding style fix. · e24f9eec
      Jehan authored
      Missing space, and anyway let's use named parameters, which makes the
      code better self-documented.
      (cherry picked from commit 35eff00e)
  4. 13 Feb, 2019 12 commits