[go: nahoru, domu]

blob: 469bfb25ea6675319610ac360f0a33d704b6d3e1 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_VIZ_PUBLIC_CPP_COMPOSITING_REGION_CAPTURE_BOUNDS_MOJOM_TRAITS_H_
#define SERVICES_VIZ_PUBLIC_CPP_COMPOSITING_REGION_CAPTURE_BOUNDS_MOJOM_TRAITS_H_
#include <utility>
#include <vector>
#include "components/viz/common/surfaces/region_capture_bounds.h"
#include "mojo/public/cpp/base/token_mojom_traits.h"
#include "services/viz/public/mojom/compositing/region_capture_bounds.mojom-shared.h"
namespace mojo {
// Intermediary struct for mapping RegionCaptureBounds map key value pairs.
struct CropIdBoundsPair {
base::Token crop_id;
gfx::Rect bounds;
};
template <>
struct StructTraits<viz::mojom::CropIdBoundsPairDataView, CropIdBoundsPair> {
static base::Token crop_id(const CropIdBoundsPair& pair) {
return pair.crop_id;
}
static gfx::Rect bounds(const CropIdBoundsPair& pair) { return pair.bounds; }
static bool Read(viz::mojom::CropIdBoundsPairDataView data,
CropIdBoundsPair* out) {
base::Token crop_id;
gfx::Rect bounds;
if (!data.ReadCropId(&crop_id)) {
return false;
}
if (!data.ReadBounds(&bounds)) {
return false;
}
*out = CropIdBoundsPair{std::move(crop_id), std::move(bounds)};
return true;
}
};
template <>
struct StructTraits<viz::mojom::RegionCaptureBoundsDataView,
viz::RegionCaptureBounds> {
static std::vector<CropIdBoundsPair> bounds(
const viz::RegionCaptureBounds& capture_bounds) {
std::vector<CropIdBoundsPair> out;
out.reserve(capture_bounds.bounds().size());
for (const auto& pair : capture_bounds.bounds()) {
out.push_back(CropIdBoundsPair{pair.first, pair.second});
}
return out;
}
static bool Read(viz::mojom::RegionCaptureBoundsDataView data,
viz::RegionCaptureBounds* out) {
std::vector<CropIdBoundsPair> token_rects;
if (!data.ReadBounds(&token_rects)) {
return false;
}
base::flat_map<viz::RegionCaptureCropId, gfx::Rect> bounds;
for (const auto& pair : token_rects) {
bounds.emplace(pair.crop_id, pair.bounds);
}
*out = viz::RegionCaptureBounds(std::move(bounds));
return true;
}
};
} // namespace mojo
#endif // SERVICES_VIZ_PUBLIC_CPP_COMPOSITING_REGION_CAPTURE_BOUNDS_MOJOM_TRAITS_H_