i_fill_combinef_f combinef_double;
int channel_zero = 0;
+ mm_log((1, "i_compose_mask(out %p, src %p, mask %p, out(%d, %d), src(%d, %d),"
+ " mask(%d,%d), size(%d,%d), combine %d opacity %f\n", out, src,
+ mask, out_left, out_top, src_left, src_top, mask_left, mask_top, width,
+ height, combine, opacity));
+
i_clear_error();
if (out_left >= out->xsize
|| out_top >= out->ysize
if (out_left < 0) {
width = out_left + width;
+ src_left -= out_left;
+ mask_left -= out_left;
out_left = 0;
}
if (out_left + width > out->xsize)
if (out_top < 0) {
height = out_top + height;
+ mask_top -= out_top;
+ src_top -= out_top;
out_top = 0;
}
if (out_top + height > out->ysize)
if (src_left < 0) {
width = src_left + width;
+ out_left -= src_left;
+ mask_left -= src_left;
src_left = 0;
}
if (src_left + width > src->xsize)
if (src_top < 0) {
height = src_top + height;
+ out_top -= src_top;
+ mask_top -= src_top;
src_top = 0;
}
if (src_top + height > src->ysize)
- height = src->ysize - src_left;
+ height = src->ysize - src_top;
if (mask_left < 0) {
width = mask_left + width;
+ out_left -= mask_left;
+ src_left -= mask_left;
mask_left = 0;
}
if (mask_left + width > mask->xsize)
width = mask->xsize - mask_left;
if (mask_top < 0) {
- height = mask->ysize + height;
+ height = mask_top + height;
+ src_top -= mask_top;
+ out_top -= mask_top;
mask_top = 0;
}
if (mask_top + height > mask->ysize)
- height = mask->xsize - mask_top;
+ height = mask->ysize - mask_top;
if (opacity > 1.0)
opacity = 1.0;
- else if (opacity <= 0)
+ else if (opacity <= 0) {
+ i_push_error(0, "opacity must be positive");
return 0;
+ }
+
+ mm_log((1, "after adjustments: (out(%d, %d), src(%d, %d),"
+ " mask(%d,%d), size(%d,%d)\n",
+ out_left, out_top, src_left, src_top, mask_left, mask_top, width,
+ height));
i_get_combine(combine, &combinef_8, &combinef_double);
i_fill_combine_f combinef_8;
i_fill_combinef_f combinef_double;
+ mm_log((1, "i_compose(out %p, src %p, out(%d, %d), src(%d, %d), size(%d,%d),"
+ " combine %d opacity %f\n", out, src, out_left, out_top,
+ src_left, src_top, width, height, combine, opacity));
+
i_clear_error();
if (out_left >= out->xsize
|| out_top >= out->ysize
if (out_left < 0) {
width = out_left + width;
+ src_left -= out_left;
out_left = 0;
}
if (out_left + width > out->xsize)
if (out_top < 0) {
height = out_top + height;
+ src_top -= out_top;
out_top = 0;
}
if (out_top + height > out->ysize)
if (src_left < 0) {
width = src_left + width;
+ out_left -= src_left;
src_left = 0;
}
if (src_left + width > src->xsize)
if (src_top < 0) {
height = src_top + height;
+ out_top -= src_top;
src_top = 0;
}
if (src_top + height > src->ysize)
- height = src->ysize - src_left;
+ height = src->ysize - src_top;
if (opacity > 1.0)
opacity = 1.0;
- else if (opacity <= 0)
+ else if (opacity <= 0) {
+ i_push_error(0, "opacity must be positive");
return 0;
+ }
i_get_combine(combine, &combinef_8, &combinef_double);