diff options
author | fmalita <fmalita@chromium.org> | 2016-08-10 17:11:29 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-10 17:11:29 -0700 |
commit | 286a8657da0364006e95cb0988477cc3a5f0e112 (patch) | |
tree | 80ae24ff27cdb50099cfa542ce9c4e9d322195e9 /experimental/svg/model/SkSVGRect.cpp | |
parent | d71fe83ac211a1fef77d122d39c33fdfe7010f86 (diff) |
[SVGDom] Add rx/ry support for <rect>
R=stephana@google.com,robertphillips@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2234863002
Review-Url: https://codereview.chromium.org/2234863002
Diffstat (limited to 'experimental/svg/model/SkSVGRect.cpp')
-rw-r--r-- | experimental/svg/model/SkSVGRect.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/experimental/svg/model/SkSVGRect.cpp b/experimental/svg/model/SkSVGRect.cpp index b65c2b9974..cbb18306a5 100644 --- a/experimental/svg/model/SkSVGRect.cpp +++ b/experimental/svg/model/SkSVGRect.cpp @@ -29,6 +29,14 @@ void SkSVGRect::setHeight(const SkSVGLength& h) { fHeight = h; } +void SkSVGRect::setRx(const SkSVGLength& rx) { + fRx = rx; +} + +void SkSVGRect::setRy(const SkSVGLength& ry) { + fRy = ry; +} + void SkSVGRect::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) { switch (attr) { case SkSVGAttribute::kX: @@ -51,6 +59,16 @@ void SkSVGRect::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) { this->setHeight(*h); } break; + case SkSVGAttribute::kRx: + if (const auto* rx = v.as<SkSVGLengthValue>()) { + this->setRx(*rx); + } + break; + case SkSVGAttribute::kRy: + if (const auto* ry = v.as<SkSVGLengthValue>()) { + this->setRy(*ry); + } + break; default: this->INHERITED::onSetAttribute(attr, v); } @@ -58,5 +76,13 @@ void SkSVGRect::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) { void SkSVGRect::onDraw(SkCanvas* canvas, const SkSVGLengthContext& lctx, const SkPaint& paint) const { - canvas->drawRect(lctx.resolveRect(fX, fY, fWidth, fHeight), paint); + const SkRect rect = lctx.resolveRect(fX, fY, fWidth, fHeight); + const SkScalar rx = lctx.resolve(fRx, SkSVGLengthContext::LengthType::kHorizontal); + const SkScalar ry = lctx.resolve(fRy, SkSVGLengthContext::LengthType::kVertical); + + if (rx || ry) { + canvas->drawRRect(SkRRect::MakeRectXY(rect, rx, ry), paint); + } else { + canvas->drawRect(rect, paint); + } } |