mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-24 11:21:34 +00:00
LibWeb: Resolve calculated time values in animations and transitions
Some checks are pending
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Some checks are pending
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
This lets us play animations and transitions when time values are stored in the form of calculated values, such as `calc(1s + 500ms)`.
This commit is contained in:
parent
a2770bbcb7
commit
34f0ac15fd
Notes:
github-actions[bot]
2025-07-23 14:22:48 +00:00
Author: https://github.com/aplefull
Commit: 34f0ac15fd
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5578
Reviewed-by: https://github.com/AtkinsSJ ✅
2 changed files with 40 additions and 4 deletions
|
@ -1193,12 +1193,25 @@ static void apply_animation_properties(DOM::Document& document, CascadedProperti
|
|||
} else if (duration_value->is_keyword() && duration_value->as_keyword().keyword() == Keyword::Auto) {
|
||||
// We use empty optional to represent "auto".
|
||||
duration = {};
|
||||
} else if (duration_value->is_calculated() && duration_value->as_calculated().resolves_to_time()) {
|
||||
auto resolved_time = duration_value->as_calculated().resolve_time({});
|
||||
if (resolved_time.has_value()) {
|
||||
duration = resolved_time.value();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CSS::Time delay { 0, CSS::Time::Type::S };
|
||||
if (auto delay_value = cascaded_properties.property(PropertyID::AnimationDelay); delay_value && delay_value->is_time())
|
||||
delay = delay_value->as_time().time();
|
||||
if (auto delay_value = cascaded_properties.property(PropertyID::AnimationDelay); delay_value) {
|
||||
if (delay_value->is_time()) {
|
||||
delay = delay_value->as_time().time();
|
||||
} else if (delay_value->is_calculated() && delay_value->as_calculated().resolves_to_time()) {
|
||||
auto resolved_time = delay_value->as_calculated().resolve_time({});
|
||||
if (resolved_time.has_value()) {
|
||||
delay = resolved_time.value();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
double iteration_count = 1.0;
|
||||
if (auto iteration_count_value = cascaded_properties.property(PropertyID::AnimationIterationCount); iteration_count_value) {
|
||||
|
@ -1206,6 +1219,12 @@ static void apply_animation_properties(DOM::Document& document, CascadedProperti
|
|||
iteration_count = HUGE_VAL;
|
||||
else if (iteration_count_value->is_number())
|
||||
iteration_count = iteration_count_value->as_number().number();
|
||||
else if (iteration_count_value->is_calculated() && iteration_count_value->as_calculated().resolves_to_number()) {
|
||||
auto resolved_number = iteration_count_value->as_calculated().resolve_number({});
|
||||
if (resolved_number.has_value()) {
|
||||
iteration_count = resolved_number.value();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CSS::AnimationFillMode fill_mode { CSS::AnimationFillMode::None };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue