mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 22:07:34 +00:00
LibWeb: Allow specifying a URL for an SVG fill
This does not do anything yet, but will allow for gradients later!
This commit is contained in:
parent
2fbe5b969b
commit
a5fa5e55ef
4 changed files with 25 additions and 1 deletions
|
@ -519,6 +519,12 @@ bool property_accepts_value(PropertyID property_id, StyleValue& style_value)
|
||||||
output_numeric_value_check(property_generator, "is_time"sv, "as_time().time().to_seconds()"sv, Array { "Time"sv }, min_value, max_value);
|
output_numeric_value_check(property_generator, "is_time"sv, "as_time().time().to_seconds()"sv, Array { "Time"sv }, min_value, max_value);
|
||||||
} else if (type_name == "url") {
|
} else if (type_name == "url") {
|
||||||
// FIXME: Handle urls!
|
// FIXME: Handle urls!
|
||||||
|
} else if (type_name == "paint") {
|
||||||
|
// https://svgwg.org/svg2-draft/painting.html#SpecifyingPaint
|
||||||
|
property_generator.append(R"~~~(
|
||||||
|
if (style_value.has_color() || style_value.is_url())
|
||||||
|
return true;
|
||||||
|
)~~~");
|
||||||
} else {
|
} else {
|
||||||
// Assume that any other type names are defined in Enums.json.
|
// Assume that any other type names are defined in Enums.json.
|
||||||
// If they're not, the output won't compile, but that's fine since it's invalid.
|
// If they're not, the output won't compile, but that's fine since it's invalid.
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
#include <LibWeb/CSS/StyleValues/TextDecorationStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/TextDecorationStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/TimeStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/TimeStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/TransformationStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/TransformationStyleValue.h>
|
||||||
|
#include <LibWeb/CSS/StyleValues/URLStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/UnresolvedStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/UnresolvedStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/UnsetStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/UnsetStyleValue.h>
|
||||||
#include <LibWeb/DOM/Document.h>
|
#include <LibWeb/DOM/Document.h>
|
||||||
|
@ -2361,6 +2362,14 @@ Optional<AK::URL> Parser::parse_url_function(ComponentValue const& component_val
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RefPtr<StyleValue> Parser::parse_url_value(ComponentValue const& component_value, AllowedDataUrlType allowed_data_url_type)
|
||||||
|
{
|
||||||
|
auto url = parse_url_function(component_value, allowed_data_url_type);
|
||||||
|
if (!url.has_value())
|
||||||
|
return {};
|
||||||
|
return URLStyleValue::create(*url);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename TElement>
|
template<typename TElement>
|
||||||
static Optional<Vector<TElement>> parse_color_stop_list(auto& tokens, auto is_position, auto get_position, auto parse_color, auto parse_dimension)
|
static Optional<Vector<TElement>> parse_color_stop_list(auto& tokens, auto is_position, auto get_position, auto parse_color, auto parse_dimension)
|
||||||
{
|
{
|
||||||
|
@ -6738,6 +6747,14 @@ Parser::ParseErrorOr<NonnullRefPtr<StyleValue>> Parser::parse_css_value(Property
|
||||||
if (auto parse_value = parse_transform_origin_value(component_values))
|
if (auto parse_value = parse_transform_origin_value(component_values))
|
||||||
return parse_value.release_nonnull();
|
return parse_value.release_nonnull();
|
||||||
return ParseError ::SyntaxError;
|
return ParseError ::SyntaxError;
|
||||||
|
case PropertyID::Fill:
|
||||||
|
if (component_values.size() == 1) {
|
||||||
|
if (auto parsed_url = parse_url_value(component_values.first()))
|
||||||
|
return parsed_url.release_nonnull();
|
||||||
|
}
|
||||||
|
// Allow normal value parsing to continue.
|
||||||
|
// URL is done here to avoid ambiguity with images.
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,6 +267,7 @@ private:
|
||||||
Font,
|
Font,
|
||||||
};
|
};
|
||||||
Optional<AK::URL> parse_url_function(ComponentValue const&, AllowedDataUrlType = AllowedDataUrlType::None);
|
Optional<AK::URL> parse_url_function(ComponentValue const&, AllowedDataUrlType = AllowedDataUrlType::None);
|
||||||
|
RefPtr<StyleValue> parse_url_value(ComponentValue const&, AllowedDataUrlType = AllowedDataUrlType::None);
|
||||||
|
|
||||||
Optional<Vector<LinearColorStopListElement>> parse_linear_color_stop_list(TokenStream<ComponentValue>&);
|
Optional<Vector<LinearColorStopListElement>> parse_linear_color_stop_list(TokenStream<ComponentValue>&);
|
||||||
Optional<Vector<AngularColorStopListElement>> parse_angular_color_stop_list(TokenStream<ComponentValue>&);
|
Optional<Vector<AngularColorStopListElement>> parse_angular_color_stop_list(TokenStream<ComponentValue>&);
|
||||||
|
|
|
@ -630,7 +630,7 @@
|
||||||
"inherited": true,
|
"inherited": true,
|
||||||
"initial": "black",
|
"initial": "black",
|
||||||
"valid-types": [
|
"valid-types": [
|
||||||
"color"
|
"paint"
|
||||||
],
|
],
|
||||||
"valid-identifiers": [
|
"valid-identifiers": [
|
||||||
"none"
|
"none"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue