Commit graph

25905 commits

Author SHA1 Message Date
Emilio Cobos Álvarez
dd849de9d9 style: Implement atan2(), and enable calc() trigonometric functions by default on nightly
We now have test coverage, so let's do this.

The remaining failures are just about infinity/nan, which is a
completely different feature.

Differential Revision: https://phabricator.services.mozilla.com/D154831
2023-10-02 14:37:19 +00:00
Oriol Brufau
03e84754cc Further changes required by Servo 2023-10-02 14:37:19 +00:00
Jonathan Kew
fa8b5f17e3 style: Add support for the @font-face src descriptor's tech() function
WPT tests to be added in a following patch.

Differential Revision: https://phabricator.services.mozilla.com/D154399
2023-10-02 14:37:19 +00:00
Jonathan Kew
52d1e07ee2 style: Use the style-system format hint directly in gfx, instead of mapping to a separate internal enum
Now that the style system has keywords for this, we don't need to define them in gfx
but can just use the enum directly. (No functional change, just code simplification.)

Depends on D154237

Differential Revision: https://phabricator.services.mozilla.com/D154238
2023-10-02 14:37:19 +00:00
Oriol Brufau
87bee1710c Further changes required by Servo 2023-10-02 14:37:19 +00:00
Jonathan Kew
31b2a54164 style: Accept keywords in addition to strings in the @font-face format() hint function
The CSS Fonts 4 spec requires this, and Safari (at least) has long supported it.

Depends on D154277

Differential Revision: https://phabricator.services.mozilla.com/D154237
2023-10-02 14:37:19 +00:00
Jonathan Kew
65e6e072ea style: Do not allow a list of strings in the @font-face src descriptor's format() function, only a single format string
This aligns with CSS Fonts 4 (rather than Fonts 3) and with behavior in other browsers;
I don't expect any significant breakage, given that specifying multiple format strings
was never supported in other engines AFAIK, and never served any useful purpose.

Depends on D154234

Differential Revision: https://phabricator.services.mozilla.com/D154235
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
b43ac59344 style: Don't use -moz-bool-pref for flexbox -moz-box emulation
Use a bool pref media query which allows dynamic changes to get
reflected instantly.

Differential Revision: https://phabricator.services.mozilla.com/D154449
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
648a6c14cf style: Add a chrome-only -moz-box-layout: legacy | flex, and use that to implement flexbox emulation
Differential Revision: https://phabricator.services.mozilla.com/D154153
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
4947dd027d style: Remove -moz-* display values enabled-in-content prefs
We have unshipped these since forever, no point in keeping the pref
around. Move the relevant tests to chrome ref/mochitests.

Differential Revision: https://phabricator.services.mozilla.com/D154152
2023-10-02 14:37:19 +00:00
Boris Chiou
deeb5efd84 style: Remove aspect-ratio preference
We shipped this in Firefox 89, one year ago. It should be okay to drop
this preference now.

Differential Revision: https://phabricator.services.mozilla.com/D153680
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
befb407057 style: Make color-scheme affect Windows' non-native menus
This matches what Linux and macOS do, and that allows the fix for bug 1782623
to work on Windows for unstyled selects.

This also simplifies the CSS (though it adds a new system color which is a bit
more annoying). I filed https://github.com/w3c/csswg-drafts/issues/7561 to
propose adding a more generic way to do this in the future (not just for
Firefox).

Differential Revision: https://phabricator.services.mozilla.com/D153549
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
f1e04f76f0 style: Properly fail to serialize grid shorthand when not roundtripping
Other browsers also don't roundtrip properly, but they fail less
severely.

Differential Revision: https://phabricator.services.mozilla.com/D152794
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
59da4326fd style: Remove nsTimingFunction and ComputedTimingFunction
They're simple wrappers of StyleComputedTimingFunction so we can remove
them.

Differential Revision: https://phabricator.services.mozilla.com/D152700
2023-10-02 14:37:19 +00:00
David Shin
c296356a8c style: linear(...) easing: Implement right-continuous behaviour on discontinuities
Differential Revision: https://phabricator.services.mozilla.com/D152078
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
2a1e89468a style: Ensure we cancel transitions without the need of an extra flush
When something switches to display: none, right now we rely on
StopAnimationsForElementsWithoutFrames(), which posts a restyle and the
previous ProcessPendingRestyles call was papering over it.

For other elements in the display none subtree it doesn't matter,
because we don't keep their styles around, but for the display: none
element themselves we do need to update transitions on time.

We could, possibly more generally, remove
StopAnimationsForElementsWithoutFrames() altogether and cancel
animations when we clear style data, perhaps... But that's probably
worth a follow-up.

