Commit graph

2892 commits

Author SHA1 Message Date
Emilio Cobos Álvarez
6dcf9b7630
style: Use decomposition to interpolate matched perspective transform operations.
Looks like this produces sensible results for interpolation with 0, though I'm
not really convinced about the results from, let's say, 1px to 2000px in the
attached test-case, I would've expected a linear interpolation from that to go
through normal length interpolation.

css-transforms-1 says:

  > Two transform functions with the same name and the same number of arguments
  > are interpolated numerically without a former conversion. The calculated
  > value will be of the same transform function type with the same number of
  > arguments.
  >
  > Special rules apply to <matrix()>.

Which is what we do... I was going to file a spec issue but turns out that it's
already addressed in css-transforms-2:

  https://drafts.csswg.org/css-transforms-2/#interpolation-of-transform-functions

Which says:

  > The transform functions <matrix()>, matrix3d() and perspective() get
  > converted into 4x4 matrices first and interpolated as defined in section
  > Interpolation of Matrices afterwards.

Differential Revision: https://phabricator.services.mozilla.com/D4942
2018-09-05 19:11:26 +02:00
Emilio Cobos Álvarez
6d43bf78bc
style: Fix servo build. 2018-09-03 12:56:30 +02:00
Boris Chiou
bb65d1fb6d
style: Define path() for clip-path.
For now, |clip-path: path()| is chrome-only, and not for shape-outside,
so we only implement the parser for clip-path. Besides, I didn't put
path() in BasicShape because path() doesn't use the reference box to
resolve the percentage or keywords (i.e. SVG path only accept floating
point or integer number as the css pixel value). Therefore, I add it into
ShapeSource, instead of BasicShape.

Differential Revision: https://phabricator.services.mozilla.com/D3633
2018-09-03 12:32:50 +02:00
Boris Chiou
68ab6217bd
style: Use cbindgen for basic_shape::FillRule.
Just a minor fix to use cbindgen to avoid the conversion between
basic_shape::FillRule and mozilla::StyleFillRule.

Differential Revision: https://phabricator.services.mozilla.com/D4171
2018-09-03 12:32:25 +02:00
Emilio Cobos Álvarez
4f04988c13
style: Add a test for the use counters.
Mostly testing that they work, and that they record what we expect them to
record, that is, the actual property that was parsed, and not the properties
that it'd resolve or expand to.

That may be another tricky part for CSSOM, I think style setters would fail an
alias test if implemented with the current setup (we do the property lookup in
C++).

Differential Revision: https://phabricator.services.mozilla.com/D3829
2018-09-03 12:31:41 +02:00
Emilio Cobos Álvarez
89b8f30737
style: Hook the use counters into StyleSheet parsing.
Still not hooked into telemetry, I talked with :janerik and :gfritzsche about
that, but test incoming!

This intentionally doesn't handle CSSOM and such for now, will file followups
for those, though should be trivial.

I want to unify / clean up how we do the use counters and the error reporting
stuff for CSSOM, since the current function call still shows up in profiles,
but that should be a follow-up.

Differential Revision: https://phabricator.services.mozilla.com/D3828
2018-09-03 12:31:33 +02:00
Emilio Cobos Álvarez
c8e5b7f1b0
style: Add a very simple use counter implementation.
As simple as I could make it, for now. We can improve on this.

Differential Revision: https://phabricator.services.mozilla.com/D3827
2018-09-03 12:31:23 +02:00
Emilio Cobos Álvarez
c3a4b27441
style: Remove useless StyleDisplay conversion.
Differential Revision: https://phabricator.services.mozilla.com/D3896
2018-09-03 12:31:18 +02:00
Emilio Cobos Álvarez
ae671a7d26
style: Use a consistent style for longhands.
It's a bit of a mess.

Differential Revision: https://phabricator.services.mozilla.com/D3892
2018-09-03 12:31:10 +02:00
Emilio Cobos Álvarez
a2d6566d0b
style: Make text-orientation, unicode-bidi, contain and will-change non-animatable.
Per recent CSSWG resolutions:

  https://github.com/w3c/csswg-drafts/issues/2737
  https://github.com/w3c/csswg-drafts/issues/2751

