mirror of
https://gitlab.gnome.org/GNOME/gimp
synced 2024-10-20 11:37:14 +00:00
removed the layer mask functions.
2001-03-06 Michael Natterer <mitch@gimp.org> * app/gimage.[ch]: removed the layer mask functions. * app/gimpchannel.[ch]: added a boolean "dummy" parameter to gimp_channel_copy() so it has the same signature as gimp_layer_copy() and can be used by the GimpDrawableListView to generically duplicate drawables. * app/gimpcontainerview.c: call "select_item" with a NULL item before changing the underlying GimpContainer so subclasses have a chance to update (e.g. set button sensitivity). * app/gimpdnd.c: folded all the GtkType comparing code into a utility function (much more readable now). * app/gimpdrawablelistview.[ch]: activated the "raise", "lower", "duplicate" and "delete". I'm not really happy with all those function pointers passed to the constructor (and the dummy parameters I've added to some GimpChannel functions) -- OTOH the generic view maybe worth the "gboolean dummy" cruft hanging around in the channel class. * app/gimplayer.[ch]: removed the "apply_mask", "edit_mask" and "show_mask" booleans ... * app/gimplayermask.[ch]: .. and added them here together with proper accessors and "*_changed" signals. This also makes the layer mask undo code much clearer as we don't have to store the booleans separately. * app/gimplayerlistitem.c: badly hacked to acheive the correct indicator being drawn around the active drawable. This needs a new GimpPreview function for setting the border color. * app/gimplistitem.c: smaller horizontal spacing. * app/gimppreview.[ch]: added the "border_width" parameter also to gimp_preview_set_size() so we can modify all previews the same way after creation. * app/layers_dialog.c: no need to push an undo group around the "duplicate layer" code. Was this an artefact or did I miss something here ??? * app/channel_ops.c * app/channels_dialog.c * app/gimage_mask.c * app/gimpcontainergridview.c * app/gimpcontainerlistview.c * app/gimpdrawablelistitem.c * app/gimpimage.[ch] * app/qmask.c * app/test_commands.c * app/undo.c * app/xcf.c * app/pdb/channel_cmds.c * tools/pdbgen/pdb/channel.pdb * app/pdb/selection_cmds.c * tools/pdbgen/pdb/selection.pdb: changed accordingly. * app/pdb/internal_procs.c * app/pdb/layer_cmds.c * libgimp/gimplayer_pdb.[ch] * tools/pdbgen/pdb/layer.pdb: commented out the layer mask accessors from the perl code, so the functions temporarily disappeared all over the place. * plug-ins/Makefile.am: don't build XJT until the layer mask stuff is back. * pixmaps/eye.xpm: cropped it to it's minimal size.
This commit is contained in:
parent
75e8e3877c
commit
af76f2bbb8
74
ChangeLog
74
ChangeLog
|
@ -1,3 +1,77 @@
|
|||
2001-03-06 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
* app/gimage.[ch]: removed the layer mask functions.
|
||||
|
||||
* app/gimpchannel.[ch]: added a boolean "dummy" parameter to
|
||||
gimp_channel_copy() so it has the same signature as
|
||||
gimp_layer_copy() and can be used by the GimpDrawableListView to
|
||||
generically duplicate drawables.
|
||||
|
||||
* app/gimpcontainerview.c: call "select_item" with a NULL item
|
||||
before changing the underlying GimpContainer so subclasses have
|
||||
a chance to update (e.g. set button sensitivity).
|
||||
|
||||
* app/gimpdnd.c: folded all the GtkType comparing code into a
|
||||
utility function (much more readable now).
|
||||
|
||||
* app/gimpdrawablelistview.[ch]: activated the "raise", "lower",
|
||||
"duplicate" and "delete" buttons. I'm not really happy with all
|
||||
those function pointers passed to the constructor (and the dummy
|
||||
parameters I've added to some GimpChannel functions) -- OTOH the
|
||||
generic view maybe worth the "gboolean dummy" cruft hanging around
|
||||
in the channel class.
|
||||
|
||||
* app/gimplayer.[ch]: removed the "apply_mask", "edit_mask" and
|
||||
"show_mask" booleans ...
|
||||
|
||||
* app/gimplayermask.[ch]: .. and added them here together with
|
||||
proper accessors and "*_changed" signals.
|
||||
|
||||
This also makes the layer mask undo code much clearer as we don't
|
||||
have to store the booleans separately.
|
||||
|
||||
* app/gimplayerlistitem.c: badly hacked to acheive the correct
|
||||
indicator being drawn around the active drawable. This needs
|
||||
a new GimpPreview function for setting the border color.
|
||||
|
||||
* app/gimplistitem.c: smaller horizontal spacing.
|
||||
|
||||
* app/gimppreview.[ch]: added the "border_width" parameter also to
|
||||
gimp_preview_set_size() so we can modify all previews the same way
|
||||
after creation.
|
||||
|
||||
* app/layers_dialog.c: no need to push an undo group around
|
||||
the "duplicate layer" code. Was this an artefact or did I miss
|
||||
something here ???
|
||||
|
||||
* app/channel_ops.c
|
||||
* app/channels_dialog.c
|
||||
* app/gimage_mask.c
|
||||
* app/gimpcontainergridview.c
|
||||
* app/gimpcontainerlistview.c
|
||||
* app/gimpdrawablelistitem.c
|
||||
* app/gimpimage.[ch]
|
||||
* app/qmask.c
|
||||
* app/test_commands.c
|
||||
* app/undo.c
|
||||
* app/xcf.c
|
||||
* app/pdb/channel_cmds.c
|
||||
* tools/pdbgen/pdb/channel.pdb
|
||||
* app/pdb/selection_cmds.c
|
||||
* tools/pdbgen/pdb/selection.pdb: changed accordingly.
|
||||
|
||||
* app/pdb/internal_procs.c
|
||||
* app/pdb/layer_cmds.c
|
||||
* libgimp/gimplayer_pdb.[ch]
|
||||
* tools/pdbgen/pdb/layer.pdb: commented out the layer mask accessors
|
||||
from the perl code, so the functions temporarily disappeared all
|
||||
over the place.
|
||||
|
||||
* plug-ins/Makefile.am: don't build XJT until the layer mask stuff
|
||||
is back.
|
||||
|
||||
* pixmaps/eye.xpm: cropped it to it's minimal size.
|
||||
|
||||
2001-03-05 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* app/Makefile.am
|
||||
|
|
|
@ -244,7 +244,7 @@ qmask_activate (GtkWidget *widget,
|
|||
{
|
||||
/* if selection */
|
||||
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg));
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg), TRUE);
|
||||
gimp_image_add_channel (gimg, gmask, 0);
|
||||
gimp_channel_set_color (gmask, &color);
|
||||
gimp_object_set_name (GIMP_OBJECT (gmask), "Qmask");
|
||||
|
|
|
@ -244,7 +244,7 @@ qmask_activate (GtkWidget *widget,
|
|||
{
|
||||
/* if selection */
|
||||
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg));
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg), TRUE);
|
||||
gimp_image_add_channel (gimg, gmask, 0);
|
||||
gimp_channel_set_color (gmask, &color);
|
||||
gimp_object_set_name (GIMP_OBJECT (gmask), "Qmask");
|
||||
|
|
|
@ -648,7 +648,7 @@ duplicate (GimpImage *gimage)
|
|||
{
|
||||
channel = (GimpChannel *) list->data;
|
||||
|
||||
new_channel = gimp_channel_copy (channel);
|
||||
new_channel = gimp_channel_copy (channel, TRUE);
|
||||
|
||||
gimp_drawable_set_gimage (GIMP_DRAWABLE (new_channel), new_gimage);
|
||||
|
||||
|
|
|
@ -1076,7 +1076,7 @@ channels_dialog_duplicate_channel_callback (GtkWidget *widget,
|
|||
|
||||
if ((active_channel = gimp_image_get_active_channel (gimage)))
|
||||
{
|
||||
new_channel = gimp_channel_copy (active_channel);
|
||||
new_channel = gimp_channel_copy (active_channel, TRUE);
|
||||
gimp_image_add_channel (gimage, new_channel, -1);
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
@ -1129,7 +1129,7 @@ channels_dialog_add_channel_to_sel_callback (GtkWidget *widget,
|
|||
|
||||
if ((active_channel = gimp_image_get_active_channel (gimage)))
|
||||
{
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage));
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage), TRUE);
|
||||
gimp_channel_combine_mask (new_channel,
|
||||
active_channel,
|
||||
CHANNEL_OP_ADD,
|
||||
|
@ -1153,7 +1153,7 @@ channels_dialog_sub_channel_from_sel_callback (GtkWidget *widget,
|
|||
|
||||
if ((active_channel = gimp_image_get_active_channel (gimage)))
|
||||
{
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage));
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage), TRUE);
|
||||
gimp_channel_combine_mask (new_channel,
|
||||
active_channel,
|
||||
CHANNEL_OP_SUB,
|
||||
|
@ -1177,7 +1177,7 @@ channels_dialog_intersect_channel_with_sel_callback (GtkWidget *widget,
|
|||
|
||||
if ((active_channel = gimp_image_get_active_channel (gimage)))
|
||||
{
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage));
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage), TRUE);
|
||||
gimp_channel_combine_mask (new_channel,
|
||||
active_channel,
|
||||
CHANNEL_OP_INTERSECT,
|
||||
|
@ -1675,7 +1675,7 @@ channel_widget_idle_drop_channel (gpointer data)
|
|||
|
||||
cd = (ChannelDrop *) data;
|
||||
|
||||
gimp_image_position_channel (cd->gimage, cd->channel, cd->dest_index);
|
||||
gimp_image_position_channel (cd->gimage, cd->channel, cd->dest_index, TRUE);
|
||||
gdisplays_flush ();
|
||||
|
||||
g_free (cd);
|
||||
|
|
|
@ -174,7 +174,13 @@ gimp_channel_new (GimpImage *gimage,
|
|||
}
|
||||
|
||||
GimpChannel *
|
||||
gimp_channel_copy (const GimpChannel *channel)
|
||||
gimp_channel_copy (const GimpChannel *channel,
|
||||
gboolean dummy) /* the dummy is for symmetry with
|
||||
* gimp_layer_copy() because
|
||||
* both functions are used as
|
||||
* function pointers in
|
||||
* GimpDrawableListView --Mitch
|
||||
*/
|
||||
{
|
||||
gchar *channel_name;
|
||||
GimpChannel *new_channel;
|
||||
|
|
|
@ -90,7 +90,8 @@ GimpChannel * gimp_channel_new (GimpImage *gimage,
|
|||
gint height,
|
||||
const gchar *name,
|
||||
const GimpRGB *color);
|
||||
GimpChannel * gimp_channel_copy (const GimpChannel *channel);
|
||||
GimpChannel * gimp_channel_copy (const GimpChannel *channel,
|
||||
gboolean dummy);
|
||||
|
||||
gint gimp_channel_get_opacity (const GimpChannel *channel);
|
||||
void gimp_channel_set_opacity (GimpChannel *channel,
|
||||
|
|
|
@ -174,7 +174,13 @@ gimp_channel_new (GimpImage *gimage,
|
|||
}
|
||||
|
||||
GimpChannel *
|
||||
gimp_channel_copy (const GimpChannel *channel)
|
||||
gimp_channel_copy (const GimpChannel *channel,
|
||||
gboolean dummy) /* the dummy is for symmetry with
|
||||
* gimp_layer_copy() because
|
||||
* both functions are used as
|
||||
* function pointers in
|
||||
* GimpDrawableListView --Mitch
|
||||
*/
|
||||
{
|
||||
gchar *channel_name;
|
||||
GimpChannel *new_channel;
|
||||
|
|
|
@ -90,7 +90,8 @@ GimpChannel * gimp_channel_new (GimpImage *gimage,
|
|||
gint height,
|
||||
const gchar *name,
|
||||
const GimpRGB *color);
|
||||
GimpChannel * gimp_channel_copy (const GimpChannel *channel);
|
||||
GimpChannel * gimp_channel_copy (const GimpChannel *channel,
|
||||
gboolean dummy);
|
||||
|
||||
gint gimp_channel_get_opacity (const GimpChannel *channel);
|
||||
void gimp_channel_set_opacity (GimpChannel *channel,
|
||||
|
|
|
@ -648,7 +648,7 @@ duplicate (GimpImage *gimage)
|
|||
{
|
||||
channel = (GimpChannel *) list->data;
|
||||
|
||||
new_channel = gimp_channel_copy (channel);
|
||||
new_channel = gimp_channel_copy (channel, TRUE);
|
||||
|
||||
gimp_drawable_set_gimage (GIMP_DRAWABLE (new_channel), new_gimage);
|
||||
|
||||
|
|
|
@ -648,7 +648,7 @@ duplicate (GimpImage *gimage)
|
|||
{
|
||||
channel = (GimpChannel *) list->data;
|
||||
|
||||
new_channel = gimp_channel_copy (channel);
|
||||
new_channel = gimp_channel_copy (channel, TRUE);
|
||||
|
||||
gimp_drawable_set_gimage (GIMP_DRAWABLE (new_channel), new_gimage);
|
||||
|
||||
|
|
|
@ -1727,7 +1727,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
TRUE);
|
||||
|
||||
/* If we're showing the layer mask instead of the layer... */
|
||||
if (layer->mask && layer->show_mask)
|
||||
if (layer->mask && layer->mask->show_mask)
|
||||
{
|
||||
pixel_region_init (&src2PR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -1744,7 +1744,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
(x1 - off_x), (y1 - off_y),
|
||||
(x2 - x1), (y2 - y1), FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3091,7 +3091,7 @@ gimp_image_merge_layers (GimpImage *gimage,
|
|||
(x4 - x3), (y4 - y3),
|
||||
FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3336,7 +3336,7 @@ gimp_image_raise_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index - 1);
|
||||
return gimp_image_position_channel (gimage, channel, index - 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -3359,13 +3359,14 @@ gimp_image_lower_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index + 1);
|
||||
return gimp_image_position_channel (gimage, channel, index + 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint new_index)
|
||||
gint new_index,
|
||||
gboolean push_undo /* FIXME unused */)
|
||||
{
|
||||
gint index;
|
||||
gint num_channels;
|
||||
|
@ -3383,11 +3384,7 @@ gimp_image_position_channel (GimpImage *gimage,
|
|||
|
||||
num_channels = gimp_container_num_children (gimage->channels);
|
||||
|
||||
if (new_index < 0)
|
||||
new_index = 0;
|
||||
|
||||
if (new_index >= num_channels)
|
||||
new_index = num_channels - 1;
|
||||
new_index = CLAMP (new_index, 0, num_channels - 1);
|
||||
|
||||
if (new_index == index)
|
||||
return TRUE;
|
||||
|
@ -3530,7 +3527,7 @@ gimp_image_active_drawable (const GimpImage *gimage)
|
|||
|
||||
layer = gimage->active_layer;
|
||||
|
||||
if (layer->mask && layer->edit_mask)
|
||||
if (layer->mask && layer->mask->edit_mask)
|
||||
return GIMP_DRAWABLE (layer->mask);
|
||||
else
|
||||
return GIMP_DRAWABLE (layer);
|
||||
|
@ -3941,7 +3938,7 @@ gimp_image_get_new_preview (GimpViewable *viewable,
|
|||
src2PR.data = temp_buf_data (layer_buf) +
|
||||
(y1 - y) * src2PR.rowstride + (x1 - x) * src2PR.bytes;
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
mask_buf = gimp_viewable_get_preview (GIMP_VIEWABLE (layer->mask),
|
||||
w, h);
|
||||
|
|
|
@ -367,7 +367,8 @@ gboolean gimp_image_lower_channel (GimpImage *gimage,
|
|||
GimpChannel *channel);
|
||||
gboolean gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
gboolean gimp_image_add_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
|
|
|
@ -553,7 +553,7 @@ gimage_mask_save (GImage *gimage)
|
|||
{
|
||||
GimpChannel *new_channel;
|
||||
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage));
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage), TRUE);
|
||||
|
||||
/* saved selections are not visible by default */
|
||||
gimp_drawable_set_visible (GIMP_DRAWABLE (new_channel), FALSE);
|
||||
|
|
|
@ -1727,7 +1727,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
TRUE);
|
||||
|
||||
/* If we're showing the layer mask instead of the layer... */
|
||||
if (layer->mask && layer->show_mask)
|
||||
if (layer->mask && layer->mask->show_mask)
|
||||
{
|
||||
pixel_region_init (&src2PR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -1744,7 +1744,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
(x1 - off_x), (y1 - off_y),
|
||||
(x2 - x1), (y2 - y1), FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3091,7 +3091,7 @@ gimp_image_merge_layers (GimpImage *gimage,
|
|||
(x4 - x3), (y4 - y3),
|
||||
FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3336,7 +3336,7 @@ gimp_image_raise_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index - 1);
|
||||
return gimp_image_position_channel (gimage, channel, index - 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -3359,13 +3359,14 @@ gimp_image_lower_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index + 1);
|
||||
return gimp_image_position_channel (gimage, channel, index + 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint new_index)
|
||||
gint new_index,
|
||||
gboolean push_undo /* FIXME unused */)
|
||||
{
|
||||
gint index;
|
||||
gint num_channels;
|
||||
|
@ -3383,11 +3384,7 @@ gimp_image_position_channel (GimpImage *gimage,
|
|||
|
||||
num_channels = gimp_container_num_children (gimage->channels);
|
||||
|
||||
if (new_index < 0)
|
||||
new_index = 0;
|
||||
|
||||
if (new_index >= num_channels)
|
||||
new_index = num_channels - 1;
|
||||
new_index = CLAMP (new_index, 0, num_channels - 1);
|
||||
|
||||
if (new_index == index)
|
||||
return TRUE;
|
||||
|
@ -3530,7 +3527,7 @@ gimp_image_active_drawable (const GimpImage *gimage)
|
|||
|
||||
layer = gimage->active_layer;
|
||||
|
||||
if (layer->mask && layer->edit_mask)
|
||||
if (layer->mask && layer->mask->edit_mask)
|
||||
return GIMP_DRAWABLE (layer->mask);
|
||||
else
|
||||
return GIMP_DRAWABLE (layer);
|
||||
|
@ -3941,7 +3938,7 @@ gimp_image_get_new_preview (GimpViewable *viewable,
|
|||
src2PR.data = temp_buf_data (layer_buf) +
|
||||
(y1 - y) * src2PR.rowstride + (x1 - x) * src2PR.bytes;
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
mask_buf = gimp_viewable_get_preview (GIMP_VIEWABLE (layer->mask),
|
||||
w, h);
|
||||
|
|
|
@ -367,7 +367,8 @@ gboolean gimp_image_lower_channel (GimpImage *gimage,
|
|||
GimpChannel *channel);
|
||||
gboolean gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
gboolean gimp_image_add_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
|
|
|
@ -1727,7 +1727,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
TRUE);
|
||||
|
||||
/* If we're showing the layer mask instead of the layer... */
|
||||
if (layer->mask && layer->show_mask)
|
||||
if (layer->mask && layer->mask->show_mask)
|
||||
{
|
||||
pixel_region_init (&src2PR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -1744,7 +1744,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
(x1 - off_x), (y1 - off_y),
|
||||
(x2 - x1), (y2 - y1), FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3091,7 +3091,7 @@ gimp_image_merge_layers (GimpImage *gimage,
|
|||
(x4 - x3), (y4 - y3),
|
||||
FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3336,7 +3336,7 @@ gimp_image_raise_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index - 1);
|
||||
return gimp_image_position_channel (gimage, channel, index - 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -3359,13 +3359,14 @@ gimp_image_lower_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index + 1);
|
||||
return gimp_image_position_channel (gimage, channel, index + 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint new_index)
|
||||
gint new_index,
|
||||
gboolean push_undo /* FIXME unused */)
|
||||
{
|
||||
gint index;
|
||||
gint num_channels;
|
||||
|
@ -3383,11 +3384,7 @@ gimp_image_position_channel (GimpImage *gimage,
|
|||
|
||||
num_channels = gimp_container_num_children (gimage->channels);
|
||||
|
||||
if (new_index < 0)
|
||||
new_index = 0;
|
||||
|
||||
if (new_index >= num_channels)
|
||||
new_index = num_channels - 1;
|
||||
new_index = CLAMP (new_index, 0, num_channels - 1);
|
||||
|
||||
if (new_index == index)
|
||||
return TRUE;
|
||||
|
@ -3530,7 +3527,7 @@ gimp_image_active_drawable (const GimpImage *gimage)
|
|||
|
||||
layer = gimage->active_layer;
|
||||
|
||||
if (layer->mask && layer->edit_mask)
|
||||
if (layer->mask && layer->mask->edit_mask)
|
||||
return GIMP_DRAWABLE (layer->mask);
|
||||
else
|
||||
return GIMP_DRAWABLE (layer);
|
||||
|
@ -3941,7 +3938,7 @@ gimp_image_get_new_preview (GimpViewable *viewable,
|
|||
src2PR.data = temp_buf_data (layer_buf) +
|
||||
(y1 - y) * src2PR.rowstride + (x1 - x) * src2PR.bytes;
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
mask_buf = gimp_viewable_get_preview (GIMP_VIEWABLE (layer->mask),
|
||||
w, h);
|
||||
|
|
|
@ -367,7 +367,8 @@ gboolean gimp_image_lower_channel (GimpImage *gimage,
|
|||
GimpChannel *channel);
|
||||
gboolean gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
gboolean gimp_image_add_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
|
|
|
@ -244,7 +244,7 @@ qmask_activate (GtkWidget *widget,
|
|||
{
|
||||
/* if selection */
|
||||
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg));
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg), TRUE);
|
||||
gimp_image_add_channel (gimg, gmask, 0);
|
||||
gimp_channel_set_color (gmask, &color);
|
||||
gimp_object_set_name (GIMP_OBJECT (gmask), "Qmask");
|
||||
|
|
|
@ -244,7 +244,7 @@ qmask_activate (GtkWidget *widget,
|
|||
{
|
||||
/* if selection */
|
||||
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg));
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg), TRUE);
|
||||
gimp_image_add_channel (gimg, gmask, 0);
|
||||
gimp_channel_set_color (gmask, &color);
|
||||
gimp_object_set_name (GIMP_OBJECT (gmask), "Qmask");
|
||||
|
|
|
@ -1727,7 +1727,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
TRUE);
|
||||
|
||||
/* If we're showing the layer mask instead of the layer... */
|
||||
if (layer->mask && layer->show_mask)
|
||||
if (layer->mask && layer->mask->show_mask)
|
||||
{
|
||||
pixel_region_init (&src2PR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -1744,7 +1744,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
(x1 - off_x), (y1 - off_y),
|
||||
(x2 - x1), (y2 - y1), FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3091,7 +3091,7 @@ gimp_image_merge_layers (GimpImage *gimage,
|
|||
(x4 - x3), (y4 - y3),
|
||||
FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3336,7 +3336,7 @@ gimp_image_raise_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index - 1);
|
||||
return gimp_image_position_channel (gimage, channel, index - 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -3359,13 +3359,14 @@ gimp_image_lower_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index + 1);
|
||||
return gimp_image_position_channel (gimage, channel, index + 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint new_index)
|
||||
gint new_index,
|
||||
gboolean push_undo /* FIXME unused */)
|
||||
{
|
||||
gint index;
|
||||
gint num_channels;
|
||||
|
@ -3383,11 +3384,7 @@ gimp_image_position_channel (GimpImage *gimage,
|
|||
|
||||
num_channels = gimp_container_num_children (gimage->channels);
|
||||
|
||||
if (new_index < 0)
|
||||
new_index = 0;
|
||||
|
||||
if (new_index >= num_channels)
|
||||
new_index = num_channels - 1;
|
||||
new_index = CLAMP (new_index, 0, num_channels - 1);
|
||||
|
||||
if (new_index == index)
|
||||
return TRUE;
|
||||
|
@ -3530,7 +3527,7 @@ gimp_image_active_drawable (const GimpImage *gimage)
|
|||
|
||||
layer = gimage->active_layer;
|
||||
|
||||
if (layer->mask && layer->edit_mask)
|
||||
if (layer->mask && layer->mask->edit_mask)
|
||||
return GIMP_DRAWABLE (layer->mask);
|
||||
else
|
||||
return GIMP_DRAWABLE (layer);
|
||||
|
@ -3941,7 +3938,7 @@ gimp_image_get_new_preview (GimpViewable *viewable,
|
|||
src2PR.data = temp_buf_data (layer_buf) +
|
||||
(y1 - y) * src2PR.rowstride + (x1 - x) * src2PR.bytes;
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
mask_buf = gimp_viewable_get_preview (GIMP_VIEWABLE (layer->mask),
|
||||
w, h);
|
||||
|
|
|
@ -367,7 +367,8 @@ gboolean gimp_image_lower_channel (GimpImage *gimage,
|
|||
GimpChannel *channel);
|
||||
gboolean gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
gboolean gimp_image_add_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
|
|
|
@ -1727,7 +1727,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
TRUE);
|
||||
|
||||
/* If we're showing the layer mask instead of the layer... */
|
||||
if (layer->mask && layer->show_mask)
|
||||
if (layer->mask && layer->mask->show_mask)
|
||||
{
|
||||
pixel_region_init (&src2PR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -1744,7 +1744,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
(x1 - off_x), (y1 - off_y),
|
||||
(x2 - x1), (y2 - y1), FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3091,7 +3091,7 @@ gimp_image_merge_layers (GimpImage *gimage,
|
|||
(x4 - x3), (y4 - y3),
|
||||
FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3336,7 +3336,7 @@ gimp_image_raise_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index - 1);
|
||||
return gimp_image_position_channel (gimage, channel, index - 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -3359,13 +3359,14 @@ gimp_image_lower_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index + 1);
|
||||
return gimp_image_position_channel (gimage, channel, index + 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint new_index)
|
||||
gint new_index,
|
||||
gboolean push_undo /* FIXME unused */)
|
||||
{
|
||||
gint index;
|
||||
gint num_channels;
|
||||
|
@ -3383,11 +3384,7 @@ gimp_image_position_channel (GimpImage *gimage,
|
|||
|
||||
num_channels = gimp_container_num_children (gimage->channels);
|
||||
|
||||
if (new_index < 0)
|
||||
new_index = 0;
|
||||
|
||||
if (new_index >= num_channels)
|
||||
new_index = num_channels - 1;
|
||||
new_index = CLAMP (new_index, 0, num_channels - 1);
|
||||
|
||||
if (new_index == index)
|
||||
return TRUE;
|
||||
|
@ -3530,7 +3527,7 @@ gimp_image_active_drawable (const GimpImage *gimage)
|
|||
|
||||
layer = gimage->active_layer;
|
||||
|
||||
if (layer->mask && layer->edit_mask)
|
||||
if (layer->mask && layer->mask->edit_mask)
|
||||
return GIMP_DRAWABLE (layer->mask);
|
||||
else
|
||||
return GIMP_DRAWABLE (layer);
|
||||
|
@ -3941,7 +3938,7 @@ gimp_image_get_new_preview (GimpViewable *viewable,
|
|||
src2PR.data = temp_buf_data (layer_buf) +
|
||||
(y1 - y) * src2PR.rowstride + (x1 - x) * src2PR.bytes;
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
mask_buf = gimp_viewable_get_preview (GIMP_VIEWABLE (layer->mask),
|
||||
w, h);
|
||||
|
|
|
@ -367,7 +367,8 @@ gboolean gimp_image_lower_channel (GimpImage *gimage,
|
|||
GimpChannel *channel);
|
||||
gboolean gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
gboolean gimp_image_add_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
|
|
|
@ -1708,12 +1708,6 @@ undo_pop_layer_mask (GimpImage *gimage,
|
|||
else
|
||||
{
|
||||
gimp_layer_add_mask (lmu->layer, lmu->mask, FALSE);
|
||||
|
||||
lmu->layer->apply_mask = lmu->apply_mask;
|
||||
lmu->layer->edit_mask = lmu->edit_mask;
|
||||
lmu->layer->show_mask = lmu->show_mask;
|
||||
|
||||
gimage_set_layer_mask_edit (gimage, lmu->layer, lmu->edit_mask);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -1727,7 +1727,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
TRUE);
|
||||
|
||||
/* If we're showing the layer mask instead of the layer... */
|
||||
if (layer->mask && layer->show_mask)
|
||||
if (layer->mask && layer->mask->show_mask)
|
||||
{
|
||||
pixel_region_init (&src2PR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -1744,7 +1744,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
(x1 - off_x), (y1 - off_y),
|
||||
(x2 - x1), (y2 - y1), FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3091,7 +3091,7 @@ gimp_image_merge_layers (GimpImage *gimage,
|
|||
(x4 - x3), (y4 - y3),
|
||||
FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3336,7 +3336,7 @@ gimp_image_raise_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index - 1);
|
||||
return gimp_image_position_channel (gimage, channel, index - 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -3359,13 +3359,14 @@ gimp_image_lower_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index + 1);
|
||||
return gimp_image_position_channel (gimage, channel, index + 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint new_index)
|
||||
gint new_index,
|
||||
gboolean push_undo /* FIXME unused */)
|
||||
{
|
||||
gint index;
|
||||
gint num_channels;
|
||||
|
@ -3383,11 +3384,7 @@ gimp_image_position_channel (GimpImage *gimage,
|
|||
|
||||
num_channels = gimp_container_num_children (gimage->channels);
|
||||
|
||||
if (new_index < 0)
|
||||
new_index = 0;
|
||||
|
||||
if (new_index >= num_channels)
|
||||
new_index = num_channels - 1;
|
||||
new_index = CLAMP (new_index, 0, num_channels - 1);
|
||||
|
||||
if (new_index == index)
|
||||
return TRUE;
|
||||
|
@ -3530,7 +3527,7 @@ gimp_image_active_drawable (const GimpImage *gimage)
|
|||
|
||||
layer = gimage->active_layer;
|
||||
|
||||
if (layer->mask && layer->edit_mask)
|
||||
if (layer->mask && layer->mask->edit_mask)
|
||||
return GIMP_DRAWABLE (layer->mask);
|
||||
else
|
||||
return GIMP_DRAWABLE (layer);
|
||||
|
@ -3941,7 +3938,7 @@ gimp_image_get_new_preview (GimpViewable *viewable,
|
|||
src2PR.data = temp_buf_data (layer_buf) +
|
||||
(y1 - y) * src2PR.rowstride + (x1 - x) * src2PR.bytes;
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
mask_buf = gimp_viewable_get_preview (GIMP_VIEWABLE (layer->mask),
|
||||
w, h);
|
||||
|
|
|
@ -367,7 +367,8 @@ gboolean gimp_image_lower_channel (GimpImage *gimage,
|
|||
GimpChannel *channel);
|
||||
gboolean gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
gboolean gimp_image_add_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
|
|
|
@ -138,9 +138,6 @@ gimp_layer_init (GimpLayer *layer)
|
|||
layer->preserve_trans = FALSE;
|
||||
|
||||
layer->mask = NULL;
|
||||
layer->apply_mask = FALSE;
|
||||
layer->edit_mask = FALSE;
|
||||
layer->show_mask = FALSE;
|
||||
|
||||
layer->opacity = 100;
|
||||
layer->mode = NORMAL_MODE;
|
||||
|
@ -350,15 +347,11 @@ gimp_layer_copy (GimpLayer *layer,
|
|||
/* duplicate the layer mask if necessary */
|
||||
if (layer->mask)
|
||||
{
|
||||
new_layer->mask = gimp_layer_mask_copy (layer->mask);
|
||||
new_layer->mask = gimp_layer_mask_copy (layer->mask);
|
||||
|
||||
gtk_object_ref (GTK_OBJECT (new_layer->mask));
|
||||
gtk_object_sink (GTK_OBJECT (new_layer->mask));
|
||||
|
||||
new_layer->apply_mask = layer->apply_mask;
|
||||
new_layer->edit_mask = layer->edit_mask;
|
||||
new_layer->show_mask = layer->show_mask;
|
||||
|
||||
gimp_layer_mask_set_layer (new_layer->mask, new_layer);
|
||||
}
|
||||
|
||||
|
@ -501,11 +494,6 @@ gimp_layer_add_mask (GimpLayer *layer,
|
|||
|
||||
gimp_layer_mask_set_layer (mask, layer);
|
||||
|
||||
/* Set the application mode in the layer to "apply" */
|
||||
layer->apply_mask = TRUE;
|
||||
layer->edit_mask = TRUE;
|
||||
layer->show_mask = FALSE;
|
||||
|
||||
drawable_update (GIMP_DRAWABLE (layer),
|
||||
0, 0,
|
||||
GIMP_DRAWABLE (layer)->width,
|
||||
|
@ -514,12 +502,9 @@ gimp_layer_add_mask (GimpLayer *layer,
|
|||
if (push_undo)
|
||||
{
|
||||
/* Prepare a layer undo and push it */
|
||||
lmu = g_new (LayerMaskUndo, 1);
|
||||
lmu->layer = layer;
|
||||
lmu->mask = mask;
|
||||
lmu->apply_mask = layer->apply_mask;
|
||||
lmu->edit_mask = layer->edit_mask;
|
||||
lmu->show_mask = layer->show_mask;
|
||||
lmu = g_new0 (LayerMaskUndo, 1);
|
||||
lmu->layer = layer;
|
||||
lmu->mask = mask;
|
||||
undo_push_layer_mask (gimage, LAYER_MASK_ADD_UNDO, lmu);
|
||||
}
|
||||
|
||||
|
@ -673,14 +658,11 @@ gimp_layer_apply_mask (GimpLayer *layer,
|
|||
lmu->layer = layer;
|
||||
lmu->mask = layer->mask;
|
||||
lmu->mode = mode;
|
||||
lmu->apply_mask = layer->apply_mask;
|
||||
lmu->edit_mask = layer->edit_mask;
|
||||
lmu->show_mask = layer->show_mask;
|
||||
}
|
||||
|
||||
/* check if applying the mask changes the projection */
|
||||
if ((mode == APPLY && (!layer->apply_mask || layer->show_mask)) ||
|
||||
(mode == DISCARD && ( layer->apply_mask || layer->show_mask)))
|
||||
if ((mode == APPLY && (!layer->mask->apply_mask || layer->mask->show_mask)) ||
|
||||
(mode == DISCARD && ( layer->mask->apply_mask || layer->mask->show_mask)))
|
||||
{
|
||||
view_changed = TRUE;
|
||||
}
|
||||
|
@ -713,10 +695,7 @@ gimp_layer_apply_mask (GimpLayer *layer,
|
|||
GIMP_DRAWABLE (layer)->preview_valid = FALSE;
|
||||
}
|
||||
|
||||
layer->mask = NULL;
|
||||
layer->apply_mask = FALSE;
|
||||
layer->edit_mask = FALSE;
|
||||
layer->show_mask = FALSE;
|
||||
layer->mask = NULL;
|
||||
|
||||
if (push_undo)
|
||||
{
|
||||
|
|
|
@ -40,9 +40,6 @@ struct _GimpLayer
|
|||
gboolean preserve_trans; /* preserve transparency */
|
||||
|
||||
GimpLayerMask *mask; /* possible layer mask */
|
||||
gint apply_mask; /* controls mask application */
|
||||
gboolean edit_mask; /* edit mask or layer? */
|
||||
gboolean show_mask; /* show mask or layer? */
|
||||
|
||||
gint opacity; /* layer opacity */
|
||||
LayerModeEffects mode; /* layer combination mode */
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "apptypes.h"
|
||||
|
||||
#include "boundary.h"
|
||||
#include "drawable.h"
|
||||
#include "gimplayermask.h"
|
||||
#include "paint_funcs.h"
|
||||
#include "pixel_region.h"
|
||||
|
@ -41,12 +42,23 @@
|
|||
#include "libgimp/gimpintl.h"
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
APPLY_CHANGED,
|
||||
EDIT_CHANGED,
|
||||
SHOW_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
|
||||
static void gimp_layer_mask_class_init (GimpLayerMaskClass *klass);
|
||||
static void gimp_layer_mask_init (GimpLayerMask *layermask);
|
||||
static void gimp_layer_mask_destroy (GtkObject *object);
|
||||
|
||||
|
||||
static GimpChannelClass *parent_class = NULL;
|
||||
static guint layer_mask_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
static GimpChannelClass *parent_class = NULL;
|
||||
|
||||
|
||||
GtkType
|
||||
|
@ -83,9 +95,34 @@ gimp_layer_mask_class_init (GimpLayerMaskClass *klass)
|
|||
|
||||
parent_class = gtk_type_class (GIMP_TYPE_CHANNEL);
|
||||
|
||||
/*
|
||||
layer_mask_signals[APPLY_CHANGED] =
|
||||
gtk_signal_new ("apply_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpLayerMaskClass,
|
||||
apply_changed),
|
||||
gtk_signal_default_marshaller,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
layer_mask_signals[EDIT_CHANGED] =
|
||||
gtk_signal_new ("edit_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpLayerMaskClass,
|
||||
edit_changed),
|
||||
gtk_signal_default_marshaller,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
layer_mask_signals[SHOW_CHANGED] =
|
||||
gtk_signal_new ("show_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpLayerMaskClass,
|
||||
show_changed),
|
||||
gtk_signal_default_marshaller,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
gtk_object_class_add_signals (object_class, layer_mask_signals, LAST_SIGNAL);
|
||||
*/
|
||||
|
||||
object_class->destroy = gimp_layer_mask_destroy;
|
||||
}
|
||||
|
@ -93,7 +130,11 @@ gimp_layer_mask_class_init (GimpLayerMaskClass *klass)
|
|||
static void
|
||||
gimp_layer_mask_init (GimpLayerMask *layer_mask)
|
||||
{
|
||||
layer_mask->layer = NULL;
|
||||
layer_mask->layer = NULL;
|
||||
|
||||
layer_mask->apply_mask = TRUE;
|
||||
layer_mask->edit_mask = TRUE;
|
||||
layer_mask->show_mask = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -163,14 +204,15 @@ gimp_layer_mask_copy (GimpLayerMask *layer_mask)
|
|||
GIMP_DRAWABLE (layer_mask)->height,
|
||||
layer_mask_name,
|
||||
&GIMP_CHANNEL (layer_mask)->color);
|
||||
GIMP_DRAWABLE(new_layer_mask)->visible =
|
||||
GIMP_DRAWABLE(layer_mask)->visible;
|
||||
GIMP_DRAWABLE(new_layer_mask)->offset_x =
|
||||
GIMP_DRAWABLE(layer_mask)->offset_x;
|
||||
GIMP_DRAWABLE(new_layer_mask)->offset_y =
|
||||
GIMP_DRAWABLE(layer_mask)->offset_y;
|
||||
GIMP_CHANNEL(new_layer_mask)->show_masked =
|
||||
GIMP_CHANNEL(layer_mask)->show_masked;
|
||||
|
||||
GIMP_DRAWABLE (new_layer_mask)->visible = GIMP_DRAWABLE (layer_mask)->visible;
|
||||
GIMP_DRAWABLE (new_layer_mask)->offset_x = GIMP_DRAWABLE (layer_mask)->offset_x;
|
||||
GIMP_DRAWABLE (new_layer_mask)->offset_y = GIMP_DRAWABLE (layer_mask)->offset_y;
|
||||
GIMP_CHANNEL (new_layer_mask)->show_masked = GIMP_CHANNEL (layer_mask)->show_masked;
|
||||
|
||||
new_layer_mask->apply_mask = layer_mask->apply_mask;
|
||||
new_layer_mask->edit_mask = layer_mask->edit_mask;
|
||||
new_layer_mask->show_mask = layer_mask->show_mask;
|
||||
|
||||
/* copy the contents across layer masks */
|
||||
pixel_region_init (&srcPR, GIMP_DRAWABLE (layer_mask)->tiles,
|
||||
|
@ -203,3 +245,102 @@ gimp_layer_mask_get_layer (GimpLayerMask *mask)
|
|||
{
|
||||
return mask->layer;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_layer_mask_set_apply (GimpLayerMask *layer_mask,
|
||||
gboolean apply)
|
||||
{
|
||||
g_return_if_fail (layer_mask != NULL);
|
||||
g_return_if_fail (GIMP_IS_LAYER_MASK (layer_mask));
|
||||
|
||||
if (layer_mask->apply_mask != apply)
|
||||
{
|
||||
layer_mask->apply_mask = apply;
|
||||
|
||||
if (layer_mask->layer)
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = GIMP_DRAWABLE (layer_mask->layer);
|
||||
|
||||
drawable_update (drawable,
|
||||
0, 0,
|
||||
gimp_drawable_width (drawable),
|
||||
gimp_drawable_height (drawable));
|
||||
}
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (layer_mask),
|
||||
layer_mask_signals[APPLY_CHANGED]);
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_layer_mask_get_apply (GimpLayerMask *layer_mask)
|
||||
{
|
||||
g_return_val_if_fail (layer_mask != NULL, FALSE);
|
||||
g_return_val_if_fail (GIMP_IS_LAYER_MASK (layer_mask), FALSE);
|
||||
|
||||
return layer_mask->apply_mask;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_layer_mask_set_edit (GimpLayerMask *layer_mask,
|
||||
gboolean edit)
|
||||
{
|
||||
g_return_if_fail (layer_mask != NULL);
|
||||
g_return_if_fail (GIMP_IS_LAYER_MASK (layer_mask));
|
||||
|
||||
if (layer_mask->edit_mask != edit)
|
||||
{
|
||||
layer_mask->edit_mask = edit;
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (layer_mask),
|
||||
layer_mask_signals[EDIT_CHANGED]);
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_layer_mask_get_edit (GimpLayerMask *layer_mask)
|
||||
{
|
||||
g_return_val_if_fail (layer_mask != NULL, FALSE);
|
||||
g_return_val_if_fail (GIMP_IS_LAYER_MASK (layer_mask), FALSE);
|
||||
|
||||
return layer_mask->edit_mask;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_layer_mask_set_show (GimpLayerMask *layer_mask,
|
||||
gboolean show)
|
||||
{
|
||||
g_return_if_fail (layer_mask != NULL);
|
||||
g_return_if_fail (GIMP_IS_LAYER_MASK (layer_mask));
|
||||
|
||||
if (layer_mask->show_mask != show)
|
||||
{
|
||||
layer_mask->show_mask = show;
|
||||
|
||||
if (layer_mask->layer)
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = GIMP_DRAWABLE (layer_mask->layer);
|
||||
|
||||
drawable_update (drawable,
|
||||
0, 0,
|
||||
gimp_drawable_width (drawable),
|
||||
gimp_drawable_height (drawable));
|
||||
}
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (layer_mask),
|
||||
layer_mask_signals[SHOW_CHANGED]);
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_layer_mask_get_show (GimpLayerMask *layer_mask)
|
||||
{
|
||||
g_return_val_if_fail (layer_mask != NULL, FALSE);
|
||||
g_return_val_if_fail (GIMP_IS_LAYER_MASK (layer_mask), FALSE);
|
||||
|
||||
return layer_mask->show_mask;
|
||||
}
|
||||
|
|
|
@ -37,11 +37,19 @@ struct _GimpLayerMask
|
|||
GimpChannel parent_instance;
|
||||
|
||||
GimpLayer *layer;
|
||||
|
||||
gboolean apply_mask; /* controls mask application */
|
||||
gboolean edit_mask; /* edit mask or layer? */
|
||||
gboolean show_mask; /* show mask or layer? */
|
||||
};
|
||||
|
||||
struct _GimpLayerMaskClass
|
||||
{
|
||||
GimpChannelClass parent_class;
|
||||
|
||||
void (* apply_changed) (GimpLayerMask *layer_mask);
|
||||
void (* edit_changed) (GimpLayerMask *layer_mask);
|
||||
void (* show_changed) (GimpLayerMask *layer_mask);
|
||||
};
|
||||
|
||||
|
||||
|
@ -49,12 +57,9 @@ struct _GimpLayerMaskClass
|
|||
|
||||
struct _LayerMaskUndo
|
||||
{
|
||||
GimpLayer *layer; /* the layer */
|
||||
gboolean apply_mask; /* apply mask? */
|
||||
gboolean edit_mask; /* edit mask or layer? */
|
||||
gboolean show_mask; /* show the mask? */
|
||||
GimpLayerMask *mask; /* the layer mask */
|
||||
gint mode; /* the application mode */
|
||||
GimpLayer *layer; /* the layer */
|
||||
GimpLayerMask *mask; /* the layer mask */
|
||||
gint mode; /* the application mode */
|
||||
};
|
||||
|
||||
|
||||
|
@ -73,5 +78,17 @@ void gimp_layer_mask_set_layer (GimpLayerMask *layer_mask,
|
|||
GimpLayer *layer);
|
||||
GimpLayer * gimp_layer_mask_get_layer (GimpLayerMask *layer_mask);
|
||||
|
||||
void gimp_layer_mask_set_apply (GimpLayerMask *layer_mask,
|
||||
gboolean apply);
|
||||
gboolean gimp_layer_mask_get_apply (GimpLayerMask *layer_mask);
|
||||
|
||||
void gimp_layer_mask_set_edit (GimpLayerMask *layer_mask,
|
||||
gboolean apply);
|
||||
gboolean gimp_layer_mask_get_edit (GimpLayerMask *layer_mask);
|
||||
|
||||
void gimp_layer_mask_set_show (GimpLayerMask *layer_mask,
|
||||
gboolean show);
|
||||
gboolean gimp_layer_mask_get_show (GimpLayerMask *layer_mask);
|
||||
|
||||
|
||||
#endif /* __GIMP_LAYER_MASK_H__ */
|
||||
|
|
|
@ -1727,7 +1727,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
TRUE);
|
||||
|
||||
/* If we're showing the layer mask instead of the layer... */
|
||||
if (layer->mask && layer->show_mask)
|
||||
if (layer->mask && layer->mask->show_mask)
|
||||
{
|
||||
pixel_region_init (&src2PR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -1744,7 +1744,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
(x1 - off_x), (y1 - off_y),
|
||||
(x2 - x1), (y2 - y1), FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3091,7 +3091,7 @@ gimp_image_merge_layers (GimpImage *gimage,
|
|||
(x4 - x3), (y4 - y3),
|
||||
FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3336,7 +3336,7 @@ gimp_image_raise_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index - 1);
|
||||
return gimp_image_position_channel (gimage, channel, index - 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -3359,13 +3359,14 @@ gimp_image_lower_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index + 1);
|
||||
return gimp_image_position_channel (gimage, channel, index + 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint new_index)
|
||||
gint new_index,
|
||||
gboolean push_undo /* FIXME unused */)
|
||||
{
|
||||
gint index;
|
||||
gint num_channels;
|
||||
|
@ -3383,11 +3384,7 @@ gimp_image_position_channel (GimpImage *gimage,
|
|||
|
||||
num_channels = gimp_container_num_children (gimage->channels);
|
||||
|
||||
if (new_index < 0)
|
||||
new_index = 0;
|
||||
|
||||
if (new_index >= num_channels)
|
||||
new_index = num_channels - 1;
|
||||
new_index = CLAMP (new_index, 0, num_channels - 1);
|
||||
|
||||
if (new_index == index)
|
||||
return TRUE;
|
||||
|
@ -3530,7 +3527,7 @@ gimp_image_active_drawable (const GimpImage *gimage)
|
|||
|
||||
layer = gimage->active_layer;
|
||||
|
||||
if (layer->mask && layer->edit_mask)
|
||||
if (layer->mask && layer->mask->edit_mask)
|
||||
return GIMP_DRAWABLE (layer->mask);
|
||||
else
|
||||
return GIMP_DRAWABLE (layer);
|
||||
|
@ -3941,7 +3938,7 @@ gimp_image_get_new_preview (GimpViewable *viewable,
|
|||
src2PR.data = temp_buf_data (layer_buf) +
|
||||
(y1 - y) * src2PR.rowstride + (x1 - x) * src2PR.bytes;
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
mask_buf = gimp_viewable_get_preview (GIMP_VIEWABLE (layer->mask),
|
||||
w, h);
|
||||
|
|
|
@ -367,7 +367,8 @@ gboolean gimp_image_lower_channel (GimpImage *gimage,
|
|||
GimpChannel *channel);
|
||||
gboolean gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
gboolean gimp_image_add_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
|
|
|
@ -244,7 +244,7 @@ qmask_activate (GtkWidget *widget,
|
|||
{
|
||||
/* if selection */
|
||||
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg));
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg), TRUE);
|
||||
gimp_image_add_channel (gimg, gmask, 0);
|
||||
gimp_channel_set_color (gmask, &color);
|
||||
gimp_object_set_name (GIMP_OBJECT (gmask), "Qmask");
|
||||
|
|
55
app/gimage.c
55
app/gimage.c
|
@ -33,6 +33,7 @@
|
|||
#include "gimpdrawable.h"
|
||||
#include "gimpimage.h"
|
||||
#include "gimplayer.h"
|
||||
#include "gimplayermask.h"
|
||||
#include "lc_dialog.h"
|
||||
#include "paint_funcs.h"
|
||||
#include "palette_import.h"
|
||||
|
@ -184,57 +185,3 @@ gimage_repaint_handler (GimpImage *gimage,
|
|||
{
|
||||
gdisplays_update_area (gimage, x, y, w, h);
|
||||
}
|
||||
|
||||
|
||||
/* These really belong in the layer class */
|
||||
|
||||
void
|
||||
gimage_set_layer_mask_apply (GimpImage *gimage,
|
||||
GimpLayer *layer)
|
||||
{
|
||||
gint off_x, off_y;
|
||||
|
||||
g_return_if_fail (gimage);
|
||||
g_return_if_fail (layer);
|
||||
|
||||
if (! layer->mask)
|
||||
return;
|
||||
|
||||
layer->apply_mask = ! layer->apply_mask;
|
||||
gimp_drawable_offsets (GIMP_DRAWABLE (layer), &off_x, &off_y);
|
||||
gdisplays_update_area (gimage, off_x, off_y,
|
||||
gimp_drawable_width (GIMP_DRAWABLE (layer)),
|
||||
gimp_drawable_height (GIMP_DRAWABLE (layer)));
|
||||
}
|
||||
|
||||
void
|
||||
gimage_set_layer_mask_edit (GimpImage *gimage,
|
||||
GimpLayer *layer,
|
||||
gboolean edit)
|
||||
{
|
||||
/* find the layer */
|
||||
if (!layer)
|
||||
return;
|
||||
|
||||
if (layer->mask)
|
||||
layer->edit_mask = edit;
|
||||
}
|
||||
|
||||
void
|
||||
gimage_set_layer_mask_show (GimpImage *gimage,
|
||||
GimpLayer *layer)
|
||||
{
|
||||
gint off_x, off_y;
|
||||
|
||||
g_return_if_fail (gimage);
|
||||
g_return_if_fail (layer);
|
||||
|
||||
if (! layer->mask)
|
||||
return;
|
||||
|
||||
layer->show_mask = ! layer->show_mask;
|
||||
gimp_drawable_offsets (GIMP_DRAWABLE (layer), &off_x, &off_y);
|
||||
gdisplays_update_area (gimage, off_x, off_y,
|
||||
gimp_drawable_width (GIMP_DRAWABLE (layer)),
|
||||
gimp_drawable_height (GIMP_DRAWABLE (layer)));
|
||||
}
|
||||
|
|
|
@ -27,14 +27,6 @@ GImage * gimage_new (gint width,
|
|||
gint height,
|
||||
GimpImageBaseType base_type);
|
||||
|
||||
void gimage_set_layer_mask_apply (GImage *gimage,
|
||||
GimpLayer *layer);
|
||||
void gimage_set_layer_mask_edit (GImage *gimage,
|
||||
GimpLayer *layer,
|
||||
gboolean edit);
|
||||
void gimage_set_layer_mask_show (GImage *gimage,
|
||||
GimpLayer *layer);
|
||||
|
||||
|
||||
extern guint32 next_guide_id;
|
||||
|
||||
|
|
|
@ -553,7 +553,7 @@ gimage_mask_save (GImage *gimage)
|
|||
{
|
||||
GimpChannel *new_channel;
|
||||
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage));
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage), TRUE);
|
||||
|
||||
/* saved selections are not visible by default */
|
||||
gimp_drawable_set_visible (GIMP_DRAWABLE (new_channel), FALSE);
|
||||
|
|
|
@ -174,7 +174,13 @@ gimp_channel_new (GimpImage *gimage,
|
|||
}
|
||||
|
||||
GimpChannel *
|
||||
gimp_channel_copy (const GimpChannel *channel)
|
||||
gimp_channel_copy (const GimpChannel *channel,
|
||||
gboolean dummy) /* the dummy is for symmetry with
|
||||
* gimp_layer_copy() because
|
||||
* both functions are used as
|
||||
* function pointers in
|
||||
* GimpDrawableListView --Mitch
|
||||
*/
|
||||
{
|
||||
gchar *channel_name;
|
||||
GimpChannel *new_channel;
|
||||
|
|
|
@ -90,7 +90,8 @@ GimpChannel * gimp_channel_new (GimpImage *gimage,
|
|||
gint height,
|
||||
const gchar *name,
|
||||
const GimpRGB *color);
|
||||
GimpChannel * gimp_channel_copy (const GimpChannel *channel);
|
||||
GimpChannel * gimp_channel_copy (const GimpChannel *channel,
|
||||
gboolean dummy);
|
||||
|
||||
gint gimp_channel_get_opacity (const GimpChannel *channel);
|
||||
void gimp_channel_set_opacity (GimpChannel *channel,
|
||||
|
|
|
@ -326,7 +326,7 @@ gimp_container_grid_view_set_preview_size (GimpContainerView *view)
|
|||
|
||||
preview = GIMP_PREVIEW (child->widget);
|
||||
|
||||
gimp_preview_set_size (preview, view->preview_size);
|
||||
gimp_preview_set_size (preview, view->preview_size, preview->border_width);
|
||||
}
|
||||
|
||||
gtk_widget_queue_resize (grid_view->wrap_box);
|
||||
|
|
|
@ -289,7 +289,7 @@ gimp_container_list_view_reorder_item (GimpContainerView *view,
|
|||
gtk_list_insert_items (GTK_LIST (list_view->gtk_list), list, new_index);
|
||||
|
||||
if (selected)
|
||||
gtk_list_select_child (GTK_LIST (list_view->gtk_list), list_item);
|
||||
gimp_container_view_select_item (view, viewable);
|
||||
|
||||
gtk_object_unref (GTK_OBJECT (list_item));
|
||||
}
|
||||
|
@ -319,7 +319,7 @@ gimp_container_list_view_select_item (GimpContainerView *view,
|
|||
adj = gtk_scrolled_window_get_vadjustment
|
||||
(GTK_SCROLLED_WINDOW (list_view->scrolled_win));
|
||||
|
||||
item_height = list_item->allocation.height;
|
||||
item_height = list_item->requisition.height;
|
||||
|
||||
index = gimp_container_get_child_index (view->container,
|
||||
GIMP_OBJECT (viewable));
|
||||
|
@ -330,6 +330,10 @@ gimp_container_list_view_select_item (GimpContainerView *view,
|
|||
|
||||
gtk_list_select_child (GTK_LIST (list_view->gtk_list), list_item);
|
||||
|
||||
gtk_signal_handler_unblock_by_func (GTK_OBJECT (list_view->gtk_list),
|
||||
gimp_container_list_view_item_selected,
|
||||
list_view);
|
||||
|
||||
if (index * item_height < adj->value)
|
||||
{
|
||||
gtk_adjustment_set_value (adj, index * item_height);
|
||||
|
@ -339,10 +343,6 @@ gimp_container_list_view_select_item (GimpContainerView *view,
|
|||
gtk_adjustment_set_value (adj,
|
||||
(index + 1) * item_height - adj->page_size);
|
||||
}
|
||||
|
||||
gtk_signal_handler_unblock_by_func (GTK_OBJECT (list_view->gtk_list),
|
||||
gimp_container_list_view_item_selected,
|
||||
list_view);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -379,7 +379,7 @@ gimp_container_list_view_set_preview_size (GimpContainerView *view)
|
|||
|
||||
preview = GIMP_PREVIEW (GIMP_LIST_ITEM (list->data)->preview);
|
||||
|
||||
gimp_preview_set_size (preview, view->preview_size);
|
||||
gimp_preview_set_size (preview, view->preview_size, preview->border_width);
|
||||
}
|
||||
|
||||
gtk_widget_queue_resize (list_view->gtk_list);
|
||||
|
|
|
@ -240,6 +240,8 @@ gimp_container_view_set_container (GimpContainerView *view,
|
|||
|
||||
if (view->container)
|
||||
{
|
||||
gimp_container_view_select_item (view, NULL);
|
||||
|
||||
gimp_container_view_clear_items (view);
|
||||
|
||||
gtk_signal_disconnect_by_func (GTK_OBJECT (view->container),
|
||||
|
|
410
app/gimpdnd.c
410
app/gimpdnd.c
|
@ -59,7 +59,8 @@
|
|||
|
||||
typedef enum
|
||||
{
|
||||
GIMP_DND_DATA_COLOR = 1,
|
||||
GIMP_DND_DATA_NONE,
|
||||
GIMP_DND_DATA_COLOR,
|
||||
GIMP_DND_DATA_LAYER,
|
||||
GIMP_DND_DATA_CHANNEL,
|
||||
GIMP_DND_DATA_LAYER_MASK,
|
||||
|
@ -686,222 +687,23 @@ gimp_dnd_get_viewable_icon (GtkWidget *widget,
|
|||
return preview;
|
||||
}
|
||||
|
||||
static const GtkTargetEntry layer_target_table[] =
|
||||
static GimpDndDataType
|
||||
gimp_dnd_data_type_get_by_gtk_type (GtkType type)
|
||||
{
|
||||
GIMP_TARGET_LAYER
|
||||
};
|
||||
static const guint layer_n_targets = (sizeof (layer_target_table) /
|
||||
sizeof (layer_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry channel_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_CHANNEL
|
||||
};
|
||||
static const guint channel_n_targets = (sizeof (channel_target_table) /
|
||||
sizeof (layer_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry layer_mask_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_LAYER_MASK
|
||||
};
|
||||
static const guint layer_mask_n_targets = (sizeof (layer_mask_target_table) /
|
||||
sizeof (layer_mask_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry brush_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_BRUSH
|
||||
};
|
||||
static const guint brush_n_targets = (sizeof (brush_target_table) /
|
||||
sizeof (brush_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry pattern_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_PATTERN
|
||||
};
|
||||
static const guint pattern_n_targets = (sizeof (pattern_target_table) /
|
||||
sizeof (pattern_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry gradient_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_GRADIENT
|
||||
};
|
||||
static const guint gradient_n_targets = (sizeof (gradient_target_table) /
|
||||
sizeof (gradient_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry palette_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_PALETTE
|
||||
};
|
||||
static const guint palette_n_targets = (sizeof (palette_target_table) /
|
||||
sizeof (palette_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry tool_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_TOOL
|
||||
};
|
||||
static const guint tool_n_targets = (sizeof (tool_target_table) /
|
||||
sizeof (tool_target_table[0]));
|
||||
|
||||
|
||||
void
|
||||
gimp_gtk_drag_source_set_by_type (GtkWidget *widget,
|
||||
GdkModifierType start_button_mask,
|
||||
GtkType type,
|
||||
GdkDragAction actions)
|
||||
{
|
||||
const GtkTargetEntry *target_table = NULL;
|
||||
guint n_targets = 0;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
target_table = layer_target_table;
|
||||
n_targets = layer_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
target_table = channel_target_table;
|
||||
n_targets = channel_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
target_table = layer_mask_target_table;
|
||||
n_targets = layer_mask_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
target_table = brush_target_table;
|
||||
n_targets = brush_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
target_table = pattern_target_table;
|
||||
n_targets = pattern_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
target_table = gradient_target_table;
|
||||
n_targets = gradient_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
target_table = palette_target_table;
|
||||
n_targets = palette_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_TOOL_INFO))
|
||||
{
|
||||
target_table = tool_target_table;
|
||||
n_targets = tool_n_targets;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
}
|
||||
|
||||
if (target_table && n_targets)
|
||||
{
|
||||
gtk_drag_source_set (widget, start_button_mask,
|
||||
target_table,
|
||||
n_targets,
|
||||
actions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
gimp_gtk_drag_dest_set_by_type (GtkWidget *widget,
|
||||
GtkDestDefaults flags,
|
||||
GtkType type,
|
||||
GdkDragAction actions)
|
||||
{
|
||||
const GtkTargetEntry *target_table = NULL;
|
||||
guint n_targets = 0;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
target_table = layer_target_table;
|
||||
n_targets = layer_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
target_table = channel_target_table;
|
||||
n_targets = channel_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
target_table = layer_mask_target_table;
|
||||
n_targets = layer_mask_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
target_table = brush_target_table;
|
||||
n_targets = brush_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
target_table = pattern_target_table;
|
||||
n_targets = pattern_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
target_table = gradient_target_table;
|
||||
n_targets = gradient_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
target_table = palette_target_table;
|
||||
n_targets = palette_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_TOOL_INFO))
|
||||
{
|
||||
target_table = tool_target_table;
|
||||
n_targets = tool_n_targets;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
}
|
||||
|
||||
if (target_table && n_targets)
|
||||
{
|
||||
gtk_drag_dest_set (widget, flags,
|
||||
target_table,
|
||||
n_targets,
|
||||
actions);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gimp_dnd_viewable_source_set (GtkWidget *widget,
|
||||
GtkType type,
|
||||
GimpDndDragViewableFunc get_viewable_func,
|
||||
gpointer data)
|
||||
{
|
||||
GimpDndDataType dnd_type;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (get_viewable_func != NULL);
|
||||
GimpDndDataType dnd_type = GIMP_DND_DATA_NONE;
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_CHANNEL;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER_MASK;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_CHANNEL;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_BRUSH;
|
||||
|
@ -926,9 +728,72 @@ gimp_dnd_viewable_source_set (GtkWidget *widget,
|
|||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
return;
|
||||
}
|
||||
|
||||
return dnd_type;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_gtk_drag_source_set_by_type (GtkWidget *widget,
|
||||
GdkModifierType start_button_mask,
|
||||
GtkType type,
|
||||
GdkDragAction actions)
|
||||
{
|
||||
GimpDndDataType dnd_type;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gtk_drag_source_set (widget, start_button_mask,
|
||||
&dnd_data_defs[dnd_type].target_entry,
|
||||
1,
|
||||
actions);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_gtk_drag_dest_set_by_type (GtkWidget *widget,
|
||||
GtkDestDefaults flags,
|
||||
GtkType type,
|
||||
GdkDragAction actions)
|
||||
{
|
||||
GimpDndDataType dnd_type;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gtk_drag_dest_set (widget, flags,
|
||||
&dnd_data_defs[dnd_type].target_entry,
|
||||
1,
|
||||
actions);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_dnd_viewable_source_set (GtkWidget *widget,
|
||||
GtkType type,
|
||||
GimpDndDragViewableFunc get_viewable_func,
|
||||
gpointer data)
|
||||
{
|
||||
GimpDndDataType dnd_type;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (get_viewable_func != NULL);
|
||||
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gimp_dnd_data_source_set (dnd_type, widget,
|
||||
GTK_SIGNAL_FUNC (get_viewable_func),
|
||||
data);
|
||||
|
@ -943,44 +808,10 @@ gimp_dnd_viewable_source_unset (GtkWidget *widget,
|
|||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_CHANNEL;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER_MASK;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_BRUSH;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PATTERN;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_GRADIENT;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PALETTE;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_TOOL_INFO))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_TOOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
return;
|
||||
}
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gimp_dnd_data_source_unset (widget);
|
||||
}
|
||||
|
@ -997,44 +828,10 @@ gimp_dnd_viewable_dest_set (GtkWidget *widget,
|
|||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (set_viewable_func != NULL);
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_CHANNEL;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER_MASK;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_BRUSH;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PATTERN;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_GRADIENT;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PALETTE;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_TOOL_INFO))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_TOOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
return;
|
||||
}
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gimp_dnd_data_dest_set (dnd_type, widget,
|
||||
GTK_SIGNAL_FUNC (set_viewable_func),
|
||||
|
@ -1047,44 +844,13 @@ gimp_dnd_viewable_dest_unset (GtkWidget *widget,
|
|||
{
|
||||
GimpDndDataType dnd_type;
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_CHANNEL;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER_MASK;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_BRUSH;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PATTERN;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_GRADIENT;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PALETTE;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_TOOL_INFO))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_TOOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
return;
|
||||
}
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gimp_dnd_data_dest_unset (dnd_type, widget);
|
||||
}
|
||||
|
|
|
@ -648,7 +648,7 @@ duplicate (GimpImage *gimage)
|
|||
{
|
||||
channel = (GimpChannel *) list->data;
|
||||
|
||||
new_channel = gimp_channel_copy (channel);
|
||||
new_channel = gimp_channel_copy (channel, TRUE);
|
||||
|
||||
gimp_drawable_set_gimage (GIMP_DRAWABLE (new_channel), new_gimage);
|
||||
|
||||
|
|
|
@ -258,7 +258,8 @@ gimp_drawable_list_item_drag_drop (GtkWidget *widget,
|
|||
{
|
||||
gimp_image_position_channel (gimp_drawable_gimage (GIMP_DRAWABLE (src_viewable)),
|
||||
GIMP_CHANNEL (src_viewable),
|
||||
dest_index);
|
||||
dest_index,
|
||||
TRUE);
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "apptypes.h"
|
||||
|
||||
#include "gdisplay.h"
|
||||
#include "gimpcontainer.h"
|
||||
#include "gimpdrawable.h"
|
||||
#include "gimpdrawablelistview.h"
|
||||
|
@ -59,6 +60,8 @@ static void gimp_drawable_list_view_activate_item (GimpContainerView *v
|
|||
GimpViewable *item,
|
||||
gpointer insert_data);
|
||||
|
||||
static void gimp_drawable_list_view_new_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_new_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_new_dropped (GtkWidget *widget,
|
||||
|
@ -68,16 +71,22 @@ static void gimp_drawable_list_view_raise_clicked (GtkWidget *w
|
|||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_lower_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_duplicate_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_duplicate_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_duplicate_dropped (GtkWidget *widget,
|
||||
GimpViewable *viewable,
|
||||
gpointer drawable);
|
||||
static void gimp_drawable_list_view_edit_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_edit_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_edit_dropped (GtkWidget *widget,
|
||||
GimpViewable *viewable,
|
||||
gpointer drawable);
|
||||
static void gimp_drawable_list_view_delete_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_delete_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_delete_dropped (GtkWidget *widget,
|
||||
|
@ -251,10 +260,12 @@ gimp_drawable_list_view_init (GimpDrawableListView *view)
|
|||
gtk_container_add (GTK_CONTAINER (view->delete_button), pixmap);
|
||||
gtk_widget_show (pixmap);
|
||||
|
||||
gtk_widget_set_sensitive (view->raise_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->lower_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->new_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->raise_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->lower_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->duplicate_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->delete_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->edit_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->delete_button, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -290,12 +301,16 @@ gimp_drawable_list_view_insert_item (GimpContainerView *view,
|
|||
}
|
||||
|
||||
GtkWidget *
|
||||
gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func)
|
||||
gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func,
|
||||
GimpReorderDrawableFunc reorder_drawable_func,
|
||||
GimpAddDrawableFunc add_drawable_func,
|
||||
GimpRemoveDrawableFunc remove_drawable_func,
|
||||
GimpCopyDrawableFunc copy_drawable_func)
|
||||
{
|
||||
GimpDrawableListView *list_view;
|
||||
GimpContainerView *view;
|
||||
|
@ -305,6 +320,10 @@ gimp_drawable_list_view_new (GimpImage *gimage,
|
|||
g_return_val_if_fail (get_container_func != NULL, NULL);
|
||||
g_return_val_if_fail (get_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (get_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (reorder_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (add_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (remove_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (copy_drawable_func != NULL, NULL);
|
||||
|
||||
list_view = gtk_type_new (GIMP_TYPE_DRAWABLE_LIST_VIEW);
|
||||
|
||||
|
@ -312,11 +331,15 @@ gimp_drawable_list_view_new (GimpImage *gimage,
|
|||
|
||||
view->preview_size = preview_size;
|
||||
|
||||
list_view->drawable_type = drawable_type;
|
||||
list_view->signal_name = g_strdup (signal_name);
|
||||
list_view->get_container_func = get_container_func;
|
||||
list_view->get_drawable_func = get_drawable_func;
|
||||
list_view->set_drawable_func = set_drawable_func;
|
||||
list_view->drawable_type = drawable_type;
|
||||
list_view->signal_name = g_strdup (signal_name);
|
||||
list_view->get_container_func = get_container_func;
|
||||
list_view->get_drawable_func = get_drawable_func;
|
||||
list_view->set_drawable_func = set_drawable_func;
|
||||
list_view->reorder_drawable_func = reorder_drawable_func;
|
||||
list_view->add_drawable_func = add_drawable_func;
|
||||
list_view->remove_drawable_func = remove_drawable_func;
|
||||
list_view->copy_drawable_func = copy_drawable_func;
|
||||
|
||||
/* drop to "new" */
|
||||
gimp_gtk_drag_dest_set_by_type (GTK_WIDGET (list_view->new_button),
|
||||
|
@ -398,6 +421,8 @@ gimp_drawable_list_view_set_image (GimpDrawableListView *view,
|
|||
GTK_SIGNAL_FUNC (gimp_drawable_list_view_drawable_changed),
|
||||
view);
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (view->new_button, (view->gimage != NULL));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -405,12 +430,57 @@ gimp_drawable_list_view_select_item (GimpContainerView *view,
|
|||
GimpViewable *item,
|
||||
gpointer insert_data)
|
||||
{
|
||||
GimpDrawableListView *list_view;
|
||||
gboolean raise_sensitive = FALSE;
|
||||
gboolean lower_sensitive = FALSE;
|
||||
gboolean duplicate_sensitive = FALSE;
|
||||
gboolean edit_sensitive = FALSE;
|
||||
gboolean delete_sensitive = FALSE;
|
||||
|
||||
list_view = GIMP_DRAWABLE_LIST_VIEW (view);
|
||||
|
||||
if (GIMP_CONTAINER_VIEW_CLASS (parent_class)->select_item)
|
||||
GIMP_CONTAINER_VIEW_CLASS (parent_class)->select_item (view,
|
||||
item,
|
||||
insert_data);
|
||||
|
||||
g_print ("select item\n");
|
||||
if (item)
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
drawable = list_view->get_drawable_func (list_view->gimage);
|
||||
|
||||
if (drawable != GIMP_DRAWABLE (item))
|
||||
{
|
||||
list_view->set_drawable_func (list_view->gimage,
|
||||
GIMP_DRAWABLE (item));
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
index = gimp_container_get_child_index (view->container,
|
||||
GIMP_OBJECT (item));
|
||||
|
||||
if (view->container->num_children > 1)
|
||||
{
|
||||
if (index > 0)
|
||||
raise_sensitive = TRUE;
|
||||
|
||||
if (index < (view->container->num_children - 1))
|
||||
lower_sensitive = TRUE;
|
||||
}
|
||||
|
||||
duplicate_sensitive = TRUE;
|
||||
edit_sensitive = TRUE;
|
||||
delete_sensitive = TRUE;
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (list_view->raise_button, raise_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->lower_button, lower_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->duplicate_button, duplicate_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->edit_button, edit_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->delete_button, delete_sensitive);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -423,14 +493,25 @@ gimp_drawable_list_view_activate_item (GimpContainerView *view,
|
|||
item,
|
||||
insert_data);
|
||||
|
||||
g_print ("activate item\n");
|
||||
gimp_drawable_list_view_edit_drawable (GIMP_DRAWABLE_LIST_VIEW (view),
|
||||
GIMP_DRAWABLE (item));
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_new_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
if (drawable)
|
||||
g_print ("new with \"%s\"'s properties\n", GIMP_OBJECT (drawable)->name);
|
||||
else
|
||||
g_print ("new default\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_new_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("new clicked\n");
|
||||
gimp_drawable_list_view_new_drawable (view, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -442,19 +523,34 @@ gimp_drawable_list_view_new_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("new dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_new_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_duplicate_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
GimpDrawable *new_drawable;
|
||||
|
||||
new_drawable = view->copy_drawable_func (drawable, TRUE);
|
||||
view->add_drawable_func (view->gimage, new_drawable, -1);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_duplicate_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("duplicate clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_duplicate_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -466,12 +562,11 @@ gimp_drawable_list_view_duplicate_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("duplicate dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_duplicate_clicked (NULL, data);
|
||||
gimp_drawable_list_view_duplicate_drawable (view,
|
||||
GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -479,21 +574,60 @@ static void
|
|||
gimp_drawable_list_view_raise_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("raise clicked\n");
|
||||
GimpContainer *container;
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
container = GIMP_CONTAINER_VIEW (view)->container;
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
index = gimp_container_get_child_index (container, GIMP_OBJECT (drawable));
|
||||
|
||||
if (index > 0)
|
||||
{
|
||||
view->reorder_drawable_func (view->gimage, drawable, index - 1, TRUE);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_lower_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("lower clicked\n");
|
||||
GimpContainer *container;
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
container = GIMP_CONTAINER_VIEW (view)->container;
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
index = gimp_container_get_child_index (container, GIMP_OBJECT (drawable));
|
||||
|
||||
if (index < container->num_children - 1)
|
||||
{
|
||||
view->reorder_drawable_func (view->gimage, drawable, index + 1, TRUE);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_edit_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
g_print ("edit \"%s\"\n", GIMP_OBJECT (drawable)->name);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_edit_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("edit clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_edit_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -505,20 +639,31 @@ gimp_drawable_list_view_edit_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("edit dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_edit_clicked (NULL, data);
|
||||
gimp_drawable_list_view_edit_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_delete_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
view->remove_drawable_func (view->gimage, drawable);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_delete_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("delete clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_delete_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -530,12 +675,10 @@ gimp_drawable_list_view_delete_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("delete dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_delete_clicked (NULL, data);
|
||||
gimp_drawable_list_view_delete_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,10 +23,21 @@
|
|||
#include "gimpcontainerlistview.h"
|
||||
|
||||
|
||||
typedef GimpContainer * (* GimpGetContainerFunc) (const GimpImage *gimage);
|
||||
typedef GimpDrawable * (* GimpGetDrawableFunc) (const GimpImage *gimage);
|
||||
typedef void (* GimpSetDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef GimpContainer * (* GimpGetContainerFunc) (const GimpImage *gimage);
|
||||
typedef GimpDrawable * (* GimpGetDrawableFunc) (const GimpImage *gimage);
|
||||
typedef void (* GimpSetDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef void (* GimpReorderDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable,
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
typedef void (* GimpAddDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable,
|
||||
gint index);
|
||||
typedef void (* GimpRemoveDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef GimpDrawable * (* GimpCopyDrawableFunc) (GimpDrawable *drawable,
|
||||
gboolean add_alpha);
|
||||
|
||||
|
||||
#define GIMP_TYPE_DRAWABLE_LIST_VIEW (gimp_drawable_list_view_get_type ())
|
||||
|
@ -40,25 +51,29 @@ typedef struct _GimpDrawableListViewClass GimpDrawableListViewClass;
|
|||
|
||||
struct _GimpDrawableListView
|
||||
{
|
||||
GimpContainerListView parent_instance;
|
||||
GimpContainerListView parent_instance;
|
||||
|
||||
GimpImage *gimage;
|
||||
GimpImage *gimage;
|
||||
|
||||
GtkType drawable_type;
|
||||
gchar *signal_name;
|
||||
GtkType drawable_type;
|
||||
gchar *signal_name;
|
||||
|
||||
GimpGetContainerFunc get_container_func;
|
||||
GimpGetDrawableFunc get_drawable_func;
|
||||
GimpSetDrawableFunc set_drawable_func;
|
||||
GimpGetContainerFunc get_container_func;
|
||||
GimpGetDrawableFunc get_drawable_func;
|
||||
GimpSetDrawableFunc set_drawable_func;
|
||||
GimpReorderDrawableFunc reorder_drawable_func;
|
||||
GimpAddDrawableFunc add_drawable_func;
|
||||
GimpRemoveDrawableFunc remove_drawable_func;
|
||||
GimpCopyDrawableFunc copy_drawable_func;
|
||||
|
||||
GtkWidget *button_box;
|
||||
GtkWidget *button_box;
|
||||
|
||||
GtkWidget *new_button;
|
||||
GtkWidget *raise_button;
|
||||
GtkWidget *lower_button;
|
||||
GtkWidget *duplicate_button;
|
||||
GtkWidget *edit_button;
|
||||
GtkWidget *delete_button;
|
||||
GtkWidget *new_button;
|
||||
GtkWidget *raise_button;
|
||||
GtkWidget *lower_button;
|
||||
GtkWidget *duplicate_button;
|
||||
GtkWidget *edit_button;
|
||||
GtkWidget *delete_button;
|
||||
};
|
||||
|
||||
struct _GimpDrawableListViewClass
|
||||
|
@ -69,12 +84,16 @@ struct _GimpDrawableListViewClass
|
|||
|
||||
GtkType gimp_drawable_list_view_get_type (void);
|
||||
|
||||
GtkWidget * gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func);
|
||||
GtkWidget * gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func,
|
||||
GimpReorderDrawableFunc reorder_drawable_func,
|
||||
GimpAddDrawableFunc add_drawable_func,
|
||||
GimpRemoveDrawableFunc remove_drawable_func,
|
||||
GimpCopyDrawableFunc copy_drawable_func);
|
||||
|
||||
void gimp_drawable_list_view_set_image (GimpDrawableListView *view,
|
||||
GimpImage *gimage);
|
||||
|
|
|
@ -648,7 +648,7 @@ duplicate (GimpImage *gimage)
|
|||
{
|
||||
channel = (GimpChannel *) list->data;
|
||||
|
||||
new_channel = gimp_channel_copy (channel);
|
||||
new_channel = gimp_channel_copy (channel, TRUE);
|
||||
|
||||
gimp_drawable_set_gimage (GIMP_DRAWABLE (new_channel), new_gimage);
|
||||
|
||||
|
|
|
@ -1727,7 +1727,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
TRUE);
|
||||
|
||||
/* If we're showing the layer mask instead of the layer... */
|
||||
if (layer->mask && layer->show_mask)
|
||||
if (layer->mask && layer->mask->show_mask)
|
||||
{
|
||||
pixel_region_init (&src2PR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -1744,7 +1744,7 @@ gimp_image_construct_layers (GimpImage *gimage,
|
|||
(x1 - off_x), (y1 - off_y),
|
||||
(x2 - x1), (y2 - y1), FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3091,7 +3091,7 @@ gimp_image_merge_layers (GimpImage *gimage,
|
|||
(x4 - x3), (y4 - y3),
|
||||
FALSE);
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
pixel_region_init (&maskPR,
|
||||
gimp_drawable_data (GIMP_DRAWABLE (layer->mask)),
|
||||
|
@ -3336,7 +3336,7 @@ gimp_image_raise_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index - 1);
|
||||
return gimp_image_position_channel (gimage, channel, index - 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -3359,13 +3359,14 @@ gimp_image_lower_channel (GimpImage *gimage,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
return gimp_image_position_channel (gimage, channel, index + 1);
|
||||
return gimp_image_position_channel (gimage, channel, index + 1, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint new_index)
|
||||
gint new_index,
|
||||
gboolean push_undo /* FIXME unused */)
|
||||
{
|
||||
gint index;
|
||||
gint num_channels;
|
||||
|
@ -3383,11 +3384,7 @@ gimp_image_position_channel (GimpImage *gimage,
|
|||
|
||||
num_channels = gimp_container_num_children (gimage->channels);
|
||||
|
||||
if (new_index < 0)
|
||||
new_index = 0;
|
||||
|
||||
if (new_index >= num_channels)
|
||||
new_index = num_channels - 1;
|
||||
new_index = CLAMP (new_index, 0, num_channels - 1);
|
||||
|
||||
if (new_index == index)
|
||||
return TRUE;
|
||||
|
@ -3530,7 +3527,7 @@ gimp_image_active_drawable (const GimpImage *gimage)
|
|||
|
||||
layer = gimage->active_layer;
|
||||
|
||||
if (layer->mask && layer->edit_mask)
|
||||
if (layer->mask && layer->mask->edit_mask)
|
||||
return GIMP_DRAWABLE (layer->mask);
|
||||
else
|
||||
return GIMP_DRAWABLE (layer);
|
||||
|
@ -3941,7 +3938,7 @@ gimp_image_get_new_preview (GimpViewable *viewable,
|
|||
src2PR.data = temp_buf_data (layer_buf) +
|
||||
(y1 - y) * src2PR.rowstride + (x1 - x) * src2PR.bytes;
|
||||
|
||||
if (layer->mask && layer->apply_mask)
|
||||
if (layer->mask && layer->mask->apply_mask)
|
||||
{
|
||||
mask_buf = gimp_viewable_get_preview (GIMP_VIEWABLE (layer->mask),
|
||||
w, h);
|
||||
|
|
|
@ -367,7 +367,8 @@ gboolean gimp_image_lower_channel (GimpImage *gimage,
|
|||
GimpChannel *channel);
|
||||
gboolean gimp_image_position_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
gboolean gimp_image_add_channel (GimpImage *gimage,
|
||||
GimpChannel *channel,
|
||||
gint position);
|
||||
|
|
|
@ -138,9 +138,6 @@ gimp_layer_init (GimpLayer *layer)
|
|||
layer->preserve_trans = FALSE;
|
||||
|
||||
layer->mask = NULL;
|
||||
layer->apply_mask = FALSE;
|
||||
layer->edit_mask = FALSE;
|
||||
layer->show_mask = FALSE;
|
||||
|
||||
layer->opacity = 100;
|
||||
layer->mode = NORMAL_MODE;
|
||||
|
@ -350,15 +347,11 @@ gimp_layer_copy (GimpLayer *layer,
|
|||
/* duplicate the layer mask if necessary */
|
||||
if (layer->mask)
|
||||
{
|
||||
new_layer->mask = gimp_layer_mask_copy (layer->mask);
|
||||
new_layer->mask = gimp_layer_mask_copy (layer->mask);
|
||||
|
||||
gtk_object_ref (GTK_OBJECT (new_layer->mask));
|
||||
gtk_object_sink (GTK_OBJECT (new_layer->mask));
|
||||
|
||||
new_layer->apply_mask = layer->apply_mask;
|
||||
new_layer->edit_mask = layer->edit_mask;
|
||||
new_layer->show_mask = layer->show_mask;
|
||||
|
||||
gimp_layer_mask_set_layer (new_layer->mask, new_layer);
|
||||
}
|
||||
|
||||
|
@ -501,11 +494,6 @@ gimp_layer_add_mask (GimpLayer *layer,
|
|||
|
||||
gimp_layer_mask_set_layer (mask, layer);
|
||||
|
||||
/* Set the application mode in the layer to "apply" */
|
||||
layer->apply_mask = TRUE;
|
||||
layer->edit_mask = TRUE;
|
||||
layer->show_mask = FALSE;
|
||||
|
||||
drawable_update (GIMP_DRAWABLE (layer),
|
||||
0, 0,
|
||||
GIMP_DRAWABLE (layer)->width,
|
||||
|
@ -514,12 +502,9 @@ gimp_layer_add_mask (GimpLayer *layer,
|
|||
if (push_undo)
|
||||
{
|
||||
/* Prepare a layer undo and push it */
|
||||
lmu = g_new (LayerMaskUndo, 1);
|
||||
lmu->layer = layer;
|
||||
lmu->mask = mask;
|
||||
lmu->apply_mask = layer->apply_mask;
|
||||
lmu->edit_mask = layer->edit_mask;
|
||||
lmu->show_mask = layer->show_mask;
|
||||
lmu = g_new0 (LayerMaskUndo, 1);
|
||||
lmu->layer = layer;
|
||||
lmu->mask = mask;
|
||||
undo_push_layer_mask (gimage, LAYER_MASK_ADD_UNDO, lmu);
|
||||
}
|
||||
|
||||
|
@ -673,14 +658,11 @@ gimp_layer_apply_mask (GimpLayer *layer,
|
|||
lmu->layer = layer;
|
||||
lmu->mask = layer->mask;
|
||||
lmu->mode = mode;
|
||||
lmu->apply_mask = layer->apply_mask;
|
||||
lmu->edit_mask = layer->edit_mask;
|
||||
lmu->show_mask = layer->show_mask;
|
||||
}
|
||||
|
||||
/* check if applying the mask changes the projection */
|
||||
if ((mode == APPLY && (!layer->apply_mask || layer->show_mask)) ||
|
||||
(mode == DISCARD && ( layer->apply_mask || layer->show_mask)))
|
||||
if ((mode == APPLY && (!layer->mask->apply_mask || layer->mask->show_mask)) ||
|
||||
(mode == DISCARD && ( layer->mask->apply_mask || layer->mask->show_mask)))
|
||||
{
|
||||
view_changed = TRUE;
|
||||
}
|
||||
|
@ -713,10 +695,7 @@ gimp_layer_apply_mask (GimpLayer *layer,
|
|||
GIMP_DRAWABLE (layer)->preview_valid = FALSE;
|
||||
}
|
||||
|
||||
layer->mask = NULL;
|
||||
layer->apply_mask = FALSE;
|
||||
layer->edit_mask = FALSE;
|
||||
layer->show_mask = FALSE;
|
||||
layer->mask = NULL;
|
||||
|
||||
if (push_undo)
|
||||
{
|
||||
|
|
|
@ -40,9 +40,6 @@ struct _GimpLayer
|
|||
gboolean preserve_trans; /* preserve transparency */
|
||||
|
||||
GimpLayerMask *mask; /* possible layer mask */
|
||||
gint apply_mask; /* controls mask application */
|
||||
gboolean edit_mask; /* edit mask or layer? */
|
||||
gboolean show_mask; /* show mask or layer? */
|
||||
|
||||
gint opacity; /* layer opacity */
|
||||
LayerModeEffects mode; /* layer combination mode */
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include "gimplayerlistitem.h"
|
||||
#include "gimpimage.h"
|
||||
#include "gimplayer.h"
|
||||
#include "gimplayermask.h"
|
||||
#include "gimppreview.h"
|
||||
#include "gimpviewable.h"
|
||||
|
||||
|
@ -55,8 +56,12 @@ static gboolean gimp_layer_list_item_drag_drop (GtkWidget *widget,
|
|||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
static void gimp_layer_list_item_state_changed (GtkWidget *widget,
|
||||
GtkStateType old_state);
|
||||
|
||||
static void gimp_layer_list_item_mask_changed (GimpLayer *layer,
|
||||
GimpLayerListItem *layer_item);
|
||||
static void gimp_layer_list_item_update_state (GtkWidget *widget);
|
||||
|
||||
|
||||
static GimpDrawableListItemClass *parent_class = NULL;
|
||||
|
@ -103,6 +108,7 @@ gimp_layer_list_item_class_init (GimpLayerListItemClass *klass)
|
|||
|
||||
widget_class->drag_motion = gimp_layer_list_item_drag_motion;
|
||||
widget_class->drag_drop = gimp_layer_list_item_drag_drop;
|
||||
widget_class->state_changed = gimp_layer_list_item_state_changed;
|
||||
|
||||
list_item_class->set_viewable = gimp_layer_list_item_set_viewable;
|
||||
}
|
||||
|
@ -123,6 +129,9 @@ gimp_layer_list_item_set_viewable (GimpListItem *list_item,
|
|||
if (GIMP_LIST_ITEM_CLASS (parent_class)->set_viewable)
|
||||
GIMP_LIST_ITEM_CLASS (parent_class)->set_viewable (list_item, viewable);
|
||||
|
||||
gimp_preview_set_size (GIMP_PREVIEW (list_item->preview),
|
||||
list_item->preview_size, 2);
|
||||
|
||||
layer_item = GIMP_LAYER_LIST_ITEM (list_item);
|
||||
layer = GIMP_LAYER (GIMP_PREVIEW (list_item->preview)->viewable);
|
||||
|
||||
|
@ -225,6 +234,16 @@ gimp_layer_list_item_drag_drop (GtkWidget *widget,
|
|||
return return_val;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_layer_list_item_state_changed (GtkWidget *widget,
|
||||
GtkStateType old_state)
|
||||
{
|
||||
if (GTK_WIDGET_CLASS (parent_class)->state_changed)
|
||||
GTK_WIDGET_CLASS (parent_class)->state_changed (widget, old_state);
|
||||
|
||||
gimp_layer_list_item_update_state (widget);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_layer_list_item_mask_changed (GimpLayer *layer,
|
||||
GimpLayerListItem *layer_item)
|
||||
|
@ -239,18 +258,104 @@ gimp_layer_list_item_mask_changed (GimpLayer *layer,
|
|||
{
|
||||
layer_item->mask_preview = gimp_preview_new (GIMP_VIEWABLE (mask),
|
||||
list_item->preview_size,
|
||||
1, FALSE);
|
||||
2, FALSE);
|
||||
GIMP_PREVIEW (layer_item->mask_preview)->clickable = TRUE;
|
||||
gtk_box_pack_start (GTK_BOX (list_item->hbox), layer_item->mask_preview,
|
||||
FALSE, FALSE, 0);
|
||||
gtk_box_reorder_child (GTK_BOX (list_item->hbox),
|
||||
layer_item->mask_preview, 2);
|
||||
gtk_widget_show (layer_item->mask_preview);
|
||||
|
||||
gtk_signal_connect_object
|
||||
(GTK_OBJECT (mask), "apply_changed",
|
||||
GTK_SIGNAL_FUNC (gimp_layer_list_item_update_state),
|
||||
GTK_OBJECT (layer_item));
|
||||
|
||||
gtk_signal_connect_object_while_alive
|
||||
(GTK_OBJECT (mask), "edit_changed",
|
||||
GTK_SIGNAL_FUNC (gimp_layer_list_item_update_state),
|
||||
GTK_OBJECT (layer_item));
|
||||
|
||||
gtk_signal_connect_object_while_alive
|
||||
(GTK_OBJECT (mask), "show_changed",
|
||||
GTK_SIGNAL_FUNC (gimp_layer_list_item_update_state),
|
||||
GTK_OBJECT (layer_item));
|
||||
}
|
||||
else if (! mask && layer_item->mask_preview)
|
||||
{
|
||||
gtk_widget_destroy (layer_item->mask_preview);
|
||||
|
||||
layer_item->mask_preview = NULL;
|
||||
}
|
||||
|
||||
gimp_layer_list_item_update_state (GTK_WIDGET (layer_item));
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_layer_list_item_update_state (GtkWidget *widget)
|
||||
{
|
||||
GimpLayerListItem *layer_item;
|
||||
GimpListItem *list_item;
|
||||
GimpLayer *layer;
|
||||
GimpLayerMask *mask;
|
||||
GimpPreview *preview;
|
||||
guchar layer_color[3] = { 0, 0, 0 };
|
||||
guchar mask_color[3] = { 0, 0, 0 };
|
||||
|
||||
layer_item = GIMP_LAYER_LIST_ITEM (widget);
|
||||
list_item = GIMP_LIST_ITEM (widget);
|
||||
layer = GIMP_LAYER (GIMP_PREVIEW (list_item->preview)->viewable);
|
||||
mask = gimp_layer_get_mask (layer);
|
||||
|
||||
switch (widget->state)
|
||||
{
|
||||
case GTK_STATE_NORMAL:
|
||||
break;
|
||||
|
||||
case GTK_STATE_SELECTED:
|
||||
if (! mask || (mask && ! gimp_layer_mask_get_edit (mask)))
|
||||
{
|
||||
layer_color[0] = 255;
|
||||
layer_color[1] = 255;
|
||||
layer_color[2] = 255;
|
||||
}
|
||||
else
|
||||
{
|
||||
mask_color[0] = 255;
|
||||
mask_color[1] = 255;
|
||||
mask_color[2] = 255;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
g_print ("%s(): unhandled state\n", G_GNUC_FUNCTION);
|
||||
}
|
||||
|
||||
preview = GIMP_PREVIEW (list_item->preview);
|
||||
|
||||
if (preview->border_color[0] != layer_color[0] ||
|
||||
preview->border_color[1] != layer_color[1] ||
|
||||
preview->border_color[2] != layer_color[2])
|
||||
{
|
||||
preview->border_color[0] = layer_color[0];
|
||||
preview->border_color[1] = layer_color[1];
|
||||
preview->border_color[2] = layer_color[2];
|
||||
|
||||
gimp_preview_render (preview);
|
||||
}
|
||||
|
||||
if (mask)
|
||||
{
|
||||
preview = GIMP_PREVIEW (layer_item->mask_preview);
|
||||
|
||||
if (preview->border_color[0] != mask_color[0] ||
|
||||
preview->border_color[1] != mask_color[1] ||
|
||||
preview->border_color[2] != mask_color[2])
|
||||
{
|
||||
preview->border_color[0] = mask_color[0];
|
||||
preview->border_color[1] = mask_color[1];
|
||||
preview->border_color[2] = mask_color[2];
|
||||
|
||||
gimp_preview_render (preview);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "apptypes.h"
|
||||
|
||||
#include "boundary.h"
|
||||
#include "drawable.h"
|
||||
#include "gimplayermask.h"
|
||||
#include "paint_funcs.h"
|
||||
#include "pixel_region.h"
|
||||
|
@ -41,12 +42,23 @@
|
|||
#include "libgimp/gimpintl.h"
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
APPLY_CHANGED,
|
||||
EDIT_CHANGED,
|
||||
SHOW_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
|
||||
static void gimp_layer_mask_class_init (GimpLayerMaskClass *klass);
|
||||
static void gimp_layer_mask_init (GimpLayerMask *layermask);
|
||||
static void gimp_layer_mask_destroy (GtkObject *object);
|
||||
|
||||
|
||||
static GimpChannelClass *parent_class = NULL;
|
||||
static guint layer_mask_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
static GimpChannelClass *parent_class = NULL;
|
||||
|
||||
|
||||
GtkType
|
||||
|
@ -83,9 +95,34 @@ gimp_layer_mask_class_init (GimpLayerMaskClass *klass)
|
|||
|
||||
parent_class = gtk_type_class (GIMP_TYPE_CHANNEL);
|
||||
|
||||
/*
|
||||
layer_mask_signals[APPLY_CHANGED] =
|
||||
gtk_signal_new ("apply_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpLayerMaskClass,
|
||||
apply_changed),
|
||||
gtk_signal_default_marshaller,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
layer_mask_signals[EDIT_CHANGED] =
|
||||
gtk_signal_new ("edit_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpLayerMaskClass,
|
||||
edit_changed),
|
||||
gtk_signal_default_marshaller,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
layer_mask_signals[SHOW_CHANGED] =
|
||||
gtk_signal_new ("show_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpLayerMaskClass,
|
||||
show_changed),
|
||||
gtk_signal_default_marshaller,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
gtk_object_class_add_signals (object_class, layer_mask_signals, LAST_SIGNAL);
|
||||
*/
|
||||
|
||||
object_class->destroy = gimp_layer_mask_destroy;
|
||||
}
|
||||
|
@ -93,7 +130,11 @@ gimp_layer_mask_class_init (GimpLayerMaskClass *klass)
|
|||
static void
|
||||
gimp_layer_mask_init (GimpLayerMask *layer_mask)
|
||||
{
|
||||
layer_mask->layer = NULL;
|
||||
layer_mask->layer = NULL;
|
||||
|
||||
layer_mask->apply_mask = TRUE;
|
||||
layer_mask->edit_mask = TRUE;
|
||||
layer_mask->show_mask = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -163,14 +204,15 @@ gimp_layer_mask_copy (GimpLayerMask *layer_mask)
|
|||
GIMP_DRAWABLE (layer_mask)->height,
|
||||
layer_mask_name,
|
||||
&GIMP_CHANNEL (layer_mask)->color);
|
||||
GIMP_DRAWABLE(new_layer_mask)->visible =
|
||||
GIMP_DRAWABLE(layer_mask)->visible;
|
||||
GIMP_DRAWABLE(new_layer_mask)->offset_x =
|
||||
GIMP_DRAWABLE(layer_mask)->offset_x;
|
||||
GIMP_DRAWABLE(new_layer_mask)->offset_y =
|
||||
GIMP_DRAWABLE(layer_mask)->offset_y;
|
||||
GIMP_CHANNEL(new_layer_mask)->show_masked =
|
||||
GIMP_CHANNEL(layer_mask)->show_masked;
|
||||
|
||||
GIMP_DRAWABLE (new_layer_mask)->visible = GIMP_DRAWABLE (layer_mask)->visible;
|
||||
GIMP_DRAWABLE (new_layer_mask)->offset_x = GIMP_DRAWABLE (layer_mask)->offset_x;
|
||||
GIMP_DRAWABLE (new_layer_mask)->offset_y = GIMP_DRAWABLE (layer_mask)->offset_y;
|
||||
GIMP_CHANNEL (new_layer_mask)->show_masked = GIMP_CHANNEL (layer_mask)->show_masked;
|
||||
|
||||
new_layer_mask->apply_mask = layer_mask->apply_mask;
|
||||
new_layer_mask->edit_mask = layer_mask->edit_mask;
|
||||
new_layer_mask->show_mask = layer_mask->show_mask;
|
||||
|
||||
/* copy the contents across layer masks */
|
||||
pixel_region_init (&srcPR, GIMP_DRAWABLE (layer_mask)->tiles,
|
||||
|
@ -203,3 +245,102 @@ gimp_layer_mask_get_layer (GimpLayerMask *mask)
|
|||
{
|
||||
return mask->layer;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_layer_mask_set_apply (GimpLayerMask *layer_mask,
|
||||
gboolean apply)
|
||||
{
|
||||
g_return_if_fail (layer_mask != NULL);
|
||||
g_return_if_fail (GIMP_IS_LAYER_MASK (layer_mask));
|
||||
|
||||
if (layer_mask->apply_mask != apply)
|
||||
{
|
||||
layer_mask->apply_mask = apply;
|
||||
|
||||
if (layer_mask->layer)
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = GIMP_DRAWABLE (layer_mask->layer);
|
||||
|
||||
drawable_update (drawable,
|
||||
0, 0,
|
||||
gimp_drawable_width (drawable),
|
||||
gimp_drawable_height (drawable));
|
||||
}
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (layer_mask),
|
||||
layer_mask_signals[APPLY_CHANGED]);
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_layer_mask_get_apply (GimpLayerMask *layer_mask)
|
||||
{
|
||||
g_return_val_if_fail (layer_mask != NULL, FALSE);
|
||||
g_return_val_if_fail (GIMP_IS_LAYER_MASK (layer_mask), FALSE);
|
||||
|
||||
return layer_mask->apply_mask;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_layer_mask_set_edit (GimpLayerMask *layer_mask,
|
||||
gboolean edit)
|
||||
{
|
||||
g_return_if_fail (layer_mask != NULL);
|
||||
g_return_if_fail (GIMP_IS_LAYER_MASK (layer_mask));
|
||||
|
||||
if (layer_mask->edit_mask != edit)
|
||||
{
|
||||
layer_mask->edit_mask = edit;
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (layer_mask),
|
||||
layer_mask_signals[EDIT_CHANGED]);
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_layer_mask_get_edit (GimpLayerMask *layer_mask)
|
||||
{
|
||||
g_return_val_if_fail (layer_mask != NULL, FALSE);
|
||||
g_return_val_if_fail (GIMP_IS_LAYER_MASK (layer_mask), FALSE);
|
||||
|
||||
return layer_mask->edit_mask;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_layer_mask_set_show (GimpLayerMask *layer_mask,
|
||||
gboolean show)
|
||||
{
|
||||
g_return_if_fail (layer_mask != NULL);
|
||||
g_return_if_fail (GIMP_IS_LAYER_MASK (layer_mask));
|
||||
|
||||
if (layer_mask->show_mask != show)
|
||||
{
|
||||
layer_mask->show_mask = show;
|
||||
|
||||
if (layer_mask->layer)
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = GIMP_DRAWABLE (layer_mask->layer);
|
||||
|
||||
drawable_update (drawable,
|
||||
0, 0,
|
||||
gimp_drawable_width (drawable),
|
||||
gimp_drawable_height (drawable));
|
||||
}
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (layer_mask),
|
||||
layer_mask_signals[SHOW_CHANGED]);
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_layer_mask_get_show (GimpLayerMask *layer_mask)
|
||||
{
|
||||
g_return_val_if_fail (layer_mask != NULL, FALSE);
|
||||
g_return_val_if_fail (GIMP_IS_LAYER_MASK (layer_mask), FALSE);
|
||||
|
||||
return layer_mask->show_mask;
|
||||
}
|
||||
|
|
|
@ -37,11 +37,19 @@ struct _GimpLayerMask
|
|||
GimpChannel parent_instance;
|
||||
|
||||
GimpLayer *layer;
|
||||
|
||||
gboolean apply_mask; /* controls mask application */
|
||||
gboolean edit_mask; /* edit mask or layer? */
|
||||
gboolean show_mask; /* show mask or layer? */
|
||||
};
|
||||
|
||||
struct _GimpLayerMaskClass
|
||||
{
|
||||
GimpChannelClass parent_class;
|
||||
|
||||
void (* apply_changed) (GimpLayerMask *layer_mask);
|
||||
void (* edit_changed) (GimpLayerMask *layer_mask);
|
||||
void (* show_changed) (GimpLayerMask *layer_mask);
|
||||
};
|
||||
|
||||
|
||||
|
@ -49,12 +57,9 @@ struct _GimpLayerMaskClass
|
|||
|
||||
struct _LayerMaskUndo
|
||||
{
|
||||
GimpLayer *layer; /* the layer */
|
||||
gboolean apply_mask; /* apply mask? */
|
||||
gboolean edit_mask; /* edit mask or layer? */
|
||||
gboolean show_mask; /* show the mask? */
|
||||
GimpLayerMask *mask; /* the layer mask */
|
||||
gint mode; /* the application mode */
|
||||
GimpLayer *layer; /* the layer */
|
||||
GimpLayerMask *mask; /* the layer mask */
|
||||
gint mode; /* the application mode */
|
||||
};
|
||||
|
||||
|
||||
|
@ -73,5 +78,17 @@ void gimp_layer_mask_set_layer (GimpLayerMask *layer_mask,
|
|||
GimpLayer *layer);
|
||||
GimpLayer * gimp_layer_mask_get_layer (GimpLayerMask *layer_mask);
|
||||
|
||||
void gimp_layer_mask_set_apply (GimpLayerMask *layer_mask,
|
||||
gboolean apply);
|
||||
gboolean gimp_layer_mask_get_apply (GimpLayerMask *layer_mask);
|
||||
|
||||
void gimp_layer_mask_set_edit (GimpLayerMask *layer_mask,
|
||||
gboolean apply);
|
||||
gboolean gimp_layer_mask_get_edit (GimpLayerMask *layer_mask);
|
||||
|
||||
void gimp_layer_mask_set_show (GimpLayerMask *layer_mask,
|
||||
gboolean show);
|
||||
gboolean gimp_layer_mask_get_show (GimpLayerMask *layer_mask);
|
||||
|
||||
|
||||
#endif /* __GIMP_LAYER_MASK_H__ */
|
||||
|
|
|
@ -137,7 +137,7 @@ gimp_list_item_class_init (GimpListItemClass *klass)
|
|||
static void
|
||||
gimp_list_item_init (GimpListItem *list_item)
|
||||
{
|
||||
list_item->hbox = gtk_hbox_new (FALSE, 8);
|
||||
list_item->hbox = gtk_hbox_new (FALSE, 6);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (list_item->hbox), 2);
|
||||
gtk_container_add (GTK_CONTAINER (list_item), list_item->hbox);
|
||||
gtk_widget_show (list_item->hbox);
|
||||
|
|
|
@ -411,20 +411,22 @@ gimp_preview_new_full (GimpViewable *viewable,
|
|||
|
||||
void
|
||||
gimp_preview_set_size (GimpPreview *preview,
|
||||
gint preview_size)
|
||||
gint preview_size,
|
||||
gint border_width)
|
||||
{
|
||||
gint width, height;
|
||||
|
||||
g_return_if_fail (preview != NULL);
|
||||
g_return_if_fail (GIMP_IS_PREVIEW (preview));
|
||||
g_return_if_fail (preview_size > 0 && preview_size <= 256);
|
||||
g_return_if_fail (border_width >= 0 && border_width <= 16);
|
||||
|
||||
gimp_preview_get_size (preview, preview_size, &width, &height);
|
||||
|
||||
gimp_preview_set_size_full (preview,
|
||||
width,
|
||||
height,
|
||||
preview->border_width);
|
||||
border_width);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -95,7 +95,8 @@ GtkWidget * gimp_preview_new_full (GimpViewable *viewable,
|
|||
gboolean show_popup);
|
||||
|
||||
void gimp_preview_set_size (GimpPreview *preview,
|
||||
gint size);
|
||||
gint size,
|
||||
gint border_width);
|
||||
void gimp_preview_set_size_full (GimpPreview *preview,
|
||||
gint width,
|
||||
gint height,
|
||||
|
|
|
@ -1076,7 +1076,7 @@ channels_dialog_duplicate_channel_callback (GtkWidget *widget,
|
|||
|
||||
if ((active_channel = gimp_image_get_active_channel (gimage)))
|
||||
{
|
||||
new_channel = gimp_channel_copy (active_channel);
|
||||
new_channel = gimp_channel_copy (active_channel, TRUE);
|
||||
gimp_image_add_channel (gimage, new_channel, -1);
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
@ -1129,7 +1129,7 @@ channels_dialog_add_channel_to_sel_callback (GtkWidget *widget,
|
|||
|
||||
if ((active_channel = gimp_image_get_active_channel (gimage)))
|
||||
{
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage));
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage), TRUE);
|
||||
gimp_channel_combine_mask (new_channel,
|
||||
active_channel,
|
||||
CHANNEL_OP_ADD,
|
||||
|
@ -1153,7 +1153,7 @@ channels_dialog_sub_channel_from_sel_callback (GtkWidget *widget,
|
|||
|
||||
if ((active_channel = gimp_image_get_active_channel (gimage)))
|
||||
{
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage));
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage), TRUE);
|
||||
gimp_channel_combine_mask (new_channel,
|
||||
active_channel,
|
||||
CHANNEL_OP_SUB,
|
||||
|
@ -1177,7 +1177,7 @@ channels_dialog_intersect_channel_with_sel_callback (GtkWidget *widget,
|
|||
|
||||
if ((active_channel = gimp_image_get_active_channel (gimage)))
|
||||
{
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage));
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage), TRUE);
|
||||
gimp_channel_combine_mask (new_channel,
|
||||
active_channel,
|
||||
CHANNEL_OP_INTERSECT,
|
||||
|
@ -1675,7 +1675,7 @@ channel_widget_idle_drop_channel (gpointer data)
|
|||
|
||||
cd = (ChannelDrop *) data;
|
||||
|
||||
gimp_image_position_channel (cd->gimage, cd->channel, cd->dest_index);
|
||||
gimp_image_position_channel (cd->gimage, cd->channel, cd->dest_index, TRUE);
|
||||
gdisplays_flush ();
|
||||
|
||||
g_free (cd);
|
||||
|
|
|
@ -1671,16 +1671,10 @@ layers_dialog_duplicate_layer_callback (GtkWidget *widget,
|
|||
if (!layersD || !(gimage = layersD->gimage))
|
||||
return;
|
||||
|
||||
/* Start a group undo */
|
||||
undo_push_group_start (gimage, LAYER_ADD_UNDO);
|
||||
|
||||
active_layer = gimp_image_get_active_layer (gimage);
|
||||
new_layer = gimp_layer_copy (active_layer, TRUE);
|
||||
gimp_image_add_layer (gimage, new_layer, -1);
|
||||
|
||||
/* End the group undo */
|
||||
undo_push_group_end (gimage);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
|
@ -1772,7 +1766,7 @@ layers_dialog_apply_layer_mask_callback (GtkWidget *widget,
|
|||
/* Make sure there is a layer mask to apply */
|
||||
if (layer && gimp_layer_get_mask (layer))
|
||||
{
|
||||
gboolean flush = ! layer->apply_mask || layer->show_mask;
|
||||
gboolean flush = ! layer->mask->apply_mask || layer->mask->show_mask;
|
||||
|
||||
gimp_layer_apply_mask (layer, APPLY, TRUE);
|
||||
|
||||
|
@ -1805,7 +1799,7 @@ layers_dialog_delete_layer_mask_callback (GtkWidget *widget,
|
|||
/* Make sure there is a layer mask to apply */
|
||||
if (layer && gimp_layer_get_mask (layer))
|
||||
{
|
||||
gboolean flush = layer->apply_mask || layer->show_mask;
|
||||
gboolean flush = layer->mask->apply_mask || layer->mask->show_mask;
|
||||
|
||||
gimp_layer_apply_mask (layer, DISCARD, TRUE);
|
||||
|
||||
|
@ -2124,16 +2118,27 @@ layer_widget_create (GimpImage *gimage,
|
|||
layer_widget->width = -1;
|
||||
layer_widget->height = -1;
|
||||
layer_widget->layer_mask = (gimp_layer_get_mask (layer) != NULL);
|
||||
layer_widget->apply_mask = layer->apply_mask;
|
||||
layer_widget->edit_mask = layer->edit_mask;
|
||||
layer_widget->show_mask = layer->show_mask;
|
||||
|
||||
if (layer->mask)
|
||||
{
|
||||
layer_widget->apply_mask = layer->mask->apply_mask;
|
||||
layer_widget->edit_mask = layer->mask->edit_mask;
|
||||
layer_widget->show_mask = layer->mask->show_mask;
|
||||
}
|
||||
else
|
||||
{
|
||||
layer_widget->apply_mask = FALSE;
|
||||
layer_widget->edit_mask = FALSE;
|
||||
layer_widget->show_mask = FALSE;
|
||||
}
|
||||
|
||||
layer_widget->visited = TRUE;
|
||||
layer_widget->drop_type = GIMP_DROP_NONE;
|
||||
layer_widget->layer_pixmap_valid = FALSE;
|
||||
|
||||
if (gimp_layer_get_mask (layer))
|
||||
layer_widget->active_preview =
|
||||
(layer->edit_mask) ? MASK_PREVIEW : LAYER_PREVIEW;
|
||||
(layer->mask->edit_mask) ? MASK_PREVIEW : LAYER_PREVIEW;
|
||||
else
|
||||
layer_widget->active_preview = LAYER_PREVIEW;
|
||||
|
||||
|
@ -2818,8 +2823,8 @@ layer_widget_preview_events (GtkWidget *widget,
|
|||
{
|
||||
if (preview_type == MASK_PREVIEW)
|
||||
{
|
||||
gimage_set_layer_mask_apply (layer_widget->gimage,
|
||||
layer_widget->layer);
|
||||
gimp_layer_mask_set_apply (layer_widget->layer->mask,
|
||||
! layer_widget->layer->mask->apply_mask);
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
@ -2828,16 +2833,22 @@ layer_widget_preview_events (GtkWidget *widget,
|
|||
{
|
||||
if (preview_type == MASK_PREVIEW)
|
||||
{
|
||||
gimage_set_layer_mask_show (layer_widget->gimage,
|
||||
layer_widget->layer);
|
||||
gimp_layer_mask_set_show (layer_widget->layer->mask,
|
||||
! layer_widget->layer->mask->show_mask);
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
else if (layer_widget->active_preview != preview_type)
|
||||
{
|
||||
gimage_set_layer_mask_edit (layer_widget->gimage,
|
||||
layer_widget->layer,
|
||||
(preview_type == MASK_PREVIEW));
|
||||
if (preview_type == MASK_PREVIEW)
|
||||
{
|
||||
gimp_layer_mask_set_edit (layer_widget->layer->mask, TRUE);
|
||||
}
|
||||
else if (layer_widget->layer->mask)
|
||||
{
|
||||
gimp_layer_mask_set_edit (layer_widget->layer->mask, FALSE);
|
||||
}
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
break;
|
||||
|
@ -2987,9 +2998,9 @@ layer_widget_boundary_redraw (LayerWidget *layer_widget,
|
|||
gdk_gc_set_foreground (layersD->red_gc, &red);
|
||||
}
|
||||
|
||||
if (layer_widget->layer->show_mask)
|
||||
if (layer_widget->layer->mask->show_mask)
|
||||
gc2 = layersD->green_gc;
|
||||
else if (! layer_widget->layer->apply_mask)
|
||||
else if (! layer_widget->layer->mask->apply_mask)
|
||||
gc2 = layersD->red_gc;
|
||||
}
|
||||
|
||||
|
@ -3460,21 +3471,21 @@ layer_widget_layer_flush (GtkWidget *widget,
|
|||
update_mask_preview =
|
||||
(! GIMP_DRAWABLE (gimp_layer_get_mask (layer))->preview_valid);
|
||||
|
||||
if (layer->apply_mask != layer_widget->apply_mask)
|
||||
if (layer->mask->apply_mask != layer_widget->apply_mask)
|
||||
{
|
||||
layer_widget->apply_mask = layer->apply_mask;
|
||||
layer_widget->apply_mask = layer->mask->apply_mask;
|
||||
update_mask_preview = TRUE;
|
||||
}
|
||||
if (layer->show_mask != layer_widget->show_mask)
|
||||
if (layer->mask->show_mask != layer_widget->show_mask)
|
||||
{
|
||||
layer_widget->show_mask = layer->show_mask;
|
||||
layer_widget->show_mask = layer->mask->show_mask;
|
||||
update_mask_preview = TRUE;
|
||||
}
|
||||
if (layer->edit_mask != layer_widget->edit_mask)
|
||||
if (layer->mask->edit_mask != layer_widget->edit_mask)
|
||||
{
|
||||
layer_widget->edit_mask = layer->edit_mask;
|
||||
layer_widget->edit_mask = layer->mask->edit_mask;
|
||||
|
||||
if (layer->edit_mask == TRUE)
|
||||
if (layer->mask->edit_mask == TRUE)
|
||||
layer_widget->active_preview = MASK_PREVIEW;
|
||||
else
|
||||
layer_widget->active_preview = LAYER_PREVIEW;
|
||||
|
|
|
@ -244,7 +244,7 @@ qmask_activate (GtkWidget *widget,
|
|||
{
|
||||
/* if selection */
|
||||
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg));
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg), TRUE);
|
||||
gimp_image_add_channel (gimg, gmask, 0);
|
||||
gimp_channel_set_color (gmask, &color);
|
||||
gimp_object_set_name (GIMP_OBJECT (gmask), "Qmask");
|
||||
|
|
|
@ -525,7 +525,11 @@ drawable_view_new (gchar *title,
|
|||
"active_channel_changed",
|
||||
gimp_image_get_channels,
|
||||
gimp_image_get_active_channel,
|
||||
gimp_image_set_active_channel);
|
||||
gimp_image_set_active_channel,
|
||||
gimp_image_position_channel,
|
||||
gimp_image_add_channel,
|
||||
gimp_image_remove_channel,
|
||||
gimp_channel_copy);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -534,7 +538,11 @@ drawable_view_new (gchar *title,
|
|||
"active_layer_changed",
|
||||
gimp_image_get_layers,
|
||||
gimp_image_get_active_layer,
|
||||
gimp_image_set_active_layer);
|
||||
gimp_image_set_active_layer,
|
||||
gimp_image_position_layer,
|
||||
gimp_image_add_layer,
|
||||
gimp_image_remove_layer,
|
||||
gimp_layer_copy);
|
||||
}
|
||||
|
||||
gtk_list_set_selection_mode (GTK_LIST (GIMP_CONTAINER_LIST_VIEW (view)->gtk_list),
|
||||
|
|
|
@ -1671,16 +1671,10 @@ layers_dialog_duplicate_layer_callback (GtkWidget *widget,
|
|||
if (!layersD || !(gimage = layersD->gimage))
|
||||
return;
|
||||
|
||||
/* Start a group undo */
|
||||
undo_push_group_start (gimage, LAYER_ADD_UNDO);
|
||||
|
||||
active_layer = gimp_image_get_active_layer (gimage);
|
||||
new_layer = gimp_layer_copy (active_layer, TRUE);
|
||||
gimp_image_add_layer (gimage, new_layer, -1);
|
||||
|
||||
/* End the group undo */
|
||||
undo_push_group_end (gimage);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
|
@ -1772,7 +1766,7 @@ layers_dialog_apply_layer_mask_callback (GtkWidget *widget,
|
|||
/* Make sure there is a layer mask to apply */
|
||||
if (layer && gimp_layer_get_mask (layer))
|
||||
{
|
||||
gboolean flush = ! layer->apply_mask || layer->show_mask;
|
||||
gboolean flush = ! layer->mask->apply_mask || layer->mask->show_mask;
|
||||
|
||||
gimp_layer_apply_mask (layer, APPLY, TRUE);
|
||||
|
||||
|
@ -1805,7 +1799,7 @@ layers_dialog_delete_layer_mask_callback (GtkWidget *widget,
|
|||
/* Make sure there is a layer mask to apply */
|
||||
if (layer && gimp_layer_get_mask (layer))
|
||||
{
|
||||
gboolean flush = layer->apply_mask || layer->show_mask;
|
||||
gboolean flush = layer->mask->apply_mask || layer->mask->show_mask;
|
||||
|
||||
gimp_layer_apply_mask (layer, DISCARD, TRUE);
|
||||
|
||||
|
@ -2124,16 +2118,27 @@ layer_widget_create (GimpImage *gimage,
|
|||
layer_widget->width = -1;
|
||||
layer_widget->height = -1;
|
||||
layer_widget->layer_mask = (gimp_layer_get_mask (layer) != NULL);
|
||||
layer_widget->apply_mask = layer->apply_mask;
|
||||
layer_widget->edit_mask = layer->edit_mask;
|
||||
layer_widget->show_mask = layer->show_mask;
|
||||
|
||||
if (layer->mask)
|
||||
{
|
||||
layer_widget->apply_mask = layer->mask->apply_mask;
|
||||
layer_widget->edit_mask = layer->mask->edit_mask;
|
||||
layer_widget->show_mask = layer->mask->show_mask;
|
||||
}
|
||||
else
|
||||
{
|
||||
layer_widget->apply_mask = FALSE;
|
||||
layer_widget->edit_mask = FALSE;
|
||||
layer_widget->show_mask = FALSE;
|
||||
}
|
||||
|
||||
layer_widget->visited = TRUE;
|
||||
layer_widget->drop_type = GIMP_DROP_NONE;
|
||||
layer_widget->layer_pixmap_valid = FALSE;
|
||||
|
||||
if (gimp_layer_get_mask (layer))
|
||||
layer_widget->active_preview =
|
||||
(layer->edit_mask) ? MASK_PREVIEW : LAYER_PREVIEW;
|
||||
(layer->mask->edit_mask) ? MASK_PREVIEW : LAYER_PREVIEW;
|
||||
else
|
||||
layer_widget->active_preview = LAYER_PREVIEW;
|
||||
|
||||
|
@ -2818,8 +2823,8 @@ layer_widget_preview_events (GtkWidget *widget,
|
|||
{
|
||||
if (preview_type == MASK_PREVIEW)
|
||||
{
|
||||
gimage_set_layer_mask_apply (layer_widget->gimage,
|
||||
layer_widget->layer);
|
||||
gimp_layer_mask_set_apply (layer_widget->layer->mask,
|
||||
! layer_widget->layer->mask->apply_mask);
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
@ -2828,16 +2833,22 @@ layer_widget_preview_events (GtkWidget *widget,
|
|||
{
|
||||
if (preview_type == MASK_PREVIEW)
|
||||
{
|
||||
gimage_set_layer_mask_show (layer_widget->gimage,
|
||||
layer_widget->layer);
|
||||
gimp_layer_mask_set_show (layer_widget->layer->mask,
|
||||
! layer_widget->layer->mask->show_mask);
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
else if (layer_widget->active_preview != preview_type)
|
||||
{
|
||||
gimage_set_layer_mask_edit (layer_widget->gimage,
|
||||
layer_widget->layer,
|
||||
(preview_type == MASK_PREVIEW));
|
||||
if (preview_type == MASK_PREVIEW)
|
||||
{
|
||||
gimp_layer_mask_set_edit (layer_widget->layer->mask, TRUE);
|
||||
}
|
||||
else if (layer_widget->layer->mask)
|
||||
{
|
||||
gimp_layer_mask_set_edit (layer_widget->layer->mask, FALSE);
|
||||
}
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
break;
|
||||
|
@ -2987,9 +2998,9 @@ layer_widget_boundary_redraw (LayerWidget *layer_widget,
|
|||
gdk_gc_set_foreground (layersD->red_gc, &red);
|
||||
}
|
||||
|
||||
if (layer_widget->layer->show_mask)
|
||||
if (layer_widget->layer->mask->show_mask)
|
||||
gc2 = layersD->green_gc;
|
||||
else if (! layer_widget->layer->apply_mask)
|
||||
else if (! layer_widget->layer->mask->apply_mask)
|
||||
gc2 = layersD->red_gc;
|
||||
}
|
||||
|
||||
|
@ -3460,21 +3471,21 @@ layer_widget_layer_flush (GtkWidget *widget,
|
|||
update_mask_preview =
|
||||
(! GIMP_DRAWABLE (gimp_layer_get_mask (layer))->preview_valid);
|
||||
|
||||
if (layer->apply_mask != layer_widget->apply_mask)
|
||||
if (layer->mask->apply_mask != layer_widget->apply_mask)
|
||||
{
|
||||
layer_widget->apply_mask = layer->apply_mask;
|
||||
layer_widget->apply_mask = layer->mask->apply_mask;
|
||||
update_mask_preview = TRUE;
|
||||
}
|
||||
if (layer->show_mask != layer_widget->show_mask)
|
||||
if (layer->mask->show_mask != layer_widget->show_mask)
|
||||
{
|
||||
layer_widget->show_mask = layer->show_mask;
|
||||
layer_widget->show_mask = layer->mask->show_mask;
|
||||
update_mask_preview = TRUE;
|
||||
}
|
||||
if (layer->edit_mask != layer_widget->edit_mask)
|
||||
if (layer->mask->edit_mask != layer_widget->edit_mask)
|
||||
{
|
||||
layer_widget->edit_mask = layer->edit_mask;
|
||||
layer_widget->edit_mask = layer->mask->edit_mask;
|
||||
|
||||
if (layer->edit_mask == TRUE)
|
||||
if (layer->mask->edit_mask == TRUE)
|
||||
layer_widget->active_preview = MASK_PREVIEW;
|
||||
else
|
||||
layer_widget->active_preview = LAYER_PREVIEW;
|
||||
|
|
|
@ -195,7 +195,7 @@ channel_copy_invoker (Argument *args)
|
|||
success = FALSE;
|
||||
|
||||
if (success)
|
||||
success = (copy = gimp_channel_copy (channel)) != NULL;
|
||||
success = (copy = gimp_channel_copy (channel, TRUE)) != NULL;
|
||||
|
||||
return_args = procedural_db_return_args (&channel_copy_proc, success);
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ void register_tools_procs (void);
|
|||
void register_undo_procs (void);
|
||||
void register_unit_procs (void);
|
||||
|
||||
/* 325 procedures registered total */
|
||||
/* 319 procedures registered total */
|
||||
|
||||
void
|
||||
internal_procs_init (void)
|
||||
|
@ -71,93 +71,93 @@ internal_procs_init (void)
|
|||
app_init_update_status (NULL, _("Brushes"), 0.009);
|
||||
register_brushes_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Channel"), 0.043);
|
||||
app_init_update_status (NULL, _("Channel"), 0.044);
|
||||
register_channel_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Channel Ops"), 0.092);
|
||||
app_init_update_status (NULL, _("Channel Ops"), 0.094);
|
||||
register_channel_ops_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Color"), 0.098);
|
||||
app_init_update_status (NULL, _("Color"), 0.1);
|
||||
register_color_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Convert"), 0.135);
|
||||
app_init_update_status (NULL, _("Convert"), 0.138);
|
||||
register_convert_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("GDisplay procedures"), 0.145);
|
||||
app_init_update_status (NULL, _("GDisplay procedures"), 0.147);
|
||||
register_display_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Drawable procedures"), 0.154);
|
||||
app_init_update_status (NULL, _("Drawable procedures"), 0.157);
|
||||
register_drawable_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Edit procedures"), 0.222);
|
||||
app_init_update_status (NULL, _("Edit procedures"), 0.226);
|
||||
register_edit_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("File Operations"), 0.24);
|
||||
app_init_update_status (NULL, _("File Operations"), 0.245);
|
||||
register_fileops_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Floating selections"), 0.265);
|
||||
app_init_update_status (NULL, _("Floating selections"), 0.27);
|
||||
register_floating_sel_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Gimprc procedures"), 0.283);
|
||||
app_init_update_status (NULL, _("Gimprc procedures"), 0.288);
|
||||
register_gimprc_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Gradients"), 0.292);
|
||||
app_init_update_status (NULL, _("Gradients"), 0.298);
|
||||
register_gradients_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Gradient UI"), 0.308);
|
||||
app_init_update_status (NULL, _("Gradient UI"), 0.313);
|
||||
register_gradient_select_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Guide procedures"), 0.32);
|
||||
app_init_update_status (NULL, _("Guide procedures"), 0.326);
|
||||
register_guides_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Help procedures"), 0.338);
|
||||
app_init_update_status (NULL, _("Help procedures"), 0.345);
|
||||
register_help_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Image"), 0.342);
|
||||
app_init_update_status (NULL, _("Image"), 0.348);
|
||||
register_image_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Layer"), 0.523);
|
||||
app_init_update_status (NULL, _("Layer"), 0.533);
|
||||
register_layer_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Interface"), 0.618);
|
||||
app_init_update_status (NULL, _("Interface"), 0.611);
|
||||
register_message_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Miscellaneous"), 0.628);
|
||||
app_init_update_status (NULL, _("Miscellaneous"), 0.621);
|
||||
register_misc_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Palette"), 0.634);
|
||||
app_init_update_status (NULL, _("Palette"), 0.627);
|
||||
register_palette_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Parasite procedures"), 0.655);
|
||||
app_init_update_status (NULL, _("Parasite procedures"), 0.649);
|
||||
register_parasite_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Paths"), 0.692);
|
||||
app_init_update_status (NULL, _("Paths"), 0.687);
|
||||
register_paths_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Pattern UI"), 0.732);
|
||||
app_init_update_status (NULL, _("Pattern UI"), 0.727);
|
||||
register_pattern_select_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Patterns"), 0.742);
|
||||
app_init_update_status (NULL, _("Patterns"), 0.737);
|
||||
register_patterns_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Plug-in"), 0.754);
|
||||
app_init_update_status (NULL, _("Plug-in"), 0.749);
|
||||
register_plug_in_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Procedural database"), 0.772);
|
||||
app_init_update_status (NULL, _("Procedural database"), 0.768);
|
||||
register_procedural_db_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Image mask"), 0.797);
|
||||
app_init_update_status (NULL, _("Image mask"), 0.793);
|
||||
register_selection_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Text procedures"), 0.852);
|
||||
app_init_update_status (NULL, _("Text procedures"), 0.85);
|
||||
register_text_tool_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Tool procedures"), 0.865);
|
||||
app_init_update_status (NULL, _("Tool procedures"), 0.862);
|
||||
register_tools_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Undo"), 0.957);
|
||||
app_init_update_status (NULL, _("Undo"), 0.956);
|
||||
register_undo_procs ();
|
||||
|
||||
app_init_update_status (NULL, _("Units"), 0.963);
|
||||
app_init_update_status (NULL, _("Units"), 0.962);
|
||||
register_unit_procs ();
|
||||
}
|
||||
|
|
|
@ -52,12 +52,6 @@ static ProcRecord layer_get_visible_proc;
|
|||
static ProcRecord layer_set_visible_proc;
|
||||
static ProcRecord layer_get_preserve_trans_proc;
|
||||
static ProcRecord layer_set_preserve_trans_proc;
|
||||
static ProcRecord layer_get_apply_mask_proc;
|
||||
static ProcRecord layer_set_apply_mask_proc;
|
||||
static ProcRecord layer_get_show_mask_proc;
|
||||
static ProcRecord layer_set_show_mask_proc;
|
||||
static ProcRecord layer_get_edit_mask_proc;
|
||||
static ProcRecord layer_set_edit_mask_proc;
|
||||
static ProcRecord layer_get_opacity_proc;
|
||||
static ProcRecord layer_set_opacity_proc;
|
||||
static ProcRecord layer_get_mode_proc;
|
||||
|
@ -87,12 +81,6 @@ register_layer_procs (void)
|
|||
procedural_db_register (&layer_set_visible_proc);
|
||||
procedural_db_register (&layer_get_preserve_trans_proc);
|
||||
procedural_db_register (&layer_set_preserve_trans_proc);
|
||||
procedural_db_register (&layer_get_apply_mask_proc);
|
||||
procedural_db_register (&layer_set_apply_mask_proc);
|
||||
procedural_db_register (&layer_get_show_mask_proc);
|
||||
procedural_db_register (&layer_set_show_mask_proc);
|
||||
procedural_db_register (&layer_get_edit_mask_proc);
|
||||
procedural_db_register (&layer_set_edit_mask_proc);
|
||||
procedural_db_register (&layer_get_opacity_proc);
|
||||
procedural_db_register (&layer_set_opacity_proc);
|
||||
procedural_db_register (&layer_get_mode_proc);
|
||||
|
@ -1219,312 +1207,6 @@ static ProcRecord layer_set_preserve_trans_proc =
|
|||
{ { layer_set_preserve_trans_invoker } }
|
||||
};
|
||||
|
||||
static Argument *
|
||||
layer_get_apply_mask_invoker (Argument *args)
|
||||
{
|
||||
gboolean success = TRUE;
|
||||
Argument *return_args;
|
||||
GimpLayer *layer;
|
||||
|
||||
layer = (GimpLayer *) gimp_drawable_get_by_ID (args[0].value.pdb_int);
|
||||
if (layer == NULL)
|
||||
success = FALSE;
|
||||
|
||||
return_args = procedural_db_return_args (&layer_get_apply_mask_proc, success);
|
||||
|
||||
if (success)
|
||||
return_args[1].value.pdb_int = layer->apply_mask;
|
||||
|
||||
return return_args;
|
||||
}
|
||||
|
||||
static ProcArg layer_get_apply_mask_inargs[] =
|
||||
{
|
||||
{
|
||||
PDB_LAYER,
|
||||
"layer",
|
||||
"The layer"
|
||||
}
|
||||
};
|
||||
|
||||
static ProcArg layer_get_apply_mask_outargs[] =
|
||||
{
|
||||
{
|
||||
PDB_INT32,
|
||||
"apply_mask",
|
||||
"The layer's apply mask setting"
|
||||
}
|
||||
};
|
||||
|
||||
static ProcRecord layer_get_apply_mask_proc =
|
||||
{
|
||||
"gimp_layer_get_apply_mask",
|
||||
"Get the apply mask setting of the specified layer.",
|
||||
"This procedure returns the specified layer's apply mask setting. If the value is non-zero, then the layer mask for this layer is currently being composited with the layer's alpha channel.",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"1995-1996",
|
||||
PDB_INTERNAL,
|
||||
1,
|
||||
layer_get_apply_mask_inargs,
|
||||
1,
|
||||
layer_get_apply_mask_outargs,
|
||||
{ { layer_get_apply_mask_invoker } }
|
||||
};
|
||||
|
||||
static Argument *
|
||||
layer_set_apply_mask_invoker (Argument *args)
|
||||
{
|
||||
gboolean success = TRUE;
|
||||
GimpLayer *layer;
|
||||
gboolean apply_mask;
|
||||
|
||||
layer = (GimpLayer *) gimp_drawable_get_by_ID (args[0].value.pdb_int);
|
||||
if (layer == NULL)
|
||||
success = FALSE;
|
||||
|
||||
apply_mask = args[1].value.pdb_int ? TRUE : FALSE;
|
||||
|
||||
if (success)
|
||||
layer->apply_mask = apply_mask;
|
||||
|
||||
return procedural_db_return_args (&layer_set_apply_mask_proc, success);
|
||||
}
|
||||
|
||||
static ProcArg layer_set_apply_mask_inargs[] =
|
||||
{
|
||||
{
|
||||
PDB_LAYER,
|
||||
"layer",
|
||||
"The layer"
|
||||
},
|
||||
{
|
||||
PDB_INT32,
|
||||
"apply_mask",
|
||||
"The new layer's apply mask setting"
|
||||
}
|
||||
};
|
||||
|
||||
static ProcRecord layer_set_apply_mask_proc =
|
||||
{
|
||||
"gimp_layer_set_apply_mask",
|
||||
"Set the apply mask setting of the specified layer.",
|
||||
"This procedure sets the specified layer's apply mask setting. This controls whether the layer's mask is currently affecting the alpha channel. If there is no layer mask, this function will return an error.",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"1995-1996",
|
||||
PDB_INTERNAL,
|
||||
2,
|
||||
layer_set_apply_mask_inargs,
|
||||
0,
|
||||
NULL,
|
||||
{ { layer_set_apply_mask_invoker } }
|
||||
};
|
||||
|
||||
static Argument *
|
||||
layer_get_show_mask_invoker (Argument *args)
|
||||
{
|
||||
gboolean success = TRUE;
|
||||
Argument *return_args;
|
||||
GimpLayer *layer;
|
||||
|
||||
layer = (GimpLayer *) gimp_drawable_get_by_ID (args[0].value.pdb_int);
|
||||
if (layer == NULL)
|
||||
success = FALSE;
|
||||
|
||||
return_args = procedural_db_return_args (&layer_get_show_mask_proc, success);
|
||||
|
||||
if (success)
|
||||
return_args[1].value.pdb_int = layer->show_mask;
|
||||
|
||||
return return_args;
|
||||
}
|
||||
|
||||
static ProcArg layer_get_show_mask_inargs[] =
|
||||
{
|
||||
{
|
||||
PDB_LAYER,
|
||||
"layer",
|
||||
"The layer"
|
||||
}
|
||||
};
|
||||
|
||||
static ProcArg layer_get_show_mask_outargs[] =
|
||||
{
|
||||
{
|
||||
PDB_INT32,
|
||||
"show_mask",
|
||||
"The layer's show mask setting"
|
||||
}
|
||||
};
|
||||
|
||||
static ProcRecord layer_get_show_mask_proc =
|
||||
{
|
||||
"gimp_layer_get_show_mask",
|
||||
"Get the show mask setting of the specified layer.",
|
||||
"This procedure returns the specified layer's show mask setting. If the value is non-zero, then the layer mask for this layer is currently being shown instead of the layer.",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"1995-1996",
|
||||
PDB_INTERNAL,
|
||||
1,
|
||||
layer_get_show_mask_inargs,
|
||||
1,
|
||||
layer_get_show_mask_outargs,
|
||||
{ { layer_get_show_mask_invoker } }
|
||||
};
|
||||
|
||||
static Argument *
|
||||
layer_set_show_mask_invoker (Argument *args)
|
||||
{
|
||||
gboolean success = TRUE;
|
||||
GimpLayer *layer;
|
||||
gboolean show_mask;
|
||||
|
||||
layer = (GimpLayer *) gimp_drawable_get_by_ID (args[0].value.pdb_int);
|
||||
if (layer == NULL)
|
||||
success = FALSE;
|
||||
|
||||
show_mask = args[1].value.pdb_int ? TRUE : FALSE;
|
||||
|
||||
if (success)
|
||||
layer->show_mask = show_mask;
|
||||
|
||||
return procedural_db_return_args (&layer_set_show_mask_proc, success);
|
||||
}
|
||||
|
||||
static ProcArg layer_set_show_mask_inargs[] =
|
||||
{
|
||||
{
|
||||
PDB_LAYER,
|
||||
"layer",
|
||||
"The layer"
|
||||
},
|
||||
{
|
||||
PDB_INT32,
|
||||
"show_mask",
|
||||
"The new layer's show mask setting"
|
||||
}
|
||||
};
|
||||
|
||||
static ProcRecord layer_set_show_mask_proc =
|
||||
{
|
||||
"gimp_layer_set_show_mask",
|
||||
"Set the show mask setting of the specified layer.",
|
||||
"This procedure sets the specified layer's show mask setting. This controls whether the layer or it's mask is visible. Non-zero values indicate that the mask should be visible. If the layer has no mask, then this function returns an error.",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"1995-1996",
|
||||
PDB_INTERNAL,
|
||||
2,
|
||||
layer_set_show_mask_inargs,
|
||||
0,
|
||||
NULL,
|
||||
{ { layer_set_show_mask_invoker } }
|
||||
};
|
||||
|
||||
static Argument *
|
||||
layer_get_edit_mask_invoker (Argument *args)
|
||||
{
|
||||
gboolean success = TRUE;
|
||||
Argument *return_args;
|
||||
GimpLayer *layer;
|
||||
|
||||
layer = (GimpLayer *) gimp_drawable_get_by_ID (args[0].value.pdb_int);
|
||||
if (layer == NULL)
|
||||
success = FALSE;
|
||||
|
||||
return_args = procedural_db_return_args (&layer_get_edit_mask_proc, success);
|
||||
|
||||
if (success)
|
||||
return_args[1].value.pdb_int = layer->edit_mask;
|
||||
|
||||
return return_args;
|
||||
}
|
||||
|
||||
static ProcArg layer_get_edit_mask_inargs[] =
|
||||
{
|
||||
{
|
||||
PDB_LAYER,
|
||||
"layer",
|
||||
"The layer"
|
||||
}
|
||||
};
|
||||
|
||||
static ProcArg layer_get_edit_mask_outargs[] =
|
||||
{
|
||||
{
|
||||
PDB_INT32,
|
||||
"edit_mask",
|
||||
"The layer's show mask setting"
|
||||
}
|
||||
};
|
||||
|
||||
static ProcRecord layer_get_edit_mask_proc =
|
||||
{
|
||||
"gimp_layer_get_edit_mask",
|
||||
"Get the show mask setting of the specified layer.",
|
||||
"This procedure returns the specified layer's show mask setting. If the value is non-zero, then the layer mask for this layer is currently active, and not the layer.",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"1995-1996",
|
||||
PDB_INTERNAL,
|
||||
1,
|
||||
layer_get_edit_mask_inargs,
|
||||
1,
|
||||
layer_get_edit_mask_outargs,
|
||||
{ { layer_get_edit_mask_invoker } }
|
||||
};
|
||||
|
||||
static Argument *
|
||||
layer_set_edit_mask_invoker (Argument *args)
|
||||
{
|
||||
gboolean success = TRUE;
|
||||
GimpLayer *layer;
|
||||
gboolean edit_mask;
|
||||
|
||||
layer = (GimpLayer *) gimp_drawable_get_by_ID (args[0].value.pdb_int);
|
||||
if (layer == NULL)
|
||||
success = FALSE;
|
||||
|
||||
edit_mask = args[1].value.pdb_int ? TRUE : FALSE;
|
||||
|
||||
if (success)
|
||||
layer->edit_mask = edit_mask;
|
||||
|
||||
return procedural_db_return_args (&layer_set_edit_mask_proc, success);
|
||||
}
|
||||
|
||||
static ProcArg layer_set_edit_mask_inargs[] =
|
||||
{
|
||||
{
|
||||
PDB_LAYER,
|
||||
"layer",
|
||||
"The layer"
|
||||
},
|
||||
{
|
||||
PDB_INT32,
|
||||
"edit_mask",
|
||||
"The new layer's show mask setting"
|
||||
}
|
||||
};
|
||||
|
||||
static ProcRecord layer_set_edit_mask_proc =
|
||||
{
|
||||
"gimp_layer_set_edit_mask",
|
||||
"Set the show mask setting of the specified layer.",
|
||||
"This procedure sets the specified layer's show mask setting. This controls whether the layer or it's mask is currently active for editing. If the specified layer has no layer mask, then this procedure will return an error.",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
"1995-1996",
|
||||
PDB_INTERNAL,
|
||||
2,
|
||||
layer_set_edit_mask_inargs,
|
||||
0,
|
||||
NULL,
|
||||
{ { layer_set_edit_mask_invoker } }
|
||||
};
|
||||
|
||||
static Argument *
|
||||
layer_get_opacity_invoker (Argument *args)
|
||||
{
|
||||
|
|
|
@ -1003,7 +1003,7 @@ selection_combine_invoker (Argument *args)
|
|||
if (gimp_drawable_width (GIMP_DRAWABLE (channel)) == gimage->width &&
|
||||
gimp_drawable_height (GIMP_DRAWABLE (channel)) == gimage->height)
|
||||
{
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage));
|
||||
new_channel = gimp_channel_copy (gimp_image_get_mask (gimage), TRUE);
|
||||
gimp_channel_combine_mask (new_channel,
|
||||
channel,
|
||||
operation,
|
||||
|
|
|
@ -244,7 +244,7 @@ qmask_activate (GtkWidget *widget,
|
|||
{
|
||||
/* if selection */
|
||||
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg));
|
||||
gmask = gimp_channel_copy (gimp_image_get_mask (gimg), TRUE);
|
||||
gimp_image_add_channel (gimg, gmask, 0);
|
||||
gimp_channel_set_color (gmask, &color);
|
||||
gimp_object_set_name (GIMP_OBJECT (gmask), "Qmask");
|
||||
|
|
|
@ -525,7 +525,11 @@ drawable_view_new (gchar *title,
|
|||
"active_channel_changed",
|
||||
gimp_image_get_channels,
|
||||
gimp_image_get_active_channel,
|
||||
gimp_image_set_active_channel);
|
||||
gimp_image_set_active_channel,
|
||||
gimp_image_position_channel,
|
||||
gimp_image_add_channel,
|
||||
gimp_image_remove_channel,
|
||||
gimp_channel_copy);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -534,7 +538,11 @@ drawable_view_new (gchar *title,
|
|||
"active_layer_changed",
|
||||
gimp_image_get_layers,
|
||||
gimp_image_get_active_layer,
|
||||
gimp_image_set_active_layer);
|
||||
gimp_image_set_active_layer,
|
||||
gimp_image_position_layer,
|
||||
gimp_image_add_layer,
|
||||
gimp_image_remove_layer,
|
||||
gimp_layer_copy);
|
||||
}
|
||||
|
||||
gtk_list_set_selection_mode (GTK_LIST (GIMP_CONTAINER_LIST_VIEW (view)->gtk_list),
|
||||
|
|
|
@ -1708,12 +1708,6 @@ undo_pop_layer_mask (GimpImage *gimage,
|
|||
else
|
||||
{
|
||||
gimp_layer_add_mask (lmu->layer, lmu->mask, FALSE);
|
||||
|
||||
lmu->layer->apply_mask = lmu->apply_mask;
|
||||
lmu->layer->edit_mask = lmu->edit_mask;
|
||||
lmu->layer->show_mask = lmu->show_mask;
|
||||
|
||||
gimage_set_layer_mask_edit (gimage, lmu->layer, lmu->edit_mask);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -326,7 +326,7 @@ gimp_container_grid_view_set_preview_size (GimpContainerView *view)
|
|||
|
||||
preview = GIMP_PREVIEW (child->widget);
|
||||
|
||||
gimp_preview_set_size (preview, view->preview_size);
|
||||
gimp_preview_set_size (preview, view->preview_size, preview->border_width);
|
||||
}
|
||||
|
||||
gtk_widget_queue_resize (grid_view->wrap_box);
|
||||
|
|
|
@ -289,7 +289,7 @@ gimp_container_list_view_reorder_item (GimpContainerView *view,
|
|||
gtk_list_insert_items (GTK_LIST (list_view->gtk_list), list, new_index);
|
||||
|
||||
if (selected)
|
||||
gtk_list_select_child (GTK_LIST (list_view->gtk_list), list_item);
|
||||
gimp_container_view_select_item (view, viewable);
|
||||
|
||||
gtk_object_unref (GTK_OBJECT (list_item));
|
||||
}
|
||||
|
@ -319,7 +319,7 @@ gimp_container_list_view_select_item (GimpContainerView *view,
|
|||
adj = gtk_scrolled_window_get_vadjustment
|
||||
(GTK_SCROLLED_WINDOW (list_view->scrolled_win));
|
||||
|
||||
item_height = list_item->allocation.height;
|
||||
item_height = list_item->requisition.height;
|
||||
|
||||
index = gimp_container_get_child_index (view->container,
|
||||
GIMP_OBJECT (viewable));
|
||||
|
@ -330,6 +330,10 @@ gimp_container_list_view_select_item (GimpContainerView *view,
|
|||
|
||||
gtk_list_select_child (GTK_LIST (list_view->gtk_list), list_item);
|
||||
|
||||
gtk_signal_handler_unblock_by_func (GTK_OBJECT (list_view->gtk_list),
|
||||
gimp_container_list_view_item_selected,
|
||||
list_view);
|
||||
|
||||
if (index * item_height < adj->value)
|
||||
{
|
||||
gtk_adjustment_set_value (adj, index * item_height);
|
||||
|
@ -339,10 +343,6 @@ gimp_container_list_view_select_item (GimpContainerView *view,
|
|||
gtk_adjustment_set_value (adj,
|
||||
(index + 1) * item_height - adj->page_size);
|
||||
}
|
||||
|
||||
gtk_signal_handler_unblock_by_func (GTK_OBJECT (list_view->gtk_list),
|
||||
gimp_container_list_view_item_selected,
|
||||
list_view);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -379,7 +379,7 @@ gimp_container_list_view_set_preview_size (GimpContainerView *view)
|
|||
|
||||
preview = GIMP_PREVIEW (GIMP_LIST_ITEM (list->data)->preview);
|
||||
|
||||
gimp_preview_set_size (preview, view->preview_size);
|
||||
gimp_preview_set_size (preview, view->preview_size, preview->border_width);
|
||||
}
|
||||
|
||||
gtk_widget_queue_resize (list_view->gtk_list);
|
||||
|
|
|
@ -240,6 +240,8 @@ gimp_container_view_set_container (GimpContainerView *view,
|
|||
|
||||
if (view->container)
|
||||
{
|
||||
gimp_container_view_select_item (view, NULL);
|
||||
|
||||
gimp_container_view_clear_items (view);
|
||||
|
||||
gtk_signal_disconnect_by_func (GTK_OBJECT (view->container),
|
||||
|
|
|
@ -59,7 +59,8 @@
|
|||
|
||||
typedef enum
|
||||
{
|
||||
GIMP_DND_DATA_COLOR = 1,
|
||||
GIMP_DND_DATA_NONE,
|
||||
GIMP_DND_DATA_COLOR,
|
||||
GIMP_DND_DATA_LAYER,
|
||||
GIMP_DND_DATA_CHANNEL,
|
||||
GIMP_DND_DATA_LAYER_MASK,
|
||||
|
@ -686,222 +687,23 @@ gimp_dnd_get_viewable_icon (GtkWidget *widget,
|
|||
return preview;
|
||||
}
|
||||
|
||||
static const GtkTargetEntry layer_target_table[] =
|
||||
static GimpDndDataType
|
||||
gimp_dnd_data_type_get_by_gtk_type (GtkType type)
|
||||
{
|
||||
GIMP_TARGET_LAYER
|
||||
};
|
||||
static const guint layer_n_targets = (sizeof (layer_target_table) /
|
||||
sizeof (layer_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry channel_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_CHANNEL
|
||||
};
|
||||
static const guint channel_n_targets = (sizeof (channel_target_table) /
|
||||
sizeof (layer_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry layer_mask_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_LAYER_MASK
|
||||
};
|
||||
static const guint layer_mask_n_targets = (sizeof (layer_mask_target_table) /
|
||||
sizeof (layer_mask_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry brush_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_BRUSH
|
||||
};
|
||||
static const guint brush_n_targets = (sizeof (brush_target_table) /
|
||||
sizeof (brush_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry pattern_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_PATTERN
|
||||
};
|
||||
static const guint pattern_n_targets = (sizeof (pattern_target_table) /
|
||||
sizeof (pattern_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry gradient_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_GRADIENT
|
||||
};
|
||||
static const guint gradient_n_targets = (sizeof (gradient_target_table) /
|
||||
sizeof (gradient_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry palette_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_PALETTE
|
||||
};
|
||||
static const guint palette_n_targets = (sizeof (palette_target_table) /
|
||||
sizeof (palette_target_table[0]));
|
||||
|
||||
static const GtkTargetEntry tool_target_table[] =
|
||||
{
|
||||
GIMP_TARGET_TOOL
|
||||
};
|
||||
static const guint tool_n_targets = (sizeof (tool_target_table) /
|
||||
sizeof (tool_target_table[0]));
|
||||
|
||||
|
||||
void
|
||||
gimp_gtk_drag_source_set_by_type (GtkWidget *widget,
|
||||
GdkModifierType start_button_mask,
|
||||
GtkType type,
|
||||
GdkDragAction actions)
|
||||
{
|
||||
const GtkTargetEntry *target_table = NULL;
|
||||
guint n_targets = 0;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
target_table = layer_target_table;
|
||||
n_targets = layer_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
target_table = channel_target_table;
|
||||
n_targets = channel_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
target_table = layer_mask_target_table;
|
||||
n_targets = layer_mask_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
target_table = brush_target_table;
|
||||
n_targets = brush_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
target_table = pattern_target_table;
|
||||
n_targets = pattern_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
target_table = gradient_target_table;
|
||||
n_targets = gradient_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
target_table = palette_target_table;
|
||||
n_targets = palette_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_TOOL_INFO))
|
||||
{
|
||||
target_table = tool_target_table;
|
||||
n_targets = tool_n_targets;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
}
|
||||
|
||||
if (target_table && n_targets)
|
||||
{
|
||||
gtk_drag_source_set (widget, start_button_mask,
|
||||
target_table,
|
||||
n_targets,
|
||||
actions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
gimp_gtk_drag_dest_set_by_type (GtkWidget *widget,
|
||||
GtkDestDefaults flags,
|
||||
GtkType type,
|
||||
GdkDragAction actions)
|
||||
{
|
||||
const GtkTargetEntry *target_table = NULL;
|
||||
guint n_targets = 0;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
target_table = layer_target_table;
|
||||
n_targets = layer_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
target_table = channel_target_table;
|
||||
n_targets = channel_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
target_table = layer_mask_target_table;
|
||||
n_targets = layer_mask_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
target_table = brush_target_table;
|
||||
n_targets = brush_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
target_table = pattern_target_table;
|
||||
n_targets = pattern_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
target_table = gradient_target_table;
|
||||
n_targets = gradient_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
target_table = palette_target_table;
|
||||
n_targets = palette_n_targets;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_TOOL_INFO))
|
||||
{
|
||||
target_table = tool_target_table;
|
||||
n_targets = tool_n_targets;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
}
|
||||
|
||||
if (target_table && n_targets)
|
||||
{
|
||||
gtk_drag_dest_set (widget, flags,
|
||||
target_table,
|
||||
n_targets,
|
||||
actions);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gimp_dnd_viewable_source_set (GtkWidget *widget,
|
||||
GtkType type,
|
||||
GimpDndDragViewableFunc get_viewable_func,
|
||||
gpointer data)
|
||||
{
|
||||
GimpDndDataType dnd_type;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (get_viewable_func != NULL);
|
||||
GimpDndDataType dnd_type = GIMP_DND_DATA_NONE;
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_CHANNEL;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER_MASK;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_CHANNEL;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_BRUSH;
|
||||
|
@ -926,9 +728,72 @@ gimp_dnd_viewable_source_set (GtkWidget *widget,
|
|||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
return;
|
||||
}
|
||||
|
||||
return dnd_type;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_gtk_drag_source_set_by_type (GtkWidget *widget,
|
||||
GdkModifierType start_button_mask,
|
||||
GtkType type,
|
||||
GdkDragAction actions)
|
||||
{
|
||||
GimpDndDataType dnd_type;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gtk_drag_source_set (widget, start_button_mask,
|
||||
&dnd_data_defs[dnd_type].target_entry,
|
||||
1,
|
||||
actions);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_gtk_drag_dest_set_by_type (GtkWidget *widget,
|
||||
GtkDestDefaults flags,
|
||||
GtkType type,
|
||||
GdkDragAction actions)
|
||||
{
|
||||
GimpDndDataType dnd_type;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gtk_drag_dest_set (widget, flags,
|
||||
&dnd_data_defs[dnd_type].target_entry,
|
||||
1,
|
||||
actions);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_dnd_viewable_source_set (GtkWidget *widget,
|
||||
GtkType type,
|
||||
GimpDndDragViewableFunc get_viewable_func,
|
||||
gpointer data)
|
||||
{
|
||||
GimpDndDataType dnd_type;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (get_viewable_func != NULL);
|
||||
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gimp_dnd_data_source_set (dnd_type, widget,
|
||||
GTK_SIGNAL_FUNC (get_viewable_func),
|
||||
data);
|
||||
|
@ -943,44 +808,10 @@ gimp_dnd_viewable_source_unset (GtkWidget *widget,
|
|||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_CHANNEL;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER_MASK;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_BRUSH;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PATTERN;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_GRADIENT;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PALETTE;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_TOOL_INFO))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_TOOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
return;
|
||||
}
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gimp_dnd_data_source_unset (widget);
|
||||
}
|
||||
|
@ -997,44 +828,10 @@ gimp_dnd_viewable_dest_set (GtkWidget *widget,
|
|||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (set_viewable_func != NULL);
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_CHANNEL;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER_MASK;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_BRUSH;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PATTERN;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_GRADIENT;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PALETTE;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_TOOL_INFO))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_TOOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
return;
|
||||
}
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gimp_dnd_data_dest_set (dnd_type, widget,
|
||||
GTK_SIGNAL_FUNC (set_viewable_func),
|
||||
|
@ -1047,44 +844,13 @@ gimp_dnd_viewable_dest_unset (GtkWidget *widget,
|
|||
{
|
||||
GimpDndDataType dnd_type;
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_CHANNEL))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_CHANNEL;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER_MASK))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER_MASK;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_BRUSH))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_BRUSH;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PATTERN))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PATTERN;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_GRADIENT))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_GRADIENT;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_PALETTE))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_PALETTE;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_TOOL_INFO))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_TOOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("%s(): unsupported GtkType \"%s\"",
|
||||
G_GNUC_FUNCTION, gtk_type_name (type));
|
||||
return;
|
||||
}
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
dnd_type = gimp_dnd_data_type_get_by_gtk_type (type);
|
||||
|
||||
if (dnd_type == GIMP_DND_DATA_NONE)
|
||||
return;
|
||||
|
||||
gimp_dnd_data_dest_unset (dnd_type, widget);
|
||||
}
|
||||
|
|
|
@ -258,7 +258,8 @@ gimp_drawable_list_item_drag_drop (GtkWidget *widget,
|
|||
{
|
||||
gimp_image_position_channel (gimp_drawable_gimage (GIMP_DRAWABLE (src_viewable)),
|
||||
GIMP_CHANNEL (src_viewable),
|
||||
dest_index);
|
||||
dest_index,
|
||||
TRUE);
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "apptypes.h"
|
||||
|
||||
#include "gdisplay.h"
|
||||
#include "gimpcontainer.h"
|
||||
#include "gimpdrawable.h"
|
||||
#include "gimpdrawablelistview.h"
|
||||
|
@ -59,6 +60,8 @@ static void gimp_drawable_list_view_activate_item (GimpContainerView *v
|
|||
GimpViewable *item,
|
||||
gpointer insert_data);
|
||||
|
||||
static void gimp_drawable_list_view_new_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_new_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_new_dropped (GtkWidget *widget,
|
||||
|
@ -68,16 +71,22 @@ static void gimp_drawable_list_view_raise_clicked (GtkWidget *w
|
|||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_lower_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_duplicate_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_duplicate_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_duplicate_dropped (GtkWidget *widget,
|
||||
GimpViewable *viewable,
|
||||
gpointer drawable);
|
||||
static void gimp_drawable_list_view_edit_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_edit_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_edit_dropped (GtkWidget *widget,
|
||||
GimpViewable *viewable,
|
||||
gpointer drawable);
|
||||
static void gimp_drawable_list_view_delete_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_delete_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_delete_dropped (GtkWidget *widget,
|
||||
|
@ -251,10 +260,12 @@ gimp_drawable_list_view_init (GimpDrawableListView *view)
|
|||
gtk_container_add (GTK_CONTAINER (view->delete_button), pixmap);
|
||||
gtk_widget_show (pixmap);
|
||||
|
||||
gtk_widget_set_sensitive (view->raise_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->lower_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->new_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->raise_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->lower_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->duplicate_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->delete_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->edit_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->delete_button, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -290,12 +301,16 @@ gimp_drawable_list_view_insert_item (GimpContainerView *view,
|
|||
}
|
||||
|
||||
GtkWidget *
|
||||
gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func)
|
||||
gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func,
|
||||
GimpReorderDrawableFunc reorder_drawable_func,
|
||||
GimpAddDrawableFunc add_drawable_func,
|
||||
GimpRemoveDrawableFunc remove_drawable_func,
|
||||
GimpCopyDrawableFunc copy_drawable_func)
|
||||
{
|
||||
GimpDrawableListView *list_view;
|
||||
GimpContainerView *view;
|
||||
|
@ -305,6 +320,10 @@ gimp_drawable_list_view_new (GimpImage *gimage,
|
|||
g_return_val_if_fail (get_container_func != NULL, NULL);
|
||||
g_return_val_if_fail (get_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (get_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (reorder_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (add_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (remove_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (copy_drawable_func != NULL, NULL);
|
||||
|
||||
list_view = gtk_type_new (GIMP_TYPE_DRAWABLE_LIST_VIEW);
|
||||
|
||||
|
@ -312,11 +331,15 @@ gimp_drawable_list_view_new (GimpImage *gimage,
|
|||
|
||||
view->preview_size = preview_size;
|
||||
|
||||
list_view->drawable_type = drawable_type;
|
||||
list_view->signal_name = g_strdup (signal_name);
|
||||
list_view->get_container_func = get_container_func;
|
||||
list_view->get_drawable_func = get_drawable_func;
|
||||
list_view->set_drawable_func = set_drawable_func;
|
||||
list_view->drawable_type = drawable_type;
|
||||
list_view->signal_name = g_strdup (signal_name);
|
||||
list_view->get_container_func = get_container_func;
|
||||
list_view->get_drawable_func = get_drawable_func;
|
||||
list_view->set_drawable_func = set_drawable_func;
|
||||
list_view->reorder_drawable_func = reorder_drawable_func;
|
||||
list_view->add_drawable_func = add_drawable_func;
|
||||
list_view->remove_drawable_func = remove_drawable_func;
|
||||
list_view->copy_drawable_func = copy_drawable_func;
|
||||
|
||||
/* drop to "new" */
|
||||
gimp_gtk_drag_dest_set_by_type (GTK_WIDGET (list_view->new_button),
|
||||
|
@ -398,6 +421,8 @@ gimp_drawable_list_view_set_image (GimpDrawableListView *view,
|
|||
GTK_SIGNAL_FUNC (gimp_drawable_list_view_drawable_changed),
|
||||
view);
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (view->new_button, (view->gimage != NULL));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -405,12 +430,57 @@ gimp_drawable_list_view_select_item (GimpContainerView *view,
|
|||
GimpViewable *item,
|
||||
gpointer insert_data)
|
||||
{
|
||||
GimpDrawableListView *list_view;
|
||||
gboolean raise_sensitive = FALSE;
|
||||
gboolean lower_sensitive = FALSE;
|
||||
gboolean duplicate_sensitive = FALSE;
|
||||
gboolean edit_sensitive = FALSE;
|
||||
gboolean delete_sensitive = FALSE;
|
||||
|
||||
list_view = GIMP_DRAWABLE_LIST_VIEW (view);
|
||||
|
||||
if (GIMP_CONTAINER_VIEW_CLASS (parent_class)->select_item)
|
||||
GIMP_CONTAINER_VIEW_CLASS (parent_class)->select_item (view,
|
||||
item,
|
||||
insert_data);
|
||||
|
||||
g_print ("select item\n");
|
||||
if (item)
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
drawable = list_view->get_drawable_func (list_view->gimage);
|
||||
|
||||
if (drawable != GIMP_DRAWABLE (item))
|
||||
{
|
||||
list_view->set_drawable_func (list_view->gimage,
|
||||
GIMP_DRAWABLE (item));
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
index = gimp_container_get_child_index (view->container,
|
||||
GIMP_OBJECT (item));
|
||||
|
||||
if (view->container->num_children > 1)
|
||||
{
|
||||
if (index > 0)
|
||||
raise_sensitive = TRUE;
|
||||
|
||||
if (index < (view->container->num_children - 1))
|
||||
lower_sensitive = TRUE;
|
||||
}
|
||||
|
||||
duplicate_sensitive = TRUE;
|
||||
edit_sensitive = TRUE;
|
||||
delete_sensitive = TRUE;
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (list_view->raise_button, raise_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->lower_button, lower_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->duplicate_button, duplicate_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->edit_button, edit_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->delete_button, delete_sensitive);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -423,14 +493,25 @@ gimp_drawable_list_view_activate_item (GimpContainerView *view,
|
|||
item,
|
||||
insert_data);
|
||||
|
||||
g_print ("activate item\n");
|
||||
gimp_drawable_list_view_edit_drawable (GIMP_DRAWABLE_LIST_VIEW (view),
|
||||
GIMP_DRAWABLE (item));
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_new_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
if (drawable)
|
||||
g_print ("new with \"%s\"'s properties\n", GIMP_OBJECT (drawable)->name);
|
||||
else
|
||||
g_print ("new default\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_new_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("new clicked\n");
|
||||
gimp_drawable_list_view_new_drawable (view, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -442,19 +523,34 @@ gimp_drawable_list_view_new_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("new dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_new_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_duplicate_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
GimpDrawable *new_drawable;
|
||||
|
||||
new_drawable = view->copy_drawable_func (drawable, TRUE);
|
||||
view->add_drawable_func (view->gimage, new_drawable, -1);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_duplicate_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("duplicate clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_duplicate_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -466,12 +562,11 @@ gimp_drawable_list_view_duplicate_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("duplicate dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_duplicate_clicked (NULL, data);
|
||||
gimp_drawable_list_view_duplicate_drawable (view,
|
||||
GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -479,21 +574,60 @@ static void
|
|||
gimp_drawable_list_view_raise_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("raise clicked\n");
|
||||
GimpContainer *container;
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
container = GIMP_CONTAINER_VIEW (view)->container;
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
index = gimp_container_get_child_index (container, GIMP_OBJECT (drawable));
|
||||
|
||||
if (index > 0)
|
||||
{
|
||||
view->reorder_drawable_func (view->gimage, drawable, index - 1, TRUE);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_lower_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("lower clicked\n");
|
||||
GimpContainer *container;
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
container = GIMP_CONTAINER_VIEW (view)->container;
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
index = gimp_container_get_child_index (container, GIMP_OBJECT (drawable));
|
||||
|
||||
if (index < container->num_children - 1)
|
||||
{
|
||||
view->reorder_drawable_func (view->gimage, drawable, index + 1, TRUE);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_edit_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
g_print ("edit \"%s\"\n", GIMP_OBJECT (drawable)->name);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_edit_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("edit clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_edit_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -505,20 +639,31 @@ gimp_drawable_list_view_edit_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("edit dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_edit_clicked (NULL, data);
|
||||
gimp_drawable_list_view_edit_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_delete_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
view->remove_drawable_func (view->gimage, drawable);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_delete_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("delete clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_delete_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -530,12 +675,10 @@ gimp_drawable_list_view_delete_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("delete dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_delete_clicked (NULL, data);
|
||||
gimp_drawable_list_view_delete_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,10 +23,21 @@
|
|||
#include "gimpcontainerlistview.h"
|
||||
|
||||
|
||||
typedef GimpContainer * (* GimpGetContainerFunc) (const GimpImage *gimage);
|
||||
typedef GimpDrawable * (* GimpGetDrawableFunc) (const GimpImage *gimage);
|
||||
typedef void (* GimpSetDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef GimpContainer * (* GimpGetContainerFunc) (const GimpImage *gimage);
|
||||
typedef GimpDrawable * (* GimpGetDrawableFunc) (const GimpImage *gimage);
|
||||
typedef void (* GimpSetDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef void (* GimpReorderDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable,
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
typedef void (* GimpAddDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable,
|
||||
gint index);
|
||||
typedef void (* GimpRemoveDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef GimpDrawable * (* GimpCopyDrawableFunc) (GimpDrawable *drawable,
|
||||
gboolean add_alpha);
|
||||
|
||||
|
||||
#define GIMP_TYPE_DRAWABLE_LIST_VIEW (gimp_drawable_list_view_get_type ())
|
||||
|
@ -40,25 +51,29 @@ typedef struct _GimpDrawableListViewClass GimpDrawableListViewClass;
|
|||
|
||||
struct _GimpDrawableListView
|
||||
{
|
||||
GimpContainerListView parent_instance;
|
||||
GimpContainerListView parent_instance;
|
||||
|
||||
GimpImage *gimage;
|
||||
GimpImage *gimage;
|
||||
|
||||
GtkType drawable_type;
|
||||
gchar *signal_name;
|
||||
GtkType drawable_type;
|
||||
gchar *signal_name;
|
||||
|
||||
GimpGetContainerFunc get_container_func;
|
||||
GimpGetDrawableFunc get_drawable_func;
|
||||
GimpSetDrawableFunc set_drawable_func;
|
||||
GimpGetContainerFunc get_container_func;
|
||||
GimpGetDrawableFunc get_drawable_func;
|
||||
GimpSetDrawableFunc set_drawable_func;
|
||||
GimpReorderDrawableFunc reorder_drawable_func;
|
||||
GimpAddDrawableFunc add_drawable_func;
|
||||
GimpRemoveDrawableFunc remove_drawable_func;
|
||||
GimpCopyDrawableFunc copy_drawable_func;
|
||||
|
||||
GtkWidget *button_box;
|
||||
GtkWidget *button_box;
|
||||
|
||||
GtkWidget *new_button;
|
||||
GtkWidget *raise_button;
|
||||
GtkWidget *lower_button;
|
||||
GtkWidget *duplicate_button;
|
||||
GtkWidget *edit_button;
|
||||
GtkWidget *delete_button;
|
||||
GtkWidget *new_button;
|
||||
GtkWidget *raise_button;
|
||||
GtkWidget *lower_button;
|
||||
GtkWidget *duplicate_button;
|
||||
GtkWidget *edit_button;
|
||||
GtkWidget *delete_button;
|
||||
};
|
||||
|
||||
struct _GimpDrawableListViewClass
|
||||
|
@ -69,12 +84,16 @@ struct _GimpDrawableListViewClass
|
|||
|
||||
GtkType gimp_drawable_list_view_get_type (void);
|
||||
|
||||
GtkWidget * gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func);
|
||||
GtkWidget * gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func,
|
||||
GimpReorderDrawableFunc reorder_drawable_func,
|
||||
GimpAddDrawableFunc add_drawable_func,
|
||||
GimpRemoveDrawableFunc remove_drawable_func,
|
||||
GimpCopyDrawableFunc copy_drawable_func);
|
||||
|
||||
void gimp_drawable_list_view_set_image (GimpDrawableListView *view,
|
||||
GimpImage *gimage);
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "apptypes.h"
|
||||
|
||||
#include "gdisplay.h"
|
||||
#include "gimpcontainer.h"
|
||||
#include "gimpdrawable.h"
|
||||
#include "gimpdrawablelistview.h"
|
||||
|
@ -59,6 +60,8 @@ static void gimp_drawable_list_view_activate_item (GimpContainerView *v
|
|||
GimpViewable *item,
|
||||
gpointer insert_data);
|
||||
|
||||
static void gimp_drawable_list_view_new_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_new_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_new_dropped (GtkWidget *widget,
|
||||
|
@ -68,16 +71,22 @@ static void gimp_drawable_list_view_raise_clicked (GtkWidget *w
|
|||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_lower_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_duplicate_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_duplicate_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_duplicate_dropped (GtkWidget *widget,
|
||||
GimpViewable *viewable,
|
||||
gpointer drawable);
|
||||
static void gimp_drawable_list_view_edit_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_edit_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_edit_dropped (GtkWidget *widget,
|
||||
GimpViewable *viewable,
|
||||
gpointer drawable);
|
||||
static void gimp_drawable_list_view_delete_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_delete_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_delete_dropped (GtkWidget *widget,
|
||||
|
@ -251,10 +260,12 @@ gimp_drawable_list_view_init (GimpDrawableListView *view)
|
|||
gtk_container_add (GTK_CONTAINER (view->delete_button), pixmap);
|
||||
gtk_widget_show (pixmap);
|
||||
|
||||
gtk_widget_set_sensitive (view->raise_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->lower_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->new_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->raise_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->lower_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->duplicate_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->delete_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->edit_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->delete_button, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -290,12 +301,16 @@ gimp_drawable_list_view_insert_item (GimpContainerView *view,
|
|||
}
|
||||
|
||||
GtkWidget *
|
||||
gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func)
|
||||
gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func,
|
||||
GimpReorderDrawableFunc reorder_drawable_func,
|
||||
GimpAddDrawableFunc add_drawable_func,
|
||||
GimpRemoveDrawableFunc remove_drawable_func,
|
||||
GimpCopyDrawableFunc copy_drawable_func)
|
||||
{
|
||||
GimpDrawableListView *list_view;
|
||||
GimpContainerView *view;
|
||||
|
@ -305,6 +320,10 @@ gimp_drawable_list_view_new (GimpImage *gimage,
|
|||
g_return_val_if_fail (get_container_func != NULL, NULL);
|
||||
g_return_val_if_fail (get_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (get_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (reorder_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (add_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (remove_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (copy_drawable_func != NULL, NULL);
|
||||
|
||||
list_view = gtk_type_new (GIMP_TYPE_DRAWABLE_LIST_VIEW);
|
||||
|
||||
|
@ -312,11 +331,15 @@ gimp_drawable_list_view_new (GimpImage *gimage,
|
|||
|
||||
view->preview_size = preview_size;
|
||||
|
||||
list_view->drawable_type = drawable_type;
|
||||
list_view->signal_name = g_strdup (signal_name);
|
||||
list_view->get_container_func = get_container_func;
|
||||
list_view->get_drawable_func = get_drawable_func;
|
||||
list_view->set_drawable_func = set_drawable_func;
|
||||
list_view->drawable_type = drawable_type;
|
||||
list_view->signal_name = g_strdup (signal_name);
|
||||
list_view->get_container_func = get_container_func;
|
||||
list_view->get_drawable_func = get_drawable_func;
|
||||
list_view->set_drawable_func = set_drawable_func;
|
||||
list_view->reorder_drawable_func = reorder_drawable_func;
|
||||
list_view->add_drawable_func = add_drawable_func;
|
||||
list_view->remove_drawable_func = remove_drawable_func;
|
||||
list_view->copy_drawable_func = copy_drawable_func;
|
||||
|
||||
/* drop to "new" */
|
||||
gimp_gtk_drag_dest_set_by_type (GTK_WIDGET (list_view->new_button),
|
||||
|
@ -398,6 +421,8 @@ gimp_drawable_list_view_set_image (GimpDrawableListView *view,
|
|||
GTK_SIGNAL_FUNC (gimp_drawable_list_view_drawable_changed),
|
||||
view);
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (view->new_button, (view->gimage != NULL));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -405,12 +430,57 @@ gimp_drawable_list_view_select_item (GimpContainerView *view,
|
|||
GimpViewable *item,
|
||||
gpointer insert_data)
|
||||
{
|
||||
GimpDrawableListView *list_view;
|
||||
gboolean raise_sensitive = FALSE;
|
||||
gboolean lower_sensitive = FALSE;
|
||||
gboolean duplicate_sensitive = FALSE;
|
||||
gboolean edit_sensitive = FALSE;
|
||||
gboolean delete_sensitive = FALSE;
|
||||
|
||||
list_view = GIMP_DRAWABLE_LIST_VIEW (view);
|
||||
|
||||
if (GIMP_CONTAINER_VIEW_CLASS (parent_class)->select_item)
|
||||
GIMP_CONTAINER_VIEW_CLASS (parent_class)->select_item (view,
|
||||
item,
|
||||
insert_data);
|
||||
|
||||
g_print ("select item\n");
|
||||
if (item)
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
drawable = list_view->get_drawable_func (list_view->gimage);
|
||||
|
||||
if (drawable != GIMP_DRAWABLE (item))
|
||||
{
|
||||
list_view->set_drawable_func (list_view->gimage,
|
||||
GIMP_DRAWABLE (item));
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
index = gimp_container_get_child_index (view->container,
|
||||
GIMP_OBJECT (item));
|
||||
|
||||
if (view->container->num_children > 1)
|
||||
{
|
||||
if (index > 0)
|
||||
raise_sensitive = TRUE;
|
||||
|
||||
if (index < (view->container->num_children - 1))
|
||||
lower_sensitive = TRUE;
|
||||
}
|
||||
|
||||
duplicate_sensitive = TRUE;
|
||||
edit_sensitive = TRUE;
|
||||
delete_sensitive = TRUE;
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (list_view->raise_button, raise_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->lower_button, lower_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->duplicate_button, duplicate_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->edit_button, edit_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->delete_button, delete_sensitive);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -423,14 +493,25 @@ gimp_drawable_list_view_activate_item (GimpContainerView *view,
|
|||
item,
|
||||
insert_data);
|
||||
|
||||
g_print ("activate item\n");
|
||||
gimp_drawable_list_view_edit_drawable (GIMP_DRAWABLE_LIST_VIEW (view),
|
||||
GIMP_DRAWABLE (item));
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_new_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
if (drawable)
|
||||
g_print ("new with \"%s\"'s properties\n", GIMP_OBJECT (drawable)->name);
|
||||
else
|
||||
g_print ("new default\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_new_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("new clicked\n");
|
||||
gimp_drawable_list_view_new_drawable (view, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -442,19 +523,34 @@ gimp_drawable_list_view_new_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("new dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_new_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_duplicate_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
GimpDrawable *new_drawable;
|
||||
|
||||
new_drawable = view->copy_drawable_func (drawable, TRUE);
|
||||
view->add_drawable_func (view->gimage, new_drawable, -1);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_duplicate_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("duplicate clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_duplicate_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -466,12 +562,11 @@ gimp_drawable_list_view_duplicate_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("duplicate dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_duplicate_clicked (NULL, data);
|
||||
gimp_drawable_list_view_duplicate_drawable (view,
|
||||
GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -479,21 +574,60 @@ static void
|
|||
gimp_drawable_list_view_raise_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("raise clicked\n");
|
||||
GimpContainer *container;
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
container = GIMP_CONTAINER_VIEW (view)->container;
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
index = gimp_container_get_child_index (container, GIMP_OBJECT (drawable));
|
||||
|
||||
if (index > 0)
|
||||
{
|
||||
view->reorder_drawable_func (view->gimage, drawable, index - 1, TRUE);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_lower_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("lower clicked\n");
|
||||
GimpContainer *container;
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
container = GIMP_CONTAINER_VIEW (view)->container;
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
index = gimp_container_get_child_index (container, GIMP_OBJECT (drawable));
|
||||
|
||||
if (index < container->num_children - 1)
|
||||
{
|
||||
view->reorder_drawable_func (view->gimage, drawable, index + 1, TRUE);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_edit_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
g_print ("edit \"%s\"\n", GIMP_OBJECT (drawable)->name);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_edit_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("edit clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_edit_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -505,20 +639,31 @@ gimp_drawable_list_view_edit_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("edit dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_edit_clicked (NULL, data);
|
||||
gimp_drawable_list_view_edit_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_delete_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
view->remove_drawable_func (view->gimage, drawable);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_delete_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("delete clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_delete_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -530,12 +675,10 @@ gimp_drawable_list_view_delete_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("delete dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_delete_clicked (NULL, data);
|
||||
gimp_drawable_list_view_delete_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,10 +23,21 @@
|
|||
#include "gimpcontainerlistview.h"
|
||||
|
||||
|
||||
typedef GimpContainer * (* GimpGetContainerFunc) (const GimpImage *gimage);
|
||||
typedef GimpDrawable * (* GimpGetDrawableFunc) (const GimpImage *gimage);
|
||||
typedef void (* GimpSetDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef GimpContainer * (* GimpGetContainerFunc) (const GimpImage *gimage);
|
||||
typedef GimpDrawable * (* GimpGetDrawableFunc) (const GimpImage *gimage);
|
||||
typedef void (* GimpSetDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef void (* GimpReorderDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable,
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
typedef void (* GimpAddDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable,
|
||||
gint index);
|
||||
typedef void (* GimpRemoveDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef GimpDrawable * (* GimpCopyDrawableFunc) (GimpDrawable *drawable,
|
||||
gboolean add_alpha);
|
||||
|
||||
|
||||
#define GIMP_TYPE_DRAWABLE_LIST_VIEW (gimp_drawable_list_view_get_type ())
|
||||
|
@ -40,25 +51,29 @@ typedef struct _GimpDrawableListViewClass GimpDrawableListViewClass;
|
|||
|
||||
struct _GimpDrawableListView
|
||||
{
|
||||
GimpContainerListView parent_instance;
|
||||
GimpContainerListView parent_instance;
|
||||
|
||||
GimpImage *gimage;
|
||||
GimpImage *gimage;
|
||||
|
||||
GtkType drawable_type;
|
||||
gchar *signal_name;
|
||||
GtkType drawable_type;
|
||||
gchar *signal_name;
|
||||
|
||||
GimpGetContainerFunc get_container_func;
|
||||
GimpGetDrawableFunc get_drawable_func;
|
||||
GimpSetDrawableFunc set_drawable_func;
|
||||
GimpGetContainerFunc get_container_func;
|
||||
GimpGetDrawableFunc get_drawable_func;
|
||||
GimpSetDrawableFunc set_drawable_func;
|
||||
GimpReorderDrawableFunc reorder_drawable_func;
|
||||
GimpAddDrawableFunc add_drawable_func;
|
||||
GimpRemoveDrawableFunc remove_drawable_func;
|
||||
GimpCopyDrawableFunc copy_drawable_func;
|
||||
|
||||
GtkWidget *button_box;
|
||||
GtkWidget *button_box;
|
||||
|
||||
GtkWidget *new_button;
|
||||
GtkWidget *raise_button;
|
||||
GtkWidget *lower_button;
|
||||
GtkWidget *duplicate_button;
|
||||
GtkWidget *edit_button;
|
||||
GtkWidget *delete_button;
|
||||
GtkWidget *new_button;
|
||||
GtkWidget *raise_button;
|
||||
GtkWidget *lower_button;
|
||||
GtkWidget *duplicate_button;
|
||||
GtkWidget *edit_button;
|
||||
GtkWidget *delete_button;
|
||||
};
|
||||
|
||||
struct _GimpDrawableListViewClass
|
||||
|
@ -69,12 +84,16 @@ struct _GimpDrawableListViewClass
|
|||
|
||||
GtkType gimp_drawable_list_view_get_type (void);
|
||||
|
||||
GtkWidget * gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func);
|
||||
GtkWidget * gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func,
|
||||
GimpReorderDrawableFunc reorder_drawable_func,
|
||||
GimpAddDrawableFunc add_drawable_func,
|
||||
GimpRemoveDrawableFunc remove_drawable_func,
|
||||
GimpCopyDrawableFunc copy_drawable_func);
|
||||
|
||||
void gimp_drawable_list_view_set_image (GimpDrawableListView *view,
|
||||
GimpImage *gimage);
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "apptypes.h"
|
||||
|
||||
#include "gdisplay.h"
|
||||
#include "gimpcontainer.h"
|
||||
#include "gimpdrawable.h"
|
||||
#include "gimpdrawablelistview.h"
|
||||
|
@ -59,6 +60,8 @@ static void gimp_drawable_list_view_activate_item (GimpContainerView *v
|
|||
GimpViewable *item,
|
||||
gpointer insert_data);
|
||||
|
||||
static void gimp_drawable_list_view_new_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_new_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_new_dropped (GtkWidget *widget,
|
||||
|
@ -68,16 +71,22 @@ static void gimp_drawable_list_view_raise_clicked (GtkWidget *w
|
|||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_lower_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_duplicate_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_duplicate_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_duplicate_dropped (GtkWidget *widget,
|
||||
GimpViewable *viewable,
|
||||
gpointer drawable);
|
||||
static void gimp_drawable_list_view_edit_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_edit_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_edit_dropped (GtkWidget *widget,
|
||||
GimpViewable *viewable,
|
||||
gpointer drawable);
|
||||
static void gimp_drawable_list_view_delete_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_delete_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_delete_dropped (GtkWidget *widget,
|
||||
|
@ -251,10 +260,12 @@ gimp_drawable_list_view_init (GimpDrawableListView *view)
|
|||
gtk_container_add (GTK_CONTAINER (view->delete_button), pixmap);
|
||||
gtk_widget_show (pixmap);
|
||||
|
||||
gtk_widget_set_sensitive (view->raise_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->lower_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->new_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->raise_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->lower_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->duplicate_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->delete_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->edit_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->delete_button, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -290,12 +301,16 @@ gimp_drawable_list_view_insert_item (GimpContainerView *view,
|
|||
}
|
||||
|
||||
GtkWidget *
|
||||
gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func)
|
||||
gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func,
|
||||
GimpReorderDrawableFunc reorder_drawable_func,
|
||||
GimpAddDrawableFunc add_drawable_func,
|
||||
GimpRemoveDrawableFunc remove_drawable_func,
|
||||
GimpCopyDrawableFunc copy_drawable_func)
|
||||
{
|
||||
GimpDrawableListView *list_view;
|
||||
GimpContainerView *view;
|
||||
|
@ -305,6 +320,10 @@ gimp_drawable_list_view_new (GimpImage *gimage,
|
|||
g_return_val_if_fail (get_container_func != NULL, NULL);
|
||||
g_return_val_if_fail (get_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (get_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (reorder_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (add_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (remove_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (copy_drawable_func != NULL, NULL);
|
||||
|
||||
list_view = gtk_type_new (GIMP_TYPE_DRAWABLE_LIST_VIEW);
|
||||
|
||||
|
@ -312,11 +331,15 @@ gimp_drawable_list_view_new (GimpImage *gimage,
|
|||
|
||||
view->preview_size = preview_size;
|
||||
|
||||
list_view->drawable_type = drawable_type;
|
||||
list_view->signal_name = g_strdup (signal_name);
|
||||
list_view->get_container_func = get_container_func;
|
||||
list_view->get_drawable_func = get_drawable_func;
|
||||
list_view->set_drawable_func = set_drawable_func;
|
||||
list_view->drawable_type = drawable_type;
|
||||
list_view->signal_name = g_strdup (signal_name);
|
||||
list_view->get_container_func = get_container_func;
|
||||
list_view->get_drawable_func = get_drawable_func;
|
||||
list_view->set_drawable_func = set_drawable_func;
|
||||
list_view->reorder_drawable_func = reorder_drawable_func;
|
||||
list_view->add_drawable_func = add_drawable_func;
|
||||
list_view->remove_drawable_func = remove_drawable_func;
|
||||
list_view->copy_drawable_func = copy_drawable_func;
|
||||
|
||||
/* drop to "new" */
|
||||
gimp_gtk_drag_dest_set_by_type (GTK_WIDGET (list_view->new_button),
|
||||
|
@ -398,6 +421,8 @@ gimp_drawable_list_view_set_image (GimpDrawableListView *view,
|
|||
GTK_SIGNAL_FUNC (gimp_drawable_list_view_drawable_changed),
|
||||
view);
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (view->new_button, (view->gimage != NULL));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -405,12 +430,57 @@ gimp_drawable_list_view_select_item (GimpContainerView *view,
|
|||
GimpViewable *item,
|
||||
gpointer insert_data)
|
||||
{
|
||||
GimpDrawableListView *list_view;
|
||||
gboolean raise_sensitive = FALSE;
|
||||
gboolean lower_sensitive = FALSE;
|
||||
gboolean duplicate_sensitive = FALSE;
|
||||
gboolean edit_sensitive = FALSE;
|
||||
gboolean delete_sensitive = FALSE;
|
||||
|
||||
list_view = GIMP_DRAWABLE_LIST_VIEW (view);
|
||||
|
||||
if (GIMP_CONTAINER_VIEW_CLASS (parent_class)->select_item)
|
||||
GIMP_CONTAINER_VIEW_CLASS (parent_class)->select_item (view,
|
||||
item,
|
||||
insert_data);
|
||||
|
||||
g_print ("select item\n");
|
||||
if (item)
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
drawable = list_view->get_drawable_func (list_view->gimage);
|
||||
|
||||
if (drawable != GIMP_DRAWABLE (item))
|
||||
{
|
||||
list_view->set_drawable_func (list_view->gimage,
|
||||
GIMP_DRAWABLE (item));
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
index = gimp_container_get_child_index (view->container,
|
||||
GIMP_OBJECT (item));
|
||||
|
||||
if (view->container->num_children > 1)
|
||||
{
|
||||
if (index > 0)
|
||||
raise_sensitive = TRUE;
|
||||
|
||||
if (index < (view->container->num_children - 1))
|
||||
lower_sensitive = TRUE;
|
||||
}
|
||||
|
||||
duplicate_sensitive = TRUE;
|
||||
edit_sensitive = TRUE;
|
||||
delete_sensitive = TRUE;
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (list_view->raise_button, raise_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->lower_button, lower_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->duplicate_button, duplicate_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->edit_button, edit_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->delete_button, delete_sensitive);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -423,14 +493,25 @@ gimp_drawable_list_view_activate_item (GimpContainerView *view,
|
|||
item,
|
||||
insert_data);
|
||||
|
||||
g_print ("activate item\n");
|
||||
gimp_drawable_list_view_edit_drawable (GIMP_DRAWABLE_LIST_VIEW (view),
|
||||
GIMP_DRAWABLE (item));
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_new_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
if (drawable)
|
||||
g_print ("new with \"%s\"'s properties\n", GIMP_OBJECT (drawable)->name);
|
||||
else
|
||||
g_print ("new default\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_new_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("new clicked\n");
|
||||
gimp_drawable_list_view_new_drawable (view, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -442,19 +523,34 @@ gimp_drawable_list_view_new_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("new dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_new_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_duplicate_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
GimpDrawable *new_drawable;
|
||||
|
||||
new_drawable = view->copy_drawable_func (drawable, TRUE);
|
||||
view->add_drawable_func (view->gimage, new_drawable, -1);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_duplicate_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("duplicate clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_duplicate_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -466,12 +562,11 @@ gimp_drawable_list_view_duplicate_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("duplicate dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_duplicate_clicked (NULL, data);
|
||||
gimp_drawable_list_view_duplicate_drawable (view,
|
||||
GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -479,21 +574,60 @@ static void
|
|||
gimp_drawable_list_view_raise_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("raise clicked\n");
|
||||
GimpContainer *container;
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
container = GIMP_CONTAINER_VIEW (view)->container;
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
index = gimp_container_get_child_index (container, GIMP_OBJECT (drawable));
|
||||
|
||||
if (index > 0)
|
||||
{
|
||||
view->reorder_drawable_func (view->gimage, drawable, index - 1, TRUE);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_lower_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("lower clicked\n");
|
||||
GimpContainer *container;
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
container = GIMP_CONTAINER_VIEW (view)->container;
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
index = gimp_container_get_child_index (container, GIMP_OBJECT (drawable));
|
||||
|
||||
if (index < container->num_children - 1)
|
||||
{
|
||||
view->reorder_drawable_func (view->gimage, drawable, index + 1, TRUE);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_edit_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
g_print ("edit \"%s\"\n", GIMP_OBJECT (drawable)->name);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_edit_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("edit clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_edit_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -505,20 +639,31 @@ gimp_drawable_list_view_edit_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("edit dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_edit_clicked (NULL, data);
|
||||
gimp_drawable_list_view_edit_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_delete_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
view->remove_drawable_func (view->gimage, drawable);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_delete_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("delete clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_delete_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -530,12 +675,10 @@ gimp_drawable_list_view_delete_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("delete dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_delete_clicked (NULL, data);
|
||||
gimp_drawable_list_view_delete_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,10 +23,21 @@
|
|||
#include "gimpcontainerlistview.h"
|
||||
|
||||
|
||||
typedef GimpContainer * (* GimpGetContainerFunc) (const GimpImage *gimage);
|
||||
typedef GimpDrawable * (* GimpGetDrawableFunc) (const GimpImage *gimage);
|
||||
typedef void (* GimpSetDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef GimpContainer * (* GimpGetContainerFunc) (const GimpImage *gimage);
|
||||
typedef GimpDrawable * (* GimpGetDrawableFunc) (const GimpImage *gimage);
|
||||
typedef void (* GimpSetDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef void (* GimpReorderDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable,
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
typedef void (* GimpAddDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable,
|
||||
gint index);
|
||||
typedef void (* GimpRemoveDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef GimpDrawable * (* GimpCopyDrawableFunc) (GimpDrawable *drawable,
|
||||
gboolean add_alpha);
|
||||
|
||||
|
||||
#define GIMP_TYPE_DRAWABLE_LIST_VIEW (gimp_drawable_list_view_get_type ())
|
||||
|
@ -40,25 +51,29 @@ typedef struct _GimpDrawableListViewClass GimpDrawableListViewClass;
|
|||
|
||||
struct _GimpDrawableListView
|
||||
{
|
||||
GimpContainerListView parent_instance;
|
||||
GimpContainerListView parent_instance;
|
||||
|
||||
GimpImage *gimage;
|
||||
GimpImage *gimage;
|
||||
|
||||
GtkType drawable_type;
|
||||
gchar *signal_name;
|
||||
GtkType drawable_type;
|
||||
gchar *signal_name;
|
||||
|
||||
GimpGetContainerFunc get_container_func;
|
||||
GimpGetDrawableFunc get_drawable_func;
|
||||
GimpSetDrawableFunc set_drawable_func;
|
||||
GimpGetContainerFunc get_container_func;
|
||||
GimpGetDrawableFunc get_drawable_func;
|
||||
GimpSetDrawableFunc set_drawable_func;
|
||||
GimpReorderDrawableFunc reorder_drawable_func;
|
||||
GimpAddDrawableFunc add_drawable_func;
|
||||
GimpRemoveDrawableFunc remove_drawable_func;
|
||||
GimpCopyDrawableFunc copy_drawable_func;
|
||||
|
||||
GtkWidget *button_box;
|
||||
GtkWidget *button_box;
|
||||
|
||||
GtkWidget *new_button;
|
||||
GtkWidget *raise_button;
|
||||
GtkWidget *lower_button;
|
||||
GtkWidget *duplicate_button;
|
||||
GtkWidget *edit_button;
|
||||
GtkWidget *delete_button;
|
||||
GtkWidget *new_button;
|
||||
GtkWidget *raise_button;
|
||||
GtkWidget *lower_button;
|
||||
GtkWidget *duplicate_button;
|
||||
GtkWidget *edit_button;
|
||||
GtkWidget *delete_button;
|
||||
};
|
||||
|
||||
struct _GimpDrawableListViewClass
|
||||
|
@ -69,12 +84,16 @@ struct _GimpDrawableListViewClass
|
|||
|
||||
GtkType gimp_drawable_list_view_get_type (void);
|
||||
|
||||
GtkWidget * gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func);
|
||||
GtkWidget * gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func,
|
||||
GimpReorderDrawableFunc reorder_drawable_func,
|
||||
GimpAddDrawableFunc add_drawable_func,
|
||||
GimpRemoveDrawableFunc remove_drawable_func,
|
||||
GimpCopyDrawableFunc copy_drawable_func);
|
||||
|
||||
void gimp_drawable_list_view_set_image (GimpDrawableListView *view,
|
||||
GimpImage *gimage);
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "apptypes.h"
|
||||
|
||||
#include "gdisplay.h"
|
||||
#include "gimpcontainer.h"
|
||||
#include "gimpdrawable.h"
|
||||
#include "gimpdrawablelistview.h"
|
||||
|
@ -59,6 +60,8 @@ static void gimp_drawable_list_view_activate_item (GimpContainerView *v
|
|||
GimpViewable *item,
|
||||
gpointer insert_data);
|
||||
|
||||
static void gimp_drawable_list_view_new_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_new_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_new_dropped (GtkWidget *widget,
|
||||
|
@ -68,16 +71,22 @@ static void gimp_drawable_list_view_raise_clicked (GtkWidget *w
|
|||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_lower_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_duplicate_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_duplicate_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_duplicate_dropped (GtkWidget *widget,
|
||||
GimpViewable *viewable,
|
||||
gpointer drawable);
|
||||
static void gimp_drawable_list_view_edit_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_edit_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_edit_dropped (GtkWidget *widget,
|
||||
GimpViewable *viewable,
|
||||
gpointer drawable);
|
||||
static void gimp_drawable_list_view_delete_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable);
|
||||
static void gimp_drawable_list_view_delete_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view);
|
||||
static void gimp_drawable_list_view_delete_dropped (GtkWidget *widget,
|
||||
|
@ -251,10 +260,12 @@ gimp_drawable_list_view_init (GimpDrawableListView *view)
|
|||
gtk_container_add (GTK_CONTAINER (view->delete_button), pixmap);
|
||||
gtk_widget_show (pixmap);
|
||||
|
||||
gtk_widget_set_sensitive (view->raise_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->lower_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->new_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->raise_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->lower_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->duplicate_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->delete_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->edit_button, FALSE);
|
||||
gtk_widget_set_sensitive (view->delete_button, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -290,12 +301,16 @@ gimp_drawable_list_view_insert_item (GimpContainerView *view,
|
|||
}
|
||||
|
||||
GtkWidget *
|
||||
gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func)
|
||||
gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func,
|
||||
GimpReorderDrawableFunc reorder_drawable_func,
|
||||
GimpAddDrawableFunc add_drawable_func,
|
||||
GimpRemoveDrawableFunc remove_drawable_func,
|
||||
GimpCopyDrawableFunc copy_drawable_func)
|
||||
{
|
||||
GimpDrawableListView *list_view;
|
||||
GimpContainerView *view;
|
||||
|
@ -305,6 +320,10 @@ gimp_drawable_list_view_new (GimpImage *gimage,
|
|||
g_return_val_if_fail (get_container_func != NULL, NULL);
|
||||
g_return_val_if_fail (get_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (get_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (reorder_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (add_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (remove_drawable_func != NULL, NULL);
|
||||
g_return_val_if_fail (copy_drawable_func != NULL, NULL);
|
||||
|
||||
list_view = gtk_type_new (GIMP_TYPE_DRAWABLE_LIST_VIEW);
|
||||
|
||||
|
@ -312,11 +331,15 @@ gimp_drawable_list_view_new (GimpImage *gimage,
|
|||
|
||||
view->preview_size = preview_size;
|
||||
|
||||
list_view->drawable_type = drawable_type;
|
||||
list_view->signal_name = g_strdup (signal_name);
|
||||
list_view->get_container_func = get_container_func;
|
||||
list_view->get_drawable_func = get_drawable_func;
|
||||
list_view->set_drawable_func = set_drawable_func;
|
||||
list_view->drawable_type = drawable_type;
|
||||
list_view->signal_name = g_strdup (signal_name);
|
||||
list_view->get_container_func = get_container_func;
|
||||
list_view->get_drawable_func = get_drawable_func;
|
||||
list_view->set_drawable_func = set_drawable_func;
|
||||
list_view->reorder_drawable_func = reorder_drawable_func;
|
||||
list_view->add_drawable_func = add_drawable_func;
|
||||
list_view->remove_drawable_func = remove_drawable_func;
|
||||
list_view->copy_drawable_func = copy_drawable_func;
|
||||
|
||||
/* drop to "new" */
|
||||
gimp_gtk_drag_dest_set_by_type (GTK_WIDGET (list_view->new_button),
|
||||
|
@ -398,6 +421,8 @@ gimp_drawable_list_view_set_image (GimpDrawableListView *view,
|
|||
GTK_SIGNAL_FUNC (gimp_drawable_list_view_drawable_changed),
|
||||
view);
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (view->new_button, (view->gimage != NULL));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -405,12 +430,57 @@ gimp_drawable_list_view_select_item (GimpContainerView *view,
|
|||
GimpViewable *item,
|
||||
gpointer insert_data)
|
||||
{
|
||||
GimpDrawableListView *list_view;
|
||||
gboolean raise_sensitive = FALSE;
|
||||
gboolean lower_sensitive = FALSE;
|
||||
gboolean duplicate_sensitive = FALSE;
|
||||
gboolean edit_sensitive = FALSE;
|
||||
gboolean delete_sensitive = FALSE;
|
||||
|
||||
list_view = GIMP_DRAWABLE_LIST_VIEW (view);
|
||||
|
||||
if (GIMP_CONTAINER_VIEW_CLASS (parent_class)->select_item)
|
||||
GIMP_CONTAINER_VIEW_CLASS (parent_class)->select_item (view,
|
||||
item,
|
||||
insert_data);
|
||||
|
||||
g_print ("select item\n");
|
||||
if (item)
|
||||
{
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
drawable = list_view->get_drawable_func (list_view->gimage);
|
||||
|
||||
if (drawable != GIMP_DRAWABLE (item))
|
||||
{
|
||||
list_view->set_drawable_func (list_view->gimage,
|
||||
GIMP_DRAWABLE (item));
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
index = gimp_container_get_child_index (view->container,
|
||||
GIMP_OBJECT (item));
|
||||
|
||||
if (view->container->num_children > 1)
|
||||
{
|
||||
if (index > 0)
|
||||
raise_sensitive = TRUE;
|
||||
|
||||
if (index < (view->container->num_children - 1))
|
||||
lower_sensitive = TRUE;
|
||||
}
|
||||
|
||||
duplicate_sensitive = TRUE;
|
||||
edit_sensitive = TRUE;
|
||||
delete_sensitive = TRUE;
|
||||
}
|
||||
|
||||
gtk_widget_set_sensitive (list_view->raise_button, raise_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->lower_button, lower_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->duplicate_button, duplicate_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->edit_button, edit_sensitive);
|
||||
gtk_widget_set_sensitive (list_view->delete_button, delete_sensitive);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -423,14 +493,25 @@ gimp_drawable_list_view_activate_item (GimpContainerView *view,
|
|||
item,
|
||||
insert_data);
|
||||
|
||||
g_print ("activate item\n");
|
||||
gimp_drawable_list_view_edit_drawable (GIMP_DRAWABLE_LIST_VIEW (view),
|
||||
GIMP_DRAWABLE (item));
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_new_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
if (drawable)
|
||||
g_print ("new with \"%s\"'s properties\n", GIMP_OBJECT (drawable)->name);
|
||||
else
|
||||
g_print ("new default\n");
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_new_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("new clicked\n");
|
||||
gimp_drawable_list_view_new_drawable (view, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -442,19 +523,34 @@ gimp_drawable_list_view_new_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("new dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_new_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_duplicate_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
GimpDrawable *new_drawable;
|
||||
|
||||
new_drawable = view->copy_drawable_func (drawable, TRUE);
|
||||
view->add_drawable_func (view->gimage, new_drawable, -1);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_duplicate_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("duplicate clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_duplicate_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -466,12 +562,11 @@ gimp_drawable_list_view_duplicate_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("duplicate dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_duplicate_clicked (NULL, data);
|
||||
gimp_drawable_list_view_duplicate_drawable (view,
|
||||
GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -479,21 +574,60 @@ static void
|
|||
gimp_drawable_list_view_raise_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("raise clicked\n");
|
||||
GimpContainer *container;
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
container = GIMP_CONTAINER_VIEW (view)->container;
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
index = gimp_container_get_child_index (container, GIMP_OBJECT (drawable));
|
||||
|
||||
if (index > 0)
|
||||
{
|
||||
view->reorder_drawable_func (view->gimage, drawable, index - 1, TRUE);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_lower_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("lower clicked\n");
|
||||
GimpContainer *container;
|
||||
GimpDrawable *drawable;
|
||||
gint index;
|
||||
|
||||
container = GIMP_CONTAINER_VIEW (view)->container;
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
index = gimp_container_get_child_index (container, GIMP_OBJECT (drawable));
|
||||
|
||||
if (index < container->num_children - 1)
|
||||
{
|
||||
view->reorder_drawable_func (view->gimage, drawable, index + 1, TRUE);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_edit_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
g_print ("edit \"%s\"\n", GIMP_OBJECT (drawable)->name);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_edit_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("edit clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_edit_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -505,20 +639,31 @@ gimp_drawable_list_view_edit_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("edit dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_edit_clicked (NULL, data);
|
||||
gimp_drawable_list_view_edit_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_delete_drawable (GimpDrawableListView *view,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
view->remove_drawable_func (view->gimage, drawable);
|
||||
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_drawable_list_view_delete_clicked (GtkWidget *widget,
|
||||
GimpDrawableListView *view)
|
||||
{
|
||||
g_print ("delete clicked\n");
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = view->get_drawable_func (view->gimage);
|
||||
|
||||
gimp_drawable_list_view_delete_drawable (view, drawable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -530,12 +675,10 @@ gimp_drawable_list_view_delete_dropped (GtkWidget *widget,
|
|||
|
||||
view = (GimpDrawableListView *) data;
|
||||
|
||||
g_print ("delete dropped\n");
|
||||
|
||||
if (viewable && gimp_container_have (GIMP_CONTAINER_VIEW (view)->container,
|
||||
GIMP_OBJECT (viewable)))
|
||||
{
|
||||
gimp_drawable_list_view_delete_clicked (NULL, data);
|
||||
gimp_drawable_list_view_delete_drawable (view, GIMP_DRAWABLE (viewable));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,10 +23,21 @@
|
|||
#include "gimpcontainerlistview.h"
|
||||
|
||||
|
||||
typedef GimpContainer * (* GimpGetContainerFunc) (const GimpImage *gimage);
|
||||
typedef GimpDrawable * (* GimpGetDrawableFunc) (const GimpImage *gimage);
|
||||
typedef void (* GimpSetDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef GimpContainer * (* GimpGetContainerFunc) (const GimpImage *gimage);
|
||||
typedef GimpDrawable * (* GimpGetDrawableFunc) (const GimpImage *gimage);
|
||||
typedef void (* GimpSetDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef void (* GimpReorderDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable,
|
||||
gint new_index,
|
||||
gboolean push_undo);
|
||||
typedef void (* GimpAddDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable,
|
||||
gint index);
|
||||
typedef void (* GimpRemoveDrawableFunc) (GimpImage *gimage,
|
||||
GimpDrawable *drawable);
|
||||
typedef GimpDrawable * (* GimpCopyDrawableFunc) (GimpDrawable *drawable,
|
||||
gboolean add_alpha);
|
||||
|
||||
|
||||
#define GIMP_TYPE_DRAWABLE_LIST_VIEW (gimp_drawable_list_view_get_type ())
|
||||
|
@ -40,25 +51,29 @@ typedef struct _GimpDrawableListViewClass GimpDrawableListViewClass;
|
|||
|
||||
struct _GimpDrawableListView
|
||||
{
|
||||
GimpContainerListView parent_instance;
|
||||
GimpContainerListView parent_instance;
|
||||
|
||||
GimpImage *gimage;
|
||||
GimpImage *gimage;
|
||||
|
||||
GtkType drawable_type;
|
||||
gchar *signal_name;
|
||||
GtkType drawable_type;
|
||||
gchar *signal_name;
|
||||
|
||||
GimpGetContainerFunc get_container_func;
|
||||
GimpGetDrawableFunc get_drawable_func;
|
||||
GimpSetDrawableFunc set_drawable_func;
|
||||
GimpGetContainerFunc get_container_func;
|
||||
GimpGetDrawableFunc get_drawable_func;
|
||||
GimpSetDrawableFunc set_drawable_func;
|
||||
GimpReorderDrawableFunc reorder_drawable_func;
|
||||
GimpAddDrawableFunc add_drawable_func;
|
||||
GimpRemoveDrawableFunc remove_drawable_func;
|
||||
GimpCopyDrawableFunc copy_drawable_func;
|
||||
|
||||
GtkWidget *button_box;
|
||||
GtkWidget *button_box;
|
||||
|
||||
GtkWidget *new_button;
|
||||
GtkWidget *raise_button;
|
||||
GtkWidget *lower_button;
|
||||
GtkWidget *duplicate_button;
|
||||
GtkWidget *edit_button;
|
||||
GtkWidget *delete_button;
|
||||
GtkWidget *new_button;
|
||||
GtkWidget *raise_button;
|
||||
GtkWidget *lower_button;
|
||||
GtkWidget *duplicate_button;
|
||||
GtkWidget *edit_button;
|
||||
GtkWidget *delete_button;
|
||||
};
|
||||
|
||||
struct _GimpDrawableListViewClass
|
||||
|
@ -69,12 +84,16 @@ struct _GimpDrawableListViewClass
|
|||
|
||||
GtkType gimp_drawable_list_view_get_type (void);
|
||||
|
||||
GtkWidget * gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func);
|
||||
GtkWidget * gimp_drawable_list_view_new (GimpImage *gimage,
|
||||
GtkType drawable_type,
|
||||
const gchar *signal_name,
|
||||
GimpGetContainerFunc get_container_func,
|
||||
GimpGetDrawableFunc get_drawable_func,
|
||||
GimpSetDrawableFunc set_drawable_func,
|
||||
GimpReorderDrawableFunc reorder_drawable_func,
|
||||
GimpAddDrawableFunc add_drawable_func,
|
||||
GimpRemoveDrawableFunc remove_drawable_func,
|
||||
GimpCopyDrawableFunc copy_drawable_func);
|
||||
|
||||
void gimp_drawable_list_view_set_image (GimpDrawableListView *view,
|
||||
GimpImage *gimage);
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include "gimplayerlistitem.h"
|
||||
#include "gimpimage.h"
|
||||
#include "gimplayer.h"
|
||||
#include "gimplayermask.h"
|
||||
#include "gimppreview.h"
|
||||
#include "gimpviewable.h"
|
||||
|
||||
|
@ -55,8 +56,12 @@ static gboolean gimp_layer_list_item_drag_drop (GtkWidget *widget,
|
|||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
static void gimp_layer_list_item_state_changed (GtkWidget *widget,
|
||||
GtkStateType old_state);
|
||||
|
||||
static void gimp_layer_list_item_mask_changed (GimpLayer *layer,
|
||||
GimpLayerListItem *layer_item);
|
||||
static void gimp_layer_list_item_update_state (GtkWidget *widget);
|
||||
|
||||
|
||||
static GimpDrawableListItemClass *parent_class = NULL;
|
||||
|
@ -103,6 +108,7 @@ gimp_layer_list_item_class_init (GimpLayerListItemClass *klass)
|
|||
|
||||
widget_class->drag_motion = gimp_layer_list_item_drag_motion;
|
||||
widget_class->drag_drop = gimp_layer_list_item_drag_drop;
|
||||
widget_class->state_changed = gimp_layer_list_item_state_changed;
|
||||
|
||||
list_item_class->set_viewable = gimp_layer_list_item_set_viewable;
|
||||
}
|
||||
|
@ -123,6 +129,9 @@ gimp_layer_list_item_set_viewable (GimpListItem *list_item,
|
|||
if (GIMP_LIST_ITEM_CLASS (parent_class)->set_viewable)
|
||||
GIMP_LIST_ITEM_CLASS (parent_class)->set_viewable (list_item, viewable);
|
||||
|
||||
gimp_preview_set_size (GIMP_PREVIEW (list_item->preview),
|
||||
list_item->preview_size, 2);
|
||||
|
||||
layer_item = GIMP_LAYER_LIST_ITEM (list_item);
|
||||
layer = GIMP_LAYER (GIMP_PREVIEW (list_item->preview)->viewable);
|
||||
|
||||
|
@ -225,6 +234,16 @@ gimp_layer_list_item_drag_drop (GtkWidget *widget,
|
|||
return return_val;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_layer_list_item_state_changed (GtkWidget *widget,
|
||||
GtkStateType old_state)
|
||||
{
|
||||
if (GTK_WIDGET_CLASS (parent_class)->state_changed)
|
||||
GTK_WIDGET_CLASS (parent_class)->state_changed (widget, old_state);
|
||||
|
||||
gimp_layer_list_item_update_state (widget);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_layer_list_item_mask_changed (GimpLayer *layer,
|
||||
GimpLayerListItem *layer_item)
|
||||
|
@ -239,18 +258,104 @@ gimp_layer_list_item_mask_changed (GimpLayer *layer,
|
|||
{
|
||||
layer_item->mask_preview = gimp_preview_new (GIMP_VIEWABLE (mask),
|
||||
list_item->preview_size,
|
||||
1, FALSE);
|
||||
2, FALSE);
|
||||
GIMP_PREVIEW (layer_item->mask_preview)->clickable = TRUE;
|
||||
gtk_box_pack_start (GTK_BOX (list_item->hbox), layer_item->mask_preview,
|
||||
FALSE, FALSE, 0);
|
||||
gtk_box_reorder_child (GTK_BOX (list_item->hbox),
|
||||
layer_item->mask_preview, 2);
|
||||
gtk_widget_show (layer_item->mask_preview);
|
||||
|
||||
gtk_signal_connect_object
|
||||
(GTK_OBJECT (mask), "apply_changed",
|
||||
GTK_SIGNAL_FUNC (gimp_layer_list_item_update_state),
|
||||
GTK_OBJECT (layer_item));
|
||||
|
||||
gtk_signal_connect_object_while_alive
|
||||
(GTK_OBJECT (mask), "edit_changed",
|
||||
GTK_SIGNAL_FUNC (gimp_layer_list_item_update_state),
|
||||
GTK_OBJECT (layer_item));
|
||||
|
||||
gtk_signal_connect_object_while_alive
|
||||
(GTK_OBJECT (mask), "show_changed",
|
||||
GTK_SIGNAL_FUNC (gimp_layer_list_item_update_state),
|
||||
GTK_OBJECT (layer_item));
|
||||
}
|
||||
else if (! mask && layer_item->mask_preview)
|
||||
{
|
||||
gtk_widget_destroy (layer_item->mask_preview);
|
||||
|
||||
layer_item->mask_preview = NULL;
|
||||
}
|
||||
|
||||
gimp_layer_list_item_update_state (GTK_WIDGET (layer_item));
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_layer_list_item_update_state (GtkWidget *widget)
|
||||
{
|
||||
GimpLayerListItem *layer_item;
|
||||
GimpListItem *list_item;
|
||||
GimpLayer *layer;
|
||||
GimpLayerMask *mask;
|
||||
GimpPreview *preview;
|
||||
guchar layer_color[3] = { 0, 0, 0 };
|
||||
guchar mask_color[3] = { 0, 0, 0 };
|
||||
|
||||
layer_item = GIMP_LAYER_LIST_ITEM (widget);
|
||||
list_item = GIMP_LIST_ITEM (widget);
|
||||
layer = GIMP_LAYER (GIMP_PREVIEW (list_item->preview)->viewable);
|
||||
mask = gimp_layer_get_mask (layer);
|
||||
|
||||
switch (widget->state)
|
||||
{
|
||||
case GTK_STATE_NORMAL:
|
||||
break;
|
||||
|
||||
case GTK_STATE_SELECTED:
|
||||
if (! mask || (mask && ! gimp_layer_mask_get_edit (mask)))
|
||||
{
|
||||
layer_color[0] = 255;
|
||||
layer_color[1] = 255;
|
||||
layer_color[2] = 255;
|
||||
}
|
||||
else
|
||||
{
|
||||
mask_color[0] = 255;
|
||||
mask_color[1] = 255;
|
||||
mask_color[2] = 255;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
g_print ("%s(): unhandled state\n", G_GNUC_FUNCTION);
|
||||
}
|
||||
|
||||
preview = GIMP_PREVIEW (list_item->preview);
|
||||
|
||||
if (preview->border_color[0] != layer_color[0] ||
|
||||
preview->border_color[1] != layer_color[1] ||
|
||||
preview->border_color[2] != layer_color[2])
|
||||
{
|
||||
preview->border_color[0] = layer_color[0];
|
||||
preview->border_color[1] = layer_color[1];
|
||||
preview->border_color[2] = layer_color[2];
|
||||
|
||||
gimp_preview_render (preview);
|
||||
}
|
||||
|
||||
if (mask)
|
||||
{
|
||||
preview = GIMP_PREVIEW (layer_item->mask_preview);
|
||||
|
||||
if (preview->border_color[0] != mask_color[0] ||
|
||||
preview->border_color[1] != mask_color[1] ||
|
||||
preview->border_color[2] != mask_color[2])
|
||||
{
|
||||
preview->border_color[0] = mask_color[0];
|
||||
preview->border_color[1] = mask_color[1];
|
||||
preview->border_color[2] = mask_color[2];
|
||||
|
||||
gimp_preview_render (preview);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -137,7 +137,7 @@ gimp_list_item_class_init (GimpListItemClass *klass)
|
|||
static void
|
||||
gimp_list_item_init (GimpListItem *list_item)
|
||||
{
|
||||
list_item->hbox = gtk_hbox_new (FALSE, 8);
|
||||
list_item->hbox = gtk_hbox_new (FALSE, 6);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (list_item->hbox), 2);
|
||||
gtk_container_add (GTK_CONTAINER (list_item), list_item->hbox);
|
||||
gtk_widget_show (list_item->hbox);
|
||||
|
|
|
@ -411,20 +411,22 @@ gimp_preview_new_full (GimpViewable *viewable,
|
|||
|
||||
void
|
||||
gimp_preview_set_size (GimpPreview *preview,
|
||||
gint preview_size)
|
||||
gint preview_size,
|
||||
gint border_width)
|
||||
{
|
||||
gint width, height;
|
||||
|
||||
g_return_if_fail (preview != NULL);
|
||||
g_return_if_fail (GIMP_IS_PREVIEW (preview));
|
||||
g_return_if_fail (preview_size > 0 && preview_size <= 256);
|
||||
g_return_if_fail (border_width >= 0 && border_width <= 16);
|
||||
|
||||
gimp_preview_get_size (preview, preview_size, &width, &height);
|
||||
|
||||
gimp_preview_set_size_full (preview,
|
||||
width,
|
||||
height,
|
||||
preview->border_width);
|
||||
border_width);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -95,7 +95,8 @@ GtkWidget * gimp_preview_new_full (GimpViewable *viewable,
|
|||
gboolean show_popup);
|
||||
|
||||
void gimp_preview_set_size (GimpPreview *preview,
|
||||
gint size);
|
||||
gint size,
|
||||
gint border_width);
|
||||
void gimp_preview_set_size_full (GimpPreview *preview,
|
||||
gint width,
|
||||
gint height,
|
||||
|
|
|
@ -411,20 +411,22 @@ gimp_preview_new_full (GimpViewable *viewable,
|
|||
|
||||
void
|
||||
gimp_preview_set_size (GimpPreview *preview,
|
||||
gint preview_size)
|
||||
gint preview_size,
|
||||
gint border_width)
|
||||
{
|
||||
gint width, height;
|
||||
|
||||
g_return_if_fail (preview != NULL);
|
||||
g_return_if_fail (GIMP_IS_PREVIEW (preview));
|
||||
g_return_if_fail (preview_size > 0 && preview_size <= 256);
|
||||
g_return_if_fail (border_width >= 0 && border_width <= 16);
|
||||
|
||||
gimp_preview_get_size (preview, preview_size, &width, &height);
|
||||
|
||||
gimp_preview_set_size_full (preview,
|
||||
width,
|
||||
height,
|
||||
preview->border_width);
|
||||
border_width);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -95,7 +95,8 @@ GtkWidget * gimp_preview_new_full (GimpViewable *viewable,
|
|||
gboolean show_popup);
|
||||
|
||||
void gimp_preview_set_size (GimpPreview *preview,
|
||||
gint size);
|
||||
gint size,
|
||||
gint border_width);
|
||||
void gimp_preview_set_size_full (GimpPreview *preview,
|
||||
gint width,
|
||||
gint height,
|
||||
|
|
|
@ -411,20 +411,22 @@ gimp_preview_new_full (GimpViewable *viewable,
|
|||
|
||||
void
|
||||
gimp_preview_set_size (GimpPreview *preview,
|
||||
gint preview_size)
|
||||
gint preview_size,
|
||||
gint border_width)
|
||||
{
|
||||
gint width, height;
|
||||
|
||||
g_return_if_fail (preview != NULL);
|
||||
g_return_if_fail (GIMP_IS_PREVIEW (preview));
|
||||
g_return_if_fail (preview_size > 0 && preview_size <= 256);
|
||||
g_return_if_fail (border_width >= 0 && border_width <= 16);
|
||||
|
||||
gimp_preview_get_size (preview, preview_size, &width, &height);
|
||||
|
||||
gimp_preview_set_size_full (preview,
|
||||
width,
|
||||
height,
|
||||
preview->border_width);
|
||||
border_width);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -95,7 +95,8 @@ GtkWidget * gimp_preview_new_full (GimpViewable *viewable,
|
|||
gboolean show_popup);
|
||||
|
||||
void gimp_preview_set_size (GimpPreview *preview,
|
||||
gint size);
|
||||
gint size,
|
||||
gint border_width);
|
||||
void gimp_preview_set_size_full (GimpPreview *preview,
|
||||
gint width,
|
||||
gint height,
|
||||
|
|
|
@ -411,20 +411,22 @@ gimp_preview_new_full (GimpViewable *viewable,
|
|||
|
||||
void
|
||||
gimp_preview_set_size (GimpPreview *preview,
|
||||
gint preview_size)
|
||||
gint preview_size,
|
||||
gint border_width)
|
||||
{
|
||||
gint width, height;
|
||||
|
||||
g_return_if_fail (preview != NULL);
|
||||
g_return_if_fail (GIMP_IS_PREVIEW (preview));
|
||||
g_return_if_fail (preview_size > 0 && preview_size <= 256);
|
||||
g_return_if_fail (border_width >= 0 && border_width <= 16);
|
||||
|
||||
gimp_preview_get_size (preview, preview_size, &width, &height);
|
||||
|
||||
gimp_preview_set_size_full (preview,
|
||||
width,
|
||||
height,
|
||||
preview->border_width);
|
||||
border_width);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -95,7 +95,8 @@ GtkWidget * gimp_preview_new_full (GimpViewable *viewable,
|
|||
gboolean show_popup);
|
||||
|
||||
void gimp_preview_set_size (GimpPreview *preview,
|
||||
gint size);
|
||||
gint size,
|
||||
gint border_width);
|
||||
void gimp_preview_set_size_full (GimpPreview *preview,
|
||||
gint width,
|
||||
gint height,
|
||||
|
|
48
app/xcf.c
48
app/xcf.c
|
@ -144,7 +144,10 @@ static gboolean xcf_load_image_props (XcfInfo *info,
|
|||
GImage *gimage);
|
||||
static gboolean xcf_load_layer_props (XcfInfo *info,
|
||||
GImage *gimage,
|
||||
GimpLayer *layer);
|
||||
GimpLayer *layer,
|
||||
gboolean *apply_mask,
|
||||
gboolean *edit_mask,
|
||||
gboolean *show_mask);
|
||||
static gboolean xcf_load_channel_props (XcfInfo *info,
|
||||
GImage *gimage,
|
||||
GimpChannel *channel);
|
||||
|
@ -663,9 +666,20 @@ xcf_save_layer_props (XcfInfo *info,
|
|||
gimp_drawable_get_visible (GIMP_DRAWABLE (layer)));
|
||||
xcf_save_prop (info, PROP_LINKED, layer->linked);
|
||||
xcf_save_prop (info, PROP_PRESERVE_TRANSPARENCY, layer->preserve_trans);
|
||||
xcf_save_prop (info, PROP_APPLY_MASK, layer->apply_mask);
|
||||
xcf_save_prop (info, PROP_EDIT_MASK, layer->edit_mask);
|
||||
xcf_save_prop (info, PROP_SHOW_MASK, layer->show_mask);
|
||||
|
||||
if (layer->mask)
|
||||
{
|
||||
xcf_save_prop (info, PROP_APPLY_MASK, layer->mask->apply_mask);
|
||||
xcf_save_prop (info, PROP_EDIT_MASK, layer->mask->edit_mask);
|
||||
xcf_save_prop (info, PROP_SHOW_MASK, layer->mask->show_mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
xcf_save_prop (info, PROP_APPLY_MASK, FALSE);
|
||||
xcf_save_prop (info, PROP_EDIT_MASK, FALSE);
|
||||
xcf_save_prop (info, PROP_SHOW_MASK, FALSE);
|
||||
}
|
||||
|
||||
xcf_save_prop (info, PROP_OFFSETS,
|
||||
GIMP_DRAWABLE (layer)->offset_x,
|
||||
GIMP_DRAWABLE (layer)->offset_y);
|
||||
|
@ -2046,7 +2060,10 @@ xcf_load_image_props (XcfInfo *info,
|
|||
static gboolean
|
||||
xcf_load_layer_props (XcfInfo *info,
|
||||
GImage *gimage,
|
||||
GimpLayer *layer)
|
||||
GimpLayer *layer,
|
||||
gboolean *apply_mask,
|
||||
gboolean *edit_mask,
|
||||
gboolean *show_mask)
|
||||
{
|
||||
PropType prop_type;
|
||||
guint32 prop_size;
|
||||
|
@ -2086,13 +2103,13 @@ xcf_load_layer_props (XcfInfo *info,
|
|||
info->cp += xcf_read_int32 (info->fp, (guint32*) &layer->preserve_trans, 1);
|
||||
break;
|
||||
case PROP_APPLY_MASK:
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) &layer->apply_mask, 1);
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) apply_mask, 1);
|
||||
break;
|
||||
case PROP_EDIT_MASK:
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) &layer->edit_mask, 1);
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) edit_mask, 1);
|
||||
break;
|
||||
case PROP_SHOW_MASK:
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) &layer->show_mask, 1);
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) show_mask, 1);
|
||||
break;
|
||||
case PROP_OFFSETS:
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) &GIMP_DRAWABLE(layer)->offset_x, 1);
|
||||
|
@ -2282,7 +2299,8 @@ xcf_load_layer (XcfInfo *info,
|
|||
return NULL;
|
||||
|
||||
/* read in the layer properties */
|
||||
if (!xcf_load_layer_props (info, gimage, layer))
|
||||
if (!xcf_load_layer_props (info, gimage, layer,
|
||||
&apply_mask, &edit_mask, &show_mask))
|
||||
goto error;
|
||||
|
||||
/* read the hierarchy and layer mask offsets */
|
||||
|
@ -2307,15 +2325,11 @@ xcf_load_layer (XcfInfo *info,
|
|||
GIMP_DRAWABLE (layer_mask)->offset_x = GIMP_DRAWABLE (layer)->offset_x;
|
||||
GIMP_DRAWABLE (layer_mask)->offset_y = GIMP_DRAWABLE (layer)->offset_y;
|
||||
|
||||
apply_mask = layer->apply_mask;
|
||||
edit_mask = layer->edit_mask;
|
||||
show_mask = layer->show_mask;
|
||||
|
||||
gimp_layer_add_mask (layer, layer_mask, FALSE);
|
||||
|
||||
layer->apply_mask = apply_mask;
|
||||
layer->edit_mask = edit_mask;
|
||||
layer->show_mask = show_mask;
|
||||
layer->mask->apply_mask = apply_mask;
|
||||
layer->mask->edit_mask = edit_mask;
|
||||
layer->mask->show_mask = show_mask;
|
||||
}
|
||||
|
||||
/* attach the floating selection... */
|
||||
|
@ -2329,7 +2343,7 @@ xcf_load_layer (XcfInfo *info,
|
|||
|
||||
return layer;
|
||||
|
||||
error:
|
||||
error:
|
||||
gtk_object_unref (GTK_OBJECT (layer));
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -144,7 +144,10 @@ static gboolean xcf_load_image_props (XcfInfo *info,
|
|||
GImage *gimage);
|
||||
static gboolean xcf_load_layer_props (XcfInfo *info,
|
||||
GImage *gimage,
|
||||
GimpLayer *layer);
|
||||
GimpLayer *layer,
|
||||
gboolean *apply_mask,
|
||||
gboolean *edit_mask,
|
||||
gboolean *show_mask);
|
||||
static gboolean xcf_load_channel_props (XcfInfo *info,
|
||||
GImage *gimage,
|
||||
GimpChannel *channel);
|
||||
|
@ -663,9 +666,20 @@ xcf_save_layer_props (XcfInfo *info,
|
|||
gimp_drawable_get_visible (GIMP_DRAWABLE (layer)));
|
||||
xcf_save_prop (info, PROP_LINKED, layer->linked);
|
||||
xcf_save_prop (info, PROP_PRESERVE_TRANSPARENCY, layer->preserve_trans);
|
||||
xcf_save_prop (info, PROP_APPLY_MASK, layer->apply_mask);
|
||||
xcf_save_prop (info, PROP_EDIT_MASK, layer->edit_mask);
|
||||
xcf_save_prop (info, PROP_SHOW_MASK, layer->show_mask);
|
||||
|
||||
if (layer->mask)
|
||||
{
|
||||
xcf_save_prop (info, PROP_APPLY_MASK, layer->mask->apply_mask);
|
||||
xcf_save_prop (info, PROP_EDIT_MASK, layer->mask->edit_mask);
|
||||
xcf_save_prop (info, PROP_SHOW_MASK, layer->mask->show_mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
xcf_save_prop (info, PROP_APPLY_MASK, FALSE);
|
||||
xcf_save_prop (info, PROP_EDIT_MASK, FALSE);
|
||||
xcf_save_prop (info, PROP_SHOW_MASK, FALSE);
|
||||
}
|
||||
|
||||
xcf_save_prop (info, PROP_OFFSETS,
|
||||
GIMP_DRAWABLE (layer)->offset_x,
|
||||
GIMP_DRAWABLE (layer)->offset_y);
|
||||
|
@ -2046,7 +2060,10 @@ xcf_load_image_props (XcfInfo *info,
|
|||
static gboolean
|
||||
xcf_load_layer_props (XcfInfo *info,
|
||||
GImage *gimage,
|
||||
GimpLayer *layer)
|
||||
GimpLayer *layer,
|
||||
gboolean *apply_mask,
|
||||
gboolean *edit_mask,
|
||||
gboolean *show_mask)
|
||||
{
|
||||
PropType prop_type;
|
||||
guint32 prop_size;
|
||||
|
@ -2086,13 +2103,13 @@ xcf_load_layer_props (XcfInfo *info,
|
|||
info->cp += xcf_read_int32 (info->fp, (guint32*) &layer->preserve_trans, 1);
|
||||
break;
|
||||
case PROP_APPLY_MASK:
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) &layer->apply_mask, 1);
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) apply_mask, 1);
|
||||
break;
|
||||
case PROP_EDIT_MASK:
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) &layer->edit_mask, 1);
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) edit_mask, 1);
|
||||
break;
|
||||
case PROP_SHOW_MASK:
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) &layer->show_mask, 1);
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) show_mask, 1);
|
||||
break;
|
||||
case PROP_OFFSETS:
|
||||
info->cp += xcf_read_int32 (info->fp, (guint32*) &GIMP_DRAWABLE(layer)->offset_x, 1);
|
||||
|
@ -2282,7 +2299,8 @@ xcf_load_layer (XcfInfo *info,
|
|||
return NULL;
|
||||
|
||||
/* read in the layer properties */
|
||||
if (!xcf_load_layer_props (info, gimage, layer))
|
||||
if (!xcf_load_layer_props (info, gimage, layer,
|
||||
&apply_mask, &edit_mask, &show_mask))
|
||||
goto error;
|
||||
|
||||
/* read the hierarchy and layer mask offsets */
|
||||
|
@ -2307,15 +2325,11 @@ xcf_load_layer (XcfInfo *info,
|
|||
GIMP_DRAWABLE (layer_mask)->offset_x = GIMP_DRAWABLE (layer)->offset_x;
|
||||
GIMP_DRAWABLE (layer_mask)->offset_y = GIMP_DRAWABLE (layer)->offset_y;
|
||||
|
||||
apply_mask = layer->apply_mask;
|
||||
edit_mask = layer->edit_mask;
|
||||
show_mask = layer->show_mask;
|
||||
|
||||
gimp_layer_add_mask (layer, layer_mask, FALSE);
|
||||
|
||||
layer->apply_mask = apply_mask;
|
||||
layer->edit_mask = edit_mask;
|
||||
layer->show_mask = show_mask;
|
||||
layer->mask->apply_mask = apply_mask;
|
||||
layer->mask->edit_mask = edit_mask;
|
||||
layer->mask->show_mask = show_mask;
|
||||
}
|
||||
|
||||
/* attach the floating selection... */
|
||||
|
@ -2329,7 +2343,7 @@ xcf_load_layer (XcfInfo *info,
|
|||
|
||||
return layer;
|
||||
|
||||
error:
|
||||
error:
|
||||
gtk_object_unref (GTK_OBJECT (layer));
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -636,207 +636,6 @@ gimp_layer_set_preserve_trans (gint32 layer_ID,
|
|||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_layer_get_apply_mask:
|
||||
* @layer_ID: The layer.
|
||||
*
|
||||
* Get the apply mask setting of the specified layer.
|
||||
*
|
||||
* This procedure returns the specified layer's apply mask setting. If
|
||||
* the value is non-zero, then the layer mask for this layer is
|
||||
* currently being composited with the layer's alpha channel.
|
||||
*
|
||||
* Returns: The layer's apply mask setting.
|
||||
*/
|
||||
gboolean
|
||||
gimp_layer_get_apply_mask (gint32 layer_ID)
|
||||
{
|
||||
GimpParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
gboolean apply_mask = FALSE;
|
||||
|
||||
return_vals = gimp_run_procedure ("gimp_layer_get_apply_mask",
|
||||
&nreturn_vals,
|
||||
GIMP_PDB_LAYER, layer_ID,
|
||||
GIMP_PDB_END);
|
||||
|
||||
if (return_vals[0].data.d_status == GIMP_PDB_SUCCESS)
|
||||
apply_mask = return_vals[1].data.d_int32;
|
||||
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
|
||||
return apply_mask;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_layer_set_apply_mask:
|
||||
* @layer_ID: The layer.
|
||||
* @apply_mask: The new layer's apply mask setting.
|
||||
*
|
||||
* Set the apply mask setting of the specified layer.
|
||||
*
|
||||
* This procedure sets the specified layer's apply mask setting. This
|
||||
* controls whether the layer's mask is currently affecting the alpha
|
||||
* channel. If there is no layer mask, this function will return an
|
||||
* error.
|
||||
*
|
||||
* Returns: TRUE on success.
|
||||
*/
|
||||
gboolean
|
||||
gimp_layer_set_apply_mask (gint32 layer_ID,
|
||||
gboolean apply_mask)
|
||||
{
|
||||
GimpParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
gboolean success = TRUE;
|
||||
|
||||
return_vals = gimp_run_procedure ("gimp_layer_set_apply_mask",
|
||||
&nreturn_vals,
|
||||
GIMP_PDB_LAYER, layer_ID,
|
||||
GIMP_PDB_INT32, apply_mask,
|
||||
GIMP_PDB_END);
|
||||
|
||||
success = return_vals[0].data.d_status == GIMP_PDB_SUCCESS;
|
||||
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_layer_get_show_mask:
|
||||
* @layer_ID: The layer.
|
||||
*
|
||||
* Get the show mask setting of the specified layer.
|
||||
*
|
||||
* This procedure returns the specified layer's show mask setting. If
|
||||
* the value is non-zero, then the layer mask for this layer is
|
||||
* currently being shown instead of the layer.
|
||||
*
|
||||
* Returns: The layer's show mask setting.
|
||||
*/
|
||||
gboolean
|
||||
gimp_layer_get_show_mask (gint32 layer_ID)
|
||||
{
|
||||
GimpParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
gboolean show_mask = FALSE;
|
||||
|
||||
return_vals = gimp_run_procedure ("gimp_layer_get_show_mask",
|
||||
&nreturn_vals,
|
||||
GIMP_PDB_LAYER, layer_ID,
|
||||
GIMP_PDB_END);
|
||||
|
||||
if (return_vals[0].data.d_status == GIMP_PDB_SUCCESS)
|
||||
show_mask = return_vals[1].data.d_int32;
|
||||
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
|
||||
return show_mask;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_layer_set_show_mask:
|
||||
* @layer_ID: The layer.
|
||||
* @show_mask: The new layer's show mask setting.
|
||||
*
|
||||
* Set the show mask setting of the specified layer.
|
||||
*
|
||||
* This procedure sets the specified layer's show mask setting. This
|
||||
* controls whether the layer or it's mask is visible. Non-zero values
|
||||
* indicate that the mask should be visible. If the layer has no mask,
|
||||
* then this function returns an error.
|
||||
*
|
||||
* Returns: TRUE on success.
|
||||
*/
|
||||
gboolean
|
||||
gimp_layer_set_show_mask (gint32 layer_ID,
|
||||
gboolean show_mask)
|
||||
{
|
||||
GimpParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
gboolean success = TRUE;
|
||||
|
||||
return_vals = gimp_run_procedure ("gimp_layer_set_show_mask",
|
||||
&nreturn_vals,
|
||||
GIMP_PDB_LAYER, layer_ID,
|
||||
GIMP_PDB_INT32, show_mask,
|
||||
GIMP_PDB_END);
|
||||
|
||||
success = return_vals[0].data.d_status == GIMP_PDB_SUCCESS;
|
||||
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_layer_get_edit_mask:
|
||||
* @layer_ID: The layer.
|
||||
*
|
||||
* Get the show mask setting of the specified layer.
|
||||
*
|
||||
* This procedure returns the specified layer's show mask setting. If
|
||||
* the value is non-zero, then the layer mask for this layer is
|
||||
* currently active, and not the layer.
|
||||
*
|
||||
* Returns: The layer's show mask setting.
|
||||
*/
|
||||
gboolean
|
||||
gimp_layer_get_edit_mask (gint32 layer_ID)
|
||||
{
|
||||
GimpParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
gboolean edit_mask = FALSE;
|
||||
|
||||
return_vals = gimp_run_procedure ("gimp_layer_get_edit_mask",
|
||||
&nreturn_vals,
|
||||
GIMP_PDB_LAYER, layer_ID,
|
||||
GIMP_PDB_END);
|
||||
|
||||
if (return_vals[0].data.d_status == GIMP_PDB_SUCCESS)
|
||||
edit_mask = return_vals[1].data.d_int32;
|
||||
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
|
||||
return edit_mask;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_layer_set_edit_mask:
|
||||
* @layer_ID: The layer.
|
||||
* @edit_mask: The new layer's show mask setting.
|
||||
*
|
||||
* Set the show mask setting of the specified layer.
|
||||
*
|
||||
* This procedure sets the specified layer's show mask setting. This
|
||||
* controls whether the layer or it's mask is currently active for
|
||||
* editing. If the specified layer has no layer mask, then this
|
||||
* procedure will return an error.
|
||||
*
|
||||
* Returns: TRUE on success.
|
||||
*/
|
||||
gboolean
|
||||
gimp_layer_set_edit_mask (gint32 layer_ID,
|
||||
gboolean edit_mask)
|
||||
{
|
||||
GimpParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
gboolean success = TRUE;
|
||||
|
||||
return_vals = gimp_run_procedure ("gimp_layer_set_edit_mask",
|
||||
&nreturn_vals,
|
||||
GIMP_PDB_LAYER, layer_ID,
|
||||
GIMP_PDB_INT32, edit_mask,
|
||||
GIMP_PDB_END);
|
||||
|
||||
success = return_vals[0].data.d_status == GIMP_PDB_SUCCESS;
|
||||
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_layer_get_opacity:
|
||||
* @layer_ID: The layer.
|
||||
|
|
|
@ -70,15 +70,6 @@ gboolean gimp_layer_set_visible (gint32 layer_
|
|||
gboolean gimp_layer_get_preserve_trans (gint32 layer_ID);
|
||||
gboolean gimp_layer_set_preserve_trans (gint32 layer_ID,
|
||||
gboolean preserve_trans);
|
||||
gboolean gimp_layer_get_apply_mask (gint32 layer_ID);
|
||||
gboolean gimp_layer_set_apply_mask (gint32 layer_ID,
|
||||
gboolean apply_mask);
|
||||
gboolean gimp_layer_get_show_mask (gint32 layer_ID);
|
||||
gboolean gimp_layer_set_show_mask (gint32 layer_ID,
|
||||
gboolean show_mask);
|
||||
gboolean gimp_layer_get_edit_mask (gint32 layer_ID);
|
||||
gboolean gimp_layer_set_edit_mask (gint32 layer_ID,
|
||||
gboolean edit_mask);
|
||||
gdouble gimp_layer_get_opacity (gint32 layer_ID);
|
||||
gboolean gimp_layer_set_opacity (gint32 layer_ID,
|
||||
gdouble opacity);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* XPM */
|
||||
static char * eye_xpm[] = {
|
||||
"22 22 76 1",
|
||||
"20 20 76 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #292929",
|
||||
|
@ -77,25 +77,23 @@ static char * eye_xpm[] = {
|
|||
"I c #070707",
|
||||
"J c #353535",
|
||||
"K c #5A5A5A",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ........ ",
|
||||
" ...+@#$$%... ",
|
||||
" ..&*=-;>,')!~,.. ",
|
||||
" ..{]^/(_:...<^[}.. ",
|
||||
" ..|123456-....7689.. ",
|
||||
" .0a26b(6-.....cded]. ",
|
||||
" .fgh8icj......kl1mn. ",
|
||||
" o]p0q........rstuv ",
|
||||
" wx1y>.......zAB, ",
|
||||
" >CDE......FG.. ",
|
||||
" ..EHIIJK.. ",
|
||||
" ...... ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "};
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ........ ",
|
||||
" ...+@#$$%... ",
|
||||
" ..&*=-;>,')!~,.. ",
|
||||
" ..{]^/(_:...<^[}.. ",
|
||||
"..|123456-....7689..",
|
||||
".0a26b(6-.....cded].",
|
||||
".fgh8icj......kl1mn.",
|
||||
" o]p0q........rstuv ",
|
||||
" wx1y>.......zAB, ",
|
||||
" >CDE......FG.. ",
|
||||
" ..EHIIJK.. ",
|
||||
" ...... ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "};
|
||||
|
|
|
@ -63,7 +63,7 @@ SUBDIRS = \
|
|||
sgi \
|
||||
sel2path \
|
||||
$(WEBBROWSER) \
|
||||
$(XJT) \
|
||||
## $(XJT) \
|
||||
plugin-helper \
|
||||
common
|
||||
|
||||
|
|
|
@ -191,7 +191,7 @@ HELP
|
|||
desc => 'The newly copied channel', alias => 'copy' }
|
||||
);
|
||||
|
||||
%invoke = ( code => 'success = (copy = gimp_channel_copy (channel)) != NULL;' );
|
||||
%invoke = ( code => 'success = (copy = gimp_channel_copy (channel, TRUE)) != NULL;' );
|
||||
}
|
||||
|
||||
sub channel_delete {
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue