static void gimp_foreground_select_tool_button_release (GimpTool *tool, const GimpCoords *coords, guint32 time, GdkModifierType state, GimpButtonReleaseType release_type, GimpDisplay *display) { GimpForegroundSelectTool *fg_select = GIMP_FOREGROUND_SELECT_TOOL (tool); if (fg_select->mask) { GimpForegroundSelectOptions *options; options = GIMP_FOREGROUND_SELECT_TOOL_GET_OPTIONS (tool); gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool)); gimp_tool_control_halt (tool->control); gimp_foreground_select_tool_push_stroke (fg_select, display, options); gimp_free_select_tool_select (GIMP_FREE_SELECT_TOOL (tool), display); gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool)); } else { GIMP_TOOL_CLASS (parent_class)->button_release (tool, coords, time, state, release_type, display); } }
static gboolean gimp_foreground_select_tool_idle_select (GimpForegroundSelectTool *fg_select) { GimpTool *tool = GIMP_TOOL (fg_select); fg_select->idle_id = 0; if (tool->display) gimp_free_select_tool_select (GIMP_FREE_SELECT_TOOL (tool), tool->display); return FALSE; }
static void gimp_foreground_select_tool_button_release (GimpTool *tool, const GimpCoords *coords, guint32 time, GdkModifierType state, GimpButtonReleaseType release_type, GimpDisplay *display) { GimpForegroundSelectTool *fg_select = GIMP_FOREGROUND_SELECT_TOOL (tool); if ((fg_select->state == MATTING_STATE_PAINT_TRIMAP) || (fg_select->state == MATTING_STATE_PREVIEW_MASK)) { GimpForegroundSelectOptions *options; options = GIMP_FOREGROUND_SELECT_TOOL_GET_OPTIONS (tool); gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool)); gimp_tool_control_halt (tool->control); gimp_foreground_select_tool_stroke_paint (fg_select, display, options); if (fg_select->state == MATTING_STATE_PREVIEW_MASK) gimp_foreground_select_tool_preview (fg_select, display); else gimp_foreground_select_tool_set_trimap (fg_select, display); gimp_free_select_tool_select (GIMP_FREE_SELECT_TOOL (tool), display); gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool)); } else if (fg_select->state == MATTING_STATE_FREE_SELECT) { GIMP_TOOL_CLASS (parent_class)->button_release (tool, coords, time, state, release_type, display); } }