Differential Revision: https://phabricator.services.mozilla.com/D3888
2018-09-03 12:31:04 +02:00
Boris Chiou
dce2e2927f
style: Define offset-path and implement it in style system.
Define OffsetPath & SVGPathData on the servo-side, and StyleMotion &
StyleSVGPath on the gecko-side. We parse the SVG Path string into a
vector of PathCommand. To build the gfx::Path, we will convert it into
gfx::Path later in a different patch.

The basic flow is:
  - Parse SVG Path String into SVGPathData (in Rust).
  - Use cbindgen to make sure the layout of PathCommand and StylePathCommand, and then set the Box[PathCommand] into nsTArray<StylePathCommand>.
  - Try to convert nsTArray<StylePathCommand> into gfx::Path. (This part will be implemented in a different patch.)

Finally, we use the gfx::Path to create a motion path transform.
The layout implementation is in the later patch.

Depends on D2962

Differential Revision: https://phabricator.services.mozilla.com/D2963
2018-09-03 12:30:21 +02:00
Cameron McCormack
249b865eb8
style: Simplify PropertyDeclarationBlock::get a little.
Depends On D3747

Differential Revision: https://phabricator.services.mozilla.com/D3748
2018-09-03 12:30:12 +02:00
Cameron McCormack
b20bbea033
style: Replace NormalDeclarationIterator return type with impl Trait.
Differential Revision: https://phabricator.services.mozilla.com/D3747
2018-09-03 12:30:01 +02:00
Xidorn Quan
cd4d281984
style: Add scrollbar-width property.
Bug: 1475033
Reviewed-by: heycam
2018-08-18 17:54:54 +02:00
Henri Sivonen
0ec5db90a6
Use encoding_rs for XPCOM string encoding conversions.
Correctness improvements:

 * UTF errors are handled safely per spec instead of dangerously truncating
   strings.

 * There are fewer converter implementations.

Performance improvements:

 * The old code did exact buffer length math, which meant doing UTF math twice
   on each input string (once for length calculation and another time for
   conversion). Exact length math is more complicated when handling errors
   properly, which the old code didn't do. The new code does UTF math on the
   string content only once (when converting) but risks allocating more than
   once. There are heuristics in place to lower the probability of
   reallocation in cases where the double math avoidance isn't enough of a
   saving to absorb an allocation and memcpy.

 * Previously, in UTF-16 <-> UTF-8 conversions, an ASCII prefix was optimized
   but a single non-ASCII code point pessimized the rest of the string. The
   new code tries to get back on the fast ASCII path.

 * UTF-16 to Latin1 conversion guarantees less about handling of out-of-range
   input to eliminate an operation from the inner loop on x86/x86_64.

 * When assigning to a pre-existing string, the new code tries to reuse the
   old buffer instead of first releasing the old buffer and then allocating a
   new one.

 * When reallocating from the new code, the memcpy covers only the data that
   is part of the logical length of the old string instead of memcpying the
   whole capacity. (For old callers old excess memcpy behavior is preserved
   due to bogus callers. See bug 1472113.)

 * UTF-8 strings in XPConnect that are in the Latin1 range are passed to
   SpiderMonkey as Latin1.

New features:

 * Conversion between UTF-8 and Latin1 is added in order to enable faster
   future interop between Rust code (or otherwise UTF-8-using code) and text
   node and SpiderMonkey code that uses Latin1.

Bug: 1402247
Reviewed-by: Nika,erahm,froydnj
2018-08-18 17:48:29 +02:00
Xidorn Quan
916dc79dc9
style: Rename StyleUserInterface to StyleUI.
Differential Revision: https://phabricator.services.mozilla.com/D3276
2018-08-18 17:48:22 +02:00
L. David Baron
9206283f7e
style: Swap order of values in 'overflow' shorthand property.
Differential Revision: https://phabricator.services.mozilla.com/D3069
2018-08-18 17:48:02 +02:00
Xidorn Quan
f14a3edd7d
style: Use function pointer rather than Fn trait object for collect_property_completion_keywords.
Differential Revision: https://phabricator.services.mozilla.com/D2985
2018-08-18 17:47:56 +02:00
Xidorn Quan
c77ecd6984
style: Implement flow-relative values for resize property.
Differential Revision: https://phabricator.services.mozilla.com/D2908
2018-08-18 17:47:51 +02:00
Xidorn Quan
5299ce31aa
style: Make several more specified values Copy.
Differential Revision: https://phabricator.services.mozilla.com/D2932
2018-08-18 17:47:44 +02:00
Xidorn Quan
e22850dc85
style: Add check for non-Copy specified value to ensure specified_is_copy always returns the right result.
Differential Revision: https://phabricator.services.mozilla.com/D2931
2018-08-18 17:47:37 +02:00
Xidorn Quan
e7945bbfcb
style: Put overflow: -moz-scrollbar-* behind pref.
Differential Revision: https://phabricator.services.mozilla.com/D2845
2018-08-18 17:47:30 +02:00
Boris Chiou
c87668fcd5
style: Use union to wrap different shape-like types. r=xidorn
1. We will add more shape-like types in the future, so it's better to
   use union to reduce the memory usage.