Differential Revision: https://phabricator.services.mozilla.com/D151600
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
a961519a56 style: Propagate flags from original property to aliases
Even we don't have internal aliases right now (and that seems a bit
silly) we do have pref-gated aliases. An alias ID passed to IsEnabled
with the wrong EnabledState would misbehave, assert, and crash.

Though we don't have such callers in the tree because InspectorUtils
passes only arguments that make us not look at the flags, it seems more
reliable this way.

Differential Revision: https://phabricator.services.mozilla.com/D151594
2023-10-02 14:37:19 +00:00
Oriol Brufau
9622d4912e Further changes required by Servo 2023-10-02 14:37:19 +00:00
Boris Chiou
e53f4ee4c7 style: Support animation-composition in keyframe at rules
So we can specify the keyframe-specific composite operation. However,
these is a spec issue about the default composite for CSS Animations:
https://github.com/w3c/csswg-drafts/issues/7476.

I choose to use auto as the default composite for missing keyframes to match
the definition in web-animations-1 because I think this makes more sense:
> If the keyframe-specific composite operation for a keyframe is not set, the
> composite operation specified for the keyframe effect as a whole is used for
> values specified in that keyframe.

Differential Revision: https://phabricator.services.mozilla.com/D150808
2023-10-02 14:37:19 +00:00
Boris Chiou
06f81aea07 style: Implement CSS animation-composition longhand in style system
This patch introduces animation-composition longhand but we don't
accept it in @keyframe rule for now. I will support this for @keyframe
in the patch series.

Besides, the shorthand of animation doesn't include animation-composition.
The spec issue is: https://github.com/w3c/csswg-drafts/issues/6946.
We could fix the shorthand once this spec issue gets updated.

Differential Revision: https://phabricator.services.mozilla.com/D150299
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
047812cb98 style: Clean up a bit traversal culling
Differential Revision: https://phabricator.services.mozilla.com/D151544
2023-10-02 14:37:19 +00:00
Ziran Sun
461850d5e6 style: make contain-intrinsic-size *animatable*
Differential Revision: https://phabricator.services.mozilla.com/D151231
2023-10-02 14:37:19 +00:00
David Shin
af058e6332 style: C++ ComputedTimingFunction uses Rust's timing function calculation
This was made economical by having Rust's computed `easing::TimingFunction` use
a fully resolved function for `linear(...)` easing, as per draft resolution from
https://github.com/w3c/csswg-drafts/issues/7415

Differential Revision: https://phabricator.services.mozilla.com/D151295
2023-10-02 14:37:19 +00:00
David Shin
bb0f857dfa style: Port bezier edge cases handling from C++ to Rust
Differential Revision: https://phabricator.services.mozilla.com/D150569
2023-10-02 14:37:19 +00:00
David Shin
168c868330 style: Update rust's step function basd on C++ ComputedTimingFunction
Differential Revision: https://phabricator.services.mozilla.com/D150566
2023-10-02 14:37:19 +00:00
David Shin
a585d41910 style: Move Rust animation to ComputedTimingFunction
Differential Revision: https://phabricator.services.mozilla.com/D150565
2023-10-02 14:37:19 +00:00
Oriol Brufau
e6b834ffac Further changes required by Servo 2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
0e61a179ee style: Add color-mix to DevTools autocomplete
Differential Revision: https://phabricator.services.mozilla.com/D151180
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
c4b71c5b7f style: Minor indentation fix. DONTBUILD
MANUAL PUSH: White-space only change
2023-10-02 14:37:19 +00:00
Ziran Sun
6fec9d6f8c style: Add support for parsing the contain-intrinsic-size property from the CSS-sizing specification
Differential Revision: https://phabricator.services.mozilla.com/D151001
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
b0693b2f4d style: Make fullscreen modal
As per https://github.com/w3c/csswg-drafts/issues/7311.

Differential Revision: https://phabricator.services.mozilla.com/D150335
2023-10-02 14:37:19 +00:00
David Shin
c49a49d7a5 style: linear(...) easing: Simplify piecewise linear implementation given parsing simplification
Differential Revision: https://phabricator.services.mozilla.com/D150163
2023-10-02 14:37:19 +00:00
David Shin
e3e2ee64de style: linear(...) easing: Parsing should split a linear stop value into two for entries with both linear-stop-length set
This brings the behaviour inline with `linear-gradient(...)`

Differential Revision: https://phabricator.services.mozilla.com/D149926
2023-10-02 14:37:19 +00:00
David Shin
09fc10c5c2 style: linear(...) Easing: First linear entry should Get 0.0 assigned for input if not specified
Previously, had the smallest input value over all entries was assigned. However,
that does not match the behaviour of `linear-gradient(...)`, which this easing
function is modeled after.

Differential Revision: https://phabricator.services.mozilla.com/D149916
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
bb5de5833c style: Improve LookAndFeel color caching
To be honest, I'm a bit baffled that bug 1773795 caused a performance
regression, but I think it's because the standins codepath is not really
cached, so system colors that are "spoofed" always go through the
massive switch, which could potentially be expensive.

