static void gimp_foreground_select_tool_set_preview (GimpForegroundSelectTool *fg_select, GimpDisplay *display) { GimpTool *tool = GIMP_TOOL (fg_select); GimpForegroundSelectOptions *options; GimpRGB color; g_return_if_fail (fg_select->mask != NULL); options = GIMP_FOREGROUND_SELECT_TOOL_GET_OPTIONS (tool); gimp_foreground_select_options_get_mask_color (options, &color); gimp_display_shell_set_mask (gimp_display_get_shell (display), fg_select->mask, &color); gimp_tool_control_set_tool_cursor (tool->control, GIMP_TOOL_CURSOR_PAINTBRUSH); gimp_tool_control_set_toggle_tool_cursor (tool->control, GIMP_TOOL_CURSOR_PAINTBRUSH); gimp_tool_control_set_toggled (tool->control, FALSE); fg_select->state = MATTING_STATE_PREVIEW_MASK; }
static void gimp_foreground_select_tool_set_mask (GimpForegroundSelectTool *fg_select, GimpDisplay *display, GimpChannel *mask) { GimpTool *tool = GIMP_TOOL (fg_select); GimpForegroundSelectOptions *options; options = GIMP_FOREGROUND_SELECT_TOOL_GET_OPTIONS (tool); if (fg_select->mask == mask) return; if (fg_select->mask) { g_object_unref (fg_select->mask); fg_select->mask = NULL; } if (mask) { GimpRGB color; fg_select->mask = g_object_ref (mask); gimp_foreground_select_options_get_mask_color (options, &color); gimp_display_shell_set_mask (gimp_display_get_shell (display), GIMP_DRAWABLE (mask), &color); } else { gimp_display_shell_set_mask (gimp_display_get_shell (display), NULL, NULL); } if (mask) { gimp_tool_control_set_tool_cursor (tool->control, GIMP_TOOL_CURSOR_PAINTBRUSH); gimp_tool_control_set_toggle_tool_cursor (tool->control, GIMP_TOOL_CURSOR_ERASER); gimp_tool_control_set_toggled (tool->control, options->background); } else { gimp_tool_control_set_tool_cursor (tool->control, GIMP_TOOL_CURSOR_FREE_SELECT); gimp_tool_control_set_toggle_tool_cursor (tool->control, GIMP_TOOL_CURSOR_FREE_SELECT); gimp_tool_control_set_toggled (tool->control, FALSE); } }
static void gimp_foreground_select_options_notify (GimpForegroundSelectOptions *options, GParamSpec *pspec, GimpForegroundSelectTool *fg_select) { SioxRefinementType refinement = 0; if (! fg_select->mask) return; if (strcmp (pspec->name, "smoothness") == 0) { refinement = SIOX_REFINEMENT_CHANGE_SMOOTHNESS; } else if (strcmp (pspec->name, "contiguous") == 0) { refinement = SIOX_REFINEMENT_CHANGE_MULTIBLOB; } else if (g_str_has_prefix (pspec->name, "sensitivity")) { refinement = SIOX_REFINEMENT_CHANGE_SENSITIVITY; } if (refinement && fg_select->strokes) { fg_select->refinement |= refinement; if (fg_select->idle_id) g_source_remove (fg_select->idle_id); fg_select->idle_id = g_timeout_add_full (G_PRIORITY_LOW, MINIMUM_DELAY, (GSourceFunc) gimp_foreground_select_tool_idle_select, fg_select, NULL); } if (g_str_has_prefix (pspec->name, "mask-color")) { GimpTool *tool = GIMP_TOOL (fg_select); if (tool->display && fg_select->mask) { GimpRGB color; gimp_foreground_select_options_get_mask_color (options, &color); gimp_display_shell_set_mask (gimp_display_get_shell (tool->display), GIMP_DRAWABLE (fg_select->mask), &color); } } }