2. Those shape-like types are mutual exclusive, so we could use union to
   wrap them.

Differential Revision: https://phabricator.services.mozilla.com/D2746
2018-08-18 17:47:24 +02:00
Emilio Cobos Álvarez
689293e4fb
Fix Servo build. 2018-08-08 01:34:35 +02:00
Jonathan Watt
b05ace3e4a
style: Add a '-moz-menulist-button' value to '-moz-appearance'.
The '-moz-menulist-button' value currently behavies identically to the
'menulist-button' value.  This is not implemented as an alias because later
patches in this patch series will change the behavior of our pre-existing
'menulist-button' value to more closely match what Chrome does.

Bug: 1428676
Reviewed-by: emilio
2018-08-08 01:36:33 +02:00
Emilio Cobos Álvarez
eb49995737
style: Convert GetStringValue to use Servo.
And remove gPropertyTable / kCSSRawProperties while at it.

Differential Revision: https://phabricator.services.mozilla.com/D2516
2018-08-08 01:36:18 +02:00
Emilio Cobos Álvarez
694d00eb5e
style: Implement nsCSSProps::LookupProperty using Rust.
Always assume allowed-for-all-content. There are a couple callers which weren't
doing that:

 * A unit test -> removed.

 * ComputeAnimationDistance: Used for testing (in transitions_per_property), and
   for the animation inspector. The animation inspector shouldn't show
   non-enabled properties. The transitions_per_property test already relies on
   getComputedStyle stuff which only uses eForAllContent.

 * GetCSSImageURLs: I added this API for the context menu page and such. It
   doesn't rely on non-enabled-everywhere properties, it was only using
   eInChrome because it was a ChromeOnly API, but it doesn't really need this.

Differential Revision: https://phabricator.services.mozilla.com/D2514
2018-08-08 01:36:10 +02:00
Emilio Cobos Álvarez
0b520c9558
style: Make NonCustomPropertyId <-> nsCSSPropertyId conversions fast.
We have a different order in nsCSSPropertyId for no good reason. The only
invariant there is that longhands come before shorthands, and shorthands before
aliases.

Luckily that's also an invariant that NonCustomPropertyId has, so we can reuse
them.

Differential Revision: https://phabricator.services.mozilla.com/D2463

MozReview-Commit-ID: 1hsQu6hmqiN
2018-08-08 01:35:48 +02:00
Nicholas Nethercote
fc9df0bcf3
style: Convert FnvHash{Set,Map} instances to FxHash{Set,Map}.
Bug: 1477628
Reviewed-by: heycam
2018-08-08 01:34:35 +02:00
Emilio Cobos Álvarez
0cab212052
style: Autogenerate StyleAppearance.
This builds on bug 1428676 and introduces StyleAppearance, which replaces the
NS_THEME_* constants.

Really sorry for the size of the patch.

There's a non-trivial change in the gtk theme, which I submitted separately as
bug 1478385.

Differential Revision: https://phabricator.services.mozilla.com/D2361
2018-08-08 01:35:08 +02:00
Emilio Cobos Álvarez
798d45f38d
style: Generate StyleDisplay using cbindgen.
We use the same setup WR uses, which is checking-in the files.

But I think it's much better than keeping the two things in sync manually :)

When you add a new value, you need to add it to the rust source, then run the
command, but since it doesn't need to build the style crate (it uses the Rust
AST, doesn't build) there's no problem.

