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);
|
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>
|
TemporaryRef<SourceSurface>
|
||||||
DrawTargetSkia::CreateSourceSurfaceFromData(unsigned char *aData,
|
DrawTargetSkia::CreateSourceSurfaceFromData(unsigned char *aData,
|
||||||
const IntSize &aSize,
|
const IntSize &aSize,
|
||||||
|
@ -78,7 +78,7 @@ public:
|
|||||||
virtual void MaskSurface(const Pattern &aSource,
|
virtual void MaskSurface(const Pattern &aSource,
|
||||||
SourceSurface *aMask,
|
SourceSurface *aMask,
|
||||||
Point aOffset,
|
Point aOffset,
|
||||||
const DrawOptions &aOptions = DrawOptions()) { MOZ_ASSERT(0); };
|
const DrawOptions &aOptions = DrawOptions());
|
||||||
virtual void PushClip(const Path *aPath);
|
virtual void PushClip(const Path *aPath);
|
||||||
virtual void PushClipRect(const Rect& aRect);
|
virtual void PushClipRect(const Rect& aRect);
|
||||||
virtual void PopClip();
|
virtual void PopClip();
|
||||||
|
Loading…
Reference in New Issue
Block a user