mirror of https://github.com/GNOME/gimp.git
Move the quick mask members to GimpImagePrivate
and add API to access the "inverted" state.
This commit is contained in:
parent
02f5931c96
commit
4c1ec79281
|
@ -25,6 +25,7 @@
|
||||||
#include "actions-types.h"
|
#include "actions-types.h"
|
||||||
|
|
||||||
#include "core/gimpimage.h"
|
#include "core/gimpimage.h"
|
||||||
|
#include "core/gimpimage-quick-mask.h"
|
||||||
|
|
||||||
#include "widgets/gimpactiongroup.h"
|
#include "widgets/gimpactiongroup.h"
|
||||||
#include "widgets/gimphelp-ids.h"
|
#include "widgets/gimphelp-ids.h"
|
||||||
|
@ -95,7 +96,18 @@ void
|
||||||
quick_mask_actions_update (GimpActionGroup *group,
|
quick_mask_actions_update (GimpActionGroup *group,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GimpImage *image = action_data_get_image (data);
|
GimpImage *image = action_data_get_image (data);
|
||||||
|
gboolean quick_mask_state = FALSE;
|
||||||
|
gboolean quick_mask_inverted = FALSE;
|
||||||
|
GimpRGB quick_mask_color;
|
||||||
|
|
||||||
|
if (image)
|
||||||
|
{
|
||||||
|
quick_mask_state = gimp_image_get_quick_mask_state (image);
|
||||||
|
quick_mask_inverted = gimp_image_get_quick_mask_inverted (image);
|
||||||
|
|
||||||
|
gimp_image_get_quick_mask_color (image, &quick_mask_color);
|
||||||
|
}
|
||||||
|
|
||||||
#define SET_SENSITIVE(action,sensitive) \
|
#define SET_SENSITIVE(action,sensitive) \
|
||||||
gimp_action_group_set_action_sensitive (group, action, (sensitive) != 0)
|
gimp_action_group_set_action_sensitive (group, action, (sensitive) != 0)
|
||||||
|
@ -105,12 +117,12 @@ quick_mask_actions_update (GimpActionGroup *group,
|
||||||
gimp_action_group_set_action_color (group, action, (color), FALSE)
|
gimp_action_group_set_action_color (group, action, (color), FALSE)
|
||||||
|
|
||||||
SET_SENSITIVE ("quick-mask-toggle", image);
|
SET_SENSITIVE ("quick-mask-toggle", image);
|
||||||
SET_ACTIVE ("quick-mask-toggle", image && image->quick_mask_state);
|
SET_ACTIVE ("quick-mask-toggle", quick_mask_state);
|
||||||
|
|
||||||
SET_SENSITIVE ("quick-mask-invert-on", image);
|
SET_SENSITIVE ("quick-mask-invert-on", image);
|
||||||
SET_SENSITIVE ("quick-mask-invert-off", image);
|
SET_SENSITIVE ("quick-mask-invert-off", image);
|
||||||
|
|
||||||
if (image && image->quick_mask_inverted)
|
if (quick_mask_inverted)
|
||||||
SET_ACTIVE ("quick-mask-invert-on", TRUE);
|
SET_ACTIVE ("quick-mask-invert-on", TRUE);
|
||||||
else
|
else
|
||||||
SET_ACTIVE ("quick-mask-invert-off", TRUE);
|
SET_ACTIVE ("quick-mask-invert-off", TRUE);
|
||||||
|
@ -118,7 +130,7 @@ quick_mask_actions_update (GimpActionGroup *group,
|
||||||
SET_SENSITIVE ("quick-mask-configure", image);
|
SET_SENSITIVE ("quick-mask-configure", image);
|
||||||
|
|
||||||
if (image)
|
if (image)
|
||||||
SET_COLOR ("quick-mask-configure", &image->quick_mask_color);
|
SET_COLOR ("quick-mask-configure", &quick_mask_color);
|
||||||
|
|
||||||
#undef SET_SENSITIVE
|
#undef SET_SENSITIVE
|
||||||
#undef SET_ACTIVE
|
#undef SET_ACTIVE
|
||||||
|
|
|
@ -77,7 +77,7 @@ quick_mask_invert_cmd_callback (GtkAction *action,
|
||||||
|
|
||||||
value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
|
value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
|
||||||
|
|
||||||
if (value != image->quick_mask_inverted)
|
if (value != gimp_image_get_quick_mask_inverted (image))
|
||||||
{
|
{
|
||||||
gimp_image_quick_mask_invert (image);
|
gimp_image_quick_mask_invert (image);
|
||||||
gimp_image_flush (image);
|
gimp_image_flush (image);
|
||||||
|
|
|
@ -430,9 +430,12 @@ static void
|
||||||
gimp_image_duplicate_quick_mask (GimpImage *image,
|
gimp_image_duplicate_quick_mask (GimpImage *image,
|
||||||
GimpImage *new_image)
|
GimpImage *new_image)
|
||||||
{
|
{
|
||||||
new_image->quick_mask_state = image->quick_mask_state;
|
GimpImagePrivate *private = GIMP_IMAGE_GET_PRIVATE (image);
|
||||||
new_image->quick_mask_inverted = image->quick_mask_inverted;
|
GimpImagePrivate *new_private = GIMP_IMAGE_GET_PRIVATE (new_image);
|
||||||
new_image->quick_mask_color = image->quick_mask_color;
|
|
||||||
|
new_private->quick_mask_state = private->quick_mask_state;
|
||||||
|
new_private->quick_mask_inverted = private->quick_mask_inverted;
|
||||||
|
new_private->quick_mask_color = private->quick_mask_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -78,6 +78,10 @@ struct _GimpImagePrivate
|
||||||
|
|
||||||
gboolean visible[MAX_CHANNELS]; /* visible channels */
|
gboolean visible[MAX_CHANNELS]; /* visible channels */
|
||||||
gboolean active[MAX_CHANNELS]; /* active channels */
|
gboolean active[MAX_CHANNELS]; /* active channels */
|
||||||
|
|
||||||
|
gboolean quick_mask_state; /* TRUE if quick mask is on */
|
||||||
|
gboolean quick_mask_inverted; /* TRUE if quick mask is inverted */
|
||||||
|
GimpRGB quick_mask_color; /* rgba triplet of the color */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GIMP_IMAGE_GET_PRIVATE(image) \
|
#define GIMP_IMAGE_GET_PRIVATE(image) \
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "gimp.h"
|
#include "gimp.h"
|
||||||
#include "gimpchannel.h"
|
#include "gimpchannel.h"
|
||||||
#include "gimpimage.h"
|
#include "gimpimage.h"
|
||||||
|
#include "gimpimage-private.h"
|
||||||
#include "gimpimage-quick-mask.h"
|
#include "gimpimage-quick-mask.h"
|
||||||
#include "gimpimage-undo.h"
|
#include "gimpimage-undo.h"
|
||||||
#include "gimpimage-undo-push.h"
|
#include "gimpimage-undo-push.h"
|
||||||
|
@ -45,30 +46,33 @@ void
|
||||||
gimp_image_set_quick_mask_state (GimpImage *image,
|
gimp_image_set_quick_mask_state (GimpImage *image,
|
||||||
gboolean active)
|
gboolean active)
|
||||||
{
|
{
|
||||||
GimpChannel *selection;
|
GimpImagePrivate *private;
|
||||||
GimpChannel *mask;
|
GimpChannel *selection;
|
||||||
gboolean channel_was_active;
|
GimpChannel *mask;
|
||||||
|
gboolean channel_was_active;
|
||||||
|
|
||||||
g_return_if_fail (GIMP_IS_IMAGE (image));
|
g_return_if_fail (GIMP_IS_IMAGE (image));
|
||||||
|
|
||||||
if (active == gimp_image_get_quick_mask_state (image))
|
if (active == gimp_image_get_quick_mask_state (image))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
private = GIMP_IMAGE_GET_PRIVATE (image);
|
||||||
|
|
||||||
/* Keep track of the state so that we can make the right drawable
|
/* Keep track of the state so that we can make the right drawable
|
||||||
* active again when deactiviting quick mask (see bug #134371).
|
* active again when deactiviting quick mask (see bug #134371).
|
||||||
*/
|
*/
|
||||||
if (image->quick_mask_state)
|
if (private->quick_mask_state)
|
||||||
channel_was_active = (image->quick_mask_state & CHANNEL_WAS_ACTIVE) != 0;
|
channel_was_active = (private->quick_mask_state & CHANNEL_WAS_ACTIVE) != 0;
|
||||||
else
|
else
|
||||||
channel_was_active = gimp_image_get_active_channel (image) != NULL;
|
channel_was_active = gimp_image_get_active_channel (image) != NULL;
|
||||||
|
|
||||||
/* Set image->quick_mask_state early so we can return early when
|
/* Set private->quick_mask_state early so we can return early when
|
||||||
* being called recursively.
|
* being called recursively.
|
||||||
*/
|
*/
|
||||||
image->quick_mask_state = (active
|
private->quick_mask_state = (active
|
||||||
? TRUE | (channel_was_active ?
|
? TRUE | (channel_was_active ?
|
||||||
CHANNEL_WAS_ACTIVE : 0)
|
CHANNEL_WAS_ACTIVE : 0)
|
||||||
: FALSE);
|
: FALSE);
|
||||||
|
|
||||||
selection = gimp_image_get_mask (image);
|
selection = gimp_image_get_mask (image);
|
||||||
mask = gimp_image_get_quick_mask (image);
|
mask = gimp_image_get_quick_mask (image);
|
||||||
|
@ -93,7 +97,7 @@ gimp_image_set_quick_mask_state (GimpImage *image,
|
||||||
gimp_image_get_width (image),
|
gimp_image_get_width (image),
|
||||||
gimp_image_get_height (image),
|
gimp_image_get_height (image),
|
||||||
GIMP_IMAGE_QUICK_MASK_NAME,
|
GIMP_IMAGE_QUICK_MASK_NAME,
|
||||||
&image->quick_mask_color);
|
&private->quick_mask_color);
|
||||||
|
|
||||||
/* Clear the mask */
|
/* Clear the mask */
|
||||||
gimp_channel_clear (mask, NULL, FALSE);
|
gimp_channel_clear (mask, NULL, FALSE);
|
||||||
|
@ -108,12 +112,12 @@ gimp_image_set_quick_mask_state (GimpImage *image,
|
||||||
/* Clear the selection */
|
/* Clear the selection */
|
||||||
gimp_channel_clear (selection, NULL, TRUE);
|
gimp_channel_clear (selection, NULL, TRUE);
|
||||||
|
|
||||||
gimp_channel_set_color (mask, &image->quick_mask_color, FALSE);
|
gimp_channel_set_color (mask, &private->quick_mask_color, FALSE);
|
||||||
gimp_item_rename (GIMP_ITEM (mask), GIMP_IMAGE_QUICK_MASK_NAME,
|
gimp_item_rename (GIMP_ITEM (mask), GIMP_IMAGE_QUICK_MASK_NAME,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (image->quick_mask_inverted)
|
if (private->quick_mask_inverted)
|
||||||
gimp_channel_invert (mask, FALSE);
|
gimp_channel_invert (mask, FALSE);
|
||||||
|
|
||||||
gimp_image_add_channel (image, mask, NULL, 0, TRUE);
|
gimp_image_add_channel (image, mask, NULL, 0, TRUE);
|
||||||
|
@ -130,7 +134,7 @@ gimp_image_set_quick_mask_state (GimpImage *image,
|
||||||
gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_IMAGE_QUICK_MASK,
|
gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_IMAGE_QUICK_MASK,
|
||||||
_("Disable Quick Mask"));
|
_("Disable Quick Mask"));
|
||||||
|
|
||||||
if (image->quick_mask_inverted)
|
if (private->quick_mask_inverted)
|
||||||
gimp_channel_invert (mask, TRUE);
|
gimp_channel_invert (mask, TRUE);
|
||||||
|
|
||||||
if (floating_sel &&
|
if (floating_sel &&
|
||||||
|
@ -156,7 +160,7 @@ gimp_image_get_quick_mask_state (const GimpImage *image)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
||||||
|
|
||||||
return image->quick_mask_state;
|
return GIMP_IMAGE_GET_PRIVATE (image)->quick_mask_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -168,7 +172,7 @@ gimp_image_set_quick_mask_color (GimpImage *image,
|
||||||
g_return_if_fail (GIMP_IS_IMAGE (image));
|
g_return_if_fail (GIMP_IS_IMAGE (image));
|
||||||
g_return_if_fail (color != NULL);
|
g_return_if_fail (color != NULL);
|
||||||
|
|
||||||
image->quick_mask_color = *color;
|
GIMP_IMAGE_GET_PRIVATE (image)->quick_mask_color = *color;
|
||||||
|
|
||||||
quick_mask = gimp_image_get_quick_mask (image);
|
quick_mask = gimp_image_get_quick_mask (image);
|
||||||
if (quick_mask)
|
if (quick_mask)
|
||||||
|
@ -182,7 +186,7 @@ gimp_image_get_quick_mask_color (const GimpImage *image,
|
||||||
g_return_if_fail (GIMP_IS_IMAGE (image));
|
g_return_if_fail (GIMP_IS_IMAGE (image));
|
||||||
g_return_if_fail (color != NULL);
|
g_return_if_fail (color != NULL);
|
||||||
|
|
||||||
*color = image->quick_mask_color;
|
*color = GIMP_IMAGE_GET_PRIVATE (image)->quick_mask_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
GimpChannel *
|
GimpChannel *
|
||||||
|
@ -196,9 +200,13 @@ gimp_image_get_quick_mask (const GimpImage *image)
|
||||||
void
|
void
|
||||||
gimp_image_quick_mask_invert (GimpImage *image)
|
gimp_image_quick_mask_invert (GimpImage *image)
|
||||||
{
|
{
|
||||||
|
GimpImagePrivate *private;
|
||||||
|
|
||||||
g_return_if_fail (GIMP_IS_IMAGE (image));
|
g_return_if_fail (GIMP_IS_IMAGE (image));
|
||||||
|
|
||||||
if (image->quick_mask_state)
|
private = GIMP_IMAGE_GET_PRIVATE (image);
|
||||||
|
|
||||||
|
if (private->quick_mask_state)
|
||||||
{
|
{
|
||||||
GimpChannel *quick_mask = gimp_image_get_quick_mask (image);
|
GimpChannel *quick_mask = gimp_image_get_quick_mask (image);
|
||||||
|
|
||||||
|
@ -206,5 +214,13 @@ gimp_image_quick_mask_invert (GimpImage *image)
|
||||||
gimp_channel_invert (quick_mask, TRUE);
|
gimp_channel_invert (quick_mask, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
image->quick_mask_inverted = ! image->quick_mask_inverted;
|
private->quick_mask_inverted = ! private->quick_mask_inverted;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
gimp_image_get_quick_mask_inverted (const GimpImage *image)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
||||||
|
|
||||||
|
return GIMP_IMAGE_GET_PRIVATE (image)->quick_mask_inverted;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,18 +25,19 @@
|
||||||
#define GIMP_IMAGE_QUICK_MASK_NAME "Qmask"
|
#define GIMP_IMAGE_QUICK_MASK_NAME "Qmask"
|
||||||
|
|
||||||
|
|
||||||
void gimp_image_set_quick_mask_state (GimpImage *image,
|
void gimp_image_set_quick_mask_state (GimpImage *image,
|
||||||
gboolean active);
|
gboolean active);
|
||||||
gboolean gimp_image_get_quick_mask_state (const GimpImage *image);
|
gboolean gimp_image_get_quick_mask_state (const GimpImage *image);
|
||||||
|
|
||||||
void gimp_image_set_quick_mask_color (GimpImage *image,
|
void gimp_image_set_quick_mask_color (GimpImage *image,
|
||||||
const GimpRGB *color);
|
const GimpRGB *color);
|
||||||
void gimp_image_get_quick_mask_color (const GimpImage *image,
|
void gimp_image_get_quick_mask_color (const GimpImage *image,
|
||||||
GimpRGB *color);
|
GimpRGB *color);
|
||||||
|
|
||||||
GimpChannel * gimp_image_get_quick_mask (const GimpImage *image);
|
GimpChannel * gimp_image_get_quick_mask (const GimpImage *image);
|
||||||
|
|
||||||
void gimp_image_quick_mask_invert (GimpImage *image);
|
void gimp_image_quick_mask_invert (GimpImage *image);
|
||||||
|
gboolean gimp_image_get_quick_mask_inverted (const GimpImage *image);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GIMP_IMAGE_QUICK_MASK_H__ */
|
#endif /* __GIMP_IMAGE_QUICK_MASK_H__ */
|
||||||
|
|
|
@ -667,9 +667,9 @@ gimp_image_init (GimpImage *image)
|
||||||
private->active[i] = TRUE;
|
private->active[i] = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
image->quick_mask_state = FALSE;
|
private->quick_mask_state = FALSE;
|
||||||
image->quick_mask_inverted = FALSE;
|
private->quick_mask_inverted = FALSE;
|
||||||
gimp_rgba_set (&image->quick_mask_color, 1.0, 0.0, 0.0, 0.5);
|
gimp_rgba_set (&private->quick_mask_color, 1.0, 0.0, 0.0, 0.5);
|
||||||
|
|
||||||
image->undo_stack = gimp_undo_stack_new (image);
|
image->undo_stack = gimp_undo_stack_new (image);
|
||||||
image->redo_stack = gimp_undo_stack_new (image);
|
image->redo_stack = gimp_undo_stack_new (image);
|
||||||
|
@ -1349,7 +1349,7 @@ gimp_image_channel_color_changed (GimpChannel *channel,
|
||||||
if (! strcmp (GIMP_IMAGE_QUICK_MASK_NAME,
|
if (! strcmp (GIMP_IMAGE_QUICK_MASK_NAME,
|
||||||
gimp_object_get_name (channel)))
|
gimp_object_get_name (channel)))
|
||||||
{
|
{
|
||||||
image->quick_mask_color = channel->color;
|
GIMP_IMAGE_GET_PRIVATE (image)->quick_mask_color = channel->color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1885,6 +1885,9 @@ gimp_image_get_visible_array (const GimpImage *image,
|
||||||
components[i] = private->visible[i];
|
components[i] = private->visible[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* emitting image signals */
|
||||||
|
|
||||||
void
|
void
|
||||||
gimp_image_mode_changed (GimpImage *image)
|
gimp_image_mode_changed (GimpImage *image)
|
||||||
{
|
{
|
||||||
|
|
|
@ -105,10 +105,6 @@ struct _GimpImage
|
||||||
|
|
||||||
Gimp *gimp; /* the GIMP the image belongs to*/
|
Gimp *gimp; /* the GIMP the image belongs to*/
|
||||||
|
|
||||||
gboolean quick_mask_state; /* TRUE if quick mask is on */
|
|
||||||
gboolean quick_mask_inverted; /* TRUE if quick mask is inverted */
|
|
||||||
GimpRGB quick_mask_color; /* rgba triplet of the color */
|
|
||||||
|
|
||||||
/* Undo apparatus */
|
/* Undo apparatus */
|
||||||
GimpUndoStack *undo_stack; /* stack for undo operations */
|
GimpUndoStack *undo_stack; /* stack for undo operations */
|
||||||
GimpUndoStack *redo_stack; /* stack for redo operations */
|
GimpUndoStack *redo_stack; /* stack for redo operations */
|
||||||
|
@ -264,6 +260,9 @@ gboolean gimp_image_get_component_visible (const GimpImage *image,
|
||||||
void gimp_image_get_visible_array (const GimpImage *image,
|
void gimp_image_get_visible_array (const GimpImage *image,
|
||||||
gboolean *components);
|
gboolean *components);
|
||||||
|
|
||||||
|
|
||||||
|
/* emitting image signals */
|
||||||
|
|
||||||
void gimp_image_mode_changed (GimpImage *image);
|
void gimp_image_mode_changed (GimpImage *image);
|
||||||
void gimp_image_alpha_changed (GimpImage *image);
|
void gimp_image_alpha_changed (GimpImage *image);
|
||||||
void gimp_image_invalidate (GimpImage *image,
|
void gimp_image_invalidate (GimpImage *image,
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "core/gimpcontainer.h"
|
#include "core/gimpcontainer.h"
|
||||||
#include "core/gimpimage.h"
|
#include "core/gimpimage.h"
|
||||||
#include "core/gimpimage-grid.h"
|
#include "core/gimpimage-grid.h"
|
||||||
|
#include "core/gimpimage-quick-mask.h"
|
||||||
#include "core/gimpitem.h"
|
#include "core/gimpitem.h"
|
||||||
#include "core/gimptreehandler.h"
|
#include "core/gimptreehandler.h"
|
||||||
|
|
||||||
|
@ -484,6 +485,7 @@ gimp_display_shell_quick_mask_changed_handler (GimpImage *image,
|
||||||
GimpDisplayShell *shell)
|
GimpDisplayShell *shell)
|
||||||
{
|
{
|
||||||
GtkImage *gtk_image;
|
GtkImage *gtk_image;
|
||||||
|
gboolean quick_mask_state;
|
||||||
|
|
||||||
gtk_image = GTK_IMAGE (gtk_bin_get_child (GTK_BIN (shell->quick_mask_button)));
|
gtk_image = GTK_IMAGE (gtk_bin_get_child (GTK_BIN (shell->quick_mask_button)));
|
||||||
|
|
||||||
|
@ -491,10 +493,12 @@ gimp_display_shell_quick_mask_changed_handler (GimpImage *image,
|
||||||
gimp_display_shell_quick_mask_toggled,
|
gimp_display_shell_quick_mask_toggled,
|
||||||
shell);
|
shell);
|
||||||
|
|
||||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (shell->quick_mask_button),
|
quick_mask_state = gimp_image_get_quick_mask_state (image);
|
||||||
image->quick_mask_state);
|
|
||||||
|
|
||||||
if (image->quick_mask_state)
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (shell->quick_mask_button),
|
||||||
|
quick_mask_state);
|
||||||
|
|
||||||
|
if (quick_mask_state)
|
||||||
gtk_image_set_from_stock (gtk_image, GIMP_STOCK_QUICK_MASK_ON,
|
gtk_image_set_from_stock (gtk_image, GIMP_STOCK_QUICK_MASK_ON,
|
||||||
GTK_ICON_SIZE_MENU);
|
GTK_ICON_SIZE_MENU);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue