Creates sublayers for given layer, each one displaying a portion of the of the surface determined by a rectangle in the provided paint region.
68 {
69
70 while (layer.sublayers.count > paintRegion.size()) {
71 [layer.sublayers.lastObject removeFromSuperlayer];
72 }
73
74 while (layer.sublayers.count < paintRegion.size()) {
75 CALayer* newLayer = [CALayer layer];
76 [layer addSublayer:newLayer];
77 }
78
79 for (
size_t i = 0;
i < paintRegion.size();
i++) {
80 CALayer* subLayer = [layer.sublayers objectAtIndex:
i];
81 const auto& rect = paintRegion[
i];
82 subLayer.frame = CGRectMake(rect.left / scale, rect.top / scale,
83 (rect.right - rect.left) / scale, (rect.bottom - rect.top) / scale);
84
85 double width = surfaceSize.width;
86 double height = surfaceSize.height;
87
88 subLayer.contentsRect =
89 CGRectMake(rect.left /
width, rect.top /
height, (rect.right - rect.left) /
width,
90 (rect.bottom - rect.top) /
height);
91
92 if (borderColor != nil) {
93
94 subLayer.borderColor = borderColor.CGColor;
95 subLayer.borderWidth = 1.0;
96 }
97
98 subLayer.contents = (__bridge
id)surface;
99 }
100}