Serenity Operating System
at master 162 lines 5.2 kB view raw
1/* 2 * Copyright (c) 2022, Luke Wilde <lukew@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibJS/Runtime/Completion.h> 8#include <LibJS/Runtime/GlobalObject.h> 9#include <LibWeb/WebGL/WebGLContextAttributes.h> 10 11namespace Web::WebGL { 12 13JS::ThrowCompletionOr<WebGLContextAttributes> convert_value_to_context_attributes_dictionary(JS::VM& vm, JS::Value value) 14{ 15 // NOTE: This code was generated by the IDL code generator and then cleaned up. 16 if (!value.is_nullish() && !value.is_object()) 17 return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "WebGLContextAttributes"); 18 19 WebGLContextAttributes context_attributes {}; 20 21 JS::Value alpha; 22 if (value.is_nullish()) 23 alpha = JS::js_undefined(); 24 else 25 alpha = TRY(value.as_object().get("alpha")); 26 27 bool alpha_value; 28 if (!alpha.is_undefined()) 29 alpha_value = alpha.to_boolean(); 30 else 31 alpha_value = true; 32 33 context_attributes.alpha = alpha_value; 34 35 JS::Value antialias; 36 if (value.is_nullish()) 37 antialias = JS::js_undefined(); 38 else 39 antialias = TRY(value.as_object().get("antialias")); 40 41 bool antialias_value; 42 if (!antialias.is_undefined()) 43 antialias_value = antialias.to_boolean(); 44 else 45 antialias_value = true; 46 47 context_attributes.antialias = antialias_value; 48 49 JS::Value depth; 50 if (value.is_nullish()) 51 depth = JS::js_undefined(); 52 else 53 depth = TRY(value.as_object().get("depth")); 54 55 bool depth_value; 56 if (!depth.is_undefined()) 57 depth_value = depth.to_boolean(); 58 else 59 depth_value = true; 60 61 context_attributes.depth = depth_value; 62 63 JS::Value desynchronized; 64 if (value.is_nullish()) 65 desynchronized = JS::js_undefined(); 66 else 67 desynchronized = TRY(value.as_object().get("desynchronized")); 68 69 bool desynchronized_value; 70 71 if (!desynchronized.is_undefined()) 72 desynchronized_value = desynchronized.to_boolean(); 73 else 74 desynchronized_value = false; 75 76 context_attributes.desynchronized = desynchronized_value; 77 78 JS::Value fail_if_major_performance_caveat; 79 if (value.is_nullish()) 80 fail_if_major_performance_caveat = JS::js_undefined(); 81 else 82 fail_if_major_performance_caveat = TRY(value.as_object().get("failIfMajorPerformanceCaveat")); 83 84 bool fail_if_major_performance_caveat_value; 85 if (!fail_if_major_performance_caveat.is_undefined()) 86 fail_if_major_performance_caveat_value = fail_if_major_performance_caveat.to_boolean(); 87 else 88 fail_if_major_performance_caveat_value = false; 89 90 context_attributes.fail_if_major_performance_caveat = fail_if_major_performance_caveat_value; 91 92 JS::Value power_preference; 93 if (value.is_nullish()) 94 power_preference = JS::js_undefined(); 95 else 96 power_preference = TRY(value.as_object().get("powerPreference")); 97 98 WebGLPowerPreference power_preference_value { WebGLPowerPreference::Default }; 99 100 if (!power_preference.is_undefined()) { 101 auto power_preference_string = TRY(power_preference.to_deprecated_string(vm)); 102 103 if (power_preference_string == "high-performance"sv) 104 power_preference_value = WebGLPowerPreference::HighPerformance; 105 else if (power_preference_string == "low-power"sv) 106 power_preference_value = WebGLPowerPreference::LowPower; 107 else if (power_preference_string == "default"sv) 108 power_preference_value = WebGLPowerPreference::Default; 109 else 110 return vm.throw_completion<JS::TypeError>(JS::ErrorType::InvalidEnumerationValue, power_preference_string, "WebGLPowerPreference"); 111 } 112 113 context_attributes.power_preference = power_preference_value; 114 115 JS::Value premultiplied_alpha; 116 if (value.is_nullish()) 117 premultiplied_alpha = JS::js_undefined(); 118 else 119 premultiplied_alpha = TRY(value.as_object().get("premultipliedAlpha")); 120 121 bool premultiplied_alpha_value; 122 123 if (!premultiplied_alpha.is_undefined()) 124 premultiplied_alpha_value = premultiplied_alpha.to_boolean(); 125 else 126 premultiplied_alpha_value = true; 127 128 context_attributes.premultiplied_alpha = premultiplied_alpha_value; 129 130 JS::Value preserve_drawing_buffer; 131 if (value.is_nullish()) 132 preserve_drawing_buffer = JS::js_undefined(); 133 else 134 preserve_drawing_buffer = TRY(value.as_object().get("preserveDrawingBuffer")); 135 136 bool preserve_drawing_buffer_value; 137 if (!preserve_drawing_buffer.is_undefined()) 138 preserve_drawing_buffer_value = preserve_drawing_buffer.to_boolean(); 139 else 140 preserve_drawing_buffer_value = false; 141 142 context_attributes.preserve_drawing_buffer = preserve_drawing_buffer_value; 143 144 JS::Value stencil; 145 if (value.is_nullish()) 146 stencil = JS::js_undefined(); 147 else 148 stencil = TRY(value.as_object().get("stencil")); 149 150 bool stencil_value; 151 152 if (!stencil.is_undefined()) 153 stencil_value = stencil.to_boolean(); 154 else 155 stencil_value = false; 156 157 context_attributes.stencil = stencil_value; 158 159 return context_attributes; 160} 161 162}