aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/sksg/effects/SkSGTransform.cpp
blob: ca4c5cd1625e85374d45a922b9f8ecf6df41155f (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);
}

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

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

    return bounds;
}

} // namespace sksg