skia2/experimental/svg/model/SkSVGTransformableNode.cpp
fmalita c97796b47b [SVGDom] Improved transform parsing
Update 'transform' attribute parsing to a more robust, SkSVGAttributeParser-based implementation.

R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2220933003

Review-Url: https://codereview.chromium.org/2220933003
2016-08-08 12:58:57 -07:00

39 lines
1007 B
C++

/*
* Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "SkCanvas.h"
#include "SkSVGRenderContext.h"
#include "SkSVGTransformableNode.h"
#include "SkSVGValue.h"
SkSVGTransformableNode::SkSVGTransformableNode(SkSVGTag tag)
: INHERITED(tag)
, fTransform(SkMatrix::I()) { }
bool SkSVGTransformableNode::onPrepareToRender(SkSVGRenderContext* ctx) const {
if (!fTransform.value().isIdentity()) {
ctx->canvas()->save();
ctx->canvas()->concat(fTransform);
}
return this->INHERITED::onPrepareToRender(ctx);
}
void SkSVGTransformableNode::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) {
switch (attr) {
case SkSVGAttribute::kTransform:
if (const auto* transform = v.as<SkSVGTransformValue>()) {
this->setTransform(*transform);
}
break;
default:
this->INHERITED::onSetAttribute(attr, v);
break;
}
}