static void gimp_display_shell_quick_mask_changed_handler (GimpImage *image, GimpDisplayShell *shell) { GtkImage *gtk_image; gboolean quick_mask_state; gtk_image = GTK_IMAGE (gtk_bin_get_child (GTK_BIN (shell->quick_mask_button))); g_signal_handlers_block_by_func (shell->quick_mask_button, gimp_display_shell_quick_mask_toggled, shell); quick_mask_state = gimp_image_get_quick_mask_state (image); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (shell->quick_mask_button), quick_mask_state); if (quick_mask_state) gtk_image_set_from_icon_name (gtk_image, GIMP_STOCK_QUICK_MASK_ON, GTK_ICON_SIZE_MENU); else gtk_image_set_from_icon_name (gtk_image, GIMP_STOCK_QUICK_MASK_OFF, GTK_ICON_SIZE_MENU); g_signal_handlers_unblock_by_func (shell->quick_mask_button, gimp_display_shell_quick_mask_toggled, shell); }
void gimp_display_shell_quick_mask_toggled (GtkWidget *widget, GimpDisplayShell *shell) { GimpImage *image = gimp_display_get_image (shell->display); gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); if (active != gimp_image_get_quick_mask_state (image)) { gimp_image_set_quick_mask_state (image, active); gimp_image_flush (image); } }
void quick_mask_toggle_cmd_callback (GtkAction *action, gpointer data) { GimpImage *image; gboolean active; return_if_no_image (image, data); active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); if (active != gimp_image_get_quick_mask_state (image)) { gimp_image_set_quick_mask_state (image, active); gimp_image_flush (image); } }
void gimp_display_shell_quick_mask_toggled (GtkWidget *widget, GimpDisplayShell *shell) { GimpImage *image = gimp_display_get_image (shell->display); gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); if (active != gimp_image_get_quick_mask_state (image)) { GimpImageWindow *window = gimp_display_shell_get_window (shell); if (window) { GimpUIManager *manager = gimp_image_window_get_ui_manager (window); gimp_ui_manager_toggle_action (manager, "quick-mask", "quick-mask-toggle", active); } } }
void gimp_image_set_quick_mask_state (GimpImage *image, gboolean active) { GimpChannel *selection; GimpChannel *mask; gboolean channel_was_active; g_return_if_fail (GIMP_IS_IMAGE (image)); if (active == gimp_image_get_quick_mask_state (image)) return; /* Keep track of the state so that we can make the right drawable * active again when deactiviting quick mask (see bug #134371). */ if (image->quick_mask_state) channel_was_active = (image->quick_mask_state & CHANNEL_WAS_ACTIVE) != 0; else channel_was_active = gimp_image_get_active_channel (image) != NULL; /* Set image->quick_mask_state early so we can return early when * being called recursively. */ image->quick_mask_state = (active ? TRUE | (channel_was_active ? CHANNEL_WAS_ACTIVE : 0) : FALSE); selection = gimp_image_get_mask (image); mask = gimp_image_get_quick_mask (image); if (active) { if (! mask) { gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_IMAGE_QUICK_MASK, _("Enable Quick Mask")); if (gimp_channel_is_empty (selection)) { /* if no selection */ GimpLayer *floating_sel = gimp_image_floating_sel (image); if (floating_sel) floating_sel_to_layer (floating_sel); mask = gimp_channel_new (image, image->width, image->height, GIMP_IMAGE_QUICK_MASK_NAME, &image->quick_mask_color); /* Clear the mask */ gimp_channel_clear (mask, NULL, FALSE); } else { /* if selection */ mask = GIMP_CHANNEL (gimp_item_duplicate (GIMP_ITEM (selection), GIMP_TYPE_CHANNEL, FALSE)); /* Clear the selection */ gimp_channel_clear (selection, NULL, TRUE); gimp_channel_set_color (mask, &image->quick_mask_color, FALSE); gimp_item_rename (GIMP_ITEM (mask), GIMP_IMAGE_QUICK_MASK_NAME); } if (image->quick_mask_inverted) gimp_channel_invert (mask, FALSE); gimp_image_add_channel (image, mask, 0); gimp_image_undo_group_end (image); } } else { if (mask) { GimpLayer *floating_sel = gimp_image_floating_sel (image); gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_IMAGE_QUICK_MASK, _("Disable Quick Mask")); if (image->quick_mask_inverted) gimp_channel_invert (mask, TRUE); if (floating_sel && floating_sel->fs.drawable == GIMP_DRAWABLE (mask)) floating_sel_anchor (floating_sel); gimp_selection_load (gimp_image_get_mask (image), mask); gimp_image_remove_channel (image, mask); if (! channel_was_active) gimp_image_unset_active_channel (image); gimp_image_undo_group_end (image); } } gimp_image_quick_mask_changed (image); }