Callum Law
f49cf75d44
LibWeb: Don't pass unnecessary PropertyComputationDependencies struct
...
Since we now have access to the `AbstractElement` through the
`ComputationContext` we can just set the flag that this element relies
on tree counting functions directly, no need to pass this struct around.
2025-10-22 00:01:30 +02:00
Callum Law
2404f95e03
LibWeb: Invalidate style for tree counting functions when required
...
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
We mark any element that relies on tree counting functions as needing a
style update when a sibling is inserted/removed.
2025-10-20 16:12:08 +01:00
Sam Atkins
0afa93e639
LibWeb/CSS: Add a Property -> CalculationContext factory method
...
We have this code duplicated in multiple places, and we'll want to
handle registered custom properties too at some point, so wrap it in a
reusable `CalculationContext::for_property()` method.
Noticed while doing this that ValueParsingContext will eventually need
to take a PropertyNameAndID, not a PropertyID, so I've added a FIXME.
2025-10-13 09:59:38 +01:00
Callum Law
102edf638d
LibWeb: Support interpolation of SuperellipseStyleValue
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-10-09 10:23:20 +01:00
Callum Law
25192d3c20
LibWeb: Store BorderRadiusStyleValue
sub-values directly
...
Storing these within LengthPercentage is unnecessary
2025-10-07 10:50:01 +01:00
Callum Law
2ebf446cbf
LibWeb: Store BackgroundSizeStyleValue
sub-values directly
...
Storing these within LengthPercentage is unnecessary
2025-10-07 10:50:01 +01:00
Callum Law
309ff33278
LibWeb: Add convenience from_style_value
for LengthPercentage{OrAuto}
2025-10-07 10:50:01 +01:00
Tim Ledbetter
b64cb89b9d
LibWeb: Implement compositing of font-variation-settings
values
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-09-26 11:20:54 +01:00
Tim Ledbetter
f9452b77b7
LibWeb: Implement interpolation of font-variation-settings
values
2025-09-26 11:20:54 +01:00
Tim Ledbetter
d18d40f7b9
LibWeb: Handle interpolation of grid track size lists
...
This allows the `grid-template-rows` and `grid-template-columns`
properties to be correctly interpolated.
2025-09-26 11:15:08 +01:00
Tim Ledbetter
436e9c317a
LibWeb: Extract commonly used interpolation lambdas into methods
2025-09-26 11:15:08 +01:00
Callum Law
b80e6a4d30
LibWeb: Rename get_inherit_value
to get_non_animated_inherit_value
...
This more acurately represents what it does.
2025-09-19 10:06:33 +01:00
Tim Ledbetter
9b15517052
LibWeb: Apply composite operator to keyframe effects
2025-09-18 16:46:06 +01:00
Callum Law
c3a78d2884
LibWeb: Don't include spread distance when serializing text-shadow
...
We shouldn't include spread distance when serializing `text-shadow` as
it is not supported unlike `box-shadow` - to achieve this we store
whether this is a text or box shadow within the ShadowStyleValue and
serialize appropriately.
2025-09-18 15:21:22 +01:00
Tim Ledbetter
f5fd6338d5
LibWeb: Handle interpolation of mixed-type LengthPercentages
2025-09-15 10:41:01 +01:00
Tim Ledbetter
7409c564d7
LibWeb: Extract mixed-type interpolation to a separate method
2025-09-15 10:41:01 +01:00
Tim Ledbetter
b19fee9962
LibWeb: Interpolate ellipse()
function by computed value
2025-09-15 10:34:43 +01:00
Tim Ledbetter
f146207a04
LibWeb: Interpolate circle()
function by computed value
2025-09-15 10:34:43 +01:00
Tim Ledbetter
4a0fe65923
LibWeb: Interpolate polygon()
function by computed value
2025-09-15 10:34:43 +01:00
Tim Ledbetter
853bedeb31
LibWeb: Interpolate rect()
function by computed value
2025-09-15 10:34:43 +01:00
Tim Ledbetter
0c89e86ff7
LibWeb: Interpolate xywh()
function by computed value
2025-09-15 10:34:43 +01:00
Tim Ledbetter
be94c8d456
LibWeb: Interpolate inset()
function by computed value
2025-09-15 10:34:43 +01:00
MFMF-EGY
fff09ed330
LibWeb: Handle interpolation of BorderRadius style value type
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-09-14 16:49:20 +01:00
Tim Ledbetter
19577b966e
LibWeb: Implement interpolation of border-image-slice
style values
2025-09-13 12:05:19 +02:00
Sam Atkins
0293176429
LibWeb/CSS: Take AbstractElement in StyleComputer::get_*_inherit_value()
2025-09-11 18:45:35 +02:00
Sam Atkins
b3e32445d3
LibWeb/CSS: Use generated FooUnit types instead of Foo::Type
...
I've also renamed the `m_type` and `type()` members to be `m_unit` and
`unit()` instead, to match what they actually are.
2025-09-11 17:06:44 +01:00
Tim Ledbetter
bf8b8c260a
LibWeb: Simplify interpolation of mixed percentage-dimension values
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-09-11 06:10:23 +01:00
Tim Ledbetter
9c062d9d4e
LibWeb: Improve interpolation of mixed percentage-dimension values
...
If we are interpolating between a dimension and a percentage value and
the dimension component is 0, we now return a percentage value rather
than a `calc()` value.
2025-09-10 17:00:20 +01:00
Callum Law
5ed3b2ed16
LibWeb: Support interpolation of CalculatedStyleValue
...
We also support interpolating from a CalculatedStyleValue to a
compatible dimension or percentage style value.
This also brings with it a couple of improvements in how we handle
interpolation between mixed dimension and percentage types in terms of:
- Proper simplification of the resulting calc()
- Improved handling of interpolation outside the 0-1 range
2025-09-08 11:58:44 +01:00
Tim Ledbetter
fa6c7959ff
LibWeb: Pass calculation context by const reference
2025-09-07 14:50:36 +01:00
Tim Ledbetter
96b628fe21
LibWeb: Clamp interpolated values to their accepted range
2025-09-07 14:50:36 +01:00
Sam Atkins
04622f3940
LibWeb/CSS: Use LengthPercentageOrAuto for background sizes
...
...instead of `auto` Lengths.
This also fixes interpolating between two `auto` `<bg-size>`s, which
fixes a lot of animation tests for both `background-size` and `mask`.
2025-09-04 13:31:24 +01:00
Sam Atkins
9b27aaa00c
LibWeb/CSS: Use LengthOrAuto for clip rects
2025-09-04 13:31:24 +01:00
Tim Ledbetter
cb1a1a5cb5
LibWeb: Replace is<T>()
with as_if<T>()
where possible
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-08-25 18:45:00 +02:00
Sam Atkins
5bdc2981e3
LibWeb/CSS: Rename CSSNumericType to NumericType
...
The CSSNumericType defined in the spec is a simple dictionary which is
only used for OM purposes. This NumericType class is used internally
and matches the more abstract definition of a "type".
2025-08-22 09:48:30 +01:00
norbiros
783ae44462
LibWeb: Fix color interpolation by premultiplying alpha
...
The current Color::interpolate_color method does not follow the specs
properly. Started improving it by handling premultiplied alpha in color
interpolation.
Only one WPT test covers this (color-transition-premultiplied), which we
currently pass due to a different approach in Color.mixed_with.
2025-08-14 11:09:05 +02:00
Callum Law
ed6cac89b9
LibWeb: Discard inaccuracies when interpolating rotate
2025-08-12 14:35:02 +01:00
Sam Atkins
6cad3f1921
LibWeb/CSS: Rename CSSColorValue -> ColorStyleValue
...
The typed-om class will be a separate thing.
2025-08-08 15:19:03 +01:00
Sam Atkins
7157d19f56
LibWeb/CSS: Separate IntegerSV and NumberSV from CSSUnitValue
...
This inheritance exists for typed-om classes, but StyleValues aren't
typed-om.
Somehow this makes our z-index interpolation slightly more correct. 🎉
2025-08-08 15:19:03 +01:00
Sam Atkins
4e92ab52e3
LibWeb/CSS: Rename CSSKeywordValue -> KeywordStyleValue
...
The typed-om CSSKeywordValue will need to be a separate class.
2025-08-08 15:19:03 +01:00
Sam Atkins
c57975c9fd
LibWeb: Move and rename CSSStyleValue to StyleValues/StyleValue.{h,cpp}
...
This reverts 0e3487b9ab
.
Back when I made that change, I thought we could make our StyleValue
classes match the typed-om definitions directly. However, they have
different requirements. Typed-om types need to be mutable and GCed,
whereas StyleValues are immutable and ideally wouldn't require a JS VM.
While I was already making such a cataclysmic change, I've moved it into
the StyleValues directory, because it *not* being there has bothered me
for a long time. 😅
2025-08-08 15:19:03 +01:00
Callum Law
a1037e28d6
LibWeb: Improve support for CalculatedStyleValue in scale
...
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
- Properly serialize CalculatedStyleValue components
- Allow CSV to be the 'Z' component in interpolated value
Gains us 52 WPT tests
2025-08-08 09:45:00 +01:00
Callum Law
39fdcbc526
LibWeb: Improve support for CalculatedStyleValue in translate
...
- Omit calcs that are resolved to `0px` from the serialized value
- Allow CSV to be the 'Z' component in interpolated value.
- Allow calcs with mixed percentages in the first two arguments.
To achieve the third item above the concept of a "special" value parsing
context has been added - this will also be useful for instance for
different arguments of color functions having different contexts.
Gains us 23 WPT tests
2025-08-08 09:45:00 +01:00
Callum Law
46153910ec
LibWeb: Update to_color
to take ColorResolutionContext
...
Using a generic context argument will allow us to resolve colors in
places where we have all the required information but not in the form of
a layout node as was expected previously.
2025-08-04 11:29:05 +01:00
Tim Ledbetter
ca9364983c
LibWeb/CSS: Support interpolating filter
and backdrop-filter
values
CI / macOS, arm64, Sanitizer, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer, Clang (push) Waiting to run
Package the js repl as a binary artifact / Linux, arm64 (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-07-30 23:29:07 +02:00
Tim Ledbetter
62e52163d6
LibWeb: Interpolate text-shadow
values as a shadow list
...
This is the same behavior as is currently used for `box-shadow`.
2025-07-30 10:51:50 +02:00
Tim Ledbetter
3ae48776fd
LibWeb: Round integral values to the nearest integer when interpolating
...
Previously, color components were being incorrectly rounded when
interpolating.
2025-07-30 10:51:50 +02:00
Arran Ireland
423e944a92
LibGfx+LibWeb: Upgrade to multi-arg subscript operator in Matrix
...
See the following for more details:
https://en.cppreference.com/w/cpp/language/operators.html#Array_subscript_operator
2025-07-28 09:15:23 +02:00
ayeteadoe
77d9508618
LibWeb/CSS: Fix implicit narrowing cast in interpolate_rotate
...
The changes introduced in 484a09d6a2
broke the Windows LibWeb build, so this fixes that
2025-07-22 13:21:17 -06:00
Tim Ledbetter
484a09d6a2
LibWeb: Support interpolating rotate
values
2025-07-22 11:09:45 +01:00