mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-08 05:27:14 +09:00

We were previously assuming that dictionary members were always required when being returned. This is a bit of a weird case, because unlike _input_ dictionaries which the spec marks as required, 'result' dictionaries do not seem to be marked in spec IDL as required. This is still fine from the POV that the spec is written as it states that we should only be putting the values into the dictionary if the value exists. We could do this through some metaprogramming constexpr type checks. For example, if the type in our C++ representation was not an Optional, we can skip the has_value check. Instead of doing that, change the IDL of the result dictionaries to annotate these members so that the IDL generator knows this information up front. While all current cases have every single member returned or not returned, it is conceivable that the spec could have a situation that one member is always returned (and should get marked as required), while the others are optionally returned. Therefore, this new GenerateAsRequired attribute is applied for each individual member.
46 lines
1.6 KiB
Text
46 lines
1.6 KiB
Text
// https://www.w3.org/TR/web-animations-1/#the-effecttiming-dictionaries
|
|
dictionary EffectTiming {
|
|
double delay = 0;
|
|
double endDelay = 0;
|
|
FillMode fill = "auto";
|
|
double iterationStart = 0.0;
|
|
unrestricted double iterations = 1.0;
|
|
(unrestricted double or DOMString) duration = "auto";
|
|
PlaybackDirection direction = "normal";
|
|
DOMString easing = "linear";
|
|
};
|
|
|
|
// https://www.w3.org/TR/web-animations-1/#dictdef-optionaleffecttiming
|
|
dictionary OptionalEffectTiming {
|
|
double delay;
|
|
double endDelay;
|
|
FillMode fill;
|
|
double iterationStart;
|
|
unrestricted double iterations;
|
|
(unrestricted double or DOMString) duration;
|
|
PlaybackDirection direction;
|
|
DOMString easing;
|
|
};
|
|
|
|
// https://www.w3.org/TR/web-animations-1/#the-fillmode-enumeration
|
|
enum FillMode { "none", "forwards", "backwards", "both", "auto" };
|
|
|
|
// https://www.w3.org/TR/web-animations-1/#the-playbackdirection-enumeration
|
|
enum PlaybackDirection { "normal", "reverse", "alternate", "alternate-reverse" };
|
|
|
|
// https://www.w3.org/TR/web-animations-1/#the-computedeffecttiming-dictionary
|
|
dictionary ComputedEffectTiming : EffectTiming {
|
|
[GenerateAsRequired] unrestricted double endTime;
|
|
[GenerateAsRequired] unrestricted double activeDuration;
|
|
double? localTime;
|
|
double? progress;
|
|
unrestricted double? currentIteration;
|
|
};
|
|
|
|
// https://www.w3.org/TR/web-animations-1/#the-animationeffect-interface
|
|
[Exposed=Window]
|
|
interface AnimationEffect {
|
|
EffectTiming getTiming();
|
|
ComputedEffectTiming getComputedTiming();
|
|
undefined updateTiming(optional OptionalEffectTiming timing = {});
|
|
};
|