[gimp] app: add "show all" support to the Bucket Fill tool in line-art mode
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add "show all" support to the Bucket Fill tool in line-art mode
- Date: Mon, 4 Nov 2019 11:33:55 +0000 (UTC)
commit 43a1c33ecfff912420820b9ef8632e69e3b3b205
Author: Ell <ell_se yahoo com>
Date: Mon Nov 4 13:08:01 2019 +0200
app: add "show all" support to the Bucket Fill tool in line-art mode
In the Bucket Fill tool, when using line-art mode, use a
GimpImageProxy as input for the GimpLineArt object, instead of
using the image direclty, when the line-art source is "all visible
layers". Set the proxy's show-all mode according to the active
shell, so that the line-art uses the full image projection,
including out-of-canvas regions, when in show-all mode.
app/tools/gimpbucketfilltool.c | 57 ++++++++++++++++++++++++++++++++++++------
1 file changed, 50 insertions(+), 7 deletions(-)
---
diff --git a/app/tools/gimpbucketfilltool.c b/app/tools/gimpbucketfilltool.c
index c6095958d6..6197f87dd5 100644
--- a/app/tools/gimpbucketfilltool.c
+++ b/app/tools/gimpbucketfilltool.c
@@ -36,6 +36,7 @@
#include "core/gimperror.h"
#include "core/gimpfilloptions.h"
#include "core/gimpimage.h"
+#include "core/gimpimageproxy.h"
#include "core/gimpitem.h"
#include "core/gimplineart.h"
#include "core/gimppickable.h"
@@ -68,6 +69,7 @@ struct _GimpBucketFillToolPrivate
{
GimpLineArt *line_art;
GimpImage *line_art_image;
+ GimpDisplayShell *line_art_shell;
/* For preview */
GeglNode *graph;
@@ -251,7 +253,7 @@ gimp_bucket_fill_tool_constructed (GObject *object)
g_signal_connect_swapped (options, "notify::line-art-source",
G_CALLBACK (gimp_bucket_fill_tool_reset_line_art),
tool);
- g_signal_connect_swapped (context, "image-changed",
+ g_signal_connect_swapped (context, "display-changed",
G_CALLBACK (gimp_bucket_fill_tool_reset_line_art),
tool);
@@ -274,6 +276,14 @@ gimp_bucket_fill_tool_finalize (GObject *object)
g_signal_handlers_disconnect_by_data (tool->priv->line_art_image, tool);
tool->priv->line_art_image = NULL;
}
+ if (tool->priv->line_art_shell)
+ {
+ g_signal_handlers_disconnect_by_func (
+ tool->priv->line_art_shell,
+ gimp_bucket_fill_tool_reset_line_art,
+ tool);
+ tool->priv->line_art_shell = NULL;
+ }
g_clear_object (&tool->priv->line_art);
g_signal_handlers_disconnect_by_data (options, tool);
@@ -290,7 +300,6 @@ gimp_bucket_fill_tool_coords_in_active_pickable (GimpBucketFillTool *tool,
GimpBucketFillOptions *options = GIMP_BUCKET_FILL_TOOL_GET_OPTIONS (tool);
GimpDisplayShell *shell = gimp_display_get_shell (display);
GimpImage *image = gimp_display_get_image (display);
- gboolean show_all = FALSE;
gboolean sample_merged = FALSE;
switch (options->fill_area)
@@ -299,7 +308,6 @@ gimp_bucket_fill_tool_coords_in_active_pickable (GimpBucketFillTool *tool,
break;
case GIMP_BUCKET_FILL_SIMILAR_COLORS:
- show_all = shell->show_all;
sample_merged = options->sample_merged;
break;
@@ -310,7 +318,8 @@ gimp_bucket_fill_tool_coords_in_active_pickable (GimpBucketFillTool *tool,
}
return gimp_image_coords_in_active_pickable (image, coords,
- show_all, sample_merged, TRUE);
+ shell->show_all, sample_merged,
+ TRUE);
}
static void
@@ -919,14 +928,22 @@ gimp_bucket_fill_tool_reset_line_art (GimpBucketFillTool *tool)
{
GimpBucketFillOptions *options = GIMP_BUCKET_FILL_TOOL_GET_OPTIONS (tool);
GimpLineArt *line_art = tool->priv->line_art;
+ GimpDisplayShell *shell = NULL;
GimpImage *image = NULL;
- if (options && options->fill_area == GIMP_BUCKET_FILL_LINE_ART)
+ if (options->fill_area == GIMP_BUCKET_FILL_LINE_ART)
{
GimpContext *context;
+ GimpDisplay *display;
context = gimp_get_user_context (GIMP_CONTEXT (options)->gimp);
- image = gimp_context_get_image (context);
+ display = gimp_context_get_display (context);
+
+ if (display)
+ {
+ shell = gimp_display_get_shell (display);
+ image = gimp_display_get_image (display);
+ }
}
if (image != tool->priv->line_art_image)
@@ -960,6 +977,26 @@ gimp_bucket_fill_tool_reset_line_art (GimpBucketFillTool *tool)
}
}
+ if (shell != tool->priv->line_art_shell)
+ {
+ if (tool->priv->line_art_shell)
+ {
+ g_signal_handlers_disconnect_by_func (
+ tool->priv->line_art_shell,
+ gimp_bucket_fill_tool_reset_line_art,
+ tool);
+ }
+
+ tool->priv->line_art_shell = shell;
+
+ if (shell)
+ {
+ g_signal_connect_swapped (shell, "notify::show-all",
+ G_CALLBACK (gimp_bucket_fill_tool_reset_line_art),
+ tool);
+ }
+ }
+
if (image)
{
GimpDrawable *drawable = gimp_image_get_active_drawable (image);
@@ -969,7 +1006,13 @@ gimp_bucket_fill_tool_reset_line_art (GimpBucketFillTool *tool)
if (options->line_art_source == GIMP_LINE_ART_SOURCE_SAMPLE_MERGED)
{
- gimp_line_art_set_input (line_art, GIMP_PICKABLE (image));
+ GimpImageProxy *image_proxy = gimp_image_proxy_new (image);
+
+ gimp_image_proxy_set_show_all (image_proxy, shell->show_all);
+
+ gimp_line_art_set_input (line_art, GIMP_PICKABLE (image_proxy));
+
+ g_object_unref (image_proxy);
}
else if (drawable)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]