mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 12:25:53 +00:00
Bug 933567 - Implement MaskSurface for Skia. r=mattwoodrow
This commit is contained in:
parent
62c4edbec0
commit
b95c755355
@ -621,6 +621,31 @@ DrawTargetSkia::Mask(const Pattern &aSource,
|
||||
mCanvas->drawPath(path, paint.mPaint);
|
||||
}
|
||||
|
||||
void
|
||||
DrawTargetSkia::MaskSurface(const Pattern &aSource,
|
||||
SourceSurface *aMask,
|
||||
Point aOffset,
|
||||
const DrawOptions &aOptions)
|
||||
{
|
||||
MarkChanged();
|
||||
AutoPaintSetup paint(mCanvas.get(), aOptions, aSource);
|
||||
|
||||
SkPaint maskPaint;
|
||||
SetPaintPattern(maskPaint, SurfacePattern(aMask, EXTEND_CLAMP));
|
||||
|
||||
SkMatrix transform = maskPaint.getShader()->getLocalMatrix();
|
||||
transform.postTranslate(SkFloatToScalar(aOffset.x), SkFloatToScalar(aOffset.y));
|
||||
maskPaint.getShader()->setLocalMatrix(transform);
|
||||
|
||||
SkLayerRasterizer *raster = new SkLayerRasterizer();
|
||||
raster->addLayer(maskPaint);
|
||||
SkSafeUnref(paint.mPaint.setRasterizer(raster));
|
||||
|
||||
IntSize size = aMask->GetSize();
|
||||
Rect rect = Rect(aOffset.x, aOffset.y, size.width, size.height);
|
||||
mCanvas->drawRect(RectToSkRect(rect), paint.mPaint);
|
||||
}
|
||||
|
||||
TemporaryRef<SourceSurface>
|
||||
DrawTargetSkia::CreateSourceSurfaceFromData(unsigned char *aData,
|
||||
const IntSize &aSize,
|
||||
|
@ -78,7 +78,7 @@ public:
|
||||
virtual void MaskSurface(const Pattern &aSource,
|
||||
SourceSurface *aMask,
|
||||
Point aOffset,
|
||||
const DrawOptions &aOptions = DrawOptions()) { MOZ_ASSERT(0); };
|
||||
const DrawOptions &aOptions = DrawOptions());
|
||||
virtual void PushClip(const Path *aPath);
|
||||
virtual void PushClipRect(const Rect& aRect);
|
||||
virtual void PopClip();
|
||||
|
Loading…
Reference in New Issue
Block a user