/* * 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 "SkSGGroup.h" namespace sksg { Group::Group() {} Group::~Group() { for (const auto& child : fChildren) { this->unobserveInval(child); } } void Group::addChild(sk_sp node) { // should we allow duplicates? for (const auto& child : fChildren) { if (child == node) { return; } } this->observeInval(node); fChildren.push_back(std::move(node)); this->invalidate(); } void Group::removeChild(const sk_sp& node) { int origCount = fChildren.count(); for (int i = 0; i < origCount; ++i) { if (fChildren[i] == node) { fChildren.removeShuffle(i); this->unobserveInval(node); break; } } SkASSERT(fChildren.count() == origCount - 1); this->invalidate(); } void Group::onRender(SkCanvas* canvas) const { for (const auto& child : fChildren) { child->render(canvas); } } SkRect Group::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) { SkASSERT(this->hasInval()); SkRect bounds = SkRect::MakeEmpty(); for (const auto& child : fChildren) { bounds.join(child->revalidate(ic, ctm)); } return bounds; } } // namespace sksg