mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-09 17:49:40 +00:00
LibWeb/CSS: Return a MatchResult from MediaFeature::compare()
This commit on its own has no observable behaviour changes, as we still only return True or False, but for the next commit, we'll need to be able to return the Unknown state here, and without this change we'd get regressions.
This commit is contained in:
parent
fe7bac73f0
commit
a4d3c62524
Notes:
github-actions[bot]
2025-05-23 09:19:36 +00:00
Author: https://github.com/AtkinsSJ
Commit: a4d3c62524
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4817
2 changed files with 33 additions and 33 deletions
|
@ -123,22 +123,22 @@ MatchResult MediaFeature::evaluate(HTML::Window const* window) const
|
||||||
return MatchResult::False;
|
return MatchResult::False;
|
||||||
|
|
||||||
case Type::ExactValue:
|
case Type::ExactValue:
|
||||||
return as_match_result(compare(*window, value(), Comparison::Equal, queried_value));
|
return compare(*window, value(), Comparison::Equal, queried_value);
|
||||||
|
|
||||||
case Type::MinValue:
|
case Type::MinValue:
|
||||||
return as_match_result(compare(*window, queried_value, Comparison::GreaterThanOrEqual, value()));
|
return compare(*window, queried_value, Comparison::GreaterThanOrEqual, value());
|
||||||
|
|
||||||
case Type::MaxValue:
|
case Type::MaxValue:
|
||||||
return as_match_result(compare(*window, queried_value, Comparison::LessThanOrEqual, value()));
|
return compare(*window, queried_value, Comparison::LessThanOrEqual, value());
|
||||||
|
|
||||||
case Type::Range: {
|
case Type::Range: {
|
||||||
auto& range = this->range();
|
auto const& range = this->range();
|
||||||
if (!compare(*window, range.left_value, range.left_comparison, queried_value))
|
if (auto const left_result = compare(*window, range.left_value, range.left_comparison, queried_value); left_result != MatchResult::True)
|
||||||
return MatchResult::False;
|
return left_result;
|
||||||
|
|
||||||
if (range.right_comparison.has_value())
|
if (range.right_comparison.has_value())
|
||||||
if (!compare(*window, queried_value, *range.right_comparison, *range.right_value))
|
if (auto const right_result = compare(*window, queried_value, *range.right_comparison, *range.right_value); right_result != MatchResult::True)
|
||||||
return MatchResult::False;
|
return right_result;
|
||||||
|
|
||||||
return MatchResult::True;
|
return MatchResult::True;
|
||||||
}
|
}
|
||||||
|
@ -147,15 +147,15 @@ MatchResult MediaFeature::evaluate(HTML::Window const* window) const
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MediaFeature::compare(HTML::Window const& window, MediaFeatureValue const& left, Comparison comparison, MediaFeatureValue const& right)
|
MatchResult MediaFeature::compare(HTML::Window const& window, MediaFeatureValue const& left, Comparison comparison, MediaFeatureValue const& right)
|
||||||
{
|
{
|
||||||
if (!left.is_same_type(right))
|
if (!left.is_same_type(right))
|
||||||
return false;
|
return MatchResult::False;
|
||||||
|
|
||||||
if (left.is_ident()) {
|
if (left.is_ident()) {
|
||||||
if (comparison == Comparison::Equal)
|
if (comparison == Comparison::Equal)
|
||||||
return left.ident() == right.ident();
|
return as_match_result(left.ident() == right.ident());
|
||||||
return false;
|
return MatchResult::False;
|
||||||
}
|
}
|
||||||
|
|
||||||
CalculationResolutionContext calculation_context {
|
CalculationResolutionContext calculation_context {
|
||||||
|
@ -165,15 +165,15 @@ bool MediaFeature::compare(HTML::Window const& window, MediaFeatureValue const&
|
||||||
if (left.is_integer()) {
|
if (left.is_integer()) {
|
||||||
switch (comparison) {
|
switch (comparison) {
|
||||||
case Comparison::Equal:
|
case Comparison::Equal:
|
||||||
return left.integer().resolved(calculation_context).value_or(0) == right.integer().resolved(calculation_context).value_or(0);
|
return as_match_result(left.integer().resolved(calculation_context).value_or(0) == right.integer().resolved(calculation_context).value_or(0));
|
||||||
case Comparison::LessThan:
|
case Comparison::LessThan:
|
||||||
return left.integer().resolved(calculation_context).value_or(0) < right.integer().resolved(calculation_context).value_or(0);
|
return as_match_result(left.integer().resolved(calculation_context).value_or(0) < right.integer().resolved(calculation_context).value_or(0));
|
||||||
case Comparison::LessThanOrEqual:
|
case Comparison::LessThanOrEqual:
|
||||||
return left.integer().resolved(calculation_context).value_or(0) <= right.integer().resolved(calculation_context).value_or(0);
|
return as_match_result(left.integer().resolved(calculation_context).value_or(0) <= right.integer().resolved(calculation_context).value_or(0));
|
||||||
case Comparison::GreaterThan:
|
case Comparison::GreaterThan:
|
||||||
return left.integer().resolved(calculation_context).value_or(0) > right.integer().resolved(calculation_context).value_or(0);
|
return as_match_result(left.integer().resolved(calculation_context).value_or(0) > right.integer().resolved(calculation_context).value_or(0));
|
||||||
case Comparison::GreaterThanOrEqual:
|
case Comparison::GreaterThanOrEqual:
|
||||||
return left.integer().resolved(calculation_context).value_or(0) >= right.integer().resolved(calculation_context).value_or(0);
|
return as_match_result(left.integer().resolved(calculation_context).value_or(0) >= right.integer().resolved(calculation_context).value_or(0));
|
||||||
}
|
}
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
@ -200,15 +200,15 @@ bool MediaFeature::compare(HTML::Window const& window, MediaFeatureValue const&
|
||||||
|
|
||||||
switch (comparison) {
|
switch (comparison) {
|
||||||
case Comparison::Equal:
|
case Comparison::Equal:
|
||||||
return left_px == right_px;
|
return as_match_result(left_px == right_px);
|
||||||
case Comparison::LessThan:
|
case Comparison::LessThan:
|
||||||
return left_px < right_px;
|
return as_match_result(left_px < right_px);
|
||||||
case Comparison::LessThanOrEqual:
|
case Comparison::LessThanOrEqual:
|
||||||
return left_px <= right_px;
|
return as_match_result(left_px <= right_px);
|
||||||
case Comparison::GreaterThan:
|
case Comparison::GreaterThan:
|
||||||
return left_px > right_px;
|
return as_match_result(left_px > right_px);
|
||||||
case Comparison::GreaterThanOrEqual:
|
case Comparison::GreaterThanOrEqual:
|
||||||
return left_px >= right_px;
|
return as_match_result(left_px >= right_px);
|
||||||
}
|
}
|
||||||
|
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
|
@ -220,15 +220,15 @@ bool MediaFeature::compare(HTML::Window const& window, MediaFeatureValue const&
|
||||||
|
|
||||||
switch (comparison) {
|
switch (comparison) {
|
||||||
case Comparison::Equal:
|
case Comparison::Equal:
|
||||||
return left_decimal == right_decimal;
|
return as_match_result(left_decimal == right_decimal);
|
||||||
case Comparison::LessThan:
|
case Comparison::LessThan:
|
||||||
return left_decimal < right_decimal;
|
return as_match_result(left_decimal < right_decimal);
|
||||||
case Comparison::LessThanOrEqual:
|
case Comparison::LessThanOrEqual:
|
||||||
return left_decimal <= right_decimal;
|
return as_match_result(left_decimal <= right_decimal);
|
||||||
case Comparison::GreaterThan:
|
case Comparison::GreaterThan:
|
||||||
return left_decimal > right_decimal;
|
return as_match_result(left_decimal > right_decimal);
|
||||||
case Comparison::GreaterThanOrEqual:
|
case Comparison::GreaterThanOrEqual:
|
||||||
return left_decimal >= right_decimal;
|
return as_match_result(left_decimal >= right_decimal);
|
||||||
}
|
}
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
@ -239,15 +239,15 @@ bool MediaFeature::compare(HTML::Window const& window, MediaFeatureValue const&
|
||||||
|
|
||||||
switch (comparison) {
|
switch (comparison) {
|
||||||
case Comparison::Equal:
|
case Comparison::Equal:
|
||||||
return left_dppx == right_dppx;
|
return as_match_result(left_dppx == right_dppx);
|
||||||
case Comparison::LessThan:
|
case Comparison::LessThan:
|
||||||
return left_dppx < right_dppx;
|
return as_match_result(left_dppx < right_dppx);
|
||||||
case Comparison::LessThanOrEqual:
|
case Comparison::LessThanOrEqual:
|
||||||
return left_dppx <= right_dppx;
|
return as_match_result(left_dppx <= right_dppx);
|
||||||
case Comparison::GreaterThan:
|
case Comparison::GreaterThan:
|
||||||
return left_dppx > right_dppx;
|
return as_match_result(left_dppx > right_dppx);
|
||||||
case Comparison::GreaterThanOrEqual:
|
case Comparison::GreaterThanOrEqual:
|
||||||
return left_dppx >= right_dppx;
|
return as_match_result(left_dppx >= right_dppx);
|
||||||
}
|
}
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,7 +174,7 @@ private:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool compare(HTML::Window const& window, MediaFeatureValue const& left, Comparison comparison, MediaFeatureValue const& right);
|
static MatchResult compare(HTML::Window const& window, MediaFeatureValue const& left, Comparison comparison, MediaFeatureValue const& right);
|
||||||
MediaFeatureValue const& value() const { return m_value.get<MediaFeatureValue>(); }
|
MediaFeatureValue const& value() const { return m_value.get<MediaFeatureValue>(); }
|
||||||
Range const& range() const { return m_value.get<Range>(); }
|
Range const& range() const { return m_value.get<Range>(); }
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue