diff options
author | Mike Reed <reed@google.com> | 2017-03-02 20:22:35 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-02 20:22:48 +0000 |
commit | ea5e676a7b75600edcde3912886486004ccd7626 (patch) | |
tree | 1ed67f45d493bd4efdef0f0fb83941529aabb2a6 /src/svg | |
parent | d7875f57bd5f17ac27f1cb2ace25224299ff2389 (diff) |
Revert "Remove SkDraw from device-draw methods, and enable device-centric clipping."
This reverts commit c77e33f73d3e86cfabf925d6f2e1166f81022575.
Reason for revert: breaks isClipRect
- this CL inspected the conservative clip for this, which is (by definition) a rect
- probably need to query the device for this info
Original change's description:
> Remove SkDraw from device-draw methods, and enable device-centric clipping.
>
> BUG=skia:6214
>
> Change-Id: I593900724310d09133ae4791ef68d38c43762fc2
> Reviewed-on: https://skia-review.googlesource.com/8806
> Reviewed-by: Brian Salomon <bsalomon@google.com>
> Commit-Queue: Mike Reed <reed@google.com>
>
TBR=bsalomon@google.com,halcanary@google.com,msarett@google.com,robertphillips@google.com,fmalita@chromium.org,reed@google.com,reviews@skia.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:6214
Change-Id: I9090cbbb9f45b2dd204d9fdc187de2ff714b93f6
Reviewed-on: https://skia-review.googlesource.com/9172
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src/svg')
-rw-r--r-- | src/svg/SkSVGDevice.cpp | 59 | ||||
-rw-r--r-- | src/svg/SkSVGDevice.h | 28 |
2 files changed, 46 insertions, 41 deletions
diff --git a/src/svg/SkSVGDevice.cpp b/src/svg/SkSVGDevice.cpp index 7ce616436c..360bb07d44 100644 --- a/src/svg/SkSVGDevice.cpp +++ b/src/svg/SkSVGDevice.cpp @@ -278,9 +278,14 @@ struct SkSVGDevice::MxCp { const SkMatrix* fMatrix; const SkClipStack* fClipStack; - MxCp(SkSVGDevice* device) { + MxCp(SkSVGDevice* device, const SkDraw& draw) { +#ifdef SK_USE_DEVICE_CLIPPING fMatrix = &device->ctm(); fClipStack = &device->cs(); +#else + fMatrix = draw.fMatrix; + fClipStack = draw.fClipStack; +#endif } }; @@ -602,13 +607,13 @@ SkSVGDevice::SkSVGDevice(const SkISize& size, SkXMLWriter* writer) SkSVGDevice::~SkSVGDevice() { } -void SkSVGDevice::drawPaint(const SkPaint& paint) { - AutoElement rect("rect", fWriter, fResourceBucket.get(), MxCp(this), paint); +void SkSVGDevice::drawPaint(const SkDraw& draw, const SkPaint& paint) { + AutoElement rect("rect", fWriter, fResourceBucket.get(), MxCp(this, draw), paint); rect.addRectAttributes(SkRect::MakeWH(SkIntToScalar(this->width()), SkIntToScalar(this->height()))); } -void SkSVGDevice::drawPoints(SkCanvas::PointMode mode, size_t count, +void SkSVGDevice::drawPoints(const SkDraw& draw, SkCanvas::PointMode mode, size_t count, const SkPoint pts[], const SkPaint& paint) { SkPath path; @@ -623,7 +628,7 @@ void SkSVGDevice::drawPoints(SkCanvas::PointMode mode, size_t count, path.rewind(); path.moveTo(pts[i]); path.lineTo(pts[i+1]); - AutoElement elem("path", fWriter, fResourceBucket.get(), MxCp(this), paint); + AutoElement elem("path", fWriter, fResourceBucket.get(), MxCp(this, draw), paint); elem.addPathAttributes(path); } break; @@ -631,37 +636,37 @@ void SkSVGDevice::drawPoints(SkCanvas::PointMode mode, size_t count, if (count > 1) { path.addPoly(pts, SkToInt(count), false); path.moveTo(pts[0]); - AutoElement elem("path", fWriter, fResourceBucket.get(), MxCp(this), paint); + AutoElement elem("path", fWriter, fResourceBucket.get(), MxCp(this, draw), paint); elem.addPathAttributes(path); } break; } } -void SkSVGDevice::drawRect(const SkRect& r, const SkPaint& paint) { - AutoElement rect("rect", fWriter, fResourceBucket.get(), MxCp(this), paint); +void SkSVGDevice::drawRect(const SkDraw& draw, const SkRect& r, const SkPaint& paint) { + AutoElement rect("rect", fWriter, fResourceBucket.get(), MxCp(this, draw), paint); rect.addRectAttributes(r); } -void SkSVGDevice::drawOval(const SkRect& oval, const SkPaint& paint) { - AutoElement ellipse("ellipse", fWriter, fResourceBucket.get(), MxCp(this), paint); +void SkSVGDevice::drawOval(const SkDraw& draw, const SkRect& oval, const SkPaint& paint) { + AutoElement ellipse("ellipse", fWriter, fResourceBucket.get(), MxCp(this, draw), paint); ellipse.addAttribute("cx", oval.centerX()); ellipse.addAttribute("cy", oval.centerY()); ellipse.addAttribute("rx", oval.width() / 2); ellipse.addAttribute("ry", oval.height() / 2); } -void SkSVGDevice::drawRRect(const SkRRect& rr, const SkPaint& paint) { +void SkSVGDevice::drawRRect(const SkDraw& draw, const SkRRect& rr, const SkPaint& paint) { SkPath path; path.addRRect(rr); - AutoElement elem("path", fWriter, fResourceBucket.get(), MxCp(this), paint); + AutoElement elem("path", fWriter, fResourceBucket.get(), MxCp(this, draw), paint); elem.addPathAttributes(path); } -void SkSVGDevice::drawPath(const SkPath& path, const SkPaint& paint, +void SkSVGDevice::drawPath(const SkDraw& draw, const SkPath& path, const SkPaint& paint, const SkMatrix* prePathMatrix, bool pathIsMutable) { - AutoElement elem("path", fWriter, fResourceBucket.get(), MxCp(this), paint); + AutoElement elem("path", fWriter, fResourceBucket.get(), MxCp(this, draw), paint); elem.addPathAttributes(path); // TODO: inverse fill types? @@ -706,9 +711,9 @@ void SkSVGDevice::drawBitmapCommon(const MxCp& mc, const SkBitmap& bm, const SkP } } -void SkSVGDevice::drawBitmap(const SkBitmap& bitmap, +void SkSVGDevice::drawBitmap(const SkDraw& draw, const SkBitmap& bitmap, const SkMatrix& matrix, const SkPaint& paint) { - MxCp mc(this); + MxCp mc(this, draw); SkMatrix adjustedMatrix = *mc.fMatrix; adjustedMatrix.preConcat(matrix); mc.fMatrix = &adjustedMatrix; @@ -716,9 +721,9 @@ void SkSVGDevice::drawBitmap(const SkBitmap& bitmap, drawBitmapCommon(mc, bitmap, paint); } -void SkSVGDevice::drawSprite(const SkBitmap& bitmap, +void SkSVGDevice::drawSprite(const SkDraw& draw, const SkBitmap& bitmap, int x, int y, const SkPaint& paint) { - MxCp mc(this); + MxCp mc(this, draw); SkMatrix adjustedMatrix = *mc.fMatrix; adjustedMatrix.preTranslate(SkIntToScalar(x), SkIntToScalar(y)); mc.fMatrix = &adjustedMatrix; @@ -726,10 +731,10 @@ void SkSVGDevice::drawSprite(const SkBitmap& bitmap, drawBitmapCommon(mc, bitmap, paint); } -void SkSVGDevice::drawBitmapRect(const SkBitmap& bm, const SkRect* srcOrNull, +void SkSVGDevice::drawBitmapRect(const SkDraw& draw, const SkBitmap& bm, const SkRect* srcOrNull, const SkRect& dst, const SkPaint& paint, SkCanvas::SrcRectConstraint) { - MxCp mc(this); + MxCp mc(this, draw); SkClipStack adjustedClipStack; if (srcOrNull && *srcOrNull != SkRect::Make(bm.bounds())) { @@ -749,9 +754,9 @@ void SkSVGDevice::drawBitmapRect(const SkBitmap& bm, const SkRect* srcOrNull, drawBitmapCommon(mc, bm, paint); } -void SkSVGDevice::drawText(const void* text, size_t len, +void SkSVGDevice::drawText(const SkDraw& draw, const void* text, size_t len, SkScalar x, SkScalar y, const SkPaint& paint) { - AutoElement elem("text", fWriter, fResourceBucket.get(), MxCp(this), paint); + AutoElement elem("text", fWriter, fResourceBucket.get(), MxCp(this, draw), paint); elem.addTextAttributes(paint); SVGTextBuilder builder(text, len, paint, SkPoint::Make(x, y), 0); @@ -760,12 +765,12 @@ void SkSVGDevice::drawText(const void* text, size_t len, elem.addText(builder.text()); } -void SkSVGDevice::drawPosText(const void* text, size_t len, +void SkSVGDevice::drawPosText(const SkDraw& draw, const void* text, size_t len, const SkScalar pos[], int scalarsPerPos, const SkPoint& offset, const SkPaint& paint) { SkASSERT(scalarsPerPos == 1 || scalarsPerPos == 2); - AutoElement elem("text", fWriter, fResourceBucket.get(), MxCp(this), paint); + AutoElement elem("text", fWriter, fResourceBucket.get(), MxCp(this, draw), paint); elem.addTextAttributes(paint); SVGTextBuilder builder(text, len, paint, offset, scalarsPerPos, pos); @@ -774,7 +779,7 @@ void SkSVGDevice::drawPosText(const void* text, size_t len, elem.addText(builder.text()); } -void SkSVGDevice::drawTextOnPath(const void* text, size_t len, const SkPath& path, +void SkSVGDevice::drawTextOnPath(const SkDraw&, const void* text, size_t len, const SkPath& path, const SkMatrix* matrix, const SkPaint& paint) { SkString pathID = fResourceBucket->addPath(); @@ -811,7 +816,7 @@ void SkSVGDevice::drawTextOnPath(const void* text, size_t len, const SkPath& pat } } -void SkSVGDevice::drawVertices(SkCanvas::VertexMode, int vertexCount, +void SkSVGDevice::drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], const SkPoint texs[], const SkColor colors[], SkBlendMode, const uint16_t indices[], int indexCount, @@ -820,7 +825,7 @@ void SkSVGDevice::drawVertices(SkCanvas::VertexMode, int vertexCount, SkDebugf("unsupported operation: drawVertices()\n"); } -void SkSVGDevice::drawDevice(SkBaseDevice*, int x, int y, +void SkSVGDevice::drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, const SkPaint&) { // todo SkDebugf("unsupported operation: drawDevice()\n"); diff --git a/src/svg/SkSVGDevice.h b/src/svg/SkSVGDevice.h index 78f4cea834..106537e4ed 100644 --- a/src/svg/SkSVGDevice.h +++ b/src/svg/SkSVGDevice.h @@ -18,40 +18,40 @@ public: static SkBaseDevice* Create(const SkISize& size, SkXMLWriter* writer); protected: - void drawPaint(const SkPaint& paint) override; - void drawPoints(SkCanvas::PointMode mode, size_t count, + void drawPaint(const SkDraw&, const SkPaint& paint) override; + void drawPoints(const SkDraw&, SkCanvas::PointMode mode, size_t count, const SkPoint[], const SkPaint& paint) override; - void drawRect(const SkRect& r, const SkPaint& paint) override; - void drawOval(const SkRect& oval, const SkPaint& paint) override; - void drawRRect(const SkRRect& rr, const SkPaint& paint) override; - void drawPath(const SkPath& path, + void drawRect(const SkDraw&, const SkRect& r, const SkPaint& paint) override; + void drawOval(const SkDraw&, const SkRect& oval, const SkPaint& paint) override; + void drawRRect(const SkDraw&, const SkRRect& rr, const SkPaint& paint) override; + void drawPath(const SkDraw&, const SkPath& path, const SkPaint& paint, const SkMatrix* prePathMatrix = nullptr, bool pathIsMutable = false) override; - void drawBitmap(const SkBitmap& bitmap, + void drawBitmap(const SkDraw&, const SkBitmap& bitmap, const SkMatrix& matrix, const SkPaint& paint) override; - void drawSprite(const SkBitmap& bitmap, + void drawSprite(const SkDraw&, const SkBitmap& bitmap, int x, int y, const SkPaint& paint) override; - void drawBitmapRect(const SkBitmap&, + void drawBitmapRect(const SkDraw&, const SkBitmap&, const SkRect* srcOrNull, const SkRect& dst, const SkPaint& paint, SkCanvas::SrcRectConstraint) override; - void drawText(const void* text, size_t len, + void drawText(const SkDraw&, const void* text, size_t len, SkScalar x, SkScalar y, const SkPaint& paint) override; - void drawPosText(const void* text, size_t len, + void drawPosText(const SkDraw&, const void* text, size_t len, const SkScalar pos[], int scalarsPerPos, const SkPoint& offset, const SkPaint& paint) override; - void drawTextOnPath(const void* text, size_t len, + void drawTextOnPath(const SkDraw&, const void* text, size_t len, const SkPath& path, const SkMatrix* matrix, const SkPaint& paint) override; - void drawVertices(SkCanvas::VertexMode, int vertexCount, + void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], const SkPoint texs[], const SkColor colors[], SkBlendMode, const uint16_t indices[], int indexCount, const SkPaint& paint) override; - void drawDevice(SkBaseDevice*, int x, int y, + void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, const SkPaint&) override; private: |