• Ell's avatar
    app: add gimp_pickable_contiguous_region_prepare_line_art_async() ... · b4e12fbb
    Ell authored
    ... and use in bucket-fill tool
    
    Add gimp_pickable_contiguous_region_prepare_line_art_async(), which
    computes a line-art asynchronously, and use it in the bucket-fill
    tool, instead of having the tool create the async op.
    
    This allows the async to keep running even after the pickable dies,
    since we only need the pickable's buffer, and not the pickable
    itself.  Previously, we reffed the pickable for the duration of the
    async, but we could still segfault when unreffing it, if the
    pickable was a drawable, and its parent image had already died.
    
    Furthermore, let the async work on a copy of the pickable's buffer,
    rather than the pickable's buffer directly.  This avoids some race
    conditions when the pickable is the image (i.e., when "sample
    merged" is active), since then we're using image projection's
    buffer, which is generally unsafe to use in different threads
    concurrently.
    
    Also, s/! has_alpha/has_alpha/ when looking for transparent pixels,
    and quit early, at least during this stage, if the async in
    canceled.
    b4e12fbb
gimppickable-contiguous-region.c 34.4 KB