app: Refactor GimpBlendTool to not use update methods.

Simply call draw_tool_pause/resume instead.
This commit is contained in:
Michael Henning 2014-09-06 23:21:02 -04:00
parent 1db5c06f54
commit 8a2a9775b9
2 changed files with 86 additions and 123 deletions

View File

@ -56,7 +56,6 @@
#include "gimp-intl.h"
#define SHOW_LINE TRUE
#define HANDLE_CROSS_DIAMETER 18
#define HANDLE_DIAMETER 40
@ -110,8 +109,6 @@ static void gimp_blend_tool_cursor_update (GimpTool *tool,
GimpDisplay *display);
static void gimp_blend_tool_draw (GimpDrawTool *draw_tool);
static void gimp_blend_tool_update_items (GimpBlendTool *blend_tool);
static void gimp_blend_tool_update_item_hilight (GimpBlendTool *blend_tool);
static GimpBlendToolPoint gimp_blend_tool_get_point_under_cursor (GimpBlendTool *blend_tool);
@ -293,11 +290,12 @@ gimp_blend_tool_oper_update (GimpTool *tool,
GimpDisplay *display)
{
GimpBlendTool *blend_tool = GIMP_BLEND_TOOL (tool);
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
gimp_draw_tool_pause (draw_tool);
blend_tool->mouse_x = coords->x;
blend_tool->mouse_y = coords->y;
gimp_blend_tool_update_item_hilight (blend_tool);
gimp_draw_tool_resume (draw_tool);
}
static void
@ -309,6 +307,7 @@ gimp_blend_tool_button_press (GimpTool *tool,
GimpDisplay *display)
{
GimpBlendTool *blend_tool = GIMP_BLEND_TOOL (tool);
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
blend_tool->mouse_x = coords->x;
blend_tool->mouse_y = coords->y;
@ -319,11 +318,13 @@ gimp_blend_tool_button_press (GimpTool *tool,
gimp_blend_tool_halt_preview (blend_tool);
}
gimp_draw_tool_pause (draw_tool);
blend_tool->grabbed_point = gimp_blend_tool_get_point_under_cursor (blend_tool);
if (blend_tool->grabbed_point == POINT_NONE)
{
if (gimp_draw_tool_is_active (GIMP_DRAW_TOOL (blend_tool)))
if (gimp_draw_tool_is_active (draw_tool))
{
gimp_tool_control (tool, GIMP_TOOL_ACTION_COMMIT, display);
gimp_tool_control (tool, GIMP_TOOL_ACTION_HALT, display);
@ -346,7 +347,8 @@ gimp_blend_tool_button_press (GimpTool *tool,
state & gimp_get_constrain_behavior_mask ());
tool->display = display;
gimp_blend_tool_update_items (blend_tool);
gimp_draw_tool_resume (draw_tool);
if (blend_tool->grabbed_point != POINT_FILL_MODE &&
blend_tool->grabbed_point != POINT_INIT_MODE)
@ -401,6 +403,9 @@ gimp_blend_tool_motion (GimpTool *tool,
GimpDisplay *display)
{
GimpBlendTool *blend_tool = GIMP_BLEND_TOOL (tool);
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
gimp_draw_tool_pause (draw_tool);
/* Save the mouse coordinates from last call */
gdouble last_x = blend_tool->mouse_x;
@ -436,7 +441,7 @@ gimp_blend_tool_motion (GimpTool *tool,
gimp_tool_pop_status (tool, display);
gimp_blend_tool_push_status (blend_tool, state, display);
gimp_blend_tool_update_items (blend_tool);
gimp_draw_tool_resume (draw_tool);
gimp_blend_tool_update_preview_coords (blend_tool);
gimp_image_map_apply (blend_tool->image_map, NULL);
@ -513,16 +518,17 @@ gimp_blend_tool_active_modifier_key (GimpTool *tool,
GimpDisplay *display)
{
GimpBlendTool *blend_tool = GIMP_BLEND_TOOL (tool);
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
if (key == gimp_get_constrain_behavior_mask ())
{
gimp_draw_tool_pause (draw_tool);
gimp_blend_tool_point_motion (blend_tool, press);
gimp_draw_tool_resume (draw_tool);
gimp_tool_pop_status (tool, display);
gimp_blend_tool_push_status (blend_tool, state, display);
gimp_blend_tool_update_items (blend_tool);
gimp_blend_tool_update_preview_coords (blend_tool);
gimp_image_map_apply (blend_tool->image_map, NULL);
}
@ -570,27 +576,16 @@ gimp_blend_tool_cursor_update (GimpTool *tool,
static void
gimp_blend_tool_draw (GimpDrawTool *draw_tool)
{
GimpBlendTool *blend_tool = GIMP_BLEND_TOOL (draw_tool);
GimpBlendTool *blend_tool = GIMP_BLEND_TOOL (draw_tool);
GimpCanvasItem *start_handle_cross, *end_handle_cross;
blend_tool->line =
gimp_draw_tool_add_line (draw_tool,
blend_tool->start_x,
blend_tool->start_y,
blend_tool->end_x,
blend_tool->end_y);
gimp_draw_tool_add_line (draw_tool,
blend_tool->start_x,
blend_tool->start_y,
blend_tool->end_x,
blend_tool->end_y);
gimp_canvas_item_set_visible (blend_tool->line, SHOW_LINE);
blend_tool->start_handle_circle =
gimp_draw_tool_add_handle (draw_tool,
GIMP_HANDLE_CIRCLE,
blend_tool->start_x,
blend_tool->start_y,
HANDLE_DIAMETER,
HANDLE_DIAMETER,
GIMP_HANDLE_ANCHOR_CENTER);
blend_tool->start_handle_cross =
start_handle_cross =
gimp_draw_tool_add_handle (draw_tool,
GIMP_HANDLE_CROSS,
blend_tool->start_x,
@ -599,16 +594,7 @@ gimp_blend_tool_draw (GimpDrawTool *draw_tool)
HANDLE_CROSS_DIAMETER,
GIMP_HANDLE_ANCHOR_CENTER);
blend_tool->end_handle_circle =
gimp_draw_tool_add_handle (draw_tool,
GIMP_HANDLE_CIRCLE,
blend_tool->end_x,
blend_tool->end_y,
HANDLE_DIAMETER,
HANDLE_DIAMETER,
GIMP_HANDLE_ANCHOR_CENTER);
blend_tool->end_handle_cross =
end_handle_cross =
gimp_draw_tool_add_handle (draw_tool,
GIMP_HANDLE_CROSS,
blend_tool->end_x,
@ -617,98 +603,81 @@ gimp_blend_tool_draw (GimpDrawTool *draw_tool)
HANDLE_CROSS_DIAMETER,
GIMP_HANDLE_ANCHOR_CENTER);
gimp_blend_tool_update_item_hilight (blend_tool);
}
GimpBlendToolPoint hilight_point;
gboolean start_visible, end_visible;
static void
gimp_blend_tool_update_items (GimpBlendTool *blend_tool)
{
if (gimp_draw_tool_is_active (GIMP_DRAW_TOOL (blend_tool)))
/* Calculate handle visibility */
if (blend_tool->grabbed_point)
{
gimp_canvas_line_set (blend_tool->line,
blend_tool->start_x,
blend_tool->start_y,
blend_tool->end_x,
blend_tool->end_y);
gimp_canvas_handle_set_position (blend_tool->start_handle_circle,
blend_tool->start_x,
blend_tool->start_y);
gimp_canvas_handle_set_position (blend_tool->start_handle_cross,
blend_tool->start_x,
blend_tool->start_y);
gimp_canvas_handle_set_position (blend_tool->end_handle_circle,
blend_tool->end_x,
blend_tool->end_y);
gimp_canvas_handle_set_position (blend_tool->end_handle_cross,
blend_tool->end_x,
blend_tool->end_y);
gimp_blend_tool_update_item_hilight (blend_tool);
start_visible = FALSE;
end_visible = FALSE;
}
}
static void
gimp_blend_tool_update_item_hilight (GimpBlendTool *blend_tool)
{
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (blend_tool);
if (gimp_draw_tool_is_active (draw_tool))
else
{
GimpBlendToolPoint hilight_point;
gboolean start_visible, end_visible;
gdouble dist;
dist = gimp_draw_tool_calc_distance_square (draw_tool,
draw_tool->display,
blend_tool->mouse_x,
blend_tool->mouse_y,
blend_tool->start_x,
blend_tool->start_y);
/* Calculate handle visibility */
if (blend_tool->grabbed_point)
{
start_visible = FALSE;
end_visible = FALSE;
}
else
{
gdouble dist;
dist = gimp_draw_tool_calc_distance_square (draw_tool,
draw_tool->display,
blend_tool->mouse_x,
blend_tool->mouse_y,
blend_tool->start_x,
blend_tool->start_y);
start_visible = dist < FULL_HANDLE_THRESHOLD_SQ;
start_visible = dist < FULL_HANDLE_THRESHOLD_SQ;
dist = gimp_draw_tool_calc_distance_square (draw_tool,
draw_tool->display,
blend_tool->mouse_x,
blend_tool->mouse_y,
blend_tool->end_x,
blend_tool->end_y);
dist = gimp_draw_tool_calc_distance_square (draw_tool,
draw_tool->display,
blend_tool->mouse_x,
blend_tool->mouse_y,
blend_tool->end_x,
blend_tool->end_y);
end_visible = dist < FULL_HANDLE_THRESHOLD_SQ;
}
end_visible = dist < FULL_HANDLE_THRESHOLD_SQ;
}
/* Update hilights */
if (blend_tool->grabbed_point)
hilight_point = blend_tool->grabbed_point;
else
hilight_point = gimp_blend_tool_get_point_under_cursor (blend_tool);
gimp_canvas_item_set_visible (blend_tool->start_handle_circle,
start_visible);
gimp_canvas_item_set_visible (blend_tool->end_handle_circle,
end_visible);
if (start_visible)
{
GimpCanvasItem *start_handle_circle;
/* Update hilights */
if (blend_tool->grabbed_point)
hilight_point = blend_tool->grabbed_point;
else
hilight_point = gimp_blend_tool_get_point_under_cursor (blend_tool);
start_handle_circle =
gimp_draw_tool_add_handle (draw_tool,
GIMP_HANDLE_CIRCLE,
blend_tool->start_x,
blend_tool->start_y,
HANDLE_DIAMETER,
HANDLE_DIAMETER,
GIMP_HANDLE_ANCHOR_CENTER);
gimp_canvas_item_set_highlight (blend_tool->start_handle_circle,
hilight_point == POINT_START);
gimp_canvas_item_set_highlight (blend_tool->start_handle_cross,
gimp_canvas_item_set_highlight (start_handle_circle,
hilight_point == POINT_START);
}
gimp_canvas_item_set_highlight (blend_tool->end_handle_circle,
if (end_visible)
{
GimpCanvasItem *end_handle_circle;
end_handle_circle =
gimp_draw_tool_add_handle (draw_tool,
GIMP_HANDLE_CIRCLE,
blend_tool->end_x,
blend_tool->end_y,
HANDLE_DIAMETER,
HANDLE_DIAMETER,
GIMP_HANDLE_ANCHOR_CENTER);
gimp_canvas_item_set_highlight (end_handle_circle,
hilight_point == POINT_END);
gimp_canvas_item_set_highlight (blend_tool->end_handle_cross,
hilight_point == POINT_END);
}
}
gimp_canvas_item_set_highlight (start_handle_cross,
hilight_point == POINT_START);
gimp_canvas_item_set_highlight (end_handle_cross,
hilight_point == POINT_END);
}
static GimpBlendToolPoint

View File

@ -60,12 +60,6 @@ struct _GimpBlendTool
gdouble mouse_x; /* pointer x coord */
gdouble mouse_y; /* pointer y coord */
GimpCanvasItem *line;
GimpCanvasItem *start_handle_circle;
GimpCanvasItem *start_handle_cross;
GimpCanvasItem *end_handle_circle;
GimpCanvasItem *end_handle_cross;
GeglNode *graph;
GeglNode *render_node;
GimpImageMap *image_map;