To fix, this, rejigger a bit the caches so that we key on both
color-scheme and use-standins. Also, while at it, make the set of colors
we spoof a single bitflag check, rather than relying on the compiler to
do something potentially smart with it.

I had to shuffle the order of colors around so that the expression to
initialize the bitfield is constexpr (doesn't go over 1 << 64), but
other than that this patch should be relatively straight-forward.

Differential Revision: https://phabricator.services.mozilla.com/D150100
2023-10-02 14:37:19 +00:00
Oriol Brufau
34c3767560 Further changes required by Servo 2023-10-02 14:37:19 +00:00
David Shin
5d528ec8be style: Use Rust's ComputedTimingFunction for IPDL
Differential Revision: https://phabricator.services.mozilla.com/D149663
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
a19674a5a7 style: Use style interpolation code for gradients
This ensures they're clamped on Animated -> sRGB conversion, and in the
future we'll have to implement different color spaces so we'll need to
use it anyways.

Differential Revision: https://phabricator.services.mozilla.com/D149792
2023-10-02 14:37:19 +00:00
Oriol Brufau
189039bea5 Further changes required by Servo 2023-10-02 14:37:19 +00:00
Martin Robinson
64febfbe9a style: Implement CSS 'contain: style'
Add an implementation of CSS `contain: style`. This introduces two new
data structures, the ContainStyleScope and ContainStyleScopeManager.

ContainStyleScope manages one `contain: style` "world" which has its own
counter and quote lists. The contents of these lists depend on their
parent scopes, but are not affected by their children.
ContainStyleScopeManager manages a tree of scopes starting at a root
scope which is outside of any `contain: style` element.

Scopes are stored in a hash table that is keyed off of the nsIContent
which establishes the `contain: style` scope. When modifying quote or
content lists, the ContainStyleScopeManager is responsible for finding
the appropriate `contain: style` scope to modify.

Perhaps the most complex part of this is that counters and quotes have
read access to the state of counters and quotes that are in ancestor
`contain: style` scopes. In the case of counters, USE nodes that are at
the beginning of counter lists might have a counter scope that starts in
an ancestor `contain: style` scope. When nsCounterNode::SetScope() is
called, the code may look upward in the `contain: style` scope tree to
find the start of the counter scope. In the case of quotes, the first
node in the quote list must look for the state of quotes in ancestor
`contain: style` scopes.

Differential Revision: https://phabricator.services.mozilla.com/D149508
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
ad68880627 style: Implement AccentColor/AccentColorText and remove -moz-prefixed version of the color
As per https://github.com/w3c/csswg-drafts/issues/7347.

Mostly renaming, doesn't change behavior other than exposing the new
color keywords (tested in wpt).

Differential Revision: https://phabricator.services.mozilla.com/D149876
2023-10-02 14:37:19 +00:00
David Shin
ca6ad97159 style: Refactor function parsing branches for specified::easing::TimingFunction
Differential Revision: https://phabricator.services.mozilla.com/D149756
2023-10-02 14:37:19 +00:00
Oriol Brufau
3d02b4ef90 Further changes required by Servo 2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
34373c2ac8 style: Check for allowed colors recursively in forced-colors mode
Differential Revision: https://phabricator.services.mozilla.com/D149733
2023-10-02 14:37:19 +00:00
Oriol Brufau
f0b7f3aca2 Further changes required by Servo 2023-10-02 14:37:19 +00:00
Tiaan Louw
3d0cf4dbf9 style: Add simple parsing and matching support for :has
Parsing is behind a config value `layout.css.has-selectors.enabled`. This
change does not support p:has(> a) combinators, but will handle them
gracefully, just not matching on them.

Differential Revision: https://phabricator.services.mozilla.com/D149515
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
dcdf9f33d5 style: Fix grid shorthand parsing to not incorrectly ignore the last token in one case
Differential Revision: https://phabricator.services.mozilla.com/D149666
2023-10-02 14:37:19 +00:00
Mike Hommey
fb95cb7993 style: Update stylo to itertools:0.10, itoa:1.0 and toml:0.5
Differential Revision: https://phabricator.services.mozilla.com/D149454
2023-10-02 14:37:19 +00:00
Jonathan Kew
becb855b3a style: Only accept the CSS2 font-variant values (normal/small-caps) in the font shorthand; CSS Fonts 3/4 font-variant additions are not allowed
Differential Revision: https://phabricator.services.mozilla.com/D149440
2023-10-02 14:37:19 +00:00
Emilio Cobos Álvarez
6a5f012d3b style: Fix dynamic viewport size
Differential Revision: https://phabricator.services.mozilla.com/D149275
2023-10-02 14:37:19 +00:00