Patrick Walton
fb2d1e1020
layout: Add a new cascading mode that inherits all properties, even
...
non-inheritable ones.
This works like the `modify_style_for_*` functions and will allow us to
easily migrate from them to real cascading.
2016-10-26 14:14:01 -07:00
Patrick Walton
93e41ba4aa
style: Add some new Servo-specific pseudo-classes for anonymous flows.
...
This allows us to remove `modify_style_for_anonymous_table_object`.
2016-10-26 14:04:16 -07:00
Simon Sapin
742681a623
Add RwLock in more Arc’d things in stylesheets.
2016-10-19 19:55:05 +02:00
Simon Sapin
89a29a7f12
Use parking_lot::RwLock instead of DOMRefCell for PropertyDeclarationBlock
2016-10-04 18:34:59 +02:00
Simon Sapin
d986fd2d2f
Use PropertyDeclarationBlock in a DOMRefCell everywhere.
2016-10-04 18:34:57 +02:00
Simon Sapin
29c72d15a9
Make style build without impl<T: HeapSizeOf> HeapSizeOf for Arc<T>
.
...
The removal of this impl is not included in this commit.
CC https://github.com/servo/heapsize/issues/37#issuecomment-249861171
2016-10-04 13:45:57 +02:00
Simon Sapin
74eaf2ad6f
Remove one level of nesting in Stylist
...
Since #13134 , the "normal" and "important" parts of `Stylist` are identical,
so we don’t need to store them twice.
2016-09-06 14:17:27 +08:00
Simon Sapin
3ce64fd269
Rename DeclarationBlock to ApplicableDeclarationBlock
...
Make it more different from PropertyDeclarationBlock
2016-09-06 14:17:26 +08:00
Emilio Cobos Álvarez
468b329645
style: Provide whether we're styling or not to rust-selectors.
...
This makes us not adding the flags to everything in servo.
2016-08-31 17:27:15 -07:00
Simon Sapin
95033e1c0d
Add any_important and any_normal methods to PropertyDeclarationBlock
2016-08-31 13:41:38 +02:00
Simon Sapin
7ef4930472
Prepare for interior mutability in PropertyDeclarationBlock
...
`Stylist` contains separate hashmaps for important and normal declarations,
but typically a given block only contains declarations of one importance.
Before this commit, there is an optimization where
a `PropertyDeclarationBlock` is only inserted in the corresponding map
if it has a non-zero number of declaration of a given importance.
With CSSOM, `PropertyDeclarationBlock` is gonna have interior mutability:
the importance (priority) of a declaration could change.
This optimization would become incorrect when the block is missing
in a hashmap where it should be.
This commits removes the original optimization, and replaces it with
a slightly weaker one: if a block doesn’t have any declaration
with the importance we’re cascading for, skip selector matching.
2016-08-31 02:34:09 +02:00
Simon Sapin
acc38aa8c2
Use Arc<PropertyDeclarationBlock> everwhere it’s appropriate.
2016-08-31 02:34:07 +02:00
Ms2ger
992391d6ad
Move the user agent and user stylesheets to layout_thread.
2016-08-23 15:33:47 +02:00
Christian Sonne
908b9627a2
Track only the number of important declarations in a declaration block
2016-08-22 14:05:09 +02:00
Simon Sapin
f9150af936
Keep track of the number of important and normal declarations in a block
...
… instead of the presence (`bool` flags) of each.
This allows removing `recalc_any` which iterated over the `Vec`.
2016-08-21 10:41:26 +02:00
Simon Sapin
5e4bdac2bd
Import SelectorMap unit tests from the selectors crate.
2016-08-21 03:40:39 +02:00
Simon Sapin
dec28a13ea
Use FNV hash in SelectorMap
2016-08-21 03:40:38 +02:00
Simon Sapin
a175c9981e
Only cascade at a priority level rules that have declarations of that priority.
2016-08-21 03:40:37 +02:00
Simon Sapin
16bbc2f26e
Merge normal and important declarations in style rules.
...
Have a single Vec instead of two. Fix #3426
2016-08-21 03:40:35 +02:00
Simon Sapin
577d2dc3fa
Make SelectorMap and friends concrete
2016-08-21 03:40:31 +02:00
Simon Sapin
35b01cd324
Sort rules by key in selector matching
2016-08-21 03:40:30 +02:00
Simon Sapin
4062899fd8
Import SelectorMap back from the selectors crate.
...
Nobody else uses it, and I want to make breaking changes to it.
2016-08-21 03:40:30 +02:00
Simon Sapin
bc71e8b65b
Add some fmt::Debug implementations
2016-08-21 03:40:28 +02:00
Simon Sapin
31864954ed
Typo fixes
2016-08-21 03:40:26 +02:00
Anthony Ramine
1c4cc6c703
Update selectors to 0.11
...
This brings :not() with proper list of complex selectors as argument.
2016-08-20 11:24:17 +02:00
Emilio Cobos Álvarez
3af774bd75
Rewrite the style sharing candidate cache.
...
The style candidate cache had regressed a few times (see #12534 ), and my
intuition is that being able to disable all style sharing with a single rule in
the page is really unfortunate.
This commit redesigns the style sharing cache in order to be a optimistic cache,
but then reject candidates if they match different sibling-affecting selectors
in the page, for example.
So far the numbers have improved, but not so much as I'd wanted (~10%/20% of
non-incremental restyling time in general). The current implementation is really
dumb though (we recompute and re-match a lot of stuff), so we should be able to
optimise it quite a bit.
I have different ideas for improving it (that may or may not work), apart of the
low-hanging fruit like don't re-matching candidates all the time but I have to
measure the real impact.
Also, I need to verify it against try.
2016-08-17 14:16:16 -07:00
Emilio Cobos Álvarez
9e88a495c8
style: Introduce a generic way of gathering information from the cascade, and use it for viewport units.
2016-08-16 10:58:16 -07:00
Simon Sapin
fdb2071b2d
Update to selectors 0.8.2
2016-08-09 18:18:38 +02:00
Simon Sapin
f419db834c
Replace the SelectorImplExt trait with inherent methods.
2016-08-09 18:17:13 +02:00
Emilio Cobos Álvarez
611e611215
style: Rewrite the restyle hints code to allow different kinds of element snapshots, and use it for Gecko.
...
This is a rewrite for how style interfaces with its consumers in order to allow
different representations for an element snapshot.
This also changes the requirements of an element snapshot, requiring them to
only implement MatchAttr, instead of MatchAttrGeneric. This is important for
stylo since implementing MatchAttrGeneric is way more difficult for us given the
atom limitations. This also allows for more performant implementations in the
Gecko side of things.
2016-07-21 14:24:04 -07:00
Simon Sapin
5c70dfab01
Have a concrete SelectorImpl type everywhere in the style crate.
...
It is conditionally compiled to one implementation or the other
(Gecko or Servo) with `#[cfg(…)]`.
2016-07-20 08:42:46 +02:00
Simon Sapin
4b7060554b
Rename ComputedValuesStruct to ComputedValues.
...
Doing this in a separate commit avoids mixups
with the ComputedValues trait that the previous commit removed.
2016-07-20 08:42:45 +02:00
Simon Sapin
789807b7b0
Remove the ComputedValue traits and style_struct_traits
2016-07-20 08:42:40 +02:00
Simon Sapin
b2a7e44373
Move ServoSelectorImpl to a dedicated module.
2016-07-20 08:40:53 +02:00
Bobby Holley
1d8d1cb9d9
Upgrade rust-selectors.
2016-07-05 18:03:40 -07:00
Anthony Ramine
a5b524d559
Move util::vec::ForgetfulSink to style::sink and simplify it
2016-07-04 16:48:14 +02:00
Emilio Cobos Álvarez
392f243ca7
style: Shadow declarations of no-op animations
...
Although we don't generate a "computed" keyframe animation, we're required to
shadow others.
2016-06-28 15:28:01 +00:00
Emilio Cobos Álvarez
9cf2e52d36
tidy: Clean up warnings and tidy lints.
2016-06-28 15:09:53 +00:00
Emilio Cobos Álvarez
5b27e46d04
style: Atomize animation names.
2016-06-28 15:09:53 +00:00
Emilio Cobos Álvarez
058bfb39ae
style: Refactor the @keyframes parsing and add adequate computation for it.
2016-06-28 15:09:53 +00:00
Emilio Cobos Álvarez
6a362ae8e8
style: Refactor all the animated properties to use the style system properly
2016-06-28 15:09:53 +00:00
Emilio Cobos Álvarez
60192bb830
style: Refactor to pass animations cleanly, land animation-name parsing as experimental
2016-06-28 15:09:53 +00:00
Emilio Cobos Álvarez
c1fd7432e9
style: Add @keyframe rule parsing.
2016-06-28 15:09:53 +00:00
Ms2ger
79e0d18a1d
Add some documentation to the style crate.
2016-06-27 17:33:14 +02:00
Simon Sapin
00b6210519
Make the style crate almost build on stable Rust.
...
`discriminant_value` will need to be replaced with something else later.
2016-06-22 15:44:13 +02:00
Ms2ger
1c65ce8f36
Deny unsafe code in some more modules.
2016-06-04 18:07:16 +02:00
Josh Matthews
3cb8af20c2
Remove empty lines following braces.
2016-05-27 13:32:05 -04:00
Cameron McCormack
bb85f5faf0
Add an extra data field to ParserContext.
...
This will be used for passing Gecko-specific information through
the CSS parser in stylo.
2016-05-24 12:12:10 +10:00
Per Lundberg
2f7ed1d73e
Removed unused imports
...
This fixes #11185 .
2016-05-15 22:24:26 +03:00
Emilio Cobos Álvarez
028f9b6cd2
style: layout: Allow a lazy pseudo-element implementation in Servo.
2016-05-04 00:33:58 +02:00