blob: 2d202aa2e8c72e1b3d00891fc3b6041f0dfd5c92 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/modules/xr/xr_cylinder_layer.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_xr_cylinder_layer_init.h"
#include "third_party/blink/renderer/modules/xr/xr_rigid_transform.h"
#include "third_party/blink/renderer/modules/xr/xr_session.h"
namespace blink {
XRCylinderLayer::XRCylinderLayer(const XRCylinderLayerInit* init,
XRGraphicsBinding* binding,
XRLayerDrawingContext* drawing_context)
: XRShapedLayer(init, binding, drawing_context),
radius_(init->radius()),
central_angle_(init->centralAngle()),
aspect_ratio_(init->aspectRatio()) {
if (init->hasTransform()) {
transform_ = MakeGarbageCollected<XRRigidTransform>(
init->transform()->TransformMatrix());
} else {
transform_ = MakeGarbageCollected<XRRigidTransform>(gfx::Transform{});
}
CreateLayerBackend();
}
XRLayerType XRCylinderLayer::LayerType() const {
return XRLayerType::kCylinderLayer;
}
void XRCylinderLayer::setRadius(float radius) {
radius_ = radius;
SetModified(true);
}
void XRCylinderLayer::setCentralAngle(float central_angle) {
central_angle_ = central_angle;
SetModified(true);
}
void XRCylinderLayer::setAspectRatio(float aspect_ratio) {
aspect_ratio_ = aspect_ratio;
SetModified(true);
}
void XRCylinderLayer::setTransform(XRRigidTransform* value) {
if (transform_ != value) {
transform_ = value;
SetModified(true);
}
}
device::mojom::blink::XRLayerSpecificDataPtr
XRCylinderLayer::CreateLayerSpecificData() const {
auto cylinder_layer_data = device::mojom::blink::XRCylinderLayerData::New();
cylinder_layer_data->radius = radius();
cylinder_layer_data->central_angle = centralAngle();
cylinder_layer_data->aspect_ratio = aspectRatio();
cylinder_layer_data->transform = transform()->TransformMatrix();
return device::mojom::blink::XRLayerSpecificData::NewCylinder(
std::move(cylinder_layer_data));
}
void XRCylinderLayer::Trace(Visitor* visitor) const {
visitor->Trace(transform_);
XRShapedLayer::Trace(visitor);
}
} // namespace blink