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