Differential Revision: https://phabricator.services.mozilla.com/D2354
2018-08-08 01:34:49 +02:00
Emilio Cobos Álvarez
658b8e3312
style: Appease tidy. 2018-07-24 03:58:16 +02:00
Emilio Cobos Álvarez
1716259a3a
style: Fix servo build. 2018-07-24 03:38:14 +02:00
Ting-Yu Lin
0c0ffef1a5
style: Convert NS_STYLE_COLUMN_SPAN_* to an enum class.
Bug: 1477533
Reviewed-by: heycam
MozReview-Commit-ID: F8M1DlpBop2
2018-07-24 03:31:53 +02:00
Ting-Yu Lin
23b1d4d640
style: Convert NS_STYLE_COLUMN_FILL_* to an enum class.
I put Balance as the first item in StyleColumnFill because it is the default
value.

Bug: 1477533
Reviewed-by: heycam
MozReview-Commit-ID: A4DVMLL6XBa
2018-07-24 03:31:41 +02:00
Ting-Yu Lin
9f5237b87c
style: Use static const class variable to represent column-count: auto.
NS_STYLE_COLUMN_COUNT_UNLIMITED is unused, so I remove it.

Bug: 1477533
Reviewed-by: heycam
MozReview-Commit-ID: HLHLn9ZbkUY
2018-07-24 03:31:24 +02:00
Xidorn Quan
1a91beaf57
style: Remove DeclarationPushMode.
Bug: 1473180
Reviewed-by: emilio
MozReview-Commit-ID: LFgYeKE1SNk
2018-07-24 03:29:59 +02:00
Xidorn Quan
a0edeb1a92
style: Remove DeclarationPushMode::Update and related code.
Bug: 1473180
Reviewed-by: emilio
MozReview-Commit-ID: 1fI5YRa54lQ
2018-07-24 03:29:42 +02:00
Xidorn Quan
b14b2beaad
style: Add new algorithm for setting property to be used in later commit.
Bug: 1473180
Reviewed-by: emilio
MozReview-Commit-ID: CdM8hDB6rFj
2018-07-24 03:29:28 +02:00
Xidorn Quan
d245f8b579
style: Introduce a concept of logical group.
Bug: 1473180
Reviewed-by: emilio
MozReview-Commit-ID: GXlf8JNML4N
2018-07-24 03:29:15 +02:00
Emilio Cobos Álvarez
08dcd7fca0
style: Remove IS_STYLE_IF_VISITED.
Bug: 1474959
Reviewed-by: xidorn
MozReview-Commit-ID: 8rnlaMOJisA
2018-07-24 03:29:03 +02:00
Emilio Cobos Álvarez
4e1606bfaf
style: Push visited style computation a bit further down.
Bug: 1474959
Reviewed-by: xidorn
MozReview-Commit-ID: 1DILenWIw4D
2018-07-24 03:28:50 +02:00
Emilio Cobos Álvarez
5504cbdfd7
style: Animate logical properties.
The setup is that AnimationValue only contains physical properties, and
we physicalize when building keyframes and transitions.

Bug: 1309752
Reviewed-by: birtles
MozReview-Commit-ID: 9dI20N0LFrk
2018-07-24 03:28:10 +02:00
Emilio Cobos Álvarez
be9acba801
style: Introduce PropertyDeclaration::to_physical.
Bug: 1309752
Reviewed-by: heycam
MozReview-Commit-ID: FAL04K5G948
2018-07-24 03:27:56 +02:00
Sylvestre Ledru
498592ff61
style: autopep8
Bug: 1468273
Reviewed-by: ted
MozReview-Commit-ID: 8j8EU3E08GP
2018-07-24 03:26:12 +02:00
Emilio Cobos Álvarez
5227c7572e
style: Gecko build fix for Servo PR #21156.
MozReview-Commit-ID: FbN0hiUGzYa
2018-07-16 19:44:31 +02:00
Emilio Cobos Álvarez
bad4f7d729
style: Gecko build fix for Servo PR #21139.
MozReview-Commit-ID: 3ocJrRB3jeO
2018-07-16 19:44:23 +02:00
Dan Glastonbury
a76f5393d4
style: Change nscolor to StyleComplexColor.
Bug: 1467622
Reviewed-by: xidorn
MozReview-Commit-ID: 1bbQzOoOuBe
2018-07-16 19:43:50 +02:00
Xidorn Quan
db74d0c579
style: Remove unused parent parameter in ComputedValues::new.
Bug: 1475229
MozReview-Commit-ID: EBG0TS7tI4P
2018-07-16 19:43:30 +02:00
Xidorn Quan
dd277be487
style: Remove a unused line to fix a warning.
Bug: 1461285
2018-07-16 19:43:08 +02:00