blob: 529d74908e27112b30567b02c492b6e91cdefa0d [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:typed_data';
import 'package:ui/ui.dart' as ui;
import 'canvas.dart';
import 'painting.dart';
import 'path.dart';
/// A virtual canvas that applies operations to multiple canvases at once.
class CkNWayCanvas {
final List<CkCanvas> _canvases = <CkCanvas>[];
void addCanvas(CkCanvas canvas) {
_canvases.add(canvas);
}
/// Calls [save] on all canvases.
int save() {
int saveCount = 0;
for (int i = 0; i < _canvases.length; i++) {
saveCount = _canvases[i].save();
}
return saveCount;
}
/// Calls [saveLayer] on all canvases.
void saveLayer(ui.Rect bounds, CkPaint? paint) {
for (int i = 0; i < _canvases.length; i++) {
_canvases[i].saveLayer(bounds, paint);
}
}
/// Calls [saveLayerWithFilter] on all canvases.
void saveLayerWithFilter(ui.Rect bounds, ui.ImageFilter filter,
[CkPaint? paint]) {
for (int i = 0; i < _canvases.length; i++) {
_canvases[i].saveLayerWithFilter(bounds, filter, paint);
}
}
/// Calls [restore] on all canvases.
void restore() {
for (int i = 0; i < _canvases.length; i++) {
_canvases[i].restore();
}
}
/// Calls [restoreToCount] on all canvases.
void restoreToCount(int count) {
for (int i = 0; i < _canvases.length; i++) {
_canvases[i].restoreToCount(count);
}
}
/// Calls [translate] on all canvases.
void translate(double dx, double dy) {
for (int i = 0; i < _canvases.length; i++) {
_canvases[i].translate(dx, dy);
}
}
/// Calls [transform] on all canvases.
void transform(Float32List matrix) {
for (int i = 0; i < _canvases.length; i++) {
_canvases[i].transform(matrix);
}
}
/// Calls [clear] on all canvases.
void clear(ui.Color color) {
for (int i = 0; i < _canvases.length; i++) {
_canvases[i].clear(color);
}
}
/// Calls [clipPath] on all canvases.
void clipPath(CkPath path, bool doAntiAlias) {
for (int i = 0; i < _canvases.length; i++) {
_canvases[i].clipPath(path, doAntiAlias);
}
}
/// Calls [clipRect] on all canvases.
void clipRect(ui.Rect rect, ui.ClipOp clipOp, bool doAntiAlias) {
for (int i = 0; i < _canvases.length; i++) {
_canvases[i].clipRect(rect, clipOp, doAntiAlias);
}
}
/// Calls [clipRRect] on all canvases.
void clipRRect(ui.RRect rrect, bool doAntiAlias) {
for (int i = 0; i < _canvases.length; i++) {
_canvases[i].clipRRect(rrect, doAntiAlias);
}
}
}