mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-29 12:19:54 +00:00
LibWeb/CSS: Move TransformationSV -> Transformation code into TSV
This commit is contained in:
parent
01d782a5ca
commit
bd5d1b092a
Notes:
github-actions[bot]
2025-01-17 09:15:41 +00:00
Author: https://github.com/AtkinsSJ
Commit: bd5d1b092a
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3263
3 changed files with 53 additions and 45 deletions
|
@ -536,7 +536,7 @@ Optional<CSS::JustifySelf> ComputedProperties::justify_self() const
|
||||||
return keyword_to_justify_self(value.to_keyword());
|
return keyword_to_justify_self(value.to_keyword());
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<CSS::Transformation> ComputedProperties::transformations_for_style_value(CSSStyleValue const& value)
|
Vector<Transformation> ComputedProperties::transformations_for_style_value(CSSStyleValue const& value)
|
||||||
{
|
{
|
||||||
if (value.is_keyword() && value.to_keyword() == CSS::Keyword::None)
|
if (value.is_keyword() && value.to_keyword() == CSS::Keyword::None)
|
||||||
return {};
|
return {};
|
||||||
|
@ -546,53 +546,11 @@ Vector<CSS::Transformation> ComputedProperties::transformations_for_style_value(
|
||||||
|
|
||||||
auto& list = value.as_value_list();
|
auto& list = value.as_value_list();
|
||||||
|
|
||||||
Vector<CSS::Transformation> transformations;
|
Vector<Transformation> transformations;
|
||||||
|
|
||||||
for (auto& it : list.values()) {
|
for (auto& it : list.values()) {
|
||||||
if (!it->is_transformation())
|
if (!it->is_transformation())
|
||||||
return {};
|
return {};
|
||||||
auto& transformation_style_value = it->as_transformation();
|
transformations.append(it->as_transformation().to_transformation());
|
||||||
auto function = transformation_style_value.transform_function();
|
|
||||||
auto function_metadata = transform_function_metadata(function);
|
|
||||||
Vector<TransformValue> values;
|
|
||||||
size_t argument_index = 0;
|
|
||||||
for (auto& transformation_value : transformation_style_value.values()) {
|
|
||||||
if (transformation_value->is_calculated()) {
|
|
||||||
auto& calculated = transformation_value->as_calculated();
|
|
||||||
if (calculated.resolves_to_length_percentage()) {
|
|
||||||
values.append(CSS::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.resolve_percentage().value() });
|
|
||||||
} else {
|
|
||||||
values.append(LengthPercentage { calculated.resolve_percentage().value() });
|
|
||||||
}
|
|
||||||
} else if (calculated.resolves_to_number()) {
|
|
||||||
values.append({ Number(Number::Type::Number, calculated.resolve_number().value()) });
|
|
||||||
} else if (calculated.resolves_to_angle()) {
|
|
||||||
values.append({ calculated.resolve_angle().value() });
|
|
||||||
} else {
|
|
||||||
dbgln("FIXME: Unsupported calc value in transform! {}", calculated.to_string(CSSStyleValue::SerializationMode::Normal));
|
|
||||||
}
|
|
||||||
} 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) {
|
|
||||||
values.append(NumberPercentage { transformation_value->as_percentage().percentage() });
|
|
||||||
} else {
|
|
||||||
values.append(LengthPercentage { transformation_value->as_percentage().percentage() });
|
|
||||||
}
|
|
||||||
} else if (transformation_value->is_number()) {
|
|
||||||
values.append({ Number(Number::Type::Number, transformation_value->as_number().number()) });
|
|
||||||
} else if (transformation_value->is_angle()) {
|
|
||||||
values.append({ transformation_value->as_angle().angle() });
|
|
||||||
} else {
|
|
||||||
dbgln("FIXME: Unsupported value in transform! {}", transformation_value->to_string(CSSStyleValue::SerializationMode::Normal));
|
|
||||||
}
|
|
||||||
argument_index++;
|
|
||||||
}
|
|
||||||
transformations.empend(function, move(values));
|
|
||||||
}
|
}
|
||||||
return transformations;
|
return transformations;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,58 @@
|
||||||
|
|
||||||
#include "TransformationStyleValue.h"
|
#include "TransformationStyleValue.h"
|
||||||
#include <AK/StringBuilder.h>
|
#include <AK/StringBuilder.h>
|
||||||
|
#include <LibWeb/CSS/StyleValues/AngleStyleValue.h>
|
||||||
|
#include <LibWeb/CSS/StyleValues/LengthStyleValue.h>
|
||||||
|
#include <LibWeb/CSS/StyleValues/NumberStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/PercentageStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/PercentageStyleValue.h>
|
||||||
|
#include <LibWeb/CSS/Transformation.h>
|
||||||
|
|
||||||
namespace Web::CSS {
|
namespace Web::CSS {
|
||||||
|
|
||||||
|
Transformation TransformationStyleValue::to_transformation() const
|
||||||
|
{
|
||||||
|
auto function_metadata = transform_function_metadata(m_properties.transform_function);
|
||||||
|
Vector<TransformValue> values;
|
||||||
|
size_t argument_index = 0;
|
||||||
|
for (auto& transformation_value : m_properties.values) {
|
||||||
|
if (transformation_value->is_calculated()) {
|
||||||
|
auto& calculated = transformation_value->as_calculated();
|
||||||
|
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.resolve_percentage().value() });
|
||||||
|
} else {
|
||||||
|
values.append(LengthPercentage { calculated.resolve_percentage().value() });
|
||||||
|
}
|
||||||
|
} else if (calculated.resolves_to_number()) {
|
||||||
|
values.append({ Number(Number::Type::Number, calculated.resolve_number().value()) });
|
||||||
|
} else if (calculated.resolves_to_angle()) {
|
||||||
|
values.append({ calculated.resolve_angle().value() });
|
||||||
|
} else {
|
||||||
|
dbgln("FIXME: Unsupported calc value in transform! {}", calculated.to_string(SerializationMode::Normal));
|
||||||
|
}
|
||||||
|
} 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) {
|
||||||
|
values.append(NumberPercentage { transformation_value->as_percentage().percentage() });
|
||||||
|
} else {
|
||||||
|
values.append(LengthPercentage { transformation_value->as_percentage().percentage() });
|
||||||
|
}
|
||||||
|
} else if (transformation_value->is_number()) {
|
||||||
|
values.append({ Number(Number::Type::Number, transformation_value->as_number().number()) });
|
||||||
|
} else if (transformation_value->is_angle()) {
|
||||||
|
values.append({ transformation_value->as_angle().angle() });
|
||||||
|
} else {
|
||||||
|
dbgln("FIXME: Unsupported value in transform! {}", transformation_value->to_string(SerializationMode::Normal));
|
||||||
|
}
|
||||||
|
argument_index++;
|
||||||
|
}
|
||||||
|
return Transformation { m_properties.transform_function, move(values) };
|
||||||
|
}
|
||||||
|
|
||||||
String TransformationStyleValue::to_string(SerializationMode mode) const
|
String TransformationStyleValue::to_string(SerializationMode mode) const
|
||||||
{
|
{
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
|
|
|
@ -25,6 +25,8 @@ public:
|
||||||
TransformFunction transform_function() const { return m_properties.transform_function; }
|
TransformFunction transform_function() const { return m_properties.transform_function; }
|
||||||
StyleValueVector const& values() const { return m_properties.values; }
|
StyleValueVector const& values() const { return m_properties.values; }
|
||||||
|
|
||||||
|
Transformation to_transformation() const;
|
||||||
|
|
||||||
virtual String to_string(SerializationMode) const override;
|
virtual String to_string(SerializationMode) const override;
|
||||||
|
|
||||||
bool properties_equal(TransformationStyleValue const& other) const { return m_properties == other.m_properties; }
|
bool properties_equal(TransformationStyleValue const& other) const { return m_properties == other.m_properties; }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue