From ffc9948d6e2e99a0d65181774b628c2710923f8c Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Wed, 16 Nov 2011 21:10:43 +0100 Subject: [PATCH] app: add a canvas group for tool items so we can control where in the canvas item stack they appear. Put the group right below the software cursor. --- app/display/gimpdisplayshell-items.c | 24 ++++++++++++++++++++++++ app/display/gimpdisplayshell-items.h | 17 +++++++++++------ app/display/gimpdisplayshell.h | 1 + app/tools/gimpdrawtool.c | 4 ++-- app/tools/gimpsourcetool.c | 20 ++++++++++---------- app/tools/gimptool-progress.c | 4 ++-- 6 files changed, 50 insertions(+), 20 deletions(-) diff --git a/app/display/gimpdisplayshell-items.c b/app/display/gimpdisplayshell-items.c index c0338f9bff..3500984546 100644 --- a/app/display/gimpdisplayshell-items.c +++ b/app/display/gimpdisplayshell-items.c @@ -78,6 +78,10 @@ gimp_display_shell_items_init (GimpDisplayShell *shell) gimp_display_shell_add_item (shell, shell->layer_boundary); g_object_unref (shell->layer_boundary); + shell->tool_items = gimp_canvas_group_new (shell); + gimp_display_shell_add_item (shell, shell->tool_items); + g_object_unref (shell->tool_items); + shell->cursor = gimp_canvas_cursor_new (shell); gimp_canvas_item_set_visible (shell->cursor, FALSE); gimp_display_shell_add_item (shell, shell->cursor); @@ -132,6 +136,26 @@ gimp_display_shell_remove_item (GimpDisplayShell *shell, gimp_canvas_group_remove_item (GIMP_CANVAS_GROUP (shell->canvas_item), item); } +void +gimp_display_shell_add_tool_item (GimpDisplayShell *shell, + GimpCanvasItem *item) +{ + g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell)); + g_return_if_fail (GIMP_IS_CANVAS_ITEM (item)); + + gimp_canvas_group_add_item (GIMP_CANVAS_GROUP (shell->tool_items), item); +} + +void +gimp_display_shell_remove_tool_item (GimpDisplayShell *shell, + GimpCanvasItem *item) +{ + g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell)); + g_return_if_fail (GIMP_IS_CANVAS_ITEM (item)); + + gimp_canvas_group_remove_item (GIMP_CANVAS_GROUP (shell->tool_items), item); +} + /* private functions */ diff --git a/app/display/gimpdisplayshell-items.h b/app/display/gimpdisplayshell-items.h index 4b5b9b3bda..61f5f3430b 100644 --- a/app/display/gimpdisplayshell-items.h +++ b/app/display/gimpdisplayshell-items.h @@ -22,13 +22,18 @@ #define __GIMP_DISPLAY_SHELL_ITEMS_H__ -void gimp_display_shell_items_init (GimpDisplayShell *shell); -void gimp_display_shell_items_free (GimpDisplayShell *shell); +void gimp_display_shell_items_init (GimpDisplayShell *shell); +void gimp_display_shell_items_free (GimpDisplayShell *shell); -void gimp_display_shell_add_item (GimpDisplayShell *shell, - GimpCanvasItem *item); -void gimp_display_shell_remove_item (GimpDisplayShell *shell, - GimpCanvasItem *item); +void gimp_display_shell_add_item (GimpDisplayShell *shell, + GimpCanvasItem *item); +void gimp_display_shell_remove_item (GimpDisplayShell *shell, + GimpCanvasItem *item); + +void gimp_display_shell_add_tool_item (GimpDisplayShell *shell, + GimpCanvasItem *item); +void gimp_display_shell_remove_tool_item (GimpDisplayShell *shell, + GimpCanvasItem *item); #endif /* __GIMP_DISPLAY_SHELL_ITEMS_H__ */ diff --git a/app/display/gimpdisplayshell.h b/app/display/gimpdisplayshell.h index 6b7b247fe6..a7808495db 100644 --- a/app/display/gimpdisplayshell.h +++ b/app/display/gimpdisplayshell.h @@ -125,6 +125,7 @@ struct _GimpDisplayShell GimpCanvasItem *guides; /* item proxies of guides */ GimpCanvasItem *sample_points; /* item proxies of sample points */ GimpCanvasItem *layer_boundary; /* item for the layer boundary */ + GimpCanvasItem *tool_items; /* tools items, below the cursor */ GimpCanvasItem *cursor; /* item for the software cursor */ guint title_idle_id; /* title update idle ID */ diff --git a/app/tools/gimpdrawtool.c b/app/tools/gimpdrawtool.c index e7b656870d..09dd7d5e08 100644 --- a/app/tools/gimpdrawtool.c +++ b/app/tools/gimpdrawtool.c @@ -212,7 +212,7 @@ gimp_draw_tool_draw (GimpDrawTool *draw_tool) { GimpDisplayShell *shell = gimp_display_get_shell (draw_tool->display); - gimp_display_shell_add_item (shell, draw_tool->item); + gimp_display_shell_add_tool_item (shell, draw_tool->item); } } } @@ -224,7 +224,7 @@ gimp_draw_tool_undraw (GimpDrawTool *draw_tool) { GimpDisplayShell *shell = gimp_display_get_shell (draw_tool->display); - gimp_display_shell_remove_item (shell, draw_tool->item); + gimp_display_shell_remove_tool_item (shell, draw_tool->item); g_object_unref (draw_tool->item); draw_tool->item = NULL; } diff --git a/app/tools/gimpsourcetool.c b/app/tools/gimpsourcetool.c index 6944ce76c8..561730fdc0 100644 --- a/app/tools/gimpsourcetool.c +++ b/app/tools/gimpsourcetool.c @@ -383,8 +383,8 @@ gimp_source_tool_draw (GimpDrawTool *draw_tool) if (source_tool->src_outline) { - gimp_display_shell_remove_item (src_shell, - source_tool->src_outline); + gimp_display_shell_remove_tool_item (src_shell, + source_tool->src_outline); source_tool->src_outline = NULL; } @@ -399,8 +399,8 @@ gimp_source_tool_draw (GimpDrawTool *draw_tool) if (source_tool->src_outline) { - gimp_display_shell_add_item (src_shell, - source_tool->src_outline); + gimp_display_shell_add_tool_item (src_shell, + source_tool->src_outline); g_object_unref (source_tool->src_outline); } } @@ -415,8 +415,8 @@ gimp_source_tool_draw (GimpDrawTool *draw_tool) source_tool->src_y + off_y, GIMP_TOOL_HANDLE_SIZE_CROSS, GIMP_TOOL_HANDLE_SIZE_CROSS); - gimp_display_shell_add_item (src_shell, - source_tool->src_handle); + gimp_display_shell_add_tool_item (src_shell, + source_tool->src_handle); g_object_unref (source_tool->src_handle); } else @@ -442,15 +442,15 @@ gimp_source_tool_set_src_display (GimpSourceTool *source_tool, if (source_tool->src_handle) { - gimp_display_shell_remove_item (src_shell, - source_tool->src_handle); + gimp_display_shell_remove_tool_item (src_shell, + source_tool->src_handle); source_tool->src_handle = NULL; } if (source_tool->src_outline) { - gimp_display_shell_remove_item (src_shell, - source_tool->src_outline); + gimp_display_shell_remove_tool_item (src_shell, + source_tool->src_outline); source_tool->src_outline = NULL; } } diff --git a/app/tools/gimptool-progress.c b/app/tools/gimptool-progress.c index d2ab917f60..e69009d46f 100644 --- a/app/tools/gimptool-progress.c +++ b/app/tools/gimptool-progress.c @@ -97,7 +97,7 @@ gimp_tool_progress_start (GimpProgress *progress, tool->progress = gimp_canvas_progress_new (shell, GIMP_HANDLE_ANCHOR_CENTER, x + w / 2, y + h / 2); - gimp_display_shell_add_item (shell, tool->progress); + gimp_display_shell_add_tool_item (shell, tool->progress); g_object_unref (tool->progress); gimp_progress_start (GIMP_PROGRESS (tool->progress), @@ -119,7 +119,7 @@ gimp_tool_progress_end (GimpProgress *progress) GimpDisplayShell *shell = gimp_display_get_shell (tool->progress_display); gimp_progress_end (GIMP_PROGRESS (tool->progress)); - gimp_display_shell_remove_item (shell, tool->progress); + gimp_display_shell_remove_tool_item (shell, tool->progress); tool->progress = NULL; tool->progress_display = NULL;