15 const std::vector<int64_t>& composition_order,
16 const std::unordered_map<int64_t, std::unique_ptr<EmbedderViewSlice>>&
18 const std::unordered_map<int64_t, DlRect>& view_rects) {
19 std::unordered_map<int64_t, DlRect> overlay_layers;
21 auto current_frame_view_count = composition_order.size();
27 for (
size_t i = 0;
i < current_frame_view_count;
i++) {
28 int64_t
view_id = composition_order[
i];
30 if (slice->
canvas() ==
nullptr) {
44 for (
int j =
i; j >= 0; j--) {
45 int64_t current_view_id = composition_order[j];
46 auto maybe_rect = view_rects.find(current_view_id);
48 if (maybe_rect == view_rects.end()) {
52 const DlRect current_view_rect = maybe_rect->second;
53 const DlIRect rounded_in_platform_view_rect =
55 const DlRect rounded_out_platform_view_rect =
59 std::vector<DlIRect> intersection_rects =
73 for (
auto it = intersection_rects.begin(); it != intersection_rects.end();
78 if (!it->IntersectsWithRect(rounded_in_platform_view_rect)) {
79 it = intersection_rects.erase(it);
89 DlRect partial_joined_rect;
90 for (
const DlIRect& rect : intersection_rects) {
96 rounded_out_platform_view_rect)) {
106 full_joined_rect = full_joined_rect.
Union(partial_joined_rect);
110 if (!full_joined_rect.
IsEmpty()) {
111 overlay_layers.insert({
view_id, full_joined_rect});
123 return overlay_layers;
std::unordered_map< int64_t, DlRect > SliceViews(DlCanvas *background_canvas, const std::vector< int64_t > &composition_order, const std::unordered_map< int64_t, std::unique_ptr< EmbedderViewSlice > > &slices, const std::unordered_map< int64_t, DlRect > &view_rects)
Compute the required overlay layers and clip the view slices according to the size and position of th...