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;
}
Esempio n. 2
0
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);
    }
}
Esempio n. 3
0
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);
        }
    }
}