mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-07 08:29:58 +00:00
LibWeb+LibIDL: Fix (or paper over) various const-correctness issues
There's definitely stuff to iterate on here, but this takes care of making the libraries compile with stricter RP and NNRP.
This commit is contained in:
parent
68b5df6bf1
commit
f11899f885
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2020-2023, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021-2023, Linus Groh <linusg@serenityos.org>
|
||||
* Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
|
||||
* Copyright (c) 2022, Ali Mohammad Pur <mpfard@serenityos.org>
|
||||
|
@ -915,7 +915,7 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter
|
|||
// 3. Let types be the flattened member types of the union type.
|
||||
auto types = union_type.flattened_member_types();
|
||||
|
||||
RefPtr<Type> dictionary_type;
|
||||
RefPtr<Type const> dictionary_type;
|
||||
for (auto& dictionary : interface.dictionaries) {
|
||||
for (auto& type : types) {
|
||||
if (type.name() == dictionary.key) {
|
||||
|
@ -1077,7 +1077,7 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter
|
|||
|
||||
// 10. If Type(V) is Object, then:
|
||||
// 1. If types includes a sequence type, then:
|
||||
RefPtr<IDL::ParameterizedType> sequence_type;
|
||||
RefPtr<IDL::ParameterizedType const> sequence_type;
|
||||
for (auto& type : types) {
|
||||
if (type.name() == "sequence") {
|
||||
sequence_type = verify_cast<IDL::ParameterizedType>(type);
|
||||
|
@ -1117,7 +1117,7 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter
|
|||
}
|
||||
|
||||
// 4. If types includes a record type, then return the result of converting V to that record type.
|
||||
RefPtr<IDL::ParameterizedType> record_type;
|
||||
RefPtr<IDL::ParameterizedType const> record_type;
|
||||
for (auto& type : types) {
|
||||
if (type.name() == "record") {
|
||||
record_type = verify_cast<IDL::ParameterizedType>(type);
|
||||
|
@ -1165,7 +1165,7 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter
|
|||
)~~~");
|
||||
}
|
||||
|
||||
RefPtr<IDL::Type> numeric_type;
|
||||
RefPtr<IDL::Type const> numeric_type;
|
||||
for (auto& type : types) {
|
||||
if (type.is_numeric()) {
|
||||
numeric_type = type;
|
||||
|
@ -1794,7 +1794,7 @@ static EffectiveOverloadSet compute_the_effective_overload_set(auto const& overl
|
|||
int argument_count = (int)arguments.size();
|
||||
|
||||
// 3. Let types be a type list.
|
||||
NonnullRefPtrVector<Type> types;
|
||||
NonnullRefPtrVector<Type const> types;
|
||||
|
||||
// 4. Let optionalityValues be an optionality list.
|
||||
Vector<Optionality> optionality_values;
|
||||
|
@ -1911,7 +1911,7 @@ static DeprecatedString generate_constructor_for_idl_type(Type const& type)
|
|||
case Type::Kind::Parameterized: {
|
||||
auto const& parameterized_type = type.as_parameterized();
|
||||
StringBuilder builder;
|
||||
builder.appendff("make_ref_counted<IDL::ParameterizedTypeType>(\"{}\", {}, NonnullRefPtrVector<IDL::Type> {{", type.name(), type.is_nullable());
|
||||
builder.appendff("make_ref_counted<IDL::ParameterizedTypeType>(\"{}\", {}, NonnullRefPtrVector<IDL::Type const> {{", type.name(), type.is_nullable());
|
||||
append_type_list(builder, parameterized_type.parameters());
|
||||
builder.append("})"sv);
|
||||
return builder.to_deprecated_string();
|
||||
|
@ -1919,7 +1919,7 @@ static DeprecatedString generate_constructor_for_idl_type(Type const& type)
|
|||
case Type::Kind::Union: {
|
||||
auto const& union_type = type.as_union();
|
||||
StringBuilder builder;
|
||||
builder.appendff("make_ref_counted<IDL::UnionType>(\"{}\", {}, NonnullRefPtrVector<IDL::Type> {{", type.name(), type.is_nullable());
|
||||
builder.appendff("make_ref_counted<IDL::UnionType>(\"{}\", {}, NonnullRefPtrVector<IDL::Type const> {{", type.name(), type.is_nullable());
|
||||
append_type_list(builder, union_type.member_types());
|
||||
builder.append("})"sv);
|
||||
return builder.to_deprecated_string();
|
||||
|
@ -1978,7 +1978,7 @@ JS_DEFINE_NATIVE_FUNCTION(@class_name@::@function.name:snakecase@)
|
|||
continue;
|
||||
|
||||
StringBuilder types_builder;
|
||||
types_builder.append("NonnullRefPtrVector<IDL::Type> { "sv);
|
||||
types_builder.append("NonnullRefPtrVector<IDL::Type const> { "sv);
|
||||
StringBuilder optionality_builder;
|
||||
optionality_builder.append("Vector<IDL::Optionality> { "sv);
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2020-2023, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021-2022, Linus Groh <linusg@serenityos.org>
|
||||
* Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
|
||||
* Copyright (c) 2022, Ali Mohammad Pur <mpfard@serenityos.org>
|
||||
|
@ -163,10 +163,10 @@ Optional<Interface&> Parser::resolve_import(auto path)
|
|||
return result;
|
||||
}
|
||||
|
||||
NonnullRefPtr<Type> Parser::parse_type()
|
||||
NonnullRefPtr<Type const> Parser::parse_type()
|
||||
{
|
||||
if (lexer.consume_specific('(')) {
|
||||
NonnullRefPtrVector<Type> union_member_types;
|
||||
NonnullRefPtrVector<Type const> union_member_types;
|
||||
union_member_types.append(parse_type());
|
||||
consume_whitespace();
|
||||
assert_string("or"sv);
|
||||
|
@ -203,7 +203,7 @@ NonnullRefPtr<Type> Parser::parse_type()
|
|||
name = "long long"sv;
|
||||
}
|
||||
|
||||
NonnullRefPtrVector<Type> parameters;
|
||||
NonnullRefPtrVector<Type const> parameters;
|
||||
bool is_parameterized_type = false;
|
||||
if (lexer.consume_specific('<')) {
|
||||
is_parameterized_type = true;
|
||||
|
@ -820,11 +820,11 @@ void Parser::parse_non_interface_entities(bool allow_interface, Interface& inter
|
|||
|
||||
static void resolve_union_typedefs(Interface& interface, UnionType& union_);
|
||||
|
||||
static void resolve_typedef(Interface& interface, NonnullRefPtr<Type>& type, HashMap<DeprecatedString, DeprecatedString>* extended_attributes = {})
|
||||
static void resolve_typedef(Interface& interface, NonnullRefPtr<Type const>& type, HashMap<DeprecatedString, DeprecatedString>* extended_attributes = {})
|
||||
{
|
||||
if (is<ParameterizedType>(*type)) {
|
||||
auto& parameterized_type = type->as_parameterized();
|
||||
auto& parameters = static_cast<Vector<NonnullRefPtr<Type>>&>(parameterized_type.parameters());
|
||||
auto& parameterized_type = const_cast<Type&>(*type).as_parameterized();
|
||||
auto& parameters = static_cast<Vector<NonnullRefPtr<Type const>>&>(parameterized_type.parameters());
|
||||
for (auto& parameter : parameters)
|
||||
resolve_typedef(interface, parameter);
|
||||
return;
|
||||
|
@ -832,7 +832,7 @@ static void resolve_typedef(Interface& interface, NonnullRefPtr<Type>& type, Has
|
|||
|
||||
// Resolve anonymous union types until we get named types that can be resolved in the next step.
|
||||
if (is<UnionType>(*type) && type->name().is_empty()) {
|
||||
resolve_union_typedefs(interface, type->as_union());
|
||||
resolve_union_typedefs(interface, const_cast<Type&>(*type).as_union());
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -841,7 +841,7 @@ static void resolve_typedef(Interface& interface, NonnullRefPtr<Type>& type, Has
|
|||
return;
|
||||
bool nullable = type->is_nullable();
|
||||
type = it->value.type;
|
||||
type->set_nullable(nullable);
|
||||
const_cast<Type&>(*type).set_nullable(nullable);
|
||||
if (extended_attributes) {
|
||||
for (auto& attribute : it->value.extended_attributes)
|
||||
extended_attributes->set(attribute.key, attribute.value);
|
||||
|
@ -859,12 +859,12 @@ static void resolve_typedef(Interface& interface, NonnullRefPtr<Type>& type, Has
|
|||
// UnionType(UnionType(A, B), UnionType(C, D))
|
||||
// Note that flattening unions is handled separately as per the spec.
|
||||
if (is<UnionType>(*type))
|
||||
resolve_union_typedefs(interface, type->as_union());
|
||||
resolve_union_typedefs(interface, const_cast<Type&>(*type).as_union());
|
||||
}
|
||||
|
||||
static void resolve_union_typedefs(Interface& interface, UnionType& union_)
|
||||
{
|
||||
auto& member_types = static_cast<Vector<NonnullRefPtr<Type>>&>(union_.member_types());
|
||||
auto& member_types = static_cast<Vector<NonnullRefPtr<Type const>>&>(union_.member_types());
|
||||
for (auto& member_type : member_types)
|
||||
resolve_typedef(interface, member_type);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2020-2023, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
|
||||
* Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
|
||||
* Copyright (c) 2022, Ali Mohammad Pur <mpfard@serenityos.org>
|
||||
|
@ -54,7 +54,7 @@ private:
|
|||
void parse_iterable(Interface&);
|
||||
Function parse_function(HashMap<DeprecatedString, DeprecatedString>& extended_attributes, Interface&, IsSpecialOperation is_special_operation = IsSpecialOperation::No);
|
||||
Vector<Parameter> parse_parameters();
|
||||
NonnullRefPtr<Type> parse_type();
|
||||
NonnullRefPtr<Type const> parse_type();
|
||||
void parse_constant(Interface&);
|
||||
|
||||
DeprecatedString import_base_path;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2020-2023, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
|
||||
* Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
|
||||
* Copyright (c) 2022, Ali Mohammad Pur <mpfard@serenityos.org>
|
||||
|
@ -143,7 +143,7 @@ private:
|
|||
};
|
||||
|
||||
struct Parameter {
|
||||
NonnullRefPtr<Type> type;
|
||||
NonnullRefPtr<Type const> type;
|
||||
DeprecatedString name;
|
||||
bool optional { false };
|
||||
Optional<DeprecatedString> optional_default_value;
|
||||
|
@ -152,7 +152,7 @@ struct Parameter {
|
|||
};
|
||||
|
||||
struct Function {
|
||||
NonnullRefPtr<Type> return_type;
|
||||
NonnullRefPtr<Type const> return_type;
|
||||
DeprecatedString name;
|
||||
Vector<Parameter> parameters;
|
||||
HashMap<DeprecatedString, DeprecatedString> extended_attributes;
|
||||
|
@ -170,7 +170,7 @@ struct Constructor {
|
|||
};
|
||||
|
||||
struct Constant {
|
||||
NonnullRefPtr<Type> type;
|
||||
NonnullRefPtr<Type const> type;
|
||||
DeprecatedString name;
|
||||
DeprecatedString value;
|
||||
};
|
||||
|
@ -178,7 +178,7 @@ struct Constant {
|
|||
struct Attribute {
|
||||
bool inherit { false };
|
||||
bool readonly { false };
|
||||
NonnullRefPtr<Type> type;
|
||||
NonnullRefPtr<Type const> type;
|
||||
DeprecatedString name;
|
||||
HashMap<DeprecatedString, DeprecatedString> extended_attributes;
|
||||
|
||||
|
@ -189,7 +189,7 @@ struct Attribute {
|
|||
|
||||
struct DictionaryMember {
|
||||
bool required { false };
|
||||
NonnullRefPtr<Type> type;
|
||||
NonnullRefPtr<Type const> type;
|
||||
DeprecatedString name;
|
||||
HashMap<DeprecatedString, DeprecatedString> extended_attributes;
|
||||
Optional<DeprecatedString> default_value;
|
||||
|
@ -202,7 +202,7 @@ struct Dictionary {
|
|||
|
||||
struct Typedef {
|
||||
HashMap<DeprecatedString, DeprecatedString> extended_attributes;
|
||||
NonnullRefPtr<Type> type;
|
||||
NonnullRefPtr<Type const> type;
|
||||
};
|
||||
|
||||
struct Enumeration {
|
||||
|
@ -213,7 +213,7 @@ struct Enumeration {
|
|||
};
|
||||
|
||||
struct CallbackFunction {
|
||||
NonnullRefPtr<Type> return_type;
|
||||
NonnullRefPtr<Type const> return_type;
|
||||
Vector<Parameter> parameters;
|
||||
bool is_legacy_treat_non_object_as_null { false };
|
||||
};
|
||||
|
@ -222,7 +222,7 @@ class Interface;
|
|||
|
||||
class ParameterizedType : public Type {
|
||||
public:
|
||||
ParameterizedType(DeprecatedString name, bool nullable, NonnullRefPtrVector<Type> parameters)
|
||||
ParameterizedType(DeprecatedString name, bool nullable, NonnullRefPtrVector<Type const> parameters)
|
||||
: Type(Kind::Parameterized, move(name), nullable)
|
||||
, m_parameters(move(parameters))
|
||||
{
|
||||
|
@ -232,11 +232,11 @@ public:
|
|||
|
||||
void generate_sequence_from_iterable(SourceGenerator& generator, DeprecatedString const& cpp_name, DeprecatedString const& iterable_cpp_name, DeprecatedString const& iterator_method_cpp_name, IDL::Interface const&, size_t recursion_depth) const;
|
||||
|
||||
NonnullRefPtrVector<Type> const& parameters() const { return m_parameters; }
|
||||
NonnullRefPtrVector<Type>& parameters() { return m_parameters; }
|
||||
NonnullRefPtrVector<Type const> const& parameters() const { return m_parameters; }
|
||||
NonnullRefPtrVector<Type const>& parameters() { return m_parameters; }
|
||||
|
||||
private:
|
||||
NonnullRefPtrVector<Type> m_parameters;
|
||||
NonnullRefPtrVector<Type const> m_parameters;
|
||||
};
|
||||
|
||||
static inline size_t get_shortest_function_length(Vector<Function&> const& overload_set)
|
||||
|
@ -270,8 +270,8 @@ public:
|
|||
Optional<DeprecatedString> stringifier_attribute;
|
||||
bool has_unscopable_member { false };
|
||||
|
||||
Optional<NonnullRefPtr<Type>> value_iterator_type;
|
||||
Optional<Tuple<NonnullRefPtr<Type>, NonnullRefPtr<Type>>> pair_iterator_types;
|
||||
Optional<NonnullRefPtr<Type const>> value_iterator_type;
|
||||
Optional<Tuple<NonnullRefPtr<Type const>, NonnullRefPtr<Type const>>> pair_iterator_types;
|
||||
|
||||
Optional<Function> named_property_getter;
|
||||
Optional<Function> named_property_setter;
|
||||
|
@ -318,7 +318,7 @@ public:
|
|||
|
||||
class UnionType : public Type {
|
||||
public:
|
||||
UnionType(DeprecatedString name, bool nullable, NonnullRefPtrVector<Type> member_types)
|
||||
UnionType(DeprecatedString name, bool nullable, NonnullRefPtrVector<Type const> member_types)
|
||||
: Type(Kind::Union, move(name), nullable)
|
||||
, m_member_types(move(member_types))
|
||||
{
|
||||
|
@ -326,16 +326,16 @@ public:
|
|||
|
||||
virtual ~UnionType() override = default;
|
||||
|
||||
NonnullRefPtrVector<Type> const& member_types() const { return m_member_types; }
|
||||
NonnullRefPtrVector<Type>& member_types() { return m_member_types; }
|
||||
NonnullRefPtrVector<Type const> const& member_types() const { return m_member_types; }
|
||||
NonnullRefPtrVector<Type const>& member_types() { return m_member_types; }
|
||||
|
||||
// https://webidl.spec.whatwg.org/#dfn-flattened-union-member-types
|
||||
NonnullRefPtrVector<Type> flattened_member_types() const
|
||||
NonnullRefPtrVector<Type const> flattened_member_types() const
|
||||
{
|
||||
// 1. Let T be the union type.
|
||||
|
||||
// 2. Initialize S to ∅.
|
||||
NonnullRefPtrVector<Type> types;
|
||||
NonnullRefPtrVector<Type const> types;
|
||||
|
||||
// 3. For each member type U of T:
|
||||
for (auto& type : m_member_types) {
|
||||
|
@ -390,7 +390,7 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
NonnullRefPtrVector<Type> m_member_types;
|
||||
NonnullRefPtrVector<Type const> m_member_types;
|
||||
};
|
||||
|
||||
// https://webidl.spec.whatwg.org/#dfn-optionality-value
|
||||
|
@ -405,7 +405,7 @@ class EffectiveOverloadSet {
|
|||
public:
|
||||
struct Item {
|
||||
int callable_id;
|
||||
NonnullRefPtrVector<Type> types;
|
||||
NonnullRefPtrVector<Type const> types;
|
||||
Vector<Optionality> optionality_values;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -172,7 +172,7 @@ void ElementInlineCSSStyleDeclaration::update_style_attribute()
|
|||
}
|
||||
|
||||
// https://drafts.csswg.org/cssom/#set-a-css-declaration
|
||||
bool PropertyOwningCSSStyleDeclaration::set_a_css_declaration(PropertyID property_id, NonnullRefPtr<StyleValue> value, Important important)
|
||||
bool PropertyOwningCSSStyleDeclaration::set_a_css_declaration(PropertyID property_id, NonnullRefPtr<StyleValue const> value, Important important)
|
||||
{
|
||||
// FIXME: Handle logical property groups.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -21,7 +21,7 @@ enum class Important {
|
|||
struct StyleProperty {
|
||||
Important important { Important::No };
|
||||
CSS::PropertyID property_id;
|
||||
NonnullRefPtr<StyleValue> value;
|
||||
NonnullRefPtr<StyleValue const> value;
|
||||
DeprecatedString custom_name {};
|
||||
};
|
||||
|
||||
|
@ -92,7 +92,7 @@ protected:
|
|||
void set_the_declarations(Vector<StyleProperty> properties, HashMap<DeprecatedString, StyleProperty> custom_properties);
|
||||
|
||||
private:
|
||||
bool set_a_css_declaration(PropertyID, NonnullRefPtr<StyleValue>, Important);
|
||||
bool set_a_css_declaration(PropertyID, NonnullRefPtr<StyleValue const>, Important);
|
||||
|
||||
Vector<StyleProperty> m_properties;
|
||||
HashMap<DeprecatedString, StyleProperty> m_custom_properties;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2020-2022, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2020-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -77,7 +77,7 @@ public:
|
|||
};
|
||||
|
||||
struct BackgroundLayerData {
|
||||
RefPtr<CSS::AbstractImageStyleValue> background_image { nullptr };
|
||||
RefPtr<CSS::AbstractImageStyleValue const> background_image { nullptr };
|
||||
CSS::BackgroundAttachment attachment { CSS::BackgroundAttachment::Scroll };
|
||||
CSS::BackgroundBox origin { CSS::BackgroundBox::PaddingBox };
|
||||
CSS::BackgroundBox clip { CSS::BackgroundBox::BorderBox };
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
|
||||
* Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2022-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -64,11 +64,21 @@ DeprecatedString MediaList::item(u32 index) const
|
|||
// https://www.w3.org/TR/cssom-1/#dom-medialist-appendmedium
|
||||
void MediaList::append_medium(DeprecatedString medium)
|
||||
{
|
||||
// 1. Let m be the result of parsing the given value.
|
||||
auto m = parse_media_query({}, medium);
|
||||
|
||||
// 2. If m is null, then return.
|
||||
if (!m)
|
||||
return;
|
||||
if (m_media.contains_slow(*m))
|
||||
return;
|
||||
|
||||
// 3. If comparing m with any of the media queries in the collection of media queries returns true, then return.
|
||||
auto serialized = m->to_string().release_value_but_fixme_should_propagate_errors();
|
||||
for (auto& existing_medium : m_media) {
|
||||
if (existing_medium.to_string().release_value_but_fixme_should_propagate_errors() == serialized)
|
||||
return;
|
||||
}
|
||||
|
||||
// 4. Append m to the collection of media queries.
|
||||
m_media.append(m.release_nonnull());
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Copyright (c) 2020-2021, the SerenityOS developers.
|
||||
* Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org>
|
||||
* Copyright (c) 2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -23,10 +24,10 @@ public:
|
|||
~ComponentValue();
|
||||
|
||||
bool is_block() const { return m_value.has<NonnullRefPtr<Block>>(); }
|
||||
Block const& block() const { return m_value.get<NonnullRefPtr<Block>>(); }
|
||||
Block& block() const { return m_value.get<NonnullRefPtr<Block>>(); }
|
||||
|
||||
bool is_function() const { return m_value.has<NonnullRefPtr<Function>>(); }
|
||||
Function const& function() const { return m_value.get<NonnullRefPtr<Function>>(); }
|
||||
Function& function() const { return m_value.get<NonnullRefPtr<Function>>(); }
|
||||
|
||||
bool is_token() const { return m_value.has<Token>(); }
|
||||
bool is(Token::Type type) const { return is_token() && token().is(type); }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2021-2022, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021-2023, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org>
|
||||
* Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
|
||||
*
|
||||
|
@ -122,14 +122,14 @@ static RefPtr<StyleValue> style_value_for_display(CSS::Display display)
|
|||
TODO();
|
||||
}
|
||||
|
||||
static NonnullRefPtr<StyleValue> value_or_default(Optional<StyleProperty> property, NonnullRefPtr<StyleValue> default_style)
|
||||
static NonnullRefPtr<StyleValue const> value_or_default(Optional<StyleProperty> property, NonnullRefPtr<StyleValue> default_style)
|
||||
{
|
||||
if (property.has_value())
|
||||
return property.value().value;
|
||||
return default_style;
|
||||
}
|
||||
|
||||
static NonnullRefPtr<StyleValue> style_value_for_length_percentage(LengthPercentage const& length_percentage)
|
||||
static NonnullRefPtr<StyleValue const> style_value_for_length_percentage(LengthPercentage const& length_percentage)
|
||||
{
|
||||
if (length_percentage.is_percentage())
|
||||
return PercentageStyleValue::create(length_percentage.percentage());
|
||||
|
@ -138,7 +138,7 @@ static NonnullRefPtr<StyleValue> style_value_for_length_percentage(LengthPercent
|
|||
return length_percentage.calculated();
|
||||
}
|
||||
|
||||
static NonnullRefPtr<StyleValue> style_value_for_size(CSS::Size const& size)
|
||||
static NonnullRefPtr<StyleValue const> style_value_for_size(CSS::Size const& size)
|
||||
{
|
||||
if (size.is_none())
|
||||
return IdentifierStyleValue::create(ValueID::None);
|
||||
|
@ -156,7 +156,7 @@ static NonnullRefPtr<StyleValue> style_value_for_size(CSS::Size const& size)
|
|||
TODO();
|
||||
}
|
||||
|
||||
RefPtr<StyleValue> ResolvedCSSStyleDeclaration::style_value_for_property(Layout::NodeWithStyle const& layout_node, PropertyID property_id) const
|
||||
RefPtr<StyleValue const> ResolvedCSSStyleDeclaration::style_value_for_property(Layout::NodeWithStyle const& layout_node, PropertyID property_id) const
|
||||
{
|
||||
switch (property_id) {
|
||||
case CSS::PropertyID::Background: {
|
||||
|
@ -222,7 +222,7 @@ RefPtr<StyleValue> ResolvedCSSStyleDeclaration::style_value_for_property(Layout:
|
|||
auto maybe_top_right_radius = property(CSS::PropertyID::BorderTopRightRadius);
|
||||
auto maybe_bottom_left_radius = property(CSS::PropertyID::BorderBottomLeftRadius);
|
||||
auto maybe_bottom_right_radius = property(CSS::PropertyID::BorderBottomRightRadius);
|
||||
RefPtr<BorderRadiusStyleValue> top_left_radius, top_right_radius, bottom_left_radius, bottom_right_radius;
|
||||
RefPtr<BorderRadiusStyleValue const> top_left_radius, top_right_radius, bottom_left_radius, bottom_right_radius;
|
||||
if (maybe_top_left_radius.has_value()) {
|
||||
VERIFY(maybe_top_left_radius.value().value->is_border_radius());
|
||||
top_left_radius = maybe_top_left_radius.value().value->as_border_radius();
|
||||
|
@ -337,7 +337,7 @@ RefPtr<StyleValue> ResolvedCSSStyleDeclaration::style_value_for_property(Layout:
|
|||
auto maybe_grid_column_start = property(CSS::PropertyID::GridColumnStart);
|
||||
auto maybe_grid_row_end = property(CSS::PropertyID::GridRowEnd);
|
||||
auto maybe_grid_column_end = property(CSS::PropertyID::GridColumnEnd);
|
||||
RefPtr<GridTrackPlacementStyleValue> grid_row_start, grid_column_start, grid_row_end, grid_column_end;
|
||||
RefPtr<GridTrackPlacementStyleValue const> grid_row_start, grid_column_start, grid_row_end, grid_column_end;
|
||||
if (maybe_grid_row_start.has_value()) {
|
||||
VERIFY(maybe_grid_row_start.value().value->is_grid_track_placement());
|
||||
grid_row_start = maybe_grid_row_start.value().value->as_grid_track_placement();
|
||||
|
@ -363,7 +363,7 @@ RefPtr<StyleValue> ResolvedCSSStyleDeclaration::style_value_for_property(Layout:
|
|||
case CSS::PropertyID::GridColumn: {
|
||||
auto maybe_grid_column_end = property(CSS::PropertyID::GridColumnEnd);
|
||||
auto maybe_grid_column_start = property(CSS::PropertyID::GridColumnStart);
|
||||
RefPtr<GridTrackPlacementStyleValue> grid_column_start, grid_column_end;
|
||||
RefPtr<GridTrackPlacementStyleValue const> grid_column_start, grid_column_end;
|
||||
if (maybe_grid_column_end.has_value()) {
|
||||
VERIFY(maybe_grid_column_end.value().value->is_grid_track_placement());
|
||||
grid_column_end = maybe_grid_column_end.value().value->as_grid_track_placement();
|
||||
|
@ -381,7 +381,7 @@ RefPtr<StyleValue> ResolvedCSSStyleDeclaration::style_value_for_property(Layout:
|
|||
case CSS::PropertyID::GridRow: {
|
||||
auto maybe_grid_row_end = property(CSS::PropertyID::GridRowEnd);
|
||||
auto maybe_grid_row_start = property(CSS::PropertyID::GridRowStart);
|
||||
RefPtr<GridTrackPlacementStyleValue> grid_row_start, grid_row_end;
|
||||
RefPtr<GridTrackPlacementStyleValue const> grid_row_start, grid_row_end;
|
||||
if (maybe_grid_row_end.has_value()) {
|
||||
VERIFY(maybe_grid_row_end.value().value->is_grid_track_placement());
|
||||
grid_row_end = maybe_grid_row_end.value().value->as_grid_track_placement();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -32,7 +32,7 @@ private:
|
|||
|
||||
virtual void visit_edges(Cell::Visitor&) override;
|
||||
|
||||
RefPtr<StyleValue> style_value_for_property(Layout::NodeWithStyle const&, PropertyID) const;
|
||||
RefPtr<StyleValue const> style_value_for_property(Layout::NodeWithStyle const&, PropertyID) const;
|
||||
|
||||
JS::NonnullGCPtr<DOM::Element> m_element;
|
||||
};
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021, the SerenityOS developers.
|
||||
* Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org>
|
||||
*
|
||||
|
@ -587,7 +587,7 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope
|
|||
style.set_property(property_id, value);
|
||||
}
|
||||
|
||||
static RefPtr<StyleValue> get_custom_property(DOM::Element const& element, FlyString const& custom_property_name)
|
||||
static RefPtr<StyleValue const> get_custom_property(DOM::Element const& element, FlyString const& custom_property_name)
|
||||
{
|
||||
for (auto const* current_element = &element; current_element; current_element = current_element->parent_element()) {
|
||||
if (auto it = current_element->custom_properties().find(custom_property_name.to_string().to_deprecated_string()); it != current_element->custom_properties().end())
|
||||
|
@ -907,7 +907,7 @@ static DOM::Element const* element_to_inherit_style_from(DOM::Element const* ele
|
|||
return parent_element;
|
||||
}
|
||||
|
||||
static NonnullRefPtr<StyleValue> get_inherit_value(CSS::PropertyID property_id, DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element)
|
||||
static NonnullRefPtr<StyleValue const> get_inherit_value(CSS::PropertyID property_id, DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element)
|
||||
{
|
||||
auto* parent_element = element_to_inherit_style_from(element, pseudo_element);
|
||||
|
||||
|
@ -1083,7 +1083,7 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele
|
|||
else
|
||||
weight = Gfx::FontWeight::Black;
|
||||
} else if (font_weight->is_calculated()) {
|
||||
auto maybe_weight = font_weight->as_calculated().resolve_integer();
|
||||
auto maybe_weight = const_cast<CalculatedStyleValue&>(font_weight->as_calculated()).resolve_integer();
|
||||
if (maybe_weight.has_value())
|
||||
weight = maybe_weight.value();
|
||||
}
|
||||
|
@ -1152,7 +1152,7 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele
|
|||
maybe_length = font_size->to_length();
|
||||
|
||||
} else if (font_size->is_calculated()) {
|
||||
maybe_length = Length::make_calculated(font_size->as_calculated());
|
||||
maybe_length = Length::make_calculated(const_cast<CalculatedStyleValue&>(font_size->as_calculated()));
|
||||
}
|
||||
if (maybe_length.has_value()) {
|
||||
// FIXME: Support font-size: calc(...)
|
||||
|
@ -1187,7 +1187,7 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele
|
|||
FontSelector font_selector;
|
||||
bool monospace = false;
|
||||
|
||||
auto find_font = [&](String const& family) -> RefPtr<Gfx::Font> {
|
||||
auto find_font = [&](String const& family) -> RefPtr<Gfx::Font const> {
|
||||
float font_size_in_pt = font_size_in_px * 0.75f;
|
||||
font_selector = { family, font_size_in_pt, weight, width, slope };
|
||||
|
||||
|
@ -1206,7 +1206,7 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele
|
|||
return {};
|
||||
};
|
||||
|
||||
auto find_generic_font = [&](ValueID font_id) -> RefPtr<Gfx::Font> {
|
||||
auto find_generic_font = [&](ValueID font_id) -> RefPtr<Gfx::Font const> {
|
||||
Platform::GenericFont generic_font {};
|
||||
switch (font_id) {
|
||||
case ValueID::Monospace:
|
||||
|
@ -1241,7 +1241,7 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele
|
|||
return find_font(String::from_utf8(Platform::FontPlugin::the().generic_font_name(generic_font)).release_value_but_fixme_should_propagate_errors());
|
||||
};
|
||||
|
||||
RefPtr<Gfx::Font> found_font;
|
||||
RefPtr<Gfx::Font const> found_font;
|
||||
|
||||
auto family_value = style.property(PropertyID::FontFamily);
|
||||
if (family_value->is_value_list()) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021-2022, Sam Atkins <atkinssj@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
|
@ -31,12 +31,12 @@ NonnullRefPtr<StyleProperties> StyleProperties::clone() const
|
|||
return adopt_ref(*new StyleProperties(*this));
|
||||
}
|
||||
|
||||
void StyleProperties::set_property(CSS::PropertyID id, NonnullRefPtr<StyleValue> value)
|
||||
void StyleProperties::set_property(CSS::PropertyID id, NonnullRefPtr<StyleValue const> value)
|
||||
{
|
||||
m_property_values[to_underlying(id)] = move(value);
|
||||
}
|
||||
|
||||
NonnullRefPtr<StyleValue> StyleProperties::property(CSS::PropertyID property_id) const
|
||||
NonnullRefPtr<StyleValue const> StyleProperties::property(CSS::PropertyID property_id) const
|
||||
{
|
||||
auto value = m_property_values[to_underlying(property_id)];
|
||||
// By the time we call this method, all properties have values assigned.
|
||||
|
@ -44,7 +44,7 @@ NonnullRefPtr<StyleValue> StyleProperties::property(CSS::PropertyID property_id)
|
|||
return value.release_nonnull();
|
||||
}
|
||||
|
||||
RefPtr<StyleValue> StyleProperties::maybe_null_property(CSS::PropertyID property_id) const
|
||||
RefPtr<StyleValue const> StyleProperties::maybe_null_property(CSS::PropertyID property_id) const
|
||||
{
|
||||
return m_property_values[to_underlying(property_id)];
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ CSS::Size StyleProperties::size_value(CSS::PropertyID id) const
|
|||
}
|
||||
|
||||
if (value->is_calculated())
|
||||
return CSS::Size::make_length(CSS::Length::make_calculated(value->as_calculated()));
|
||||
return CSS::Size::make_length(CSS::Length::make_calculated(const_cast<CalculatedStyleValue&>(value->as_calculated())));
|
||||
|
||||
if (value->is_percentage())
|
||||
return CSS::Size::make_percentage(value->as_percentage().percentage());
|
||||
|
@ -95,7 +95,7 @@ Optional<LengthPercentage> StyleProperties::length_percentage(CSS::PropertyID id
|
|||
auto value = property(id);
|
||||
|
||||
if (value->is_calculated())
|
||||
return LengthPercentage { value->as_calculated() };
|
||||
return LengthPercentage { const_cast<CalculatedStyleValue&>(value->as_calculated()) };
|
||||
|
||||
if (value->is_percentage())
|
||||
return value->as_percentage().percentage();
|
||||
|
@ -124,7 +124,7 @@ Color StyleProperties::color_or_fallback(CSS::PropertyID id, Layout::NodeWithSty
|
|||
return value->to_color(node);
|
||||
}
|
||||
|
||||
NonnullRefPtr<Gfx::Font> StyleProperties::font_fallback(bool monospace, bool bold)
|
||||
NonnullRefPtr<Gfx::Font const> StyleProperties::font_fallback(bool monospace, bool bold)
|
||||
{
|
||||
if (monospace && bold)
|
||||
return Platform::FontPlugin::the().default_fixed_width_font().bold_variant();
|
||||
|
@ -161,7 +161,7 @@ CSSPixels StyleProperties::line_height(Layout::Node const& layout_node) const
|
|||
}
|
||||
|
||||
if (line_height->is_calculated())
|
||||
return CSS::Length::make_calculated(line_height->as_calculated()).to_px(layout_node);
|
||||
return CSS::Length::make_calculated(const_cast<CalculatedStyleValue&>(line_height->as_calculated())).to_px(layout_node);
|
||||
|
||||
return layout_node.font().pixel_metrics().line_spacing();
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ float StyleProperties::opacity() const
|
|||
else
|
||||
dbgln("Unable to resolve calc() as opacity (percentage): {}", value->to_string());
|
||||
} else {
|
||||
auto maybe_number = value->as_calculated().resolve_number();
|
||||
auto maybe_number = const_cast<CalculatedStyleValue&>(value->as_calculated()).resolve_number();
|
||||
if (maybe_number.has_value())
|
||||
unclamped_opacity = maybe_number.value();
|
||||
else
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -38,9 +38,9 @@ public:
|
|||
auto& properties() { return m_property_values; }
|
||||
auto const& properties() const { return m_property_values; }
|
||||
|
||||
void set_property(CSS::PropertyID, NonnullRefPtr<StyleValue> value);
|
||||
NonnullRefPtr<StyleValue> property(CSS::PropertyID) const;
|
||||
RefPtr<StyleValue> maybe_null_property(CSS::PropertyID) const;
|
||||
void set_property(CSS::PropertyID, NonnullRefPtr<StyleValue const> value);
|
||||
NonnullRefPtr<StyleValue const> property(CSS::PropertyID) const;
|
||||
RefPtr<StyleValue const> maybe_null_property(CSS::PropertyID) const;
|
||||
|
||||
CSS::Size size_value(CSS::PropertyID) const;
|
||||
LengthPercentage length_percentage_or_fallback(CSS::PropertyID, LengthPercentage const& fallback) const;
|
||||
|
@ -103,7 +103,7 @@ public:
|
|||
return *m_font;
|
||||
}
|
||||
|
||||
void set_computed_font(NonnullRefPtr<Gfx::Font> font)
|
||||
void set_computed_font(NonnullRefPtr<Gfx::Font const> font)
|
||||
{
|
||||
m_font = move(font);
|
||||
}
|
||||
|
@ -115,16 +115,16 @@ public:
|
|||
Optional<CSS::Position> position() const;
|
||||
Optional<int> z_index() const;
|
||||
|
||||
static NonnullRefPtr<Gfx::Font> font_fallback(bool monospace, bool bold);
|
||||
static NonnullRefPtr<Gfx::Font const> font_fallback(bool monospace, bool bold);
|
||||
|
||||
private:
|
||||
friend class StyleComputer;
|
||||
|
||||
Array<RefPtr<StyleValue>, to_underlying(CSS::last_property_id) + 1> m_property_values;
|
||||
Array<RefPtr<StyleValue const>, to_underlying(CSS::last_property_id) + 1> m_property_values;
|
||||
Optional<CSS::Overflow> overflow(CSS::PropertyID) const;
|
||||
Vector<CSS::ShadowData> shadow(CSS::PropertyID) const;
|
||||
|
||||
mutable RefPtr<Gfx::Font> m_font;
|
||||
mutable RefPtr<Gfx::Font const> m_font;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -291,14 +291,14 @@ StyleValueList const& StyleValue::as_value_list() const
|
|||
}
|
||||
|
||||
BackgroundStyleValue::BackgroundStyleValue(
|
||||
ValueComparingNonnullRefPtr<StyleValue> color,
|
||||
ValueComparingNonnullRefPtr<StyleValue> image,
|
||||
ValueComparingNonnullRefPtr<StyleValue> position,
|
||||
ValueComparingNonnullRefPtr<StyleValue> size,
|
||||
ValueComparingNonnullRefPtr<StyleValue> repeat,
|
||||
ValueComparingNonnullRefPtr<StyleValue> attachment,
|
||||
ValueComparingNonnullRefPtr<StyleValue> origin,
|
||||
ValueComparingNonnullRefPtr<StyleValue> clip)
|
||||
ValueComparingNonnullRefPtr<StyleValue const> color,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> image,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> position,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> size,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> repeat,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> attachment,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> origin,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> clip)
|
||||
: StyleValueWithDefaultOperators(Type::Background)
|
||||
, m_properties {
|
||||
.color = move(color),
|
||||
|
@ -335,7 +335,7 @@ ErrorOr<String> BackgroundStyleValue::to_string() const
|
|||
return String::formatted("{} {} {} {} {} {} {} {}", TRY(m_properties.color->to_string()), TRY(m_properties.image->to_string()), TRY(m_properties.position->to_string()), TRY(m_properties.size->to_string()), TRY(m_properties.repeat->to_string()), TRY(m_properties.attachment->to_string()), TRY(m_properties.origin->to_string()), TRY(m_properties.clip->to_string()));
|
||||
}
|
||||
|
||||
auto get_layer_value_string = [](ValueComparingNonnullRefPtr<StyleValue> const& style_value, size_t index) {
|
||||
auto get_layer_value_string = [](ValueComparingNonnullRefPtr<StyleValue const> const& style_value, size_t index) {
|
||||
if (style_value->is_value_list())
|
||||
return style_value->as_value_list().value_at(index, true)->to_string();
|
||||
return style_value->to_string();
|
||||
|
@ -2236,19 +2236,19 @@ static Optional<CSS::Length> absolutized_length(CSS::Length const& length, CSSPi
|
|||
return {};
|
||||
}
|
||||
|
||||
ValueComparingNonnullRefPtr<StyleValue> StyleValue::absolutized(CSSPixelRect const&, Gfx::FontPixelMetrics const&, CSSPixels, CSSPixels) const
|
||||
ValueComparingNonnullRefPtr<StyleValue const> StyleValue::absolutized(CSSPixelRect const&, Gfx::FontPixelMetrics const&, CSSPixels, CSSPixels) const
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
ValueComparingNonnullRefPtr<StyleValue> LengthStyleValue::absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const
|
||||
ValueComparingNonnullRefPtr<StyleValue const> LengthStyleValue::absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const
|
||||
{
|
||||
if (auto length = absolutized_length(m_length, viewport_rect, font_metrics, font_size, root_font_size); length.has_value())
|
||||
return LengthStyleValue::create(length.release_value());
|
||||
return *this;
|
||||
}
|
||||
|
||||
ValueComparingNonnullRefPtr<StyleValue> ShadowStyleValue::absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const
|
||||
ValueComparingNonnullRefPtr<StyleValue const> ShadowStyleValue::absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const
|
||||
{
|
||||
auto absolutized_offset_x = absolutized_length(m_properties.offset_x, viewport_rect, font_metrics, font_size, root_font_size).value_or(m_properties.offset_x);
|
||||
auto absolutized_offset_y = absolutized_length(m_properties.offset_y, viewport_rect, font_metrics, font_size, root_font_size).value_or(m_properties.offset_y);
|
||||
|
@ -2257,7 +2257,7 @@ ValueComparingNonnullRefPtr<StyleValue> ShadowStyleValue::absolutized(CSSPixelRe
|
|||
return ShadowStyleValue::create(m_properties.color, absolutized_offset_x, absolutized_offset_y, absolutized_blur_radius, absolutized_spread_distance, m_properties.placement);
|
||||
}
|
||||
|
||||
ValueComparingNonnullRefPtr<StyleValue> BorderRadiusStyleValue::absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const
|
||||
ValueComparingNonnullRefPtr<StyleValue const> BorderRadiusStyleValue::absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const
|
||||
{
|
||||
if (m_properties.horizontal_radius.is_percentage() && m_properties.vertical_radius.is_percentage())
|
||||
return *this;
|
||||
|
|
|
@ -269,7 +269,7 @@ private:
|
|||
|
||||
template<typename T>
|
||||
using ValueComparingNonnullRefPtrVector = AK::NonnullPtrVector<ValueComparingNonnullRefPtr<T>>;
|
||||
using StyleValueVector = ValueComparingNonnullRefPtrVector<StyleValue>;
|
||||
using StyleValueVector = ValueComparingNonnullRefPtrVector<StyleValue const>;
|
||||
|
||||
class StyleValue : public RefCounted<StyleValue> {
|
||||
public:
|
||||
|
@ -469,7 +469,7 @@ public:
|
|||
virtual bool has_number() const { return false; }
|
||||
virtual bool has_integer() const { return false; }
|
||||
|
||||
virtual ValueComparingNonnullRefPtr<StyleValue> absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const;
|
||||
virtual ValueComparingNonnullRefPtr<StyleValue const> absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const;
|
||||
|
||||
virtual Color to_color(Layout::NodeWithStyle const&) const { return {}; }
|
||||
virtual EdgeRect to_rect() const { VERIFY_NOT_REACHED(); }
|
||||
|
@ -533,14 +533,14 @@ private:
|
|||
class BackgroundStyleValue final : public StyleValueWithDefaultOperators<BackgroundStyleValue> {
|
||||
public:
|
||||
static ValueComparingNonnullRefPtr<BackgroundStyleValue> create(
|
||||
ValueComparingNonnullRefPtr<StyleValue> color,
|
||||
ValueComparingNonnullRefPtr<StyleValue> image,
|
||||
ValueComparingNonnullRefPtr<StyleValue> position,
|
||||
ValueComparingNonnullRefPtr<StyleValue> size,
|
||||
ValueComparingNonnullRefPtr<StyleValue> repeat,
|
||||
ValueComparingNonnullRefPtr<StyleValue> attachment,
|
||||
ValueComparingNonnullRefPtr<StyleValue> origin,
|
||||
ValueComparingNonnullRefPtr<StyleValue> clip)
|
||||
ValueComparingNonnullRefPtr<StyleValue const> color,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> image,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> position,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> size,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> repeat,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> attachment,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> origin,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> clip)
|
||||
{
|
||||
return adopt_ref(*new BackgroundStyleValue(move(color), move(image), move(position), move(size), move(repeat), move(attachment), move(origin), move(clip)));
|
||||
}
|
||||
|
@ -548,14 +548,14 @@ public:
|
|||
|
||||
size_t layer_count() const { return m_properties.layer_count; }
|
||||
|
||||
ValueComparingNonnullRefPtr<StyleValue> attachment() const { return m_properties.attachment; }
|
||||
ValueComparingNonnullRefPtr<StyleValue> clip() const { return m_properties.clip; }
|
||||
ValueComparingNonnullRefPtr<StyleValue> color() const { return m_properties.color; }
|
||||
ValueComparingNonnullRefPtr<StyleValue> image() const { return m_properties.image; }
|
||||
ValueComparingNonnullRefPtr<StyleValue> origin() const { return m_properties.origin; }
|
||||
ValueComparingNonnullRefPtr<StyleValue> position() const { return m_properties.position; }
|
||||
ValueComparingNonnullRefPtr<StyleValue> repeat() const { return m_properties.repeat; }
|
||||
ValueComparingNonnullRefPtr<StyleValue> size() const { return m_properties.size; }
|
||||
auto attachment() const { return m_properties.attachment; }
|
||||
auto clip() const { return m_properties.clip; }
|
||||
auto color() const { return m_properties.color; }
|
||||
auto image() const { return m_properties.image; }
|
||||
auto origin() const { return m_properties.origin; }
|
||||
auto position() const { return m_properties.position; }
|
||||
auto repeat() const { return m_properties.repeat; }
|
||||
auto size() const { return m_properties.size; }
|
||||
|
||||
virtual ErrorOr<String> to_string() const override;
|
||||
|
||||
|
@ -563,24 +563,24 @@ public:
|
|||
|
||||
private:
|
||||
BackgroundStyleValue(
|
||||
ValueComparingNonnullRefPtr<StyleValue> color,
|
||||
ValueComparingNonnullRefPtr<StyleValue> image,
|
||||
ValueComparingNonnullRefPtr<StyleValue> position,
|
||||
ValueComparingNonnullRefPtr<StyleValue> size,
|
||||
ValueComparingNonnullRefPtr<StyleValue> repeat,
|
||||
ValueComparingNonnullRefPtr<StyleValue> attachment,
|
||||
ValueComparingNonnullRefPtr<StyleValue> origin,
|
||||
ValueComparingNonnullRefPtr<StyleValue> clip);
|
||||
ValueComparingNonnullRefPtr<StyleValue const> color,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> image,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> position,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> size,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> repeat,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> attachment,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> origin,
|
||||
ValueComparingNonnullRefPtr<StyleValue const> clip);
|
||||
|
||||
struct Properties {
|
||||
ValueComparingNonnullRefPtr<StyleValue> color;
|
||||
ValueComparingNonnullRefPtr<StyleValue> image;
|
||||
ValueComparingNonnullRefPtr<StyleValue> position;
|
||||
ValueComparingNonnullRefPtr<StyleValue> size;
|
||||
ValueComparingNonnullRefPtr<StyleValue> repeat;
|
||||
ValueComparingNonnullRefPtr<StyleValue> attachment;
|
||||
ValueComparingNonnullRefPtr<StyleValue> origin;
|
||||
ValueComparingNonnullRefPtr<StyleValue> clip;
|
||||
ValueComparingNonnullRefPtr<StyleValue const> color;
|
||||
ValueComparingNonnullRefPtr<StyleValue const> image;
|
||||
ValueComparingNonnullRefPtr<StyleValue const> position;
|
||||
ValueComparingNonnullRefPtr<StyleValue const> size;
|
||||
ValueComparingNonnullRefPtr<StyleValue const> repeat;
|
||||
ValueComparingNonnullRefPtr<StyleValue const> attachment;
|
||||
ValueComparingNonnullRefPtr<StyleValue const> origin;
|
||||
ValueComparingNonnullRefPtr<StyleValue const> clip;
|
||||
size_t layer_count;
|
||||
bool operator==(Properties const&) const = default;
|
||||
} m_properties;
|
||||
|
@ -705,7 +705,7 @@ private:
|
|||
{
|
||||
}
|
||||
|
||||
virtual ValueComparingNonnullRefPtr<StyleValue> absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const override;
|
||||
virtual ValueComparingNonnullRefPtr<StyleValue const> absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const override;
|
||||
|
||||
struct Properties {
|
||||
bool is_elliptical;
|
||||
|
@ -717,33 +717,41 @@ private:
|
|||
|
||||
class BorderRadiusShorthandStyleValue final : public StyleValueWithDefaultOperators<BorderRadiusShorthandStyleValue> {
|
||||
public:
|
||||
static ValueComparingNonnullRefPtr<BorderRadiusShorthandStyleValue> create(ValueComparingNonnullRefPtr<BorderRadiusStyleValue> top_left, ValueComparingNonnullRefPtr<BorderRadiusStyleValue> top_right, ValueComparingNonnullRefPtr<BorderRadiusStyleValue> bottom_right, ValueComparingNonnullRefPtr<BorderRadiusStyleValue> bottom_left)
|
||||
static ValueComparingNonnullRefPtr<BorderRadiusShorthandStyleValue> create(
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> top_left,
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> top_right,
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> bottom_right,
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> bottom_left)
|
||||
{
|
||||
return adopt_ref(*new BorderRadiusShorthandStyleValue(move(top_left), move(top_right), move(bottom_right), move(bottom_left)));
|
||||
}
|
||||
virtual ~BorderRadiusShorthandStyleValue() override = default;
|
||||
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue> top_left() const { return m_properties.top_left; }
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue> top_right() const { return m_properties.top_right; }
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue> bottom_right() const { return m_properties.bottom_right; }
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue> bottom_left() const { return m_properties.bottom_left; }
|
||||
auto top_left() const { return m_properties.top_left; }
|
||||
auto top_right() const { return m_properties.top_right; }
|
||||
auto bottom_right() const { return m_properties.bottom_right; }
|
||||
auto bottom_left() const { return m_properties.bottom_left; }
|
||||
|
||||
virtual ErrorOr<String> to_string() const override;
|
||||
|
||||
bool properties_equal(BorderRadiusShorthandStyleValue const& other) const { return m_properties == other.m_properties; }
|
||||
|
||||
private:
|
||||
BorderRadiusShorthandStyleValue(ValueComparingNonnullRefPtr<BorderRadiusStyleValue> top_left, ValueComparingNonnullRefPtr<BorderRadiusStyleValue> top_right, ValueComparingNonnullRefPtr<BorderRadiusStyleValue> bottom_right, ValueComparingNonnullRefPtr<BorderRadiusStyleValue> bottom_left)
|
||||
BorderRadiusShorthandStyleValue(
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> top_left,
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> top_right,
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> bottom_right,
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> bottom_left)
|
||||
: StyleValueWithDefaultOperators(Type::BorderRadiusShorthand)
|
||||
, m_properties { .top_left = move(top_left), .top_right = move(top_right), .bottom_right = move(bottom_right), .bottom_left = move(bottom_left) }
|
||||
{
|
||||
}
|
||||
|
||||
struct Properties {
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue> top_left;
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue> top_right;
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue> bottom_right;
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue> bottom_left;
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> top_left;
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> top_right;
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> bottom_right;
|
||||
ValueComparingNonnullRefPtr<BorderRadiusStyleValue const> bottom_left;
|
||||
bool operator==(Properties const&) const = default;
|
||||
} m_properties;
|
||||
};
|
||||
|
@ -1206,7 +1214,7 @@ private:
|
|||
|
||||
class GridTrackPlacementShorthandStyleValue final : public StyleValueWithDefaultOperators<GridTrackPlacementShorthandStyleValue> {
|
||||
public:
|
||||
static ValueComparingNonnullRefPtr<GridTrackPlacementShorthandStyleValue> create(ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> start, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> end)
|
||||
static ValueComparingNonnullRefPtr<GridTrackPlacementShorthandStyleValue> create(ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> start, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> end)
|
||||
{
|
||||
return adopt_ref(*new GridTrackPlacementShorthandStyleValue(move(start), move(end)));
|
||||
}
|
||||
|
@ -1216,30 +1224,34 @@ public:
|
|||
}
|
||||
virtual ~GridTrackPlacementShorthandStyleValue() override = default;
|
||||
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> start() const { return m_properties.start; }
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> end() const { return m_properties.end; }
|
||||
auto start() const { return m_properties.start; }
|
||||
auto end() const { return m_properties.end; }
|
||||
|
||||
virtual ErrorOr<String> to_string() const override;
|
||||
|
||||
bool properties_equal(GridTrackPlacementShorthandStyleValue const& other) const { return m_properties == other.m_properties; };
|
||||
|
||||
private:
|
||||
GridTrackPlacementShorthandStyleValue(ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> start, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> end)
|
||||
GridTrackPlacementShorthandStyleValue(ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> start, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> end)
|
||||
: StyleValueWithDefaultOperators(Type::GridTrackPlacementShorthand)
|
||||
, m_properties { .start = move(start), .end = move(end) }
|
||||
{
|
||||
}
|
||||
|
||||
struct Properties {
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> start;
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> end;
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> start;
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> end;
|
||||
bool operator==(Properties const&) const = default;
|
||||
} m_properties;
|
||||
};
|
||||
|
||||
class GridAreaShorthandStyleValue final : public StyleValueWithDefaultOperators<GridAreaShorthandStyleValue> {
|
||||
public:
|
||||
static ValueComparingNonnullRefPtr<GridAreaShorthandStyleValue> create(ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> row_start, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> column_start, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> row_end, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> column_end)
|
||||
static ValueComparingNonnullRefPtr<GridAreaShorthandStyleValue> create(
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> row_start,
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> column_start,
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> row_end,
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> column_end)
|
||||
{
|
||||
return adopt_ref(*new GridAreaShorthandStyleValue(row_start, column_start, row_end, column_end));
|
||||
}
|
||||
|
@ -1249,27 +1261,27 @@ public:
|
|||
}
|
||||
virtual ~GridAreaShorthandStyleValue() override = default;
|
||||
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> row_start() const { return m_properties.row_start; }
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> column_start() const { return m_properties.column_start; }
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> row_end() const { return m_properties.row_end; }
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> column_end() const { return m_properties.column_end; }
|
||||
auto row_start() const { return m_properties.row_start; }
|
||||
auto column_start() const { return m_properties.column_start; }
|
||||
auto row_end() const { return m_properties.row_end; }
|
||||
auto column_end() const { return m_properties.column_end; }
|
||||
|
||||
virtual ErrorOr<String> to_string() const override;
|
||||
|
||||
bool properties_equal(GridAreaShorthandStyleValue const& other) const { return m_properties == other.m_properties; }
|
||||
|
||||
private:
|
||||
GridAreaShorthandStyleValue(ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> row_start, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> column_start, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> row_end, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> column_end)
|
||||
GridAreaShorthandStyleValue(ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> row_start, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> column_start, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> row_end, ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> column_end)
|
||||
: StyleValueWithDefaultOperators(Type::GridAreaShorthand)
|
||||
, m_properties { .row_start = move(row_start), .column_start = move(column_start), .row_end = move(row_end), .column_end = move(column_end) }
|
||||
{
|
||||
}
|
||||
|
||||
struct Properties {
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> row_start;
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> column_start;
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> row_end;
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue> column_end;
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> row_start;
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> column_start;
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> row_end;
|
||||
ValueComparingNonnullRefPtr<GridTrackPlacementStyleValue const> column_end;
|
||||
bool operator==(Properties const&) const = default;
|
||||
} m_properties;
|
||||
};
|
||||
|
@ -1623,7 +1635,7 @@ public:
|
|||
virtual ErrorOr<String> to_string() const override { return m_length.to_string(); }
|
||||
virtual Length to_length() const override { return m_length; }
|
||||
virtual ValueID to_identifier() const override { return has_auto() ? ValueID::Auto : ValueID::Invalid; }
|
||||
virtual ValueComparingNonnullRefPtr<StyleValue> absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const override;
|
||||
virtual ValueComparingNonnullRefPtr<StyleValue const> absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const override;
|
||||
|
||||
bool properties_equal(LengthStyleValue const& other) const { return m_length == other.m_length; }
|
||||
|
||||
|
@ -1852,7 +1864,7 @@ private:
|
|||
{
|
||||
}
|
||||
|
||||
virtual ValueComparingNonnullRefPtr<StyleValue> absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const override;
|
||||
virtual ValueComparingNonnullRefPtr<StyleValue const> absolutized(CSSPixelRect const& viewport_rect, Gfx::FontPixelMetrics const& font_metrics, CSSPixels font_size, CSSPixels root_font_size) const override;
|
||||
|
||||
struct Properties {
|
||||
Color color;
|
||||
|
@ -2038,7 +2050,7 @@ public:
|
|||
|
||||
size_t size() const { return m_properties.values.size(); }
|
||||
StyleValueVector const& values() const { return m_properties.values; }
|
||||
ValueComparingNonnullRefPtr<StyleValue> value_at(size_t i, bool allow_loop) const
|
||||
ValueComparingNonnullRefPtr<StyleValue const> value_at(size_t i, bool allow_loop) const
|
||||
{
|
||||
if (allow_loop)
|
||||
return m_properties.values[i % size()];
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -122,6 +122,7 @@ public:
|
|||
|
||||
DeprecatedString name() const { return attribute(HTML::AttributeNames::name); }
|
||||
|
||||
CSS::StyleProperties* computed_css_values() { return m_computed_css_values.ptr(); }
|
||||
CSS::StyleProperties const* computed_css_values() const { return m_computed_css_values.ptr(); }
|
||||
void set_computed_css_values(RefPtr<CSS::StyleProperties> style) { m_computed_css_values = move(style); }
|
||||
NonnullRefPtr<CSS::StyleProperties> resolved_css_values();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -13,7 +13,7 @@ FontCache& FontCache::the()
|
|||
return cache;
|
||||
}
|
||||
|
||||
RefPtr<Gfx::Font> FontCache::get(FontSelector const& font_selector) const
|
||||
RefPtr<Gfx::Font const> FontCache::get(FontSelector const& font_selector) const
|
||||
{
|
||||
auto cached_font = m_fonts.get(font_selector);
|
||||
if (cached_font.has_value())
|
||||
|
@ -21,7 +21,7 @@ RefPtr<Gfx::Font> FontCache::get(FontSelector const& font_selector) const
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
void FontCache::set(FontSelector const& font_selector, NonnullRefPtr<Gfx::Font> font)
|
||||
void FontCache::set(FontSelector const& font_selector, NonnullRefPtr<Gfx::Font const> font)
|
||||
{
|
||||
m_fonts.set(font_selector, move(font));
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -34,10 +34,10 @@ struct Traits<FontSelector> : public GenericTraits<FontSelector> {
|
|||
class FontCache {
|
||||
public:
|
||||
static FontCache& the();
|
||||
RefPtr<Gfx::Font> get(FontSelector const&) const;
|
||||
void set(FontSelector const&, NonnullRefPtr<Gfx::Font>);
|
||||
RefPtr<Gfx::Font const> get(FontSelector const&) const;
|
||||
void set(FontSelector const&, NonnullRefPtr<Gfx::Font const>);
|
||||
|
||||
private:
|
||||
FontCache() = default;
|
||||
mutable HashMap<FontSelector, NonnullRefPtr<Gfx::Font>> m_fonts;
|
||||
mutable HashMap<FontSelector, NonnullRefPtr<Gfx::Font const>> m_fonts;
|
||||
};
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -277,7 +277,7 @@ void NodeWithStyle::apply_style(const CSS::StyleProperties& computed_style)
|
|||
return 1;
|
||||
};
|
||||
|
||||
auto value_for_layer = [](auto& style_value, size_t layer_index) -> RefPtr<CSS::StyleValue> {
|
||||
auto value_for_layer = [](auto& style_value, size_t layer_index) -> RefPtr<CSS::StyleValue const> {
|
||||
if (style_value->is_value_list())
|
||||
return style_value->as_value_list().value_at(layer_index, true);
|
||||
return style_value;
|
||||
|
@ -301,7 +301,7 @@ void NodeWithStyle::apply_style(const CSS::StyleProperties& computed_style)
|
|||
if (auto image_value = value_for_layer(images, layer_index); image_value) {
|
||||
if (image_value->is_abstract_image()) {
|
||||
layer.background_image = image_value->as_abstract_image();
|
||||
layer.background_image->load_any_resources(document());
|
||||
const_cast<CSS::AbstractImageStyleValue&>(*layer.background_image).load_any_resources(document());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -517,7 +517,7 @@ void NodeWithStyle::apply_style(const CSS::StyleProperties& computed_style)
|
|||
auto list_style_image = computed_style.property(CSS::PropertyID::ListStyleImage);
|
||||
if (list_style_image->is_abstract_image()) {
|
||||
m_list_style_image = list_style_image->as_abstract_image();
|
||||
m_list_style_image->load_any_resources(document());
|
||||
const_cast<CSS::AbstractImageStyleValue&>(*m_list_style_image).load_any_resources(document());
|
||||
}
|
||||
|
||||
computed_values.set_color(computed_style.color_or_fallback(CSS::PropertyID::Color, *this, CSS::InitialValues::color()));
|
||||
|
@ -574,7 +574,7 @@ void NodeWithStyle::apply_style(const CSS::StyleProperties& computed_style)
|
|||
auto resolve_border_width = [&]() {
|
||||
auto value = computed_style.property(width_property);
|
||||
if (value->is_calculated())
|
||||
return CSS::Length::make_calculated(value->as_calculated()).to_px(*this).value();
|
||||
return CSS::Length::make_calculated(const_cast<CSS::CalculatedStyleValue&>(value->as_calculated())).to_px(*this).value();
|
||||
if (value->has_length())
|
||||
return value->to_length().to_px(*this).value();
|
||||
if (value->is_identifier()) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -195,9 +195,9 @@ protected:
|
|||
|
||||
private:
|
||||
CSS::ComputedValues m_computed_values;
|
||||
RefPtr<Gfx::Font> m_font;
|
||||
RefPtr<Gfx::Font const> m_font;
|
||||
CSSPixels m_line_height { 0 };
|
||||
RefPtr<CSS::AbstractImageStyleValue> m_list_style_image;
|
||||
RefPtr<CSS::AbstractImageStyleValue const> m_list_style_image;
|
||||
};
|
||||
|
||||
class NodeWithStyleAndBoxModelMetrics : public NodeWithStyle {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2022-2023, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
|
@ -513,7 +513,7 @@ static void paint_text_fragment(PaintContext& context, Layout::TextNode const& t
|
|||
Utf8View view { text.substring_view(fragment.start(), fragment.length()) };
|
||||
|
||||
auto& font = fragment.layout_node().font();
|
||||
auto scaled_font = [&]() -> RefPtr<Gfx::Font> {
|
||||
auto scaled_font = [&]() -> RefPtr<Gfx::Font const> {
|
||||
auto device_font_pt_size = context.enclosing_device_pixels(font.presentation_size());
|
||||
FontSelector font_selector = { FlyString::from_utf8(font.family()).release_value_but_fixme_should_propagate_errors(), static_cast<float>(device_font_pt_size.value()), font.weight(), font.width(), font.slope() };
|
||||
if (auto cached_font = FontCache::the().get(font_selector)) {
|
||||
|
|
Loading…
Reference in a new issue