gimp-gap r767 - in trunk: . gap
- From: wolfgangh svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp-gap r767 - in trunk: . gap
- Date: Sun, 13 Jul 2008 17:41:41 +0000 (UTC)
Author: wolfgangh
Date: Sun Jul 13 17:41:41 2008
New Revision: 767
URL: http://svn.gnome.org/viewvc/gimp-gap?rev=767&view=rev
Log:
new feature: viedo extract supports generating transparency via bluebox
Modified:
trunk/ChangeLog
trunk/gap/Makefile.am
trunk/gap/gap_layer_copy.c
trunk/gap/gap_layer_copy.h
trunk/gap/gap_mod_layer.c
trunk/gap/gap_mod_layer.h
trunk/gap/gap_mod_layer_dialog.c
trunk/gap/gap_mod_layer_dialog.h
trunk/gap/gap_vex_dialog.c
trunk/gap/gap_vex_exec.c
trunk/gap/gap_vex_main.c
trunk/gap/gap_vex_main.h
Modified: trunk/gap/Makefile.am
==============================================================================
--- trunk/gap/Makefile.am (original)
+++ trunk/gap/Makefile.am Sun Jul 13 17:41:41 2008
@@ -279,6 +279,8 @@
gap_libgimpgap.h
gap_video_extract_SOURCES = \
+ gap_bluebox.c \
+ gap_bluebox.h \
gap_vex_main.c \
gap_vex_main.h \
gap_vex_exec.c \
Modified: trunk/gap/gap_layer_copy.c
==============================================================================
--- trunk/gap/gap_layer_copy.c (original)
+++ trunk/gap/gap_layer_copy.c Sun Jul 13 17:41:41 2008
@@ -607,3 +607,214 @@
return(layer_id);
} /* end gap_layer_flip */
+
+
+
+/* -----------------------------
+ * gap_layer_copy_paste_drawable
+ * -----------------------------
+ * copy specified dst_drawable into src_drawable using
+ * gimp copy paste procedures.
+ * The selection in the specified image will be removed
+ * (e.g. is ignored for copying)
+ * the caller shall specify image_id == -1 in case where selection
+ * shall be respected.
+ */
+void
+gap_layer_copy_paste_drawable(gint32 image_id, gint32 dst_drawable_id, gint32 src_drawable_id)
+{
+ gint32 l_fsel_layer_id;
+
+ if (image_id >= 0)
+ {
+ gimp_selection_none(image_id);
+ }
+ gimp_edit_copy(src_drawable_id);
+ l_fsel_layer_id = gimp_edit_paste(dst_drawable_id, FALSE);
+ gimp_floating_sel_anchor(l_fsel_layer_id);
+} /* end gap_layer_copy_paste_drawable */
+
+
+/* ---------------------------------
+ * gap_layer_get_stackposition
+ * ---------------------------------
+ * get stackposition index of the specified layer.
+ * return -1 if the layer is not part of the specified image
+ */
+gint32
+gap_layer_get_stackposition(gint32 image_id, gint32 ref_layer_id)
+{
+ gint l_nlayers;
+ gint32 *l_layers_list;
+ gint32 l_idx;
+
+ l_layers_list = gimp_image_get_layers(image_id, &l_nlayers);
+ if(l_layers_list != NULL)
+ {
+ for(l_idx = 0; l_idx < l_nlayers; l_idx++)
+ {
+ if(l_layers_list[l_idx] == ref_layer_id)
+ {
+ g_free (l_layers_list);
+ return(l_idx);
+ }
+ }
+ g_free (l_layers_list);
+ }
+
+ return (-1);
+
+} /* end gap_layer_get_stackposition */
+
+
+/* ------------------------
+ * gap_layer_make_duplicate
+ * ------------------------
+ *
+ */
+gint32
+gap_layer_make_duplicate(gint32 src_layer_id, gint32 image_id
+ , const char *name_prefix, const char *name_suffix)
+{
+ gint32 l_new_layer_id;
+ gint32 l_stackposition;
+ const char *l_suffix;
+ const char *l_prefix;
+ char *l_new_name;
+ char *l_old_name;
+
+
+ /* make a copy of the layer */
+ l_new_layer_id = gimp_layer_copy(src_layer_id);
+
+ /* and add at stackposition above src_layer */
+ l_stackposition = gap_layer_get_stackposition(image_id, src_layer_id);
+ gimp_image_add_layer (image_id, l_new_layer_id, l_stackposition);
+
+ /* build name with optional prefix and/or suffix */
+ l_suffix = "\0";
+ l_prefix = "\0";
+ if (name_suffix != NULL)
+ {
+ l_suffix = name_suffix;
+ }
+ if (name_prefix != NULL)
+ {
+ l_prefix = name_prefix;
+ }
+ l_old_name = gimp_drawable_get_name(src_layer_id);
+
+ l_new_name = g_strdup_printf("%s%s%s", l_prefix, l_old_name, l_suffix);
+
+ gimp_drawable_set_name(l_new_layer_id, l_new_name);
+ g_free(l_old_name);
+ g_free(l_new_name);
+
+ return (l_new_layer_id);
+} /* end gap_layer_make_duplicate */
+
+
+
+/* -----------------------------------------------
+ * gap_layer_create_layer_from_layermask
+ * -----------------------------------------------
+ * create a new layer as copy of the layermask of the
+ * specified src_layer_id.
+ * The name is built as copy of the src_layer_id's name
+ * with optional prefix and/or suffix.
+ * (specify NULL to omit name_prefix and/or name_suffix)
+ *
+ * the new layer is added to the image at top
+ * of layerstack
+ * or above the src_layer if src_layer is in the same image.
+ *
+ * return the id of the newly created layer.
+ */
+gint32
+gap_layer_create_layer_from_layermask(gint32 src_layer_id
+ , gint32 image_id
+ , const char *name_prefix, const char *name_suffix)
+{
+ gboolean l_has_already_layermask;
+ gint32 l_layermask_id;
+ gint32 l_new_layer_id;
+ gint32 l_new_layermask_id;
+
+ /* make a copy of the layer (but without the layermask) */
+ l_new_layer_id = gap_layer_make_duplicate(src_layer_id, image_id
+ , name_prefix, name_suffix);
+ l_new_layermask_id = gimp_layer_get_mask(l_new_layer_id);
+ if (l_new_layermask_id >= 0)
+ {
+ /* copy the layermask into the new layer */
+ gap_layer_copy_paste_drawable(image_id
+ , l_new_layer_id /* dst_drawable_id */
+ , l_new_layermask_id /* src_drawable_id */
+ );
+ gimp_layer_remove_mask (l_new_layer_id, GIMP_MASK_DISCARD);
+ }
+ else
+ {
+ /* create white layer (in case no layermask was present) */
+ gap_layer_clear_to_color(l_new_layer_id
+ ,1.0 /* red */
+ ,1.0 /* green */
+ ,1.0 /* blue */
+ ,1.0 /* alpha */
+ );
+ }
+
+ return (l_new_layer_id);
+} /* end gap_layer_create_layer_from_layermask */
+
+
+/* ---------------------------------
+ * gap_layer_create_layer_from_alpha
+ * ---------------------------------
+ *
+ */
+gint32
+gap_layer_create_layer_from_alpha(gint32 src_layer_id, gint32 image_id
+ , const char *name_prefix, const char *name_suffix
+ , gboolean applyExistingLayermask, gboolean useTransferAlpha)
+{
+ gint32 l_new_layer_id;
+ gint32 l_old_layermask_id;
+ gint32 l_new_layermask_id;
+
+ /* make a copy of the src_layer */
+ l_new_layer_id = gap_layer_make_duplicate(src_layer_id, image_id
+ , name_prefix, name_suffix);
+ l_old_layermask_id = gimp_layer_get_mask(l_new_layer_id);
+
+ if (l_old_layermask_id >= 0)
+ {
+ /* handle already exiting layermask: apply or remove (e.g. ignore) */
+ if (applyExistingLayermask)
+ {
+ /* merge the already existing layermask into the alpha channel */
+ gimp_layer_remove_mask (l_new_layer_id, GIMP_MASK_APPLY);
+ }
+ else
+ {
+ gimp_layer_remove_mask (l_new_layer_id, GIMP_MASK_DISCARD);
+ }
+ }
+
+ /* create a new layermask from the alpha channel */
+ if (useTransferAlpha == TRUE)
+ {
+ l_new_layermask_id = gimp_layer_create_mask(l_new_layer_id, GIMP_ADD_ALPHA_TRANSFER_MASK);
+ }
+ else
+ {
+ l_new_layermask_id = gimp_layer_create_mask(l_new_layer_id, GIMP_ADD_ALPHA_MASK);
+ }
+
+
+ gimp_layer_add_mask(l_new_layer_id, l_new_layermask_id);
+ gap_layer_copy_paste_drawable(image_id, l_new_layer_id, l_new_layermask_id);
+ gimp_layer_remove_mask (l_new_layer_id, GIMP_MASK_DISCARD);
+ return (l_new_layer_id);
+
+} /* end gap_layer_create_layer_from_alpha */
Modified: trunk/gap/gap_layer_copy.h
==============================================================================
--- trunk/gap/gap_layer_copy.h (original)
+++ trunk/gap/gap_layer_copy.h Sun Jul 13 17:41:41 2008
@@ -74,4 +74,22 @@
gint32 gap_layer_flip(gint32 layer_id, gint32 flip_request);
+
+
+void gap_layer_copy_paste_drawable(gint32 image_id, gint32 dst_drawable_id, gint32 src_drawable_id);
+
+gint32 gap_layer_get_stackposition(gint32 image_id, gint32 ref_layer_id);
+
+
+gint32 gap_layer_make_duplicate(gint32 src_layer_id, gint32 image_id
+ , const char *name_prefix, const char *name_suffix);
+
+gint32 gap_layer_create_layer_from_layermask(gint32 src_layer_id
+ , gint32 image_id
+ , const char *name_prefix, const char *name_suffix);
+
+gint32 gap_layer_create_layer_from_alpha(gint32 src_layer_id, gint32 image_id
+ , const char *name_prefix, const char *name_suffix
+ , gboolean applyExistingLayermask, gboolean useTransferAlpha);
+
#endif
Modified: trunk/gap/gap_mod_layer.c
==============================================================================
--- trunk/gap/gap_mod_layer.c (original)
+++ trunk/gap/gap_mod_layer.c Sun Jul 13 17:41:41 2008
@@ -130,13 +130,13 @@
l_msg = g_strdup_printf ( _("Non-Interactive call of %s\n(for all selected layers)"), filter_procname);
}
l_continue = gap_arr_std_dialog ( _("Animated Filter Apply"), l_msg,
- l_argc, l_argv,
- l_but_argc, l_but_argv, 0);
+ l_argc, l_argv,
+ l_but_argc, l_but_argv, 0);
g_free (l_msg);
return (l_continue);
-} /* end p_pitstop_dialog */
+} /* end p_pitstop_dialog */
/* ---------------------------------
@@ -167,10 +167,10 @@
if(l_layers_list[l_idx] == ref_layer_id)
{
l_nb_idx = l_idx + nb_ref;
- if((l_nb_idx >= 0) && (l_nb_idx < l_nlayers))
- {
- l_nb_layer_id = l_layers_list[l_nb_idx];
- }
+ if((l_nb_idx >= 0) && (l_nb_idx < l_nlayers))
+ {
+ l_nb_layer_id = l_layers_list[l_nb_idx];
+ }
break;
}
}
@@ -202,7 +202,7 @@
}
}
return(-1);
-} /* end gap_mod_get_1st_selected */
+} /* end gap_mod_get_1st_selected */
/* ============================================================================
@@ -216,7 +216,7 @@
gap_mod_alloc_layli(gint32 image_id, gint32 *l_sel_cnt, gint *nlayers,
gint32 sel_mode,
gint32 sel_case,
- gint32 sel_invert,
+ gint32 sel_invert,
char *sel_pattern )
{
gint32 *l_layers_list;
@@ -249,24 +249,24 @@
l_layli_ptr[l_idx].selected = gap_match_layer(l_idx,
l_layername,
sel_pattern,
- sel_mode,
- sel_case,
- sel_invert,
- *nlayers, l_layer_id);
+ sel_mode,
+ sel_case,
+ sel_invert,
+ *nlayers, l_layer_id);
if(l_layli_ptr[l_idx].selected != FALSE)
{
(*l_sel_cnt)++; /* count all selected layers */
}
if(gap_debug) printf("gap: gap_mod_alloc_layli [%d] id:%d, sel:%d name:%s:\n",
(int)l_idx, (int)l_layer_id,
- (int)l_layli_ptr[l_idx].selected, l_layername);
+ (int)l_layli_ptr[l_idx].selected, l_layername);
g_free (l_layername);
}
g_free (l_layers_list);
return( l_layli_ptr );
-} /* end gap_mod_alloc_layli */
+} /* end gap_mod_alloc_layli */
/* ============================================================================
@@ -286,7 +286,7 @@
gimp_layer_add_alpha(layer_id);
}
gimp_image_raise_layer(image_id, layer_id);
-} /* end p_raise_layer */
+} /* end p_raise_layer */
static void
p_lower_layer (gint32 image_id, gint32 layer_id, GapModLayliElem * layli_ptr, gint nlayers)
@@ -311,7 +311,7 @@
}
gimp_image_lower_layer(image_id, layer_id);
-} /* end p_lower_layer */
+} /* end p_lower_layer */
/* ============================================================================
@@ -323,8 +323,8 @@
static void
p_selection_combine(gint32 image_id
,gint32 master_channel_id
- ,GimpChannelOps operation
- )
+ ,GimpChannelOps operation
+ )
{
gint32 l_new_channel_id;
gint32 l_sel_channel_id;
@@ -337,13 +337,13 @@
*/
gap_layer_copy_content( l_new_channel_id /* dst_drawable_id */
, master_channel_id /* src_drawable_id */
- );
+ );
gimp_channel_combine_masks(l_sel_channel_id
,l_new_channel_id
- ,operation
- , 0
- , 0
- );
+ ,operation
+ , 0
+ , 0
+ );
gimp_drawable_delete(l_new_channel_id);
} /* end p_selection_combine */
@@ -465,18 +465,18 @@
*/
static int
p_apply_action(gint32 image_id,
- gint32 action_mode,
- GapModLayliElem *layli_ptr,
- gint nlayers,
- gint32 sel_cnt,
-
- long from,
- long to,
- long curr,
- char *new_layername,
- char *filter_procname,
- gint32 master_image_id
- )
+ gint32 action_mode,
+ GapModLayliElem *layli_ptr,
+ gint nlayers,
+ gint32 sel_cnt,
+
+ long from,
+ long to,
+ long curr,
+ char *new_layername,
+ char *filter_procname,
+ gint32 master_image_id
+ )
{
int l_idx;
int l_rc;
@@ -507,8 +507,8 @@
master_channel_id = gimp_image_get_selection(master_image_id);
action_was_applied = p_apply_selection_action(image_id
, action_mode
- , master_image_id
- , master_channel_id
+ , master_image_id
+ , master_channel_id
);
if(action_was_applied)
{
@@ -537,12 +537,12 @@
else
{
if(gimp_drawable_get_visible(layli_ptr[l_idx].layer_id))
- {
- /* result will we visible if at least one of the
- * selected layers was visible before
- */
- l_vis_result = TRUE;
- }
+ {
+ /* result will we visible if at least one of the
+ * selected layers was visible before
+ */
+ l_vis_result = TRUE;
+ }
gimp_drawable_set_visible(layli_ptr[l_idx].layer_id, TRUE);
}
}
@@ -559,9 +559,9 @@
*/
if (!gap_match_string_is_empty (new_layername))
{
- gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
- new_layername, curr);
- gimp_drawable_set_name(l_layer_id, &l_name_buff[0]);
+ gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
+ new_layername, curr);
+ gimp_drawable_set_name(l_layer_id, &l_name_buff[0]);
}
/* restore visibility flags after merge */
@@ -592,57 +592,57 @@
{
case GAP_MOD_ACM_SET_VISIBLE:
gimp_drawable_set_visible(l_layer_id, TRUE);
- break;
+ break;
case GAP_MOD_ACM_SET_INVISIBLE:
gimp_drawable_set_visible(l_layer_id, FALSE);
- break;
+ break;
case GAP_MOD_ACM_SET_LINKED:
gimp_drawable_set_linked(l_layer_id, TRUE);
- break;
+ break;
case GAP_MOD_ACM_SET_UNLINKED:
gimp_drawable_set_linked(l_layer_id, FALSE);
- break;
+ break;
case GAP_MOD_ACM_RAISE:
- p_raise_layer(image_id, l_layer_id, layli_ptr, nlayers);
- break;
+ p_raise_layer(image_id, l_layer_id, layli_ptr, nlayers);
+ break;
case GAP_MOD_ACM_LOWER:
- p_lower_layer(image_id, l_layer_id, layli_ptr, nlayers);
- break;
+ p_lower_layer(image_id, l_layer_id, layli_ptr, nlayers);
+ break;
case GAP_MOD_ACM_APPLY_FILTER:
- l_rc = gap_filt_pdb_call_plugin(filter_procname,
- image_id,
- l_layer_id,
- GIMP_RUN_WITH_LAST_VALS);
+ l_rc = gap_filt_pdb_call_plugin(filter_procname,
+ image_id,
+ l_layer_id,
+ GIMP_RUN_WITH_LAST_VALS);
if(gap_debug) printf("gap: p_apply_action FILTER:%s rc =%d\n",
filter_procname, (int)l_rc);
- break;
+ break;
case GAP_MOD_ACM_APPLY_FILTER_ON_LAYERMASK:
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- l_rc = gap_filt_pdb_call_plugin(filter_procname,
- image_id,
- gimp_layer_get_mask(l_layer_id),
- GIMP_RUN_WITH_LAST_VALS);
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ l_rc = gap_filt_pdb_call_plugin(filter_procname,
+ image_id,
+ gimp_layer_get_mask(l_layer_id),
+ GIMP_RUN_WITH_LAST_VALS);
}
- break;
+ break;
case GAP_MOD_ACM_DUPLICATE:
- l_new_layer_id = gimp_layer_copy(l_layer_id);
- gimp_image_add_layer (image_id, l_new_layer_id, -1);
- if (!gap_match_string_is_empty (new_layername))
- {
- gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
- new_layername, curr);
- gimp_drawable_set_name(l_new_layer_id, &l_name_buff[0]);
- }
- break;
+ l_new_layer_id = gimp_layer_copy(l_layer_id);
+ gimp_image_add_layer (image_id, l_new_layer_id, -1);
+ if (!gap_match_string_is_empty (new_layername))
+ {
+ gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
+ new_layername, curr);
+ gimp_drawable_set_name(l_new_layer_id, &l_name_buff[0]);
+ }
+ break;
case GAP_MOD_ACM_DELETE:
- gimp_image_remove_layer(image_id, l_layer_id);
- break;
+ gimp_image_remove_layer(image_id, l_layer_id);
+ break;
case GAP_MOD_ACM_RENAME:
- gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
- new_layername, curr);
- gimp_drawable_set_name(l_layer_id, &l_name_buff[0]);
- break;
+ gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
+ new_layername, curr);
+ gimp_drawable_set_name(l_layer_id, &l_name_buff[0]);
+ break;
case GAP_MOD_ACM_SEL_ALPHA:
if(gimp_drawable_has_alpha(l_layer_id))
@@ -658,288 +658,322 @@
case GAP_MOD_ACM_SEL_SAVE:
{
- gint32 l_sel_channel_id;
- l_sel_channel_id = gimp_selection_save(image_id);
+ gint32 l_sel_channel_id;
+ l_sel_channel_id = gimp_selection_save(image_id);
if(*new_layername != '\0')
- {
- gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
- new_layername, curr);
- gimp_drawable_set_name(l_sel_channel_id, &l_name_buff[0]);
- }
- }
- break;
+ {
+ gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
+ new_layername, curr);
+ gimp_drawable_set_name(l_sel_channel_id, &l_name_buff[0]);
+ }
+ }
+ break;
case GAP_MOD_ACM_SEL_LOAD:
{
if(*new_layername != '\0')
- {
- gint *l_channels;
- gint n_channels;
- gint l_ii;
- gchar *l_channelname;
-
- gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
- new_layername, curr);
-
- l_channels = gimp_image_get_channels(image_id, &n_channels);
- for(l_ii=0; l_ii < n_channels; l_ii++)
- {
- l_channelname = gimp_drawable_get_name(l_channels[l_ii]);
- if(l_channelname)
- {
- if(strcmp(l_channelname,&l_name_buff[0] ) == 0)
- {
+ {
+ gint *l_channels;
+ gint n_channels;
+ gint l_ii;
+ gchar *l_channelname;
+
+ gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
+ new_layername, curr);
+
+ l_channels = gimp_image_get_channels(image_id, &n_channels);
+ for(l_ii=0; l_ii < n_channels; l_ii++)
+ {
+ l_channelname = gimp_drawable_get_name(l_channels[l_ii]);
+ if(l_channelname)
+ {
+ if(strcmp(l_channelname,&l_name_buff[0] ) == 0)
+ {
gimp_selection_load(l_channels[l_ii]);
- g_free(l_channelname);
- break;
- }
- g_free(l_channelname);
- }
- }
- if(l_channels)
- {
- g_free(l_channels);
- }
- }
- }
- break;
+ g_free(l_channelname);
+ break;
+ }
+ g_free(l_channelname);
+ }
+ }
+ if(l_channels)
+ {
+ g_free(l_channels);
+ }
+ }
+ }
+ break;
case GAP_MOD_ACM_SEL_DELETE:
{
if(*new_layername != '\0')
- {
- gint *l_channels;
- gint n_channels;
- gint l_ii;
- gchar *l_channelname;
-
- gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
- new_layername, curr);
-
- l_channels = gimp_image_get_channels(image_id, &n_channels);
- for(l_ii=0; l_ii < n_channels; l_ii++)
- {
- l_channelname = gimp_drawable_get_name(l_channels[l_ii]);
- if(l_channelname)
- {
- if(strcmp(l_channelname,&l_name_buff[0] ) == 0)
- {
+ {
+ gint *l_channels;
+ gint n_channels;
+ gint l_ii;
+ gchar *l_channelname;
+
+ gap_match_substitute_framenr(&l_name_buff[0], sizeof(l_name_buff),
+ new_layername, curr);
+
+ l_channels = gimp_image_get_channels(image_id, &n_channels);
+ for(l_ii=0; l_ii < n_channels; l_ii++)
+ {
+ l_channelname = gimp_drawable_get_name(l_channels[l_ii]);
+ if(l_channelname)
+ {
+ if(strcmp(l_channelname,&l_name_buff[0] ) == 0)
+ {
gimp_image_remove_channel(image_id, l_channels[l_ii]);
- }
- g_free(l_channelname);
- }
- }
- if(l_channels)
- {
- g_free(l_channels);
- }
- }
- }
- break;
+ }
+ g_free(l_channelname);
+ }
+ }
+ if(l_channels)
+ {
+ g_free(l_channels);
+ }
+ }
+ }
+ break;
case GAP_MOD_ACM_ADD_ALPHA:
- if(!gimp_drawable_has_alpha(l_layer_id))
- {
- gimp_layer_add_alpha(l_layer_id);
- }
- break;
+ if(!gimp_drawable_has_alpha(l_layer_id))
+ {
+ gimp_layer_add_alpha(l_layer_id);
+ }
+ break;
case GAP_MOD_ACM_LMASK_WHITE:
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
- }
- l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_WHITE_MASK);
- gimp_layer_add_mask(l_layer_id, l_layermask_id);
- break;
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
+ }
+ l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_WHITE_MASK);
+ gimp_layer_add_mask(l_layer_id, l_layermask_id);
+ break;
case GAP_MOD_ACM_LMASK_BLACK:
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
- }
- l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_BLACK_MASK);
- gimp_layer_add_mask(l_layer_id, l_layermask_id);
- break;
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
+ }
+ l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_BLACK_MASK);
+ gimp_layer_add_mask(l_layer_id, l_layermask_id);
+ break;
case GAP_MOD_ACM_LMASK_ALPHA:
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
- }
- l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_ALPHA_MASK);
- gimp_layer_add_mask(l_layer_id, l_layermask_id);
- break;
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
+ }
+ l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_ALPHA_MASK);
+ gimp_layer_add_mask(l_layer_id, l_layermask_id);
+ break;
case GAP_MOD_ACM_LMASK_TALPHA:
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
- }
- l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_ALPHA_TRANSFER_MASK);
- gimp_layer_add_mask(l_layer_id, l_layermask_id);
- break;
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
+ }
+ l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_ALPHA_TRANSFER_MASK);
+ gimp_layer_add_mask(l_layer_id, l_layermask_id);
+ break;
case GAP_MOD_ACM_LMASK_SEL:
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
- }
- l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_SELECTION_MASK);
- gimp_layer_add_mask(l_layer_id, l_layermask_id);
- break;
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
+ }
+ l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_SELECTION_MASK);
+ gimp_layer_add_mask(l_layer_id, l_layermask_id);
+ break;
case GAP_MOD_ACM_LMASK_BWCOPY:
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
- }
- l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_COPY_MASK);
- gimp_layer_add_mask(l_layer_id, l_layermask_id);
- break;
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
+ }
+ l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_COPY_MASK);
+ gimp_layer_add_mask(l_layer_id, l_layermask_id);
+ break;
case GAP_MOD_ACM_LMASK_DELETE:
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- gimp_layer_remove_mask (l_layer_id, GIMP_MASK_DISCARD);
- }
- break;
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ gimp_layer_remove_mask (l_layer_id, GIMP_MASK_DISCARD);
+ }
+ break;
case GAP_MOD_ACM_LMASK_APPLY:
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
- }
- break;
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
+ }
+ break;
case GAP_MOD_ACM_LMASK_COPY_FROM_UPPER_LMASK:
case GAP_MOD_ACM_LMASK_COPY_FROM_LOWER_LMASK:
- /* create black mask per default */
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
- }
- l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_BLACK_MASK);
- gimp_layer_add_mask(l_layer_id, l_layermask_id);
- /* get layermask_id from upper neigbour layer (if there is any) */
- if(l_layermask_id >= 0)
- {
- gint32 l_nb_mask_id;
- gint32 l_nb_layer_id;
- gint32 l_nb_ref;
- gint32 l_fsel_layer_id;
- gint32 l_nb_had_layermask;
-
- l_nb_ref = 1;
+ /* create black mask per default */
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ gimp_layer_remove_mask (l_layer_id, GIMP_MASK_APPLY);
+ }
+ l_layermask_id = gimp_layer_create_mask(l_layer_id, GIMP_ADD_BLACK_MASK);
+ gimp_layer_add_mask(l_layer_id, l_layermask_id);
+ /* get layermask_id from upper neigbour layer (if there is any) */
+ if(l_layermask_id >= 0)
+ {
+ gint32 l_nb_mask_id;
+ gint32 l_nb_layer_id;
+ gint32 l_nb_ref;
+ gint32 l_fsel_layer_id;
+ gint32 l_nb_had_layermask;
+
+ l_nb_ref = 1;
if(action_mode == GAP_MOD_ACM_LMASK_COPY_FROM_UPPER_LMASK)
- {
- l_nb_ref = -1;
- }
- l_nb_layer_id = p_get_nb_layer_id(image_id, l_layer_id, l_nb_ref);
- if(l_nb_layer_id >= 0)
- {
- l_nb_mask_id = gimp_layer_get_mask(l_nb_layer_id);
- l_nb_had_layermask = TRUE;
- if(l_nb_mask_id < 0)
- {
- /* the referenced neigbour layer had no layermask
- * in this case we create one as bw-copy temporary
- */
- l_nb_had_layermask = FALSE;
- l_nb_mask_id = gimp_layer_create_mask(l_nb_layer_id, GIMP_ADD_COPY_MASK);
- gimp_layer_add_mask(l_nb_layer_id, l_nb_mask_id);
- }
-
- if(l_nb_mask_id >= 0)
- {
- /* the referenced neigbour layer has a layermask
- * we can copy from this mask now
- */
- gimp_selection_none(image_id);
- gimp_edit_copy(l_nb_mask_id);
- l_fsel_layer_id = gimp_edit_paste(l_layermask_id, FALSE);
- gimp_floating_sel_anchor(l_fsel_layer_id);
-
- if(l_nb_had_layermask == FALSE)
- {
- /* remove the temporary created layermask in the neigbour layer */
- gimp_layer_remove_mask (l_nb_layer_id, GIMP_MASK_DISCARD);
- }
- }
- }
- }
- break;
- case GAP_MOD_ACM_LMASK_INVERT:
- if(gimp_layer_get_mask(l_layer_id) >= 0)
- {
- gimp_invert(gimp_layer_get_mask(l_layer_id));
- }
- break;
- case GAP_MOD_ACM_SET_MODE_NORMAL:
- gimp_layer_set_mode(l_layer_id, GIMP_NORMAL_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_DISSOLVE:
- gimp_layer_set_mode(l_layer_id, GIMP_DISSOLVE_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_MULTIPLY:
- gimp_layer_set_mode(l_layer_id, GIMP_MULTIPLY_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_DIVIDE:
- gimp_layer_set_mode(l_layer_id, GIMP_DIVIDE_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_SCREEN:
- gimp_layer_set_mode(l_layer_id, GIMP_SCREEN_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_OVERLAY:
- gimp_layer_set_mode(l_layer_id, GIMP_OVERLAY_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_DIFFERENCE:
- gimp_layer_set_mode(l_layer_id, GIMP_DIFFERENCE_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_ADDITION:
- gimp_layer_set_mode(l_layer_id, GIMP_ADDITION_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_SUBTRACT:
- gimp_layer_set_mode(l_layer_id, GIMP_SUBTRACT_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_DARKEN_ONLY:
- gimp_layer_set_mode(l_layer_id, GIMP_DARKEN_ONLY_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_LIGHTEN_ONLY:
- gimp_layer_set_mode(l_layer_id, GIMP_LIGHTEN_ONLY_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_DODGE:
- gimp_layer_set_mode(l_layer_id, GIMP_DODGE_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_BURN:
- gimp_layer_set_mode(l_layer_id, GIMP_BURN_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_HARDLIGHT:
- gimp_layer_set_mode(l_layer_id, GIMP_HARDLIGHT_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_SOFTLIGHT:
- gimp_layer_set_mode(l_layer_id, GIMP_SOFTLIGHT_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_COLOR_ERASE:
- gimp_layer_set_mode(l_layer_id, GIMP_COLOR_ERASE_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_GRAIN_EXTRACT_MODE:
- gimp_layer_set_mode(l_layer_id, GIMP_GRAIN_EXTRACT_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_GRAIN_MERGE_MODE:
- gimp_layer_set_mode(l_layer_id, GIMP_GRAIN_MERGE_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_HUE_MODE:
- gimp_layer_set_mode(l_layer_id, GIMP_HUE_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_SATURATION_MODE:
- gimp_layer_set_mode(l_layer_id, GIMP_SATURATION_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_COLOR_MODE:
- gimp_layer_set_mode(l_layer_id, GIMP_COLOR_MODE);
- break;
- case GAP_MOD_ACM_SET_MODE_VALUE_MODE:
- gimp_layer_set_mode(l_layer_id, GIMP_VALUE_MODE);
- break;
+ {
+ l_nb_ref = -1;
+ }
+ l_nb_layer_id = p_get_nb_layer_id(image_id, l_layer_id, l_nb_ref);
+ if(l_nb_layer_id >= 0)
+ {
+ l_nb_mask_id = gimp_layer_get_mask(l_nb_layer_id);
+ l_nb_had_layermask = TRUE;
+ if(l_nb_mask_id < 0)
+ {
+ /* the referenced neigbour layer had no layermask
+ * in this case we create one as bw-copy temporary
+ */
+ l_nb_had_layermask = FALSE;
+ l_nb_mask_id = gimp_layer_create_mask(l_nb_layer_id, GIMP_ADD_COPY_MASK);
+ gimp_layer_add_mask(l_nb_layer_id, l_nb_mask_id);
+ }
+
+ if(l_nb_mask_id >= 0)
+ {
+ /* the referenced neigbour layer has a layermask
+ * we can copy from this mask now
+ */
+ gimp_selection_none(image_id);
+ gimp_edit_copy(l_nb_mask_id);
+ l_fsel_layer_id = gimp_edit_paste(l_layermask_id, FALSE);
+ gimp_floating_sel_anchor(l_fsel_layer_id);
+
+ if(l_nb_had_layermask == FALSE)
+ {
+ /* remove the temporary created layermask in the neigbour layer */
+ gimp_layer_remove_mask (l_nb_layer_id, GIMP_MASK_DISCARD);
+ }
+ }
+ }
+ }
+ break;
+ case GAP_MOD_ACM_LMASK_INVERT:
+ if(gimp_layer_get_mask(l_layer_id) >= 0)
+ {
+ gimp_invert(gimp_layer_get_mask(l_layer_id));
+ }
+ break;
+ case GAP_MOD_ACM_CREATE_LAYER_FROM_OPACITY:
+ /* create a mask layer that represents current opacity
+ * (including both the alpha channel and layermask (if exists)
+ */
+ gap_layer_create_layer_from_alpha(l_layer_id
+ , image_id
+ , NULL /* name_prefix */
+ , _("_msk") /* name suffix */
+ , TRUE /* applyExistingLayermask */
+ , FALSE /* useTransferAlpha */
+ );
+ break;
+ case GAP_MOD_ACM_CREATE_LAYER_FROM_ALPHA:
+ /* create a mask layer that is a copy of the the alpha channel
+ * (ignores an existing layermask)
+ */
+ gap_layer_create_layer_from_alpha(l_layer_id
+ , image_id
+ , NULL /* name_prefix */
+ , _("_msk") /* name suffix */
+ , FALSE /* applyExistingLayermask */
+ , FALSE /* useTransferAlpha */
+ );
+ break;
+ case GAP_MOD_ACM_CREATE_LAYER_FROM_LMASK:
+ /* create a mask layer that is a copy of the layermask
+ * (ignores the alpha channel)
+ */
+ gap_layer_create_layer_from_layermask(l_layer_id
+ , image_id
+ , NULL /* name_prefix */
+ , _("_msk") /* name suffix */
+ );
+ break;
+ case GAP_MOD_ACM_SET_MODE_NORMAL:
+ gimp_layer_set_mode(l_layer_id, GIMP_NORMAL_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_DISSOLVE:
+ gimp_layer_set_mode(l_layer_id, GIMP_DISSOLVE_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_MULTIPLY:
+ gimp_layer_set_mode(l_layer_id, GIMP_MULTIPLY_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_DIVIDE:
+ gimp_layer_set_mode(l_layer_id, GIMP_DIVIDE_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_SCREEN:
+ gimp_layer_set_mode(l_layer_id, GIMP_SCREEN_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_OVERLAY:
+ gimp_layer_set_mode(l_layer_id, GIMP_OVERLAY_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_DIFFERENCE:
+ gimp_layer_set_mode(l_layer_id, GIMP_DIFFERENCE_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_ADDITION:
+ gimp_layer_set_mode(l_layer_id, GIMP_ADDITION_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_SUBTRACT:
+ gimp_layer_set_mode(l_layer_id, GIMP_SUBTRACT_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_DARKEN_ONLY:
+ gimp_layer_set_mode(l_layer_id, GIMP_DARKEN_ONLY_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_LIGHTEN_ONLY:
+ gimp_layer_set_mode(l_layer_id, GIMP_LIGHTEN_ONLY_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_DODGE:
+ gimp_layer_set_mode(l_layer_id, GIMP_DODGE_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_BURN:
+ gimp_layer_set_mode(l_layer_id, GIMP_BURN_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_HARDLIGHT:
+ gimp_layer_set_mode(l_layer_id, GIMP_HARDLIGHT_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_SOFTLIGHT:
+ gimp_layer_set_mode(l_layer_id, GIMP_SOFTLIGHT_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_COLOR_ERASE:
+ gimp_layer_set_mode(l_layer_id, GIMP_COLOR_ERASE_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_GRAIN_EXTRACT_MODE:
+ gimp_layer_set_mode(l_layer_id, GIMP_GRAIN_EXTRACT_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_GRAIN_MERGE_MODE:
+ gimp_layer_set_mode(l_layer_id, GIMP_GRAIN_MERGE_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_HUE_MODE:
+ gimp_layer_set_mode(l_layer_id, GIMP_HUE_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_SATURATION_MODE:
+ gimp_layer_set_mode(l_layer_id, GIMP_SATURATION_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_COLOR_MODE:
+ gimp_layer_set_mode(l_layer_id, GIMP_COLOR_MODE);
+ break;
+ case GAP_MOD_ACM_SET_MODE_VALUE_MODE:
+ gimp_layer_set_mode(l_layer_id, GIMP_VALUE_MODE);
+ break;
case GAP_MOD_ACM_RESIZE_TO_IMG:
gimp_layer_resize_to_image_size (l_layer_id);
- break;
+ break;
default:
- break;
+ break;
}
}
}
return (l_rc);
-} /* end p_apply_action */
+} /* end p_apply_action */
/* ============================================================================
@@ -955,10 +989,10 @@
gint32 image_id, gint32 *dpy_id,
GapModLayliElem * layli_ptr, gint nlayers ,
char *filter_procname, int filt_len,
- gint *plugin_data_len,
- GapFiltPdbApplyMode *apply_mode,
- gboolean operate_on_layermask
- )
+ gint *plugin_data_len,
+ GapFiltPdbApplyMode *apply_mode,
+ gboolean operate_on_layermask
+ )
{
GapDbBrowserResult l_browser_result;
gint32 l_drawable_id;
@@ -976,8 +1010,8 @@
gap_filt_pdb_constraint_proc_sel1,
gap_filt_pdb_constraint_proc_sel2,
&l_browser_result,
- image_id,
- GAP_DB_BROWSER_MODFRAMES_HELP_ID) < 0)
+ image_id,
+ GAP_DB_BROWSER_MODFRAMES_HELP_ID) < 0)
{
if(gap_debug) printf("DEBUG: gap_db_browser_dialog cancelled\n");
return -1;
@@ -1052,7 +1086,7 @@
}
return(0);
-} /* end p_do_filter_dialogs */
+} /* end p_do_filter_dialogs */
/* ============================================================================
@@ -1071,10 +1105,10 @@
static gint
p_do_2nd_filter_dialogs(char *filter_procname,
GapFiltPdbApplyMode l_apply_mode,
- char *last_frame_filename,
- gint32 sel_mode, gint32 sel_case,
- gint32 sel_invert, char *sel_pattern,
- gboolean operate_on_layermask
+ char *last_frame_filename,
+ gint32 sel_mode, gint32 sel_case,
+ gint32 sel_invert, char *sel_pattern,
+ gboolean operate_on_layermask
)
{
gint32 l_drawable_id;
@@ -1130,8 +1164,8 @@
if(l_drawable_id < 0)
{
g_message (_("Modify Layers cancelled: first selected layer \"%s\"\nin last frame has no layermask"),
- gimp_drawable_get_name(l_layli_ptr[l_idx].layer_id)
- );
+ gimp_drawable_get_name(l_layli_ptr[l_idx].layer_id)
+ );
goto cleanup;
}
}
@@ -1175,7 +1209,7 @@
return (l_rc);
-} /* end p_do_2nd_filter_dialogs */
+} /* end p_do_2nd_filter_dialogs */
/* ============================================================================
@@ -1330,15 +1364,15 @@
{
gint l_ii;
- l_operate_on_layermask = TRUE;
- l_ii = gap_mod_get_1st_selected(l_layli_ptr, l_nlayers);
- if(gimp_layer_get_mask(l_layli_ptr[l_ii].layer_id) < 0)
- {
+ l_operate_on_layermask = TRUE;
+ l_ii = gap_mod_get_1st_selected(l_layli_ptr, l_nlayers);
+ if(gimp_layer_get_mask(l_layli_ptr[l_ii].layer_id) < 0)
+ {
g_message(_("first selected layer \"%s\"\nin start frame has no layermask"),
- gimp_drawable_get_name(l_layli_ptr[l_ii].layer_id)
- );
+ gimp_drawable_get_name(l_layli_ptr[l_ii].layer_id)
+ );
goto error;
- }
+ }
}
if(l_begin != l_end)
@@ -1360,20 +1394,20 @@
l_layli_ptr, l_nlayers,
&l_filter_procname[0], sizeof(l_filter_procname),
&l_plugin_data_len,
- &l_apply_mode,
- l_operate_on_layermask
- );
+ &l_apply_mode,
+ l_operate_on_layermask
+ );
if(l_last_frame_filename != NULL)
{
if((l_rc == 0) && (l_apply_mode == GAP_PAPP_VARYING_LINEAR))
- {
+ {
l_rc = p_do_2nd_filter_dialogs(&l_filter_procname[0],
- l_apply_mode,
- l_last_frame_filename,
- sel_mode, sel_case, sel_invert, sel_pattern,
- l_operate_on_layermask
- );
+ l_apply_mode,
+ l_last_frame_filename,
+ sel_mode, sel_case, sel_invert, sel_pattern,
+ l_operate_on_layermask
+ );
}
g_free(l_last_frame_filename);
@@ -1404,15 +1438,15 @@
/* perform function (defined by action_mode) on selcted layer(s) */
l_rc = p_apply_action(l_tmp_image_id,
- action_mode,
- l_layli_ptr,
- l_nlayers,
- l_sel_cnt,
- l_begin, l_end, l_cur_frame_nr,
- new_layername,
- &l_filter_procname[0],
- ainfo_ptr->image_id /* MASTER_image_id */
- );
+ action_mode,
+ l_layli_ptr,
+ l_nlayers,
+ l_sel_cnt,
+ l_begin, l_end, l_cur_frame_nr,
+ new_layername,
+ &l_filter_procname[0],
+ ainfo_ptr->image_id /* MASTER_image_id */
+ );
if(l_rc != 0)
{
if(gap_debug) printf("gap: p_frames_modify p_apply-action failed. rc=%d\n", (int)l_rc);
@@ -1447,27 +1481,27 @@
* the plugin's last_values
*/
if(gap_debug) printf("DEBUG: calling iterator %s current frame:%d\n",
- l_plugin_iterator, (int)l_cur_frame_nr);
+ l_plugin_iterator, (int)l_cur_frame_nr);
if(strcmp(l_plugin_iterator, GIMP_PLUGIN_GAP_COMMON_ITER) == 0)
{
l_params = gimp_run_procedure (l_plugin_iterator,
- &l_retvals,
- GIMP_PDB_INT32, GIMP_RUN_NONINTERACTIVE,
- GIMP_PDB_INT32, l_total_steps, /* total steps */
- GIMP_PDB_FLOAT, (gdouble)l_cur_step, /* current step */
- GIMP_PDB_INT32, l_plugin_data_len, /* length of stored data struct */
+ &l_retvals,
+ GIMP_PDB_INT32, GIMP_RUN_NONINTERACTIVE,
+ GIMP_PDB_INT32, l_total_steps, /* total steps */
+ GIMP_PDB_FLOAT, (gdouble)l_cur_step, /* current step */
+ GIMP_PDB_INT32, l_plugin_data_len, /* length of stored data struct */
GIMP_PDB_STRING, &l_filter_procname[0], /* the common iterator needs the plugin name as additional param */
- GIMP_PDB_END);
+ GIMP_PDB_END);
}
else
{
l_params = gimp_run_procedure (l_plugin_iterator,
- &l_retvals,
- GIMP_PDB_INT32, GIMP_RUN_NONINTERACTIVE,
- GIMP_PDB_INT32, l_total_steps, /* total steps */
- GIMP_PDB_FLOAT, (gdouble)l_cur_step, /* current step */
- GIMP_PDB_INT32, l_plugin_data_len, /* length of stored data struct */
- GIMP_PDB_END);
+ &l_retvals,
+ GIMP_PDB_INT32, GIMP_RUN_NONINTERACTIVE,
+ GIMP_PDB_INT32, l_total_steps, /* total steps */
+ GIMP_PDB_FLOAT, (gdouble)l_cur_step, /* current step */
+ GIMP_PDB_INT32, l_plugin_data_len, /* length of stored data struct */
+ GIMP_PDB_END);
}
if (l_params[0].data.d_status != GIMP_PDB_SUCCESS)
{
@@ -1509,7 +1543,7 @@
break;
l_cur_frame_nr += l_step;
- } /* end while(1) loop foreach frame in range */
+ } /* end while(1) loop foreach frame in range */
/* check if master image is included in the affected range */
if ((ainfo_ptr->curr_frame_nr >= MIN(range_from, range_to))
@@ -1527,15 +1561,15 @@
/* create a temporary copy of the selection
* (because add the selections to itself
- * behaves different when there are partly selected pixel
- * than using a copy)
- */
+ * behaves different when there are partly selected pixel
+ * than using a copy)
+ */
master_channel_id = gimp_selection_save(ainfo_ptr->image_id);
p_apply_selection_action(ainfo_ptr->image_id
- , action_mode
- , -1 /* MASTER_image_id */
- , master_channel_id
- );
+ , action_mode
+ , -1 /* MASTER_image_id */
+ , master_channel_id
+ );
gimp_image_remove_channel(ainfo_ptr->image_id, master_channel_id);
}
}
@@ -1560,7 +1594,7 @@
if(l_plugin_iterator != NULL) g_free(l_plugin_iterator);
return -1;
-} /* end p_frames_modify */
+} /* end p_frames_modify */
/* ============================================================================
@@ -1598,38 +1632,38 @@
if(run_mode == GIMP_RUN_INTERACTIVE)
{
l_rc = gap_mod_frames_dialog (ainfo_ptr, &l_from, &l_to,
- &l_action_mode,
- &l_sel_mode, &sel_case, &sel_invert,
- &l_sel_pattern[0], &l_new_layername[0]);
+ &l_action_mode,
+ &l_sel_mode, &sel_case, &sel_invert,
+ &l_sel_pattern[0], &l_new_layername[0]);
}
else
{
l_from = range_from;
l_to = range_to;
- l_action_mode = action_mode;
- l_sel_mode = sel_mode;
- l_sel_case = sel_case;
- l_sel_invert = sel_invert;
+ l_action_mode = action_mode;
+ l_sel_mode = sel_mode;
+ l_sel_case = sel_case;
+ l_sel_invert = sel_invert;
strncpy(&l_sel_pattern[0], sel_pattern, sizeof(l_sel_pattern) -1);
- l_sel_pattern[sizeof(l_sel_pattern) -1] = '\0';
+ l_sel_pattern[sizeof(l_sel_pattern) -1] = '\0';
strncpy(&l_new_layername[0], new_layername, sizeof(l_new_layername) -1);
- l_new_layername[sizeof(l_new_layername) -1] = '\0';
+ l_new_layername[sizeof(l_new_layername) -1] = '\0';
}
if(l_rc >= 0)
{
/* no need to save the current image before processing
- * because the p_frames_modify procedure operates directly on the current frame
- * and loads all other frames from disc.
- * futher all successful processed frames are saved back to disk
- * (including the current one)
- */
+ * because the p_frames_modify procedure operates directly on the current frame
+ * and loads all other frames from disc.
+ * futher all successful processed frames are saved back to disk
+ * (including the current one)
+ */
l_rc = p_frames_modify(ainfo_ptr, l_from, l_to,
- l_action_mode,
- l_sel_mode, sel_case, sel_invert,
- &l_sel_pattern[0], &l_new_layername[0]
- );
+ l_action_mode,
+ l_sel_mode, sel_case, sel_invert,
+ &l_sel_pattern[0], &l_new_layername[0]
+ );
}
}
Modified: trunk/gap/gap_mod_layer.h
==============================================================================
--- trunk/gap/gap_mod_layer.h (original)
+++ trunk/gap/gap_mod_layer.h Sun Jul 13 17:41:41 2008
@@ -39,43 +39,43 @@
#define MAX_LAYERNAME 128
/* action_mode values */
-#define GAP_MOD_ACM_SET_VISIBLE 0
-#define GAP_MOD_ACM_SET_INVISIBLE 1
-#define GAP_MOD_ACM_SET_LINKED 2
-#define GAP_MOD_ACM_SET_UNLINKED 3
-#define GAP_MOD_ACM_RAISE 4
-#define GAP_MOD_ACM_LOWER 5
-#define GAP_MOD_ACM_MERGE_EXPAND 6
-#define GAP_MOD_ACM_MERGE_IMG 7
-#define GAP_MOD_ACM_MERGE_BG 8
-#define GAP_MOD_ACM_APPLY_FILTER 9
-#define GAP_MOD_ACM_DUPLICATE 10
-#define GAP_MOD_ACM_DELETE 11
-#define GAP_MOD_ACM_RENAME 12
-
-#define GAP_MOD_ACM_SEL_REPLACE 13
-#define GAP_MOD_ACM_SEL_ADD 14
-#define GAP_MOD_ACM_SEL_SUBTRACT 15
-#define GAP_MOD_ACM_SEL_INTERSECT 16
-#define GAP_MOD_ACM_SEL_NONE 17
-#define GAP_MOD_ACM_SEL_ALL 18
-#define GAP_MOD_ACM_SEL_INVERT 19
-#define GAP_MOD_ACM_SEL_SAVE 20
-#define GAP_MOD_ACM_SEL_LOAD 21
-#define GAP_MOD_ACM_SEL_DELETE 22
-
-#define GAP_MOD_ACM_ADD_ALPHA 23
-#define GAP_MOD_ACM_LMASK_WHITE 24
-#define GAP_MOD_ACM_LMASK_BLACK 25
-#define GAP_MOD_ACM_LMASK_ALPHA 26
-#define GAP_MOD_ACM_LMASK_TALPHA 27
-#define GAP_MOD_ACM_LMASK_SEL 28
-#define GAP_MOD_ACM_LMASK_BWCOPY 29
-#define GAP_MOD_ACM_LMASK_DELETE 30
-#define GAP_MOD_ACM_LMASK_APPLY 31
+#define GAP_MOD_ACM_SET_VISIBLE 0
+#define GAP_MOD_ACM_SET_INVISIBLE 1
+#define GAP_MOD_ACM_SET_LINKED 2
+#define GAP_MOD_ACM_SET_UNLINKED 3
+#define GAP_MOD_ACM_RAISE 4
+#define GAP_MOD_ACM_LOWER 5
+#define GAP_MOD_ACM_MERGE_EXPAND 6
+#define GAP_MOD_ACM_MERGE_IMG 7
+#define GAP_MOD_ACM_MERGE_BG 8
+#define GAP_MOD_ACM_APPLY_FILTER 9
+#define GAP_MOD_ACM_DUPLICATE 10
+#define GAP_MOD_ACM_DELETE 11
+#define GAP_MOD_ACM_RENAME 12
+
+#define GAP_MOD_ACM_SEL_REPLACE 13
+#define GAP_MOD_ACM_SEL_ADD 14
+#define GAP_MOD_ACM_SEL_SUBTRACT 15
+#define GAP_MOD_ACM_SEL_INTERSECT 16
+#define GAP_MOD_ACM_SEL_NONE 17
+#define GAP_MOD_ACM_SEL_ALL 18
+#define GAP_MOD_ACM_SEL_INVERT 19
+#define GAP_MOD_ACM_SEL_SAVE 20
+#define GAP_MOD_ACM_SEL_LOAD 21
+#define GAP_MOD_ACM_SEL_DELETE 22
+
+#define GAP_MOD_ACM_ADD_ALPHA 23
+#define GAP_MOD_ACM_LMASK_WHITE 24
+#define GAP_MOD_ACM_LMASK_BLACK 25
+#define GAP_MOD_ACM_LMASK_ALPHA 26
+#define GAP_MOD_ACM_LMASK_TALPHA 27
+#define GAP_MOD_ACM_LMASK_SEL 28
+#define GAP_MOD_ACM_LMASK_BWCOPY 29
+#define GAP_MOD_ACM_LMASK_DELETE 30
+#define GAP_MOD_ACM_LMASK_APPLY 31
-#define GAP_MOD_ACM_LMASK_COPY_FROM_UPPER_LMASK 32
-#define GAP_MOD_ACM_LMASK_COPY_FROM_LOWER_LMASK 33
+#define GAP_MOD_ACM_LMASK_COPY_FROM_UPPER_LMASK 32
+#define GAP_MOD_ACM_LMASK_COPY_FROM_LOWER_LMASK 33
#define GAP_MOD_ACM_LMASK_INVERT 34
@@ -106,6 +106,10 @@
#define GAP_MOD_ACM_SEL_ALPHA 58
#define GAP_MOD_ACM_RESIZE_TO_IMG 59
+#define GAP_MOD_ACM_CREATE_LAYER_FROM_OPACITY 60
+#define GAP_MOD_ACM_CREATE_LAYER_FROM_LMASK 61
+#define GAP_MOD_ACM_CREATE_LAYER_FROM_ALPHA 62
+
typedef struct
{
gint32 layer_id;
@@ -114,10 +118,10 @@
} GapModLayliElem;
GapModLayliElem *gap_mod_alloc_layli(gint32 image_id, gint32 *l_sel_cnt, gint *nlayers,
- gint32 sel_mode,
- gint32 sel_case,
- gint32 sel_invert,
- char *sel_pattern );
+ gint32 sel_mode,
+ gint32 sel_case,
+ gint32 sel_invert,
+ char *sel_pattern );
int gap_mod_get_1st_selected (GapModLayliElem * layli_ptr, gint nlayers);
gint gap_mod_layer(GimpRunMode run_mode, gint32 image_id,
Modified: trunk/gap/gap_mod_layer_dialog.c
==============================================================================
--- trunk/gap/gap_mod_layer_dialog.c (original)
+++ trunk/gap/gap_mod_layer_dialog.c Sun Jul 13 17:41:41 2008
@@ -74,16 +74,16 @@
GapModFramesGlobalParams *gmop);
static void p_make_func_menu_item(const char *title
, const char *tip_text
- , gint32 action_mode
- , GtkWidget *menu
- , GapModFramesGlobalParams *gmop
- );
+ , gint32 action_mode
+ , GtkWidget *menu
+ , GapModFramesGlobalParams *gmop
+ );
static void p_make_func_menu_item_set_mode(const char *mode_name
- , gint32 action_mode
- , GtkWidget *menu
- , GapModFramesGlobalParams *gmop
- );
+ , gint32 action_mode
+ , GtkWidget *menu
+ , GapModFramesGlobalParams *gmop
+ );
static void p_make_layer_attrinutes_submenu(GtkWidget *master_menu, GapModFramesGlobalParams *gmop);
@@ -119,13 +119,13 @@
default:
if(gmop->shell)
{
- GtkWidget *l_shell;
+ GtkWidget *l_shell;
l_shell = gmop->shell;
gmop->shell = NULL;
gtk_widget_destroy(l_shell);
- gtk_main_quit();
+ gtk_main_quit();
}
break;
@@ -291,10 +291,10 @@
static void
p_make_func_menu_item(const char *title
, const char *tip_text
- , gint32 action_mode
- , GtkWidget *menu
- , GapModFramesGlobalParams *gmop
- )
+ , gint32 action_mode
+ , GtkWidget *menu
+ , GapModFramesGlobalParams *gmop
+ )
{
GtkWidget *menu_item;
@@ -342,28 +342,28 @@
p_make_func_menu_item(_("Set layer(s) visible")
,_("set all selected layers visible")
- ,GAP_MOD_ACM_SET_VISIBLE
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SET_VISIBLE
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Set layer(s) invisible")
,_("set all selected layers invisible")
- ,GAP_MOD_ACM_SET_INVISIBLE
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SET_INVISIBLE
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Set layer(s) linked")
,_("set all selected layers linked")
- ,GAP_MOD_ACM_SET_LINKED
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SET_LINKED
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Set layer(s) unlinked")
,_("set all selected layers unlinked")
- ,GAP_MOD_ACM_SET_UNLINKED
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SET_UNLINKED
+ ,sub_menu
+ ,gmop
+ );
} /* end p_make_layer_attrinutes_submenu */
@@ -374,9 +374,9 @@
*/
static void
p_make_func_menu_item_set_mode(const char *mode_name
- , gint32 action_mode
- , GtkWidget *menu
- , GapModFramesGlobalParams *gmop)
+ , gint32 action_mode
+ , GtkWidget *menu
+ , GapModFramesGlobalParams *gmop)
{
char *title;
char *tip_text;
@@ -548,16 +548,16 @@
p_make_func_menu_item(_("Raise layer(s)")
,_("raise all selected layers")
- ,GAP_MOD_ACM_RAISE
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_RAISE
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Lower layer(s)")
,_("lower all selected layers")
- ,GAP_MOD_ACM_LOWER
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LOWER
+ ,sub_menu
+ ,gmop
+ );
} /* end p_make_layer_stackpositions_submenu */
@@ -581,22 +581,22 @@
p_make_func_menu_item(_("Merge layer(s); expand as necessary")
,_("merge selected layers and expand as necessary")
- ,GAP_MOD_ACM_MERGE_EXPAND
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_MERGE_EXPAND
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Merge layer(s) clipped to image")
,_("merge selected layers and clip to image")
- ,GAP_MOD_ACM_MERGE_IMG
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_MERGE_IMG
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Merge layer(s) clipped to bg-layer")
,_("merge selected layers and clip to bg-layer")
- ,GAP_MOD_ACM_MERGE_BG
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_MERGE_BG
+ ,sub_menu
+ ,gmop
+ );
} /* end p_make_merge_layers_submenu */
@@ -621,46 +621,46 @@
p_make_func_menu_item(_("Replace selection (source is the active frame)")
,_("Replace Selection by Selection of the invoking Frame Image")
- ,GAP_MOD_ACM_SEL_REPLACE
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SEL_REPLACE
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Add selection (source is the active frame)")
,NULL
- ,GAP_MOD_ACM_SEL_ADD
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SEL_ADD
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Subtract selection (source is the active frame)")
,NULL
- ,GAP_MOD_ACM_SEL_SUBTRACT
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SEL_SUBTRACT
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Intersect selection (source is the active frame)")
,NULL
- ,GAP_MOD_ACM_SEL_INTERSECT
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SEL_INTERSECT
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Selection none")
,NULL
- ,GAP_MOD_ACM_SEL_NONE
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SEL_NONE
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Selection all")
,NULL
- ,GAP_MOD_ACM_SEL_ALL
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SEL_ALL
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Selection invert")
,NULL
- ,GAP_MOD_ACM_SEL_INVERT
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SEL_INVERT
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Selection from alpha channel (individual per frame)")
,NULL
,GAP_MOD_ACM_SEL_ALPHA
@@ -669,22 +669,22 @@
);
p_make_func_menu_item(_("Save selection to channel (individual per frame)")
,NULL
- ,GAP_MOD_ACM_SEL_SAVE
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SEL_SAVE
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Load selection from channel (individual per frame)")
,NULL
- ,GAP_MOD_ACM_SEL_LOAD
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SEL_LOAD
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Delete channel (by name)")
,NULL
- ,GAP_MOD_ACM_SEL_DELETE
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_SEL_DELETE
+ ,sub_menu
+ ,gmop
+ );
} /* end p_make_selection_submenu */
@@ -708,40 +708,40 @@
p_make_func_menu_item(_("Add white layermask (opaque)")
,NULL
- ,GAP_MOD_ACM_LMASK_WHITE
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LMASK_WHITE
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Add black layermask (transparent)")
,NULL
- ,GAP_MOD_ACM_LMASK_BLACK
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LMASK_BLACK
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Add layermask from alpha")
,NULL
- ,GAP_MOD_ACM_LMASK_ALPHA
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LMASK_ALPHA
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Add layermask transfer from alpha")
,NULL
- ,GAP_MOD_ACM_LMASK_TALPHA
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LMASK_TALPHA
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Add layermask from selection")
,NULL
- ,GAP_MOD_ACM_LMASK_SEL
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LMASK_SEL
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Add layermask from bw copy")
,NULL
- ,GAP_MOD_ACM_LMASK_BWCOPY
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LMASK_BWCOPY
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Invert existing layermask")
,NULL
,GAP_MOD_ACM_LMASK_INVERT
@@ -750,34 +750,54 @@
);
p_make_func_menu_item(_("Apply filter on layermask")
,NULL
- ,GAP_MOD_ACM_APPLY_FILTER_ON_LAYERMASK
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_APPLY_FILTER_ON_LAYERMASK
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Delete layermask")
,NULL
- ,GAP_MOD_ACM_LMASK_DELETE
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LMASK_DELETE
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Apply layermask")
,NULL
- ,GAP_MOD_ACM_LMASK_APPLY
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LMASK_APPLY
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Copy layermask from layer above")
,NULL
- ,GAP_MOD_ACM_LMASK_COPY_FROM_UPPER_LMASK
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LMASK_COPY_FROM_UPPER_LMASK
+ ,sub_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Copy layermask from layer below")
,NULL
- ,GAP_MOD_ACM_LMASK_COPY_FROM_LOWER_LMASK
- ,sub_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_LMASK_COPY_FROM_LOWER_LMASK
+ ,sub_menu
+ ,gmop
+ );
+
+ p_make_func_menu_item(_("Create mask layer representing the opacity (alpha+layermask merged)")
+ ,NULL
+ ,GAP_MOD_ACM_CREATE_LAYER_FROM_OPACITY
+ ,sub_menu
+ ,gmop
+ );
+ p_make_func_menu_item(_("Create mask layer as copy of the layermask (ignore alpha)")
+ ,NULL
+ ,GAP_MOD_ACM_CREATE_LAYER_FROM_LMASK
+ ,sub_menu
+ ,gmop
+ );
+ p_make_func_menu_item(_("Create mask layer as copy of the alpha channel (ignore layermask)")
+ ,NULL
+ ,GAP_MOD_ACM_CREATE_LAYER_FROM_ALPHA
+ ,sub_menu
+ ,gmop
+ );
+
} /* end p_make_layermask_submenu */
@@ -791,28 +811,28 @@
/* apply filter has no sub_menu */
p_make_func_menu_item(_("Apply filter on layer(s)")
,_("apply filter to all selected layers")
- ,GAP_MOD_ACM_APPLY_FILTER
- ,master_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_APPLY_FILTER
+ ,master_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Duplicate layer(s)")
,NULL
- ,GAP_MOD_ACM_DUPLICATE
- ,master_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_DUPLICATE
+ ,master_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Delete layer(s)")
,NULL
- ,GAP_MOD_ACM_DELETE
- ,master_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_DELETE
+ ,master_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Rename layer(s)")
,NULL
- ,GAP_MOD_ACM_RENAME
- ,master_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_RENAME
+ ,master_menu
+ ,gmop
+ );
p_make_func_menu_item(_("Resize layer(s) to image size")
,_("Resize selected layer(s) to image size")
@@ -823,10 +843,10 @@
p_make_func_menu_item(_("Add alpha channel")
,NULL
- ,GAP_MOD_ACM_ADD_ALPHA
- ,master_menu
- ,gmop
- );
+ ,GAP_MOD_ACM_ADD_ALPHA
+ ,master_menu
+ ,gmop
+ );
} /* end p_make_toplevel_menu_items */
@@ -887,7 +907,7 @@
g_snprintf(gmop->sel_pattern, sizeof(gmop->sel_pattern), "%s"
, gtk_entry_get_text(GTK_ENTRY(widget))
- );
+ );
} /* end p_layer_pattern_entry_update_cb */
/* --------------------------
@@ -904,7 +924,7 @@
g_snprintf(gmop->new_layername, sizeof(gmop->new_layername), "%s"
, gtk_entry_get_text(GTK_ENTRY(widget))
- );
+ );
} /* end p_new_layername_entry_update_cb */
@@ -963,11 +983,11 @@
dlg = gimp_dialog_new (_("Frames Modify"), GAP_MOD_FRAMES_PLUGIN_NAME,
NULL, 0,
- gimp_standard_help_func, GAP_MOD_FRAMES_HELP_ID,
+ gimp_standard_help_func, GAP_MOD_FRAMES_HELP_ID,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
+ NULL);
gmop->shell = dlg;
@@ -1015,8 +1035,8 @@
// as workaround dont show tooltip for the menu_bar at all:
// gimp_help_set_help_data (menu_bar
// , _("Function to be performed on all selected layers "
-// "in all frames of the selected frame range")
-// , NULL);
+// "in all frames of the selected frame range")
+// , NULL);
gtk_table_attach (GTK_TABLE(table), menu_bar, 0, 1, row, row+1
@@ -1071,12 +1091,12 @@
gtk_table_attach (GTK_TABLE(table), entry, 1, 2, row, row+1
,GTK_FILL|GTK_EXPAND , 0, 0, 0);
g_signal_connect(G_OBJECT(entry), "changed",
- G_CALLBACK (p_new_layername_entry_update_cb),
- gmop);
+ G_CALLBACK (p_new_layername_entry_update_cb),
+ gmop);
gimp_help_set_help_data(entry
, _("Name for all handled layers (or channels),\n"
"where the string '[######]' is replaced by the frame number.")
- , NULL);
+ , NULL);
/* +++++++++++++++++++++++++ */
@@ -1103,17 +1123,17 @@
l_radio_pressed = (gmop->sel_mode == GAP_MTCH_EQUAL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button),
- l_radio_pressed);
+ l_radio_pressed);
gimp_help_set_help_data(radio_button
, _("Select all layers where layer name is equal to pattern")
- , NULL);
+ , NULL);
gtk_widget_show (radio_button);
g_object_set_data (G_OBJECT (radio_button), RADIO_ITEM_INDEX_KEY
, GINT_TO_POINTER(GAP_MTCH_EQUAL));
g_signal_connect ( G_OBJECT (radio_button), "toggled",
- G_CALLBACK (p_sel_mode_radio_callback),
- gmop);
+ G_CALLBACK (p_sel_mode_radio_callback),
+ gmop);
/* the case sensitive check_button */
check_button = gtk_check_button_new_with_label (_("Case sensitive"));
@@ -1124,12 +1144,12 @@
,(GtkAttachOptions) (0), 0, 0);
gimp_help_set_help_data (check_button
, _("Lowercase and uppercase letters are considered as different")
- , NULL);
+ , NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button)
- , gmop->sel_case);
+ , gmop->sel_case);
g_signal_connect ( G_OBJECT (check_button), "toggled",
- G_CALLBACK (p_case_sensitive_toggled_callback),
- gmop);
+ G_CALLBACK (p_case_sensitive_toggled_callback),
+ gmop);
row++;
@@ -1141,17 +1161,17 @@
l_radio_pressed = (gmop->sel_mode == GAP_MTCH_START);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button),
- l_radio_pressed);
+ l_radio_pressed);
gimp_help_set_help_data(radio_button
, _("Select all layers where layer name starts with pattern")
- , NULL);
+ , NULL);
gtk_widget_show (radio_button);
g_object_set_data (G_OBJECT (radio_button), RADIO_ITEM_INDEX_KEY
, GINT_TO_POINTER(GAP_MTCH_START));
g_signal_connect ( G_OBJECT (radio_button), "toggled",
- G_CALLBACK (p_sel_mode_radio_callback),
- gmop);
+ G_CALLBACK (p_sel_mode_radio_callback),
+ gmop);
/* the invert layer_selection check_button */
check_button = gtk_check_button_new_with_label (_("Invert Layer Selection"));
@@ -1162,12 +1182,12 @@
,(GtkAttachOptions) (0), 0, 0);
gimp_help_set_help_data (check_button
, _("Perform actions on all unselected layers")
- , NULL);
+ , NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button)
- , gmop->sel_invert);
+ , gmop->sel_invert);
g_signal_connect ( G_OBJECT (check_button), "toggled",
- G_CALLBACK (p_invert_selection_toggled_callback),
- gmop);
+ G_CALLBACK (p_invert_selection_toggled_callback),
+ gmop);
row++;
@@ -1179,17 +1199,17 @@
l_radio_pressed = (gmop->sel_mode == GAP_MTCH_END);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button),
- l_radio_pressed);
+ l_radio_pressed);
gimp_help_set_help_data(radio_button
, _("Select all layers where layer name ends up with pattern")
- , NULL);
+ , NULL);
gtk_widget_show (radio_button);
g_object_set_data (G_OBJECT (radio_button), RADIO_ITEM_INDEX_KEY
, GINT_TO_POINTER(GAP_MTCH_END));
g_signal_connect ( G_OBJECT (radio_button), "toggled",
- G_CALLBACK (p_sel_mode_radio_callback),
- gmop);
+ G_CALLBACK (p_sel_mode_radio_callback),
+ gmop);
row++;
@@ -1201,17 +1221,17 @@
l_radio_pressed = (gmop->sel_mode == GAP_MTCH_ANYWHERE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button),
- l_radio_pressed);
+ l_radio_pressed);
gimp_help_set_help_data(radio_button
, _("Select all layers where layer name contains pattern")
- , NULL);
+ , NULL);
gtk_widget_show (radio_button);
g_object_set_data (G_OBJECT (radio_button), RADIO_ITEM_INDEX_KEY
, GINT_TO_POINTER(GAP_MTCH_ANYWHERE));
g_signal_connect ( G_OBJECT (radio_button), "toggled",
- G_CALLBACK (p_sel_mode_radio_callback),
- gmop);
+ G_CALLBACK (p_sel_mode_radio_callback),
+ gmop);
row++;
@@ -1223,17 +1243,17 @@
l_radio_pressed = (gmop->sel_mode == GAP_MTCH_NUMBERLIST);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button),
- l_radio_pressed);
+ l_radio_pressed);
gimp_help_set_help_data(radio_button
, _("Select layerstack positions where 0 is the top layer.\nExample: 0, 4-5, 8")
- , NULL);
+ , NULL);
gtk_widget_show (radio_button);
g_object_set_data (G_OBJECT (radio_button), RADIO_ITEM_INDEX_KEY
, GINT_TO_POINTER(GAP_MTCH_NUMBERLIST));
g_signal_connect ( G_OBJECT (radio_button), "toggled",
- G_CALLBACK (p_sel_mode_radio_callback),
- gmop);
+ G_CALLBACK (p_sel_mode_radio_callback),
+ gmop);
row++;
@@ -1245,17 +1265,17 @@
l_radio_pressed = (gmop->sel_mode == GAP_MTCH_INV_NUMBERLIST);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button),
- l_radio_pressed);
+ l_radio_pressed);
gimp_help_set_help_data(radio_button
, _("Select layerstack positions where 0 is the background layer.\nExample: 0, 4-5, 8")
- , NULL);
+ , NULL);
gtk_widget_show (radio_button);
g_object_set_data (G_OBJECT (radio_button), RADIO_ITEM_INDEX_KEY
, GINT_TO_POINTER(GAP_MTCH_INV_NUMBERLIST));
g_signal_connect ( G_OBJECT (radio_button), "toggled",
- G_CALLBACK (p_sel_mode_radio_callback),
- gmop);
+ G_CALLBACK (p_sel_mode_radio_callback),
+ gmop);
row++;
@@ -1267,17 +1287,17 @@
l_radio_pressed = (gmop->sel_mode == GAP_MTCH_ALL_VISIBLE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button),
- l_radio_pressed);
+ l_radio_pressed);
gimp_help_set_help_data(radio_button
, _("Select all visible layers")
- , NULL);
+ , NULL);
gtk_widget_show (radio_button);
g_object_set_data (G_OBJECT (radio_button), RADIO_ITEM_INDEX_KEY
, GINT_TO_POINTER(GAP_MTCH_ALL_VISIBLE));
g_signal_connect ( G_OBJECT (radio_button), "toggled",
- G_CALLBACK (p_sel_mode_radio_callback),
- gmop);
+ G_CALLBACK (p_sel_mode_radio_callback),
+ gmop);
row++;
@@ -1298,11 +1318,11 @@
gtk_entry_set_text(GTK_ENTRY(entry), gmop->sel_pattern);
gimp_help_set_help_data(entry
, _("String to identify layer names or layerstack position numbers. Example: 0,3-5")
- , NULL);
+ , NULL);
gtk_widget_show(entry);
g_signal_connect(G_OBJECT(entry), "changed",
- G_CALLBACK (p_layer_pattern_entry_update_cb),
- gmop);
+ G_CALLBACK (p_layer_pattern_entry_update_cb),
+ gmop);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 4);
@@ -1331,16 +1351,16 @@
/* the from_frame scale entry */
adj = gimp_scale_entry_new (GTK_TABLE (range_table), 0, row,
- _("From Frame:"), SCALE_WIDTH, SPIN_BUTTON_WIDTH,
- (gdouble)gmop->ainfo_ptr->first_frame_nr,
- (gdouble)gmop->ainfo_ptr->first_frame_nr, /* lower */
- (gdouble)gmop->ainfo_ptr->last_frame_nr, /* upper */
- 1, 10, /* step, page */
- 0, /* digits */
- TRUE, /* constrain */
- (gdouble)gmop->ainfo_ptr->first_frame_nr, /* lower unconstrained */
- (gdouble)gmop->ainfo_ptr->last_frame_nr, /* upper unconstrained */
- _("First handled frame"), NULL);
+ _("From Frame:"), SCALE_WIDTH, SPIN_BUTTON_WIDTH,
+ (gdouble)gmop->ainfo_ptr->first_frame_nr,
+ (gdouble)gmop->ainfo_ptr->first_frame_nr, /* lower */
+ (gdouble)gmop->ainfo_ptr->last_frame_nr, /* upper */
+ 1, 10, /* step, page */
+ 0, /* digits */
+ TRUE, /* constrain */
+ (gdouble)gmop->ainfo_ptr->first_frame_nr, /* lower unconstrained */
+ (gdouble)gmop->ainfo_ptr->last_frame_nr, /* upper unconstrained */
+ _("First handled frame"), NULL);
gmop->frame_from_adj = adj;
g_object_set_data(G_OBJECT(adj), "gmop", gmop);
g_signal_connect (adj, "value_changed",
@@ -1353,16 +1373,16 @@
/* the to_frame scale entry */
adj = gimp_scale_entry_new (GTK_TABLE (range_table), 0, row,
- _("To Frame:"), SCALE_WIDTH, SPIN_BUTTON_WIDTH,
- (gdouble)gmop->ainfo_ptr->last_frame_nr,
- (gdouble)gmop->ainfo_ptr->first_frame_nr, /* lower */
- (gdouble)gmop->ainfo_ptr->last_frame_nr, /* upper */
- 1, 10, /* step, page */
- 0, /* digits */
- TRUE, /* constrain */
- (gdouble)gmop->ainfo_ptr->first_frame_nr, /* lower unconstrained */
- (gdouble)gmop->ainfo_ptr->last_frame_nr, /* upper unconstrained */
- _("Last handled frame"), NULL);
+ _("To Frame:"), SCALE_WIDTH, SPIN_BUTTON_WIDTH,
+ (gdouble)gmop->ainfo_ptr->last_frame_nr,
+ (gdouble)gmop->ainfo_ptr->first_frame_nr, /* lower */
+ (gdouble)gmop->ainfo_ptr->last_frame_nr, /* upper */
+ 1, 10, /* step, page */
+ 0, /* digits */
+ TRUE, /* constrain */
+ (gdouble)gmop->ainfo_ptr->first_frame_nr, /* lower unconstrained */
+ (gdouble)gmop->ainfo_ptr->last_frame_nr, /* upper unconstrained */
+ _("Last handled frame"), NULL);
gmop->frame_to_adj = adj;
g_object_set_data(G_OBJECT(adj), "gmop", gmop);
g_signal_connect (adj, "value_changed",
Modified: trunk/gap/gap_mod_layer_dialog.h
==============================================================================
--- trunk/gap/gap_mod_layer_dialog.h (original)
+++ trunk/gap/gap_mod_layer_dialog.h Sun Jul 13 17:41:41 2008
@@ -1,4 +1,3 @@
-
/* gap_mod_layer_dialog.h
* 2004.11.11 hof (Wolfgang Hofer)
*
Modified: trunk/gap/gap_vex_dialog.c
==============================================================================
--- trunk/gap/gap_vex_dialog.c (original)
+++ trunk/gap/gap_vex_dialog.c Sun Jul 13 17:41:41 2008
@@ -88,6 +88,8 @@
static void on_mw__combo_deinterlace (GtkWidget *widget,
GapVexMainGlobalParams *gpp);
+static void on_mw__checkbutton_bluebox_toggled (GtkToggleButton *togglebutton,
+ GapVexMainGlobalParams *gpp);
static void on_mw__checkbutton_disable_mmx_toggled (GtkToggleButton *togglebutton,
GapVexMainGlobalParams *gpp);
static void on_mw__spinbutton_begin_frame_changed (GtkEditable *editable,
@@ -392,6 +394,14 @@
gtk_widget_set_sensitive(gpp->mw__combo_deinterlace, sensitive);
gtk_widget_set_sensitive(gpp->mw__checkbutton_multilayer, sensitive);
+ gtk_widget_set_sensitive(gpp->mw__checkbutton_generate_alpha_via_bluebox, sensitive);
+ if(gpp->val.generate_alpha_via_bluebox != TRUE)
+ {
+ sensitive = FALSE;
+ }
+ gtk_widget_set_sensitive(gpp->mw__checkbutton_extract_alpha_as_gray_frames, sensitive);
+ gtk_widget_set_sensitive(gpp->mw__checkbutton_extract_with_layermask, sensitive);
+
if((gpp->val.multilayer == 0) && (sensitive_vid))
{
sensitive = TRUE; /* we want to extract to frame files on disc */
@@ -954,6 +964,86 @@
/* --------------------------------
+ * on_mw__checkbutton_bluebox_toggled
+ * --------------------------------
+ */
+static void
+on_mw__checkbutton_bluebox_toggled
+ (GtkToggleButton *togglebutton,
+ GapVexMainGlobalParams *gpp)
+{
+ GtkWidget *wgt;
+
+ if(gap_debug) printf("CB: on_mw__checkbutton_bluebox_toggled\n");
+ if(gpp == NULL) return;
+
+ wgt = gpp->mw__checkbutton_generate_alpha_via_bluebox;
+
+ if (GTK_TOGGLE_BUTTON (wgt)->active)
+ {
+ gpp->val.generate_alpha_via_bluebox = TRUE;
+ }
+ else
+ {
+ gpp->val.generate_alpha_via_bluebox = FALSE;
+ }
+ p_update_wgt_sensitivity(gpp);
+
+}
+
+/* --------------------------------
+ * on_mw__checkbutton_graymask_toggled
+ * --------------------------------
+ */
+static void
+on_mw__checkbutton_graymask_toggled
+ (GtkToggleButton *togglebutton,
+ GapVexMainGlobalParams *gpp)
+{
+ GtkWidget *wgt;
+
+ if(gap_debug) printf("CB: on_mw__checkbutton_graymask_toggled\n");
+ if(gpp == NULL) return;
+
+ wgt = gpp->mw__checkbutton_extract_alpha_as_gray_frames;
+
+ if (GTK_TOGGLE_BUTTON (wgt)->active)
+ {
+ gpp->val.extract_alpha_as_gray_frames = TRUE;
+ }
+ else
+ {
+ gpp->val.extract_alpha_as_gray_frames = FALSE;
+ }
+}
+
+/* --------------------------------
+ * on_mw__checkbutton_layermask_toggled
+ * --------------------------------
+ */
+static void
+on_mw__checkbutton_layermask_toggled
+ (GtkToggleButton *togglebutton,
+ GapVexMainGlobalParams *gpp)
+{
+ GtkWidget *wgt;
+
+ if(gap_debug) printf("CB: on_mw__checkbutton_layermask_toggled\n");
+ if(gpp == NULL) return;
+
+ wgt = gpp->mw__checkbutton_extract_with_layermask;
+
+ if (GTK_TOGGLE_BUTTON (wgt)->active)
+ {
+ gpp->val.extract_with_layermask = TRUE;
+ }
+ else
+ {
+ gpp->val.extract_with_layermask = FALSE;
+ }
+}
+
+/* --------------------------------
* on_mw__checkbutton_disable_mmx_toggled
* --------------------------------
*/
@@ -1913,6 +2003,7 @@
GtkWidget *mw__button_OK;
GtkWidget *mw__player_frame;
GtkWidget *mw__main_hbox;
+ GtkWidget *checkbutton;
GtkWidget *label;
GtkWidget *hbox2;
GtkWidget *wgt_array[50];
@@ -2362,6 +2453,7 @@
"Off: extracted frames are written to frame files on disc")
, NULL);
+
out_row++;
/* the basename label */
@@ -2425,6 +2517,7 @@
gtk_box_pack_start (GTK_BOX (hbox2), mw__spinbutton_fn_digits, FALSE, FALSE, 0);
gimp_help_set_help_data (mw__spinbutton_fn_digits, _("Digits to use for framenumber part in filenames (use 1 if you dont want leading zeroes)"), NULL);
+
/* dummy label to fill up the hbox2 */
label = gtk_label_new (" ");
gtk_widget_show (label);
@@ -2432,6 +2525,49 @@
+ /* the graymask checkbutton */
+ checkbutton = gtk_check_button_new_with_label (_("graymask"));
+ gpp->mw__checkbutton_extract_alpha_as_gray_frames = checkbutton;
+ gtk_widget_show (checkbutton);
+ gtk_box_pack_start (GTK_BOX (hbox2), checkbutton, TRUE, TRUE, 0);
+ gimp_help_set_help_data (checkbutton
+ , _("On: extract grayscale mask (generated by bluebox)\n"
+ "Off: extract color frames 1.1")
+ , NULL);
+ g_signal_connect (G_OBJECT (checkbutton), "toggled",
+ G_CALLBACK (on_mw__checkbutton_graymask_toggled),
+ gpp);
+
+ /* the layermask checkbutton */
+ checkbutton = gtk_check_button_new_with_label (_("layermask"));
+ gpp->mw__checkbutton_extract_with_layermask = checkbutton;
+ gtk_widget_show (checkbutton);
+ gtk_box_pack_start (GTK_BOX (hbox2), checkbutton, TRUE, TRUE, 0);
+ gimp_help_set_help_data (checkbutton
+ , _("On: bluebox shall generate transparency as layermask\n"
+ "Off: bluebox shall generate transparency as alpha channel")
+ , NULL);
+ g_signal_connect (G_OBJECT (checkbutton), "toggled",
+ G_CALLBACK (on_mw__checkbutton_layermask_toggled),
+ gpp);
+
+ /* the bluebox checkbutton */
+ checkbutton = gtk_check_button_new_with_label (_("bluebox"));
+ gpp->mw__checkbutton_generate_alpha_via_bluebox = checkbutton;
+ gtk_widget_show (checkbutton);
+ gtk_table_attach (GTK_TABLE (mw__table_out), checkbutton, 2, 3, out_row, out_row+1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gimp_help_set_help_data (checkbutton
+ , _("On: add trasparency for extracted frames via blubox filter"
+ " (using values of last run in this session)\n"
+ "Off: extract frames 1.1")
+ , NULL);
+ g_signal_connect (G_OBJECT (checkbutton), "toggled",
+ G_CALLBACK (on_mw__checkbutton_bluebox_toggled),
+ gpp);
+
+
out_row++;
/* the extension label */
Modified: trunk/gap/gap_vex_exec.c
==============================================================================
--- trunk/gap/gap_vex_exec.c (original)
+++ trunk/gap/gap_vex_exec.c Sun Jul 13 17:41:41 2008
@@ -33,7 +33,8 @@
#include "gap_vex_exec.h"
#include "gap_vex_dialog.h"
#include "gap_audio_wav.h"
-
+#include "gap_audio_extract.h"
+#include "gap_bluebox.h"
/* -------------------
* p_gap_set_framerate
@@ -58,6 +59,107 @@
} /* end p_gap_set_framerate */
+/* --------------------
+ * p_vex_apply_bluebox
+ * --------------------
+ * apply bluebox settings on the specified layer
+ */
+static void
+p_vex_apply_bluebox(gint32 layer_id
+ )
+{
+ GapBlueboxGlobalParams *bbp;
+ /* blubox parameters are not provided by the caller.
+ * in this case we init with default values and try to fetch
+ * values from previous bluebox filter runs
+ */
+ bbp = gap_bluebox_bbp_new(layer_id);;
+
+ if(bbp)
+ {
+ bbp->image_id = gimp_drawable_get_image(layer_id);
+ bbp->drawable_id = layer_id;
+ bbp->layer_id = layer_id;
+ bbp->run_mode = GIMP_RUN_NONINTERACTIVE;
+ bbp->run_flag = TRUE;
+
+ gap_bluebox_apply(bbp);
+ }
+} /* end p_vex_apply_bluebox */
+
+
+/* ----------------------
+ * p_frame_postprocessing
+ * ----------------------
+ * generate transpareny as alpha channel or layermask
+ * via bluebox effect (if requested)
+ */
+static void
+p_frame_postprocessing(t_GVA_Handle *gvahand
+ ,GapVexMainGlobalParams *gpp)
+{
+ gint32 l_bbox_layer_id;
+ gint32 l_layermask_id;
+
+ l_bbox_layer_id = gvahand->layer_id;
+ if (gpp->val.generate_alpha_via_bluebox == TRUE)
+ {
+ if ((gpp->val.extract_with_layermask == TRUE)
+ || (gpp->val.extract_with_layermask == TRUE))
+ {
+ l_bbox_layer_id = gimp_layer_copy(gvahand->layer_id);
+ gimp_image_add_layer(gvahand->image_id, l_bbox_layer_id, -1);
+
+ if(gap_debug)
+ {
+ printf("created bb_layer_id:%d\n", l_bbox_layer_id);
+ }
+
+ }
+ if (!gimp_drawable_has_alpha(l_bbox_layer_id))
+ {
+ gimp_layer_add_alpha(l_bbox_layer_id);
+ }
+ p_vex_apply_bluebox(l_bbox_layer_id);
+ }
+
+ if (gimp_drawable_has_alpha(l_bbox_layer_id))
+ {
+ if (gpp->val.extract_alpha_as_gray_frames == TRUE)
+ {
+ l_layermask_id = gimp_layer_create_mask(l_bbox_layer_id, GIMP_ADD_ALPHA_MASK);
+ if(gap_debug)
+ {
+ printf("GRAY created layermask_id:%d\n", l_layermask_id);
+ }
+ gap_layer_copy_paste_drawable(gvahand->image_id, gvahand->layer_id, l_layermask_id);
+ }
+ else if (gpp->val.extract_with_layermask == TRUE)
+ {
+ l_layermask_id = gimp_layer_create_mask(l_bbox_layer_id, GIMP_ADD_ALPHA_MASK);
+ if(gap_debug)
+ {
+ printf("LAYERMASK created layermask_id:%d\n", l_layermask_id);
+ }
+ gimp_layer_add_mask(gvahand->layer_id, l_layermask_id);
+ }
+
+ if (l_bbox_layer_id != gvahand->layer_id)
+ {
+ if(gap_debug)
+ {
+ printf("remove bb_layer_id:%d\n", l_bbox_layer_id);
+ }
+
+ /* remove the temporyry bluebox layer */
+ gimp_image_remove_layer(gvahand->image_id, l_bbox_layer_id);
+ //gimp_drawable_delete(l_bbox_layer_id);
+ }
+ }
+
+
+} /* end p_frame_postprocessing */
+
/* ------------------------------
* gap_vex_exe_extract_videorange
@@ -87,6 +189,7 @@
l_overwrite_mode_audio = 0;
+
if(gap_debug)
{
printf("RUN gap_vex_exe_extract_videorange with parameters:\n");
@@ -110,6 +213,10 @@
printf("exact_seek : %d\n", (int)gpp->val.exact_seek);
printf("deinterlace : %d\n", (int)gpp->val.deinterlace);
printf("delace_threshold: %f\n", (float)gpp->val.delace_threshold);
+
+ printf("generate_alpha_via_bluebox: %d\n", (int)gpp->val.generate_alpha_via_bluebox);
+ printf("extract_alpha_as_gray_frames: %d\n", (int)gpp->val.extract_alpha_as_gray_frames);
+ printf("extract_with_layermask: %d\n", (int)gpp->val.extract_with_layermask);
}
l_save_run_mode = GIMP_RUN_INTERACTIVE; /* for the 1.st call of saving a non xcf frame */
@@ -371,11 +478,27 @@
else
{
gint32 l_sav_rc;
+ gint32 l_sav_image_id;
- l_sav_rc = gap_lib_save_named_image(gvahand->image_id
+ l_sav_image_id = gvahand->image_id;
+
+ p_frame_postprocessing(gvahand, gpp);
+ if (gpp->val.extract_alpha_as_gray_frames == TRUE)
+ {
+ l_sav_image_id = gimp_image_duplicate(gvahand->image_id);
+ gimp_image_convert_grayscale(l_sav_image_id);
+ }
+
+ l_sav_rc = gap_lib_save_named_image(l_sav_image_id
, framename
, l_save_run_mode
);
+
+ if (l_sav_image_id != gvahand->image_id)
+ {
+ /* delete temporary grayscale image */
+ gap_image_delete_immediate(l_sav_image_id);
+ }
if (l_sav_rc < 0)
{
g_message(_("failed to save file:\n'%s'"), framename);
@@ -394,6 +517,7 @@
,delace[0]
,gpp->val.delace_threshold
);
+ p_frame_postprocessing(gvahand, gpp);
if(l_rc != GVA_RET_OK)
{
break;
Modified: trunk/gap/gap_vex_main.c
==============================================================================
--- trunk/gap/gap_vex_main.c (original)
+++ trunk/gap/gap_vex_main.c Sun Jul 13 17:41:41 2008
@@ -114,6 +114,9 @@
{ GIMP_PDB_INT32, "deinterlace", "0: NO, 1: deinterlace odd rows only, 2: deinterlace even rows only, 3: deinterlace split into 2 frames where odd rows-frame is 1st, 4: deinterlace split into 2 frames where even rows-frame is 1st)" },
{ GIMP_PDB_FLOAT, "delace_threshold", "0.0 .. no interpolation, 1.0 smooth interpolation at deinterlacing" },
{ GIMP_PDB_INT32, "fn_digits", "1 <= fn_digits <= 8, number of digits to use in framenames (use 1 if you dont want leading zeroes) " },
+ { GIMP_PDB_INT32, "bluebox", "0: NO, 1: YES generate transparency by applying bluebox filter with last values" },
+ { GIMP_PDB_INT32, "graymask", "0: NO (extract frames 1:1), 1: YES extract generated transparency as gray mask" },
+ { GIMP_PDB_INT32, "layermask", "0: NO (bluebox shall generate aplha channel), 1: YES (bluebox shall generate layermask)" },
};
static GimpParamDef load_return_vals[] =
{
@@ -146,6 +149,9 @@
{ GIMP_PDB_INT32, "deinterlace", "0: NO, 1: deinterlace odd rows only, 2: deinterlace even rows only, 3: deinterlace split into 2 frames where odd rows-frame is 1st, 4: deinterlace split into 2 frames where even rows-frame is 1st)" },
{ GIMP_PDB_FLOAT, "delace_threshold", "0.0 .. no interpolation, 1.0 smooth interpolation at deinterlacing" },
{ GIMP_PDB_INT32, "fn_digits", "1 <= fn_digits <= 8, number of digits to use in framenames (use 1 if you dont want leading zeroes) " },
+ { GIMP_PDB_INT32, "bluebox", "0: NO, 1: YES generate transparency by applying bluebox filter with last values" },
+ { GIMP_PDB_INT32, "graymask", "0: NO (extract frames 1:1), 1: YES extract generated transparency as gray mask" },
+ { GIMP_PDB_INT32, "layermask", "0: NO (bluebox shall generate aplha channel), 1: YES (bluebox shall generate layermask)" },
};
static int next_args = sizeof (ext_args) / sizeof (ext_args[0]);
@@ -244,6 +250,9 @@
, (int)nparams );
+ gpp->val.generate_alpha_via_bluebox = FALSE;
+ gpp->val.extract_alpha_as_gray_frames = FALSE;
+ gpp->val.extract_with_layermask = FALSE;
if(strcmp(name, GAP_VEX_PLUG_IN_NAME) == 0)
{
@@ -281,7 +290,7 @@
if(gpp->val.run_mode == GIMP_RUN_NONINTERACTIVE)
{
/* ---------- get batch parameters ----------*/
- expected_params = l_par + 18;
+ expected_params = l_par + 21;
if(nparams != expected_params)
{
printf("Calling Error wrong number of params %d (expected: %d)\n"
@@ -347,6 +356,10 @@
gpp->val.delace_threshold = param[l_par + 17].data.d_float;
gpp->val.fn_digits = param[l_par + 18].data.d_int32;
+ gpp->val.generate_alpha_via_bluebox = param[l_par + 19].data.d_int32;
+ gpp->val.extract_alpha_as_gray_frames = param[l_par + 20].data.d_int32;
+ gpp->val.extract_with_layermask = param[l_par + 21].data.d_int32;
+
gpp->val.run = TRUE;
}
else
Modified: trunk/gap/gap_vex_main.h
==============================================================================
--- trunk/gap/gap_vex_main.h (original)
+++ trunk/gap/gap_vex_main.h Sun Jul 13 17:41:41 2008
@@ -110,6 +110,10 @@
/* current states of actual loaded (frame)image */
gint32 image_ID; /* -1 if there is no valid current image */
GimpRunMode run_mode;
+
+ gboolean generate_alpha_via_bluebox;
+ gboolean extract_alpha_as_gray_frames;
+ gboolean extract_with_layermask;
} GapVexMainVal;
@@ -162,6 +166,10 @@
GtkWidget *mw__button_OK;
GtkWidget *mw__begin_time_label;
GtkWidget *mw__end_time_label;
+
+ GtkWidget *mw__checkbutton_generate_alpha_via_bluebox;
+ GtkWidget *mw__checkbutton_extract_alpha_as_gray_frames;
+ GtkWidget *mw__checkbutton_extract_with_layermask;
} GapVexMainGlobalParams;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]