mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-25 14:05:15 +00:00
162 lines
5 KiB
C++
162 lines
5 KiB
C++
/*
|
|
* Copyright (c) 2022, Luke Wilde <lukew@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <LibJS/Runtime/Completion.h>
|
|
#include <LibJS/Runtime/GlobalObject.h>
|
|
#include <LibWeb/WebGL/WebGLContextAttributes.h>
|
|
|
|
namespace Web::WebGL {
|
|
|
|
JS::ThrowCompletionOr<WebGLContextAttributes> convert_value_to_context_attributes_dictionary(JS::VM& vm, JS::Value value)
|
|
{
|
|
// NOTE: This code was generated by the IDL code generator and then cleaned up.
|
|
if (!value.is_nullish() && !value.is_object())
|
|
return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "WebGLContextAttributes");
|
|
|
|
WebGLContextAttributes context_attributes {};
|
|
|
|
JS::Value alpha;
|
|
if (value.is_nullish())
|
|
alpha = JS::js_undefined();
|
|
else
|
|
alpha = TRY(value.as_object().get("alpha"));
|
|
|
|
bool alpha_value;
|
|
if (!alpha.is_undefined())
|
|
alpha_value = alpha.to_boolean();
|
|
else
|
|
alpha_value = true;
|
|
|
|
context_attributes.alpha = alpha_value;
|
|
|
|
JS::Value antialias;
|
|
if (value.is_nullish())
|
|
antialias = JS::js_undefined();
|
|
else
|
|
antialias = TRY(value.as_object().get("antialias"));
|
|
|
|
bool antialias_value;
|
|
if (!antialias.is_undefined())
|
|
antialias_value = antialias.to_boolean();
|
|
else
|
|
antialias_value = true;
|
|
|
|
context_attributes.antialias = antialias_value;
|
|
|
|
JS::Value depth;
|
|
if (value.is_nullish())
|
|
depth = JS::js_undefined();
|
|
else
|
|
depth = TRY(value.as_object().get("depth"));
|
|
|
|
bool depth_value;
|
|
if (!depth.is_undefined())
|
|
depth_value = depth.to_boolean();
|
|
else
|
|
depth_value = true;
|
|
|
|
context_attributes.depth = depth_value;
|
|
|
|
JS::Value desynchronized;
|
|
if (value.is_nullish())
|
|
desynchronized = JS::js_undefined();
|
|
else
|
|
desynchronized = TRY(value.as_object().get("desynchronized"));
|
|
|
|
bool desynchronized_value;
|
|
|
|
if (!desynchronized.is_undefined())
|
|
desynchronized_value = desynchronized.to_boolean();
|
|
else
|
|
desynchronized_value = false;
|
|
|
|
context_attributes.desynchronized = desynchronized_value;
|
|
|
|
JS::Value fail_if_major_performance_caveat;
|
|
if (value.is_nullish())
|
|
fail_if_major_performance_caveat = JS::js_undefined();
|
|
else
|
|
fail_if_major_performance_caveat = TRY(value.as_object().get("failIfMajorPerformanceCaveat"));
|
|
|
|
bool fail_if_major_performance_caveat_value;
|
|
if (!fail_if_major_performance_caveat.is_undefined())
|
|
fail_if_major_performance_caveat_value = fail_if_major_performance_caveat.to_boolean();
|
|
else
|
|
fail_if_major_performance_caveat_value = false;
|
|
|
|
context_attributes.fail_if_major_performance_caveat = fail_if_major_performance_caveat_value;
|
|
|
|
JS::Value power_preference;
|
|
if (value.is_nullish())
|
|
power_preference = JS::js_undefined();
|
|
else
|
|
power_preference = TRY(value.as_object().get("powerPreference"));
|
|
|
|
WebGLPowerPreference power_preference_value { WebGLPowerPreference::Default };
|
|
|
|
if (!power_preference.is_undefined()) {
|
|
auto power_preference_string = TRY(power_preference.to_deprecated_string(vm));
|
|
|
|
if (power_preference_string == "high-performance"sv)
|
|
power_preference_value = WebGLPowerPreference::HighPerformance;
|
|
else if (power_preference_string == "low-power"sv)
|
|
power_preference_value = WebGLPowerPreference::LowPower;
|
|
else if (power_preference_string == "default"sv)
|
|
power_preference_value = WebGLPowerPreference::Default;
|
|
else
|
|
return vm.throw_completion<JS::TypeError>(JS::ErrorType::InvalidEnumerationValue, power_preference_string, "WebGLPowerPreference");
|
|
}
|
|
|
|
context_attributes.power_preference = power_preference_value;
|
|
|
|
JS::Value premultiplied_alpha;
|
|
if (value.is_nullish())
|
|
premultiplied_alpha = JS::js_undefined();
|
|
else
|
|
premultiplied_alpha = TRY(value.as_object().get("premultipliedAlpha"));
|
|
|
|
bool premultiplied_alpha_value;
|
|
|
|
if (!premultiplied_alpha.is_undefined())
|
|
premultiplied_alpha_value = premultiplied_alpha.to_boolean();
|
|
else
|
|
premultiplied_alpha_value = true;
|
|
|
|
context_attributes.premultiplied_alpha = premultiplied_alpha_value;
|
|
|
|
JS::Value preserve_drawing_buffer;
|
|
if (value.is_nullish())
|
|
preserve_drawing_buffer = JS::js_undefined();
|
|
else
|
|
preserve_drawing_buffer = TRY(value.as_object().get("preserveDrawingBuffer"));
|
|
|
|
bool preserve_drawing_buffer_value;
|
|
if (!preserve_drawing_buffer.is_undefined())
|
|
preserve_drawing_buffer_value = preserve_drawing_buffer.to_boolean();
|
|
else
|
|
preserve_drawing_buffer_value = false;
|
|
|
|
context_attributes.preserve_drawing_buffer = preserve_drawing_buffer_value;
|
|
|
|
JS::Value stencil;
|
|
if (value.is_nullish())
|
|
stencil = JS::js_undefined();
|
|
else
|
|
stencil = TRY(value.as_object().get("stencil"));
|
|
|
|
bool stencil_value;
|
|
|
|
if (!stencil.is_undefined())
|
|
stencil_value = stencil.to_boolean();
|
|
else
|
|
stencil_value = false;
|
|
|
|
context_attributes.stencil = stencil_value;
|
|
|
|
return context_attributes;
|
|
}
|
|
|
|
}
|