mirror of https://github.com/GNOME/gimp.git
app: add gimp_drawable_filter_set_override_constraints()
In GimpDrawableFilter, add a gimp_drawable_filter_set_override_constraints() function, which allows bypassing certain constraints applied to the filter, based on the drawable type and state. Yes, this is a bit of a hack, added mostly as a quick-and-dirty way to allow us to add filters to layer masks that affect their bounding box, in preparation for composited transform previews.
This commit is contained in:
parent
1f81c31405
commit
b9a801f7d4
|
@ -81,6 +81,8 @@ struct _GimpDrawableFilter
|
||||||
gboolean color_managed;
|
gboolean color_managed;
|
||||||
gboolean gamma_hack;
|
gboolean gamma_hack;
|
||||||
|
|
||||||
|
gboolean override_constraints;
|
||||||
|
|
||||||
GeglRectangle filter_area;
|
GeglRectangle filter_area;
|
||||||
gboolean filter_clip;
|
gboolean filter_clip;
|
||||||
|
|
||||||
|
@ -454,6 +456,25 @@ gimp_drawable_filter_set_gamma_hack (GimpDrawableFilter *filter,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gimp_drawable_filter_set_override_constraints (GimpDrawableFilter *filter,
|
||||||
|
gboolean override_constraints)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GIMP_IS_DRAWABLE_FILTER (filter));
|
||||||
|
|
||||||
|
if (override_constraints != filter->override_constraints)
|
||||||
|
{
|
||||||
|
filter->override_constraints = override_constraints;
|
||||||
|
|
||||||
|
gimp_drawable_filter_sync_affect (filter);
|
||||||
|
gimp_drawable_filter_sync_format (filter);
|
||||||
|
gimp_drawable_filter_sync_clip (filter, TRUE);
|
||||||
|
|
||||||
|
if (gimp_drawable_filter_is_filtering (filter))
|
||||||
|
gimp_drawable_filter_update_drawable (filter, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gimp_drawable_filter_apply (GimpDrawableFilter *filter,
|
gimp_drawable_filter_apply (GimpDrawableFilter *filter,
|
||||||
const GeglRectangle *area)
|
const GeglRectangle *area)
|
||||||
|
@ -532,7 +553,10 @@ gimp_drawable_filter_sync_clip (GimpDrawableFilter *filter,
|
||||||
{
|
{
|
||||||
gboolean clip;
|
gboolean clip;
|
||||||
|
|
||||||
clip = gimp_item_get_clip (GIMP_ITEM (filter->drawable), filter->clip);
|
if (filter->override_constraints)
|
||||||
|
clip = filter->clip;
|
||||||
|
else
|
||||||
|
clip = gimp_item_get_clip (GIMP_ITEM (filter->drawable), filter->clip);
|
||||||
|
|
||||||
if (! clip)
|
if (! clip)
|
||||||
{
|
{
|
||||||
|
@ -787,7 +811,14 @@ gimp_drawable_filter_sync_affect (GimpDrawableFilter *filter)
|
||||||
{
|
{
|
||||||
gimp_applicator_set_affect (
|
gimp_applicator_set_affect (
|
||||||
filter->applicator,
|
filter->applicator,
|
||||||
gimp_drawable_get_active_mask (filter->drawable));
|
filter->override_constraints ?
|
||||||
|
|
||||||
|
GIMP_COMPONENT_MASK_RED |
|
||||||
|
GIMP_COMPONENT_MASK_GREEN |
|
||||||
|
GIMP_COMPONENT_MASK_BLUE |
|
||||||
|
GIMP_COMPONENT_MASK_ALPHA :
|
||||||
|
|
||||||
|
gimp_drawable_get_active_mask (filter->drawable));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -795,10 +826,15 @@ gimp_drawable_filter_sync_format (GimpDrawableFilter *filter)
|
||||||
{
|
{
|
||||||
const Babl *format;
|
const Babl *format;
|
||||||
|
|
||||||
if (filter->add_alpha && GIMP_IS_LAYER (filter->drawable))
|
if (filter->add_alpha &&
|
||||||
format = gimp_drawable_get_format_with_alpha (filter->drawable);
|
(GIMP_IS_LAYER (filter->drawable) || filter->override_constraints))
|
||||||
|
{
|
||||||
|
format = gimp_drawable_get_format_with_alpha (filter->drawable);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
format = gimp_drawable_get_format (filter->drawable);
|
{
|
||||||
|
format = gimp_drawable_get_format (filter->drawable);
|
||||||
|
}
|
||||||
|
|
||||||
gimp_applicator_set_output_format (filter->applicator, format);
|
gimp_applicator_set_output_format (filter->applicator, format);
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,10 @@ void gimp_drawable_filter_set_add_alpha (GimpDrawableFilter *filter,
|
||||||
void gimp_drawable_filter_set_gamma_hack (GimpDrawableFilter *filter,
|
void gimp_drawable_filter_set_gamma_hack (GimpDrawableFilter *filter,
|
||||||
gboolean gamma_hack);
|
gboolean gamma_hack);
|
||||||
|
|
||||||
|
void gimp_drawable_filter_set_override_constraints
|
||||||
|
(GimpDrawableFilter *filter,
|
||||||
|
gboolean override_constraints);
|
||||||
|
|
||||||
void gimp_drawable_filter_apply (GimpDrawableFilter *filter,
|
void gimp_drawable_filter_apply (GimpDrawableFilter *filter,
|
||||||
const GeglRectangle *area);
|
const GeglRectangle *area);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue