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