mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-02 16:33:13 +00:00
LibWeb: Make transform: scale(calc(..))
work
The `transform` property supports transform functions that sometimes need their `calc(percentage)` values to be converted to a number instead of a length. Currently this only applies to the `scale*` family of functions, which are marked as such in `TransformFunctions.json`. We were not consistently applying the `NumberPercentage` type to these functions though, and in addition, any `NumberPercentage` value would not consider calculated values.
This commit is contained in:
parent
202cbe7df6
commit
545d151948
Notes:
github-actions[bot]
2025-03-25 19:54:42 +00:00
Author: https://github.com/gmta
Commit: 545d151948
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4088
Reviewed-by: https://github.com/AtkinsSJ ✅
5 changed files with 26 additions and 10 deletions
|
@ -24,17 +24,15 @@ Transformation TransformationStyleValue::to_transformation() const
|
|||
Vector<TransformValue> values;
|
||||
size_t argument_index = 0;
|
||||
for (auto& transformation_value : m_properties.values) {
|
||||
auto const function_type = function_metadata.parameters[argument_index].type;
|
||||
|
||||
if (transformation_value->is_calculated()) {
|
||||
auto& calculated = transformation_value->as_calculated();
|
||||
if (calculated.resolves_to_length_percentage()) {
|
||||
if (function_type == TransformFunctionParameterType::NumberPercentage
|
||||
&& (calculated.resolves_to_number() || calculated.resolves_to_percentage())) {
|
||||
values.append(NumberPercentage { calculated });
|
||||
} else if (calculated.resolves_to_length_percentage()) {
|
||||
values.append(LengthPercentage { calculated });
|
||||
} else if (calculated.resolves_to_percentage()) {
|
||||
// FIXME: Maybe transform this for loop to always check the metadata for the correct types
|
||||
if (function_metadata.parameters[argument_index].type == TransformFunctionParameterType::NumberPercentage) {
|
||||
values.append(NumberPercentage { calculated });
|
||||
} else {
|
||||
values.append(LengthPercentage { calculated });
|
||||
}
|
||||
} else if (calculated.resolves_to_number()) {
|
||||
values.append(NumberPercentage { calculated });
|
||||
} else if (calculated.resolves_to_angle()) {
|
||||
|
@ -45,7 +43,7 @@ Transformation TransformationStyleValue::to_transformation() const
|
|||
} else if (transformation_value->is_length()) {
|
||||
values.append({ transformation_value->as_length().length() });
|
||||
} else if (transformation_value->is_percentage()) {
|
||||
if (function_metadata.parameters[argument_index].type == TransformFunctionParameterType::NumberPercentage) {
|
||||
if (function_type == TransformFunctionParameterType::NumberPercentage) {
|
||||
values.append(NumberPercentage { transformation_value->as_percentage().percentage() });
|
||||
} else {
|
||||
values.append(LengthPercentage { transformation_value->as_percentage().percentage() });
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue