Move the active layer, channel and vectors to GimpImagePrivate

This commit is contained in:
Michael Natterer 2010-02-03 23:12:22 +01:00
parent 67014260dd
commit 3720938517
3 changed files with 39 additions and 27 deletions

View File

@ -66,6 +66,10 @@ struct _GimpImagePrivate
GQuark layer_alpha_handler;
GQuark channel_name_changed_handler;
GQuark channel_color_changed_handler;
GimpLayer *active_layer; /* the active layer */
GimpChannel *active_channel; /* the active channel */
GimpVectors *active_vectors; /* the active vectors */
};
#define GIMP_IMAGE_GET_PRIVATE(image) \

View File

@ -652,9 +652,9 @@ gimp_image_init (GimpImage *image)
G_CALLBACK (gimp_image_channel_remove),
image);
image->active_layer = NULL;
image->active_channel = NULL;
image->active_vectors = NULL;
private->active_layer = NULL;
private->active_channel = NULL;
private->active_vectors = NULL;
image->floating_sel = NULL;
image->selection_mask = NULL;
@ -2894,18 +2894,22 @@ gimp_image_get_vectors_list (const GimpImage *image)
GimpDrawable *
gimp_image_get_active_drawable (const GimpImage *image)
{
GimpImagePrivate *private;
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
private = GIMP_IMAGE_GET_PRIVATE (image);
/* If there is an active channel (a saved selection, etc.),
* we ignore the active layer
*/
if (image->active_channel)
if (private->active_channel)
{
return GIMP_DRAWABLE (image->active_channel);
return GIMP_DRAWABLE (private->active_channel);
}
else if (image->active_layer)
else if (private->active_layer)
{
GimpLayer *layer = image->active_layer;
GimpLayer *layer = private->active_layer;
GimpLayerMask *mask = gimp_layer_get_mask (layer);
if (mask && gimp_layer_mask_get_edit (mask))
@ -2922,7 +2926,7 @@ gimp_image_get_active_layer (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
return image->active_layer;
return GIMP_IMAGE_GET_PRIVATE (image)->active_layer;
}
GimpChannel *
@ -2930,7 +2934,7 @@ gimp_image_get_active_channel (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
return image->active_channel;
return GIMP_IMAGE_GET_PRIVATE (image)->active_channel;
}
GimpVectors *
@ -2938,7 +2942,7 @@ gimp_image_get_active_vectors (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
return image->active_vectors;
return GIMP_IMAGE_GET_PRIVATE (image)->active_vectors;
}
GimpLayer *
@ -2963,7 +2967,7 @@ gimp_image_set_active_layer (GimpImage *image,
if (floating_sel && layer != floating_sel)
return floating_sel;
if (layer != image->active_layer)
if (layer != private->active_layer)
{
if (layer)
{
@ -2973,24 +2977,26 @@ gimp_image_set_active_layer (GimpImage *image,
}
/* Don't cache selection info for the previous active layer */
if (image->active_layer)
gimp_drawable_invalidate_boundary (GIMP_DRAWABLE (image->active_layer));
if (private->active_layer)
gimp_drawable_invalidate_boundary (GIMP_DRAWABLE (private->active_layer));
image->active_layer = layer;
private->active_layer = layer;
g_signal_emit (image, gimp_image_signals[ACTIVE_LAYER_CHANGED], 0);
if (layer && image->active_channel)
if (layer && private->active_channel)
gimp_image_set_active_channel (image, NULL);
}
return image->active_layer;
return private->active_layer;
}
GimpChannel *
gimp_image_set_active_channel (GimpImage *image,
GimpChannel *channel)
{
GimpImagePrivate *private;
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
g_return_val_if_fail (channel == NULL || GIMP_IS_CHANNEL (channel), NULL);
g_return_val_if_fail (channel == NULL ||
@ -2998,21 +3004,23 @@ gimp_image_set_active_channel (GimpImage *image,
gimp_item_get_image (GIMP_ITEM (channel)) == image),
NULL);
private = GIMP_IMAGE_GET_PRIVATE (image);
/* Not if there is a floating selection */
if (channel && gimp_image_get_floating_selection (image))
return NULL;
if (channel != image->active_channel)
if (channel != private->active_channel)
{
image->active_channel = channel;
private->active_channel = channel;
g_signal_emit (image, gimp_image_signals[ACTIVE_CHANNEL_CHANGED], 0);
if (channel && image->active_layer)
if (channel && private->active_layer)
gimp_image_set_active_layer (image, NULL);
}
return image->active_channel;
return private->active_channel;
}
GimpChannel *
@ -3041,6 +3049,8 @@ GimpVectors *
gimp_image_set_active_vectors (GimpImage *image,
GimpVectors *vectors)
{
GimpImagePrivate *private;
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
g_return_val_if_fail (vectors == NULL || GIMP_IS_VECTORS (vectors), NULL);
g_return_val_if_fail (vectors == NULL ||
@ -3048,14 +3058,16 @@ gimp_image_set_active_vectors (GimpImage *image,
gimp_item_get_image (GIMP_ITEM (vectors)) == image),
NULL);
if (vectors != image->active_vectors)
private = GIMP_IMAGE_GET_PRIVATE (image);
if (vectors != private->active_vectors)
{
image->active_vectors = vectors;
private->active_vectors = vectors;
g_signal_emit (image, gimp_image_signals[ACTIVE_VECTORS_CHANGED], 0);
}
return image->active_vectors;
return private->active_vectors;
}
GimpLayer *

View File

@ -105,10 +105,6 @@ struct _GimpImage
Gimp *gimp; /* the GIMP the image belongs to*/
GimpLayer *active_layer; /* the active layer */
GimpChannel *active_channel; /* the active channel */
GimpVectors *active_vectors; /* the active vectors */
GimpLayer *floating_sel; /* the FS layer */
GimpChannel *selection_mask; /* the selection mask channel */