1. 29 Sep, 2018 3 commits
    • Ell's avatar
      app: avoid applying buffer to drawable if application region is empty · ae3c0062
      Ell authored
      In gimp_drawable_real_{apply,replace}_buffer(), bail if the
      applcation region, after intersection with the drawable and mask
      extents, is empty.  This avoids trying to create a GeglBuffer with
      negative width/height.
    • Ell's avatar
      Issue #2287 - Weird things happen with dodge tool ... · a782acab
      Ell authored
      ... (some sort of corruption)
      In gimp_drawable_real_replace_buffer(), adjust the processed buffer
      and mask_buffer regions according to the changes made to the
      application region, as calculated by intersecting it with the
      drawable and mask extents.  This fixes wrong application position
      when painting using the heal, dodge/burn, smudge, or convolve
      tools, on a drawable whose origin is above/to the left of the
      image's origin, and there's a selection active.
    • Ell's avatar
      Issue #2222 - Warp Transform doesn't commit changes upon saving ... · ae628a86
      Ell authored
      ... the XCF file
      Add a "saving" signal to GimpImage, which is emitted when the image
      is about to be saved or exported (but before it's actually saved/
      exported).  Connect to this signal in tool-manager, and commit the
      current tool in response (unless its GimpToolControl::preserve is
  2. 27 Sep, 2018 1 commit
    • Ell's avatar
      app: construct tool-options GUI lazily · c1347a7f
      Ell authored
      We currently construct the tool-options GUI for all the tools at
      startup, which takes a significant amount of time.  Instead,
      only register the GUI construction function with the tool-options
      object, using the new gimp_tools_set_tool_options_gui_func()
      function, and use the registered function to construct the GUI when
      actually needed.
  3. 26 Sep, 2018 1 commit
    • Ell's avatar
      Issue #2272 - Crash when using the intelligent-scissors tool ... · a5baba55
      Ell authored
      ... after erasing all points
      When erasing the last remaining point in the iscissors tool, halt
      the tool, rather than leaving the tool active with an empty curve,
      which it is not prepared to handle, and which results in a segfault
      once trying to add a new point.
      Additionally, when erasing the last remaining segment (i.e., the
      two last remaining points), don't erase the entire segment (i.e.,
      both points), but rather convert the segment to its initial point,
      so that, in effect, we only erase the last point of the segment.
  4. 25 Sep, 2018 1 commit
    • Ell's avatar
      Revert "app: add "perspective correction" option to the measure tool" · 53964dcb
      Ell authored
      This reverts commit d31725a9.
      This option is not very useful.  In order to do actual perspective
      correction, we need more information, such as the scene's vanishing
      point and the camera's focal length.  The measure tool is probably
      not the right place to do all that.  Let's simply revert this.
  5. 23 Sep, 2018 9 commits
    • Ell's avatar
      app: use gimp_dialog_set_alternative_button_order() · bf2ea81f
      Ell authored
      ... instead of gtk_dialog_set_alternative_button_order().
    • Ell's avatar
      app: tweak focus behavior of GimpToolWidgetGroup when removing widget · 24fb5971
      Ell authored
      When removing the focus widget of a GimpToolWidgetGroup, use the
      last child, rather than the first child, as the new focus widget.
      This plays nicer with auto-raise, and is probably better anyway.
    • Ell's avatar
      app: add "perspective correction" option to the measure tool · d31725a9
      Ell authored
      Add a boolean "perspective correction" option to the measure tool.
      When toggled, the measure tool uses two compass widgets, instead of
      one.  Straightening the active item in this mode results a
      perspective transform that straightens both lines simultaneously,
      keeping their origin fixed.
      The information displayed in the info window/statusbar always
      refers to the currently-focused compass.
    • Ell's avatar
      app: in GimpToolWidgetGroup, improve focus behavior when adding/removing widgets · 95d2c92f
      Ell authored
      When a focused widget is added to a group, make it the new focus-
      widget of the group, instead of unsetting its focus if another
      widget already has focus.
      When removing the focused widget from a group, set a different
      widget as the group's focus widget (if one exists), instead of
      unsetting the focus widget, so that nonempty groups always have a
      focus widget.
    • Ell's avatar
      app: in GimpToolWidgetGroup, calculate hover widget at button press · 5b217b3a
      Ell authored
      In gimp_tool_widget_group_button_press(), explicitly call
      gimp_tool_widget_group_hover() before forwarding the event to the
      group's hover widget, so that the hover widget gets recalculated.
      If a widget is added to the group as a result of a button-press
      event, this guarantees that it gets considered as a target for the
      same event.
    • Ell's avatar
      app: confirm transforms that result in very large items · 20a6a358
      Ell authored
      In GimpTransformTools, precalculate the resulting size of the
      transformed item(s), and request confirmation if the size grows to
      over 10 times the size of the image (in either dimension).  This
      protects against transformations that can result in suprprisingly
      large items, such as inverted transformations, and, specifically,
      perspective-correction transformations performed using the measure
      tool, which will be added in the following commits.
    • Ell's avatar
      app: add gimp_drawable_transform_get_effective_clip() · 2ae823ba
      Ell authored
      Which returns the actual clip mode that will be used by the
      drawable for a particular transformation.
    • Ell's avatar
      app: indentation fix in gimpdrawable-transform.[ch] · 2c52bba0
      Ell authored
    • Ell's avatar
      app: add source location information to the Linux GimpBacktrace backend · 7cdd1ebe
      Ell authored
      When libbacktrace is available, use it to retrieve source location
      information in the Linux GimpBacktrace backend.
  6. 20 Sep, 2018 1 commit
  7. 18 Sep, 2018 3 commits
    • Ell's avatar
      app: fix incompatible pointer type warning in gimpviewrendererdrawable.c · a5c8dd5c
      Ell authored
      ... more GLib 2.58 fallout.
    • Ell's avatar
    • Ell's avatar
      app, libgimp*, modules: don't use g_type_class_add_private() ... · 3b0040c0
      Ell authored
      g_type_class_add_private() and G_TYPE_INSTANCE_GET_PRIVATE() were
      deprecated in GLib 2.58.  Instead, use
      G_ADD_PRIVATE[_DYNAMIC](), and the implictly-defined
      foo_get_instance_private() functions, all of which are available in
      the GLib versions we depend on.
      This commit only covers types registered using one of the
      G_DEFINE_FOO() macros (i.e., most types), but not types with a
      custom registration function, of which we still have a few -- GLib
      currently only provides a (non-deprecated) public API for adding a
      private struct using the G_DEFINE_FOO() macros.
      Note that this commit was 99% auto-generated (because I'm not
      *that* crazy :), so if there are any style mismatches... we'll have
      to live with them for now.
  8. 17 Sep, 2018 2 commits
    • Marco Ciampa's avatar
      Fixed small typo · 7bfd22ca
      Marco Ciampa authored
    • Jehan's avatar
      app: don't sanity check for "gegl:matting-levin". · 97247f41
      Jehan authored
      My previous commit answers the forever question "do we want to require
      this?" which was in comments and can now be removed.
      We don't need to actually require this operation for running GIMP, as it
      runs fine without. Just testing in configure is enough of a warning for
      the missing feature.
  9. 16 Sep, 2018 3 commits
  10. 11 Sep, 2018 4 commits
    • Jehan's avatar
      Issue #2055: make save dialog compatibility information understandable. · 573d8175
      Jehan authored
      * The minimum GIMP version for this XCF is always written down when it
        is GIMP 2.8 or over.
      * The list of features warrating the minimum version is now listed in an
        expander container rather than as tooltip (making the list actually
      * The warning on compression is now displayed as its own text under the
        checkbox (only when checking the box actually changes anything
        compatibility-wise), and not as additional text to the minimum GIMP
        version label. Otherwise it had far too much weight on the minimum
        compatible GIMP version text and people were wondering what it meant.
        We should not tell people what the checkbox cannot do (it cannot
        improve compatibility in some cases), only what it can do (it can
        improve compatibility in other cases).
      * Update the feature list real-time when checking the compression box
        (making it even more obvious that tile compression may have a say in
      * Metadata info is still added on the GIMP version label as it does not
        limit compatibility of the XCF file itself.
    • Jehan's avatar
      app: add a reason string for internal zlib compression in GIMP 2.10. · 0fa2ef91
      Jehan authored
      Even though chosen as a parameter to gimp_image_get_xcf_version() and
      not a feature within the image itself, we also want to list this reason
      in the compatibility list.
    • Jehan's avatar
      app: conditionnally free new profile in gimp_image_convert_precision(). · ea67537d
      Jehan authored
      Do not free a NULL pointer! This fixes a CRITICAL:
      > g_object_unref: assertion 'G_IS_OBJECT (object)' failed
    • Ell's avatar
      app: some cleanup in gimppaintcore-loops · 6c6a7514
      Ell authored
      In gimp_paint_core_loops_process(), initialize the iterator with
      sufficient room for the number of iterators used by the algorithm
      hierarchy, instead of a fixed number.
      Add an additional 'rect' parameter to the init_step() and
      process_rows() algorithm member functions, which receives the area
      of the currently-processed chunk, to be used instead of the
      iterator's ROI member.  This allows us to pass a NULL iterator to
      hierarchies that don't use an iterator, and avoid the stack-
      allocated iterator hack we used in this case (and which became even
      more problematic with the new iterator API).
  11. 10 Sep, 2018 12 commits