Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit 71ed7bf

Browse files
committed
[[ Bug 19430 ]] Modify MCGMaskedFill to operate on device coordinates.
[[ Bug 19430 ]] Fix mask filling to use provided paint color + mode
1 parent 2ab01c7 commit 71ed7bf

File tree

1 file changed

+7
-10
lines changed

1 file changed

+7
-10
lines changed

libgraphics/src/context.cpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,20 +1090,17 @@ class MCGContextEffectInvertedInnerShader: public SkShader
10901090
#endif
10911091

10921092
// Utility methods for drawing against a raster mask
1093-
static void MCGMaskedFill(SkCanvas& p_canvas, const SkMask& p_mask, const SkPaint& p_paint)
1093+
static void MCGMaskedDeviceFill(SkCanvas& p_canvas, const SkMask& p_mask, const SkPaint& p_paint)
10941094
{
10951095
SkRect t_bounds = SkRect::Make(p_mask.fBounds);
10961096
SkImageInfo t_info = SkImageInfo::MakeA8(p_mask.fBounds.width(), p_mask.fBounds.height());
10971097
SkBitmap t_mask_bitmap;
10981098
t_mask_bitmap.setInfo(t_info);
10991099
t_mask_bitmap.installMaskPixels(p_mask);
11001100

1101-
SkPaint t_paint;
1102-
t_paint.setBlendMode(SkBlendMode::kDstIn);
1103-
1104-
p_canvas.saveLayer(&t_bounds, &p_paint);
1105-
p_canvas.drawColor(SK_ColorWHITE);
1106-
p_canvas.drawBitmap(t_mask_bitmap, p_mask.fBounds.left(), p_mask.fBounds.top(), &t_paint);
1101+
p_canvas.save();
1102+
p_canvas.resetMatrix();
1103+
p_canvas.drawBitmap(t_mask_bitmap, t_bounds.x(), t_bounds.y(), &p_paint);
11071104
p_canvas.restore();
11081105
}
11091106

@@ -1345,7 +1342,7 @@ static void MCGContextRenderEffect(MCGContextRef self, const SkMask& p_mask, MCG
13451342
#endif
13461343

13471344
// Now paint.
1348-
MCGMaskedFill(*self->layer->canvas, t_blurred_mask, t_paint);
1345+
MCGMaskedDeviceFill(*self->layer->canvas, t_blurred_mask, t_paint);
13491346

13501347
// Free the blurred mask.
13511348
SkMask::FreeImage(t_old_blurred_mask_fImage);
@@ -1435,7 +1432,7 @@ static void MCGContextRenderEffects(MCGContextRef self, MCGContextLayerRef p_chi
14351432

14361433
t_paint.setBlendMode(MCGBlendModeToSkBlendMode(p_effects.color_overlay.blend_mode));
14371434

1438-
MCGMaskedFill(*self->layer->canvas, t_child_mask, t_paint);
1435+
MCGMaskedDeviceFill(*self->layer->canvas, t_child_mask, t_paint);
14391436
}
14401437

14411438
SkMask::FreeImage(t_child_mask . fImage);
@@ -2726,7 +2723,7 @@ void MCGContextDrawDeviceMask(MCGContextRef self, MCGMaskRef p_mask, int32_t p_t
27262723
t_paint.setBlendMode(MCGBlendModeToSkBlendMode(self->state->blend_mode));
27272724

27282725
p_mask -> mask . fBounds . offset(p_tx, p_ty);
2729-
MCGMaskedFill(*self->layer->canvas, p_mask->mask, t_paint);
2726+
MCGMaskedDeviceFill(*self->layer->canvas, p_mask->mask, t_paint);
27302727
p_mask -> mask . fBounds . offset(-p_tx, -p_ty);
27312728
}
27322729

0 commit comments

Comments
 (0)