aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/sksg/effects/SkSGTransform.cpp
blob: dc31623db2a542c3de97bcd96a10838138e0cfa8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
 * Copyright 2017 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "SkSGTransform.h"

#include "SkCanvas.h"

namespace sksg {

Transform::Transform(sk_sp<RenderNode> child, const SkMatrix& matrix)
    : INHERITED(std::move(child))
    , fMatrix(matrix) {}

void Transform::onRender(SkCanvas* canvas) const {
    SkAutoCanvasRestore acr(canvas, !fMatrix.isIdentity());
    canvas->concat(fMatrix);
    this->INHERITED::onRender(canvas);
}

Node::RevalidationResult Transform::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) {
    SkASSERT(this->hasInval());

    auto result = this->INHERITED::onRevalidate(ic, SkMatrix::Concat(ctm, fMatrix));
    fMatrix.mapRect(&result.fBounds);

    return result;
}

} // namespace sksg