1. 07 Feb, 2019 1 commit
    • Ell's avatar
      app, pdb: use compat formats for brushes/patterns in plug-ins · 82c44949
      Ell authored
      Plug-ins are not prepared to handle high-precision brushes/
      patterns, even when they're otherwise aware of high-precision
      drawables, so make sure to always use compat formats when
      communicating brush/pattern data to plug-ins.
      Allowing plug-ins to handle high-precision brush/pattern data would
      require some additional API.
  2. 02 Feb, 2019 1 commit
    • Michael Natterer's avatar
      Issue #2867 - iso-codes location is not relocatable on all platforms · 10ce7021
      Michael Natterer authored
      gimplanguagestore-parser.c (parse_iso_codes): instead of
      special-casing Windows and OS X, use ENABLE_RELOCATABLE_RESOURCES and
      find the package relative to ${gimp_installation_directory}, so
      relocating it works on all platforms (also flatpack, snap, whatever),
      given the --enable-relocatable-bundle configure switch is used.
  3. 28 Jan, 2019 1 commit
  4. 25 Jan, 2019 1 commit
    • Jehan's avatar
      app: new gimp_spin_scale_set_constrain_drag() and use it on paint... · bff3903f
      Jehan authored
      ... tools' brush options.
      After discussions, it turned out that many people disliked that the spin
      scale for brush size (and some other options) get you fractional values.
      How often do you actually need to get a 4.32 pixel-size brush? And even
      how meaningful is it? On the other hand, you usually want a 4 or a 5
      pixel size brush and it's nearly impossible to get (exactly) by dragging
      the scale widget.
      It is so annoying that some even resort to edit the value with keyboard!
      So I am adding an optional "constrain" feature to GimpSpinScale. It will
      still be possible to get fractional values when constraining is on, for
      instance with keyboard edit (the arrow incrementation also will keep any
      fractional part). So the interaction for such scales is simply reversed
      so that you get integers easily, and fractional parts with a bit more
      It is not turned on by default (some feature actually need precision and
      we don't want to break the sliders for these) and for the time being, I
      only applied it to all the brush settings in paint tools. Now that it
      exist, we may want to apply this to more scales in various parts of
  5. 20 Jan, 2019 1 commit
    • Jehan's avatar
      Issue #2828: Scrolling up with a mouse within a drop-down list. · 1d984542
      Jehan authored
      We were doing it all the wrong way, fixing one combo box object at a
      time. So this commit basically reverses commits 68a33ab5, 6dfca83c
      and a9a979b2 and instead runs the same code in the class code. This
      way, all objects based on these base classes will have the fix from
      These improved various other drop-down lists (I found some of them, and
      probably not all) as I fixed all GIMP custom widgets based on
      Note that it has to be run after filling the list apparently (I had the
      problem especially with GimpIntComboBox if running in the _init() code,
      then the list widget showed wrong).
  6. 19 Jan, 2019 1 commit
    • Jehan's avatar
      app: brute force the session memorized size when showing a window. · 8dbd10b3
      Jehan authored
      The main window height was always bigger than my screen height on
      startup, overriding my previous session's window size.
      I could retrace the memorized size being changed when adding the display
      shell with gimp_image_window_add_shell() in gimp_display_new(), just
      before showing the window. Unfortunately this happens after we applied
      the session position/size (in gimp_image_window_session_update() at end
      of image window construction). I'm not sure why adding the shell
      increases the size of the window, especially since the window can be
      manually sized at the expected dimension without any graphical glitch.
      Maybe we could investigate this, but simply forcing any session managed
      window to behave as expected upon showing is not a bad move anyway and
      in this specific case, it works fine.
  7. 09 Jan, 2019 1 commit
  8. 08 Jan, 2019 1 commit
    • Jehan's avatar
      app: expect event == NULL in gimp_device_info_get_event_coords(). · b31729f8
      Jehan authored
      The problem was not happening with the master code of
      gimpdisplayshell-tool-events.c, but I encountered it in gimp-2-10 with
      the layer picking code.
      Even then, it still works, but I need to protect calls to
      gdk_event_get_axis() to avoid CRITICALs.
      (cherry picked from commit b1fe1675)
      Note: this was not absolutely necessary on master (no CRITICALs), but I
      can see that the same piece of code applies, so I may as well sync.
  9. 07 Jan, 2019 1 commit
  10. 06 Jan, 2019 2 commits
  11. 04 Jan, 2019 5 commits
    • Ell's avatar
      app: small fix to last commit · d39ac2a3
      Ell authored
    • Ell's avatar
      app: in GimpHistogramEditor, don't block when creating bg histogram · 471efee7
      Ell authored
      In GimpHistogramEditor, when the drawable preview is frozen, don't
      duplicate the main histogram as the bg histogram if calculation is
      still ongoing, since this will block until histogram calculation is
      complete.  In particular, this creates a noticeable stall when
      beginning a paint stroke while the histogram is being calculated.
      Instead, defer the creation of the bg histogram to the completion
      of the calculation of the main histogram.
    • Ell's avatar
      app: write floating-point vars using C locale in performance logs · 626208b1
      Ell authored
      When writing floating-point instrumentation variables in
      performance logs, always use the C locale, rather than the current
    • Michael Natterer's avatar
      Issue #2446 - DPI information is not stored in clipboard · a0263f40
      Michael Natterer authored
      Set the "x-dpi" and "y-dpi" options on the GdkPixbuf set on the
      clipboard. There is not much more we can do, getting that value across
      the clipboard is out of our control, but at least we set the vlaues
    • Ell's avatar
      app: in GimpHistogramEditor, cancel ongoing async upon update · 5561da87
      Ell authored
      In gimp_histogram_editor_update(), cancel any ongoing histogram-
      calculation async before restarting the idle source.  The async
      will have been canceled anyway when recalculating the histogram
      once the idle source is run, but we can cancel it as soon as we
      know the histogram is outdated.
  12. 03 Jan, 2019 1 commit
  13. 02 Jan, 2019 1 commit
    • Michael Natterer's avatar
      Issue #1788 - Inconsistency between FG color and selected color in... · abd7cbfc
      Michael Natterer authored
      ...palette views despite selected color being in the currently
      selected pallette
      As suggested by Massimo, changing the color comparison EPSILON in
      gimppalette.c from 1e-10 to 1e-6 fixes this, and is really small
      Also, generally clean up color comparison epsilons:
      - use a #define, not hardcoded values for all uses of
      - call the #defines RGB_EPSILON and RGBA_EPSILON
      - make them all 1e-6 or larger
  14. 01 Jan, 2019 1 commit
    • Ell's avatar
      app: show message when attempting to change layers while there is a floating sel. · 070e10ed
      Ell authored
      In GimpDrawableTreeView, show an error message when attempting to
      select a different drawable while the image has an active floating
      selection.  In GimpLayerTreeView, also blink the editor button-row
      when this happens, as a hint that the floating selection can be
      committed/canceled through the buttons (we already highlight the
      relevant ones.)
  15. 31 Dec, 2018 6 commits
  16. 27 Dec, 2018 1 commit
    • Ell's avatar
      app: remove "Edit -> Fade..." · ed7ea51f
      Ell authored
      This commit completely removes the "Edit -> Fade..." feature,
      - The main reason is that "fade" requires us to keep two buffers,
        instead of one, for each fadeable undo step, doubling (or worse,
        since the extra buffer might have higher precision than the
        drawable) the space consumed by these steps.  This has notable
        impact when editing large images.  This overhead is incurred even
        when not actually using "fade", and since it seems to be very
        rarely used, this is too wasteful.
      - "Fade" is broken in 2.10: when comitting a filter, we copy the
        cached parts of the result into the apply buffer.  However, the
        result cache sits after the mode node, while the apply buffer
        should contain the result of the filter *before* the mode node,
        which can lead to wrong results in the general case.
      - The same behavior can be trivially achieved "manually", by
        duplicating the layer, editing the duplicate, and changing its
      - If we really want this feature, now that most filters are GEGL
        ops, it makes more sense to just add opacity/mode options to the
        filter tool, instead of having this be a separate step.
  17. 19 Dec, 2018 1 commit
    • Jehan's avatar
      app: show the layer mode dropdown list properly. · 6dfca83c
      Jehan authored
      Showing it was only displaying the top modes, with a lot of top space,
      and you had to slowly scroll down the list. This is the same as #2642
      (as Alexandre noted in a comment), so I just use the same "fix" though I
      don't fully understand it. It feels more of a side effect of
      gtk_combo_box_set_wrap_width() working around a bug of GtkComboBox. So
      if anyone has a better fix and understand the issue, feel free to patch
      (maybe GTK+ directly?). In the meantime, it works well enough. :-)
  18. 17 Dec, 2018 1 commit
  19. 15 Dec, 2018 1 commit
    • Jehan's avatar
      Issue #2664: add a tooltip to "better compression" checkbox. · c3ac7229
      Jehan authored
      Zlib is a "better" compression in the meaning that it is a more advanced
      and complex algorithm than RLE. And in most cases, it should end up in
      smaller file sizes. But as any algorithm, there may be cases when the
      expectations are not met (worst cases or such). That's the nature of the
      maths. Still we should not make the checkbox text over-complicated (it
      is not the place to teach algorithmic), yet we can at least add a small
      tooltip text.
  20. 11 Dec, 2018 1 commit
    • Jehan's avatar
      Issue #2495: different code for Windows and Linux on duplicate devices. · 74a7a5d3
      Jehan authored
      After discussing with Mitch, it turn out commit 717c183a was fixing
      (or rather working around) actual issues of broken device/usb stack
      issues on Linux, as expected.
      Nevertheless on Windows, this broke in turn many tablets (see commit
      ce24e160). Therefore we do a very ugly #ifdef to bail from duplicate
      devices on Windows whereas we continue on Linux. This fix and difference
      of behavior is completely empirical, rather than based on actual good
      logics, so that's quite annoying, but well… not much choice here.
      Also note that since we had no report of breakage on other OSes (such as
      macOS/BSD), at least that I know of, I let them with the Linux code
  21. 10 Dec, 2018 3 commits
  22. 06 Dec, 2018 1 commit
    • Jehan's avatar
      Issue #2495: many tablets broken by GIMP 2.10.8. · ce24e160
      Jehan authored
      We had many reports of tablets from various brands (Huion, Gaomon,
      XP-Pen…) broken in the last release (though working fine when
      downgrading to 2.10.6). Latest Huion drivers seem to fix the issue
      (according to at least one report), but this is not the case for other
      Though unable to test myself, provided stderr logs indicate that we hit
      the case when 2 devices with the same name are registered. Therefore
      this commit is basically reverting commit 717c183a (though keeping and
      completing the comments). I don't think there is an ultimate solution
      here but with this regression, experience shows us there seem to be a
      lot more breakage when overwriting the device with newer occurences (at
      least on Windows). It is unclear though if commit 717c183a was also
      supposed to fix another case actually encountered. If so, we will need
      to get an even more advanced solution.
  23. 01 Dec, 2018 1 commit
  24. 30 Nov, 2018 1 commit
    • Ell's avatar
      app: use gimp_async_add_callback_for_object() in various places · 7c00cf49
      Ell authored
      Use gimp_async_add_callback_for_object(), added in the previous
      commit, instead of gimp_async_add_callback(), in cases where the
      destructor of the object owning the async doesn't wait for the
      async to finish.  This avoids leaking such ongoing asyncs on
      shutdown, during which gimp-parallel either finishes or aborts the
      asyncs: if at this point an async has any registered callbacks, an
      idle source is added for running the callbacks, extending the
      lifetime of the async; however, since we're not getting back into
      the main loop, the idle is never run, and the async (and any
      associated resources) are never freed.
  25. 26 Nov, 2018 1 commit
  26. 10 Nov, 2018 1 commit
  27. 07 Nov, 2018 1 commit
  28. 03 Nov, 2018 1 commit