Fixed a problem with hidden/unaffected colour channels.

Fri Jun 18 18:25:24 BST 1999  Adam D. Moss  <adam@gimp.org>

	* app/paint_funcs.c: Fixed a problem with hidden/unaffected
	colour channels.
This commit is contained in:
BST 1999 Adam D. Moss 1999-06-18 17:34:29 +00:00 committed by Adam D. Moss
parent f8a0c294c2
commit 1d6e4d5eec
3 changed files with 67 additions and 4 deletions

View File

@ -1,3 +1,8 @@
Fri Jun 18 18:25:24 BST 1999 Adam D. Moss <adam@gimp.org>
* app/paint_funcs.c: Fixed a problem with hidden/unaffected
colour channels.
Fri Jun 18 10:55:46 MEST 1999 Sven Neumann <sven@gimp.org>
* tools/pdbgen/pdb/gimpage.pdb

View File

@ -5368,6 +5368,7 @@ combine_regions (PixelRegion *src1,
int type)
{
int has_alpha1, has_alpha2;
int i;
struct combine_regions_struct st;
/* Determine which sources have alpha channels */
@ -5403,15 +5404,43 @@ combine_regions (PixelRegion *src1,
st.has_alpha2 = has_alpha2;
/* cheap and easy when the row of src2 is completely opaque/transparent
and the wind is otherwise blowing in the right direction. */
and the wind is otherwise blowing in the right direction.
*/
/* First check - we can't do an opacity quickskip if the drawable
has a mask, or non-full opacity, or the layer mode dictates
that we might gain transparency.
*/
st.opacity_quickskip_possible = ((!mask) && (opacity==255) &&
(!layer_modes[mode].decrease_opacity) &&
(layer_modes[mode].affect_alpha &&
has_alpha1 &&
affect[src1->bytes-1]) );
/* Second check - if any single colour channel can't be affected,
we can't use the opacity quickskip.
*/
if (st.opacity_quickskip_possible)
{
for (i=0; i<src1->bytes-1; i++)
{
if (!affect[i])
{
st.opacity_quickskip_possible = FALSE;
break;
}
}
}
/* transparency quickskip is only possible if the layer mode
dictates that we cannot possibly gain opacity, or the 'overall'
opacity of the layer is set to zero anyway.
*/
st.transparency_quickskip_possible = ((!layer_modes[mode].increase_opacity)
|| (opacity==0));
/* Start the actual processing.
*/
pixel_regions_process_parallel ((p_func)combine_sub_region, &st, 4,
src1, src2, dest, mask);
}

View File

@ -5368,6 +5368,7 @@ combine_regions (PixelRegion *src1,
int type)
{
int has_alpha1, has_alpha2;
int i;
struct combine_regions_struct st;
/* Determine which sources have alpha channels */
@ -5403,15 +5404,43 @@ combine_regions (PixelRegion *src1,
st.has_alpha2 = has_alpha2;
/* cheap and easy when the row of src2 is completely opaque/transparent
and the wind is otherwise blowing in the right direction. */
and the wind is otherwise blowing in the right direction.
*/
/* First check - we can't do an opacity quickskip if the drawable
has a mask, or non-full opacity, or the layer mode dictates
that we might gain transparency.
*/
st.opacity_quickskip_possible = ((!mask) && (opacity==255) &&
(!layer_modes[mode].decrease_opacity) &&
(layer_modes[mode].affect_alpha &&
has_alpha1 &&
affect[src1->bytes-1]) );
/* Second check - if any single colour channel can't be affected,
we can't use the opacity quickskip.
*/
if (st.opacity_quickskip_possible)
{
for (i=0; i<src1->bytes-1; i++)
{
if (!affect[i])
{
st.opacity_quickskip_possible = FALSE;
break;
}
}
}
/* transparency quickskip is only possible if the layer mode
dictates that we cannot possibly gain opacity, or the 'overall'
opacity of the layer is set to zero anyway.
*/
st.transparency_quickskip_possible = ((!layer_modes[mode].increase_opacity)
|| (opacity==0));
/* Start the actual processing.
*/
pixel_regions_process_parallel ((p_func)combine_sub_region, &st, 4,
src1, src2, dest, mask);
}