Commit graph

213 commits

Author SHA1 Message Date
Patrick Walton
18074bf908 layout: Lay out nested inline elements with different vertical-align
values properly in simple cases.

This allows things like `<sup><span>Foo</span></sup>` to work and
improves Wikipedia.
2015-04-09 14:55:05 -07:00
Simon Sapin
9199c4f478 Remove now-empty module. 2015-04-08 01:07:57 +02:00
Simon Sapin
e5466a34c5 Move style crate unit tests into the unit_tests crate. 2015-04-08 01:07:52 +02:00
Ms2ger
9aa9a3b8fd Stop using int and uint in style. 2015-04-05 19:13:01 +02:00
Josh Matthews
57c5b3228a Warning patrol. 2015-04-01 12:59:51 -04:00
Patrick Walton
750bbed2cb gfx: Perform more aggressive caching in
`FontContext::get_layout_font_group_for_style()`.

There are several optimizations here:

* We make font families atoms, to allow for quicker comparisons.

* We precalculate an FNV hash of the relevant fields of the font style
  structure.

* When obtaining a platform font group, we first check pointer equality
  for the font style. If there's no match, we go to the FNV hash. Only
  if both caches miss do we construct and cache a font group. Note that
  individual fonts are *also* cached; thus there are two layers of
  caching here.

15% improvement in total layout thread time for Facebook Timeline.
2015-04-01 08:58:16 -07:00
Patrick Walton
66dd8c8a6c layout: Implement CSS transitions per CSS-TRANSITIONS § 2.
Transition events are not yet supported, and the only animatable
properties are `top`, `right`, `bottom`, and `left`. However, all other
features of transitions are supported. There are no automated tests at
present because I'm not sure how best to test it, but three manual tests
are included.
2015-03-31 08:46:11 -07:00
Ms2ger
2755ed6c58 Remove allow(missing_copy_implementations) attributes.
This is now the default.
2015-03-23 10:49:44 +01:00
Ms2ger
ba87666cdb Update some code that's feature-gated under core. 2015-03-21 18:44:39 +01:00
Simon Sapin
fef279a8f5 Fix build scripts warnings. 2015-03-18 21:53:48 +01:00
Simon Sapin
d553bfefbb Fix warnings in style. 2015-03-18 19:29:48 +01:00
Ms2ger
5f15eb5fbf Upgrade rustc to d3c49d2140fc65e8bb7d7cf25bfe74dda6ce5ecf/rustc-1.0.0-dev. 2015-03-18 13:18:31 -04:00
Patrick Walton
d10627a2b3 layout: Implement 2D CSS transforms per CSS-TRANSFORMS § 5, 6, 7, and 8. 2015-03-17 11:30:55 -07:00
Patrick Walton
586c12ccc4 layout: Implement border-spacing per CSS 2.1 § 17.6.1 and the legacy
`cellspacing` attribute per HTML5 § 14.3.9.

Table layout code has been refactored to push the spacing down to
rowgroups and rows; this will aid the implementation of
`border-collapse` as well.

This commit also fixes two nasty issues in table layout:

* In fixed layout, extra space would not be divided among columns that
  had auto width but had nonzero minimum width.

* In automatic layout, extra space would be distributed to constrained
  columns as well even if unconstrained columns with percentage equal to
  zero were present.
2015-03-12 12:00:40 -07:00
Patrick Walton
f9cdd05d58 layout: Implement ordered lists, CSS counters, and quotes per CSS 2.1
§ 12.3-12.5.

Only simple alphabetic and numeric counter styles are supported. (This
is most of them though.)

Although this PR adds a sequential pass to layout, I verified that on
pages that contain a reasonable number of ordered lists (Reddit
`/r/rust`), the time spent in generated content resolution is dwarfed by
the time spent in the parallelizable parts of layout. So I don't expect
this to negatively affect our parallelism expect perhaps in pathological
cases.
2015-03-09 17:13:45 -07:00
James Gilbertson
1931a69ad2 Remove un-used use statement 2015-03-05 12:45:59 -07:00
James Gilbertson
a8cd40e270 Remove the 'ch' font-relative length unit 2015-03-05 12:45:58 -07:00
James Gilbertson
dc5a9e56c7 The 'font-size' property needs to use context.inherited_font_size, not context.font_size 2015-03-05 12:45:58 -07:00
James Gilbertson
bc1c44bbc2 Implement viewport percentage length units ('vw', 'vh', 'vmin', 'vmax') 2015-03-05 07:11:34 -07:00
James Gilbertson
16a8047343 Defer media query width computation until evalation 2015-03-05 07:09:10 -07:00
James Gilbertson
41786c4cb4 Refactor style::values::specified::Length to store length by kind (absolute, font-relative or character width) 2015-03-05 07:09:10 -07:00
James Gilbertson
00785ecf63 Make the initial viewport size available to style::properties::cascade 2015-03-05 07:09:10 -07:00
Simon Sapin
4c1d778ced Revert "layout: Implement ordered lists, CSS counters, and quotes per CSS 2.1"
This reverts commit 30fd28d107.
2015-03-03 21:16:24 +01:00
Simon Sapin
7a218b3f08 Revert "Refactor content property parsing."
This reverts commit 50800940dc.
2015-03-03 21:16:03 +01:00
Simon Sapin
e590f9b7f4 Revert "Tidy."
This reverts commit e209f5e0da.
2015-03-03 21:16:01 +01:00
bors-servo
e1a50c7719 auto merge of #5133 : servo/servo/background-size, r=SimonSapin
`background-size` per CSS-BACKGROUNDS § 3.9.

Nearest neighbor interpolation is used for `crisp-edges`, like Firefox.
A note has been added that we could do better if we wanted to.

Multiple backgrounds are not yet supported.

Rebase of #4368. Fixes #4368.
2015-03-03 11:48:54 -07:00
Simon Sapin
1c4b0dda55 Fix up libstyle unit test for background-size. 2015-03-03 18:48:17 +01:00
bors-servo
5cd6316add auto merge of #5067 : servo/servo/counters, r=SimonSapin
Only simple alphabetic and numeric counter styles are supported. (This
is most of them though.)

Although this PR adds a sequential pass to layout, I verified that on
pages that contain a reasonable number of ordered lists (Reddit
`/r/rust`), the time spent in generated content resolution is dwarfed by
the time spent in the parallelizable parts of layout. So I don't expect
this to negatively affect our parallelism expect perhaps in pathological
cases.

Moved from #4544, because Critic.

Fixes #4544.
2015-03-03 10:42:52 -07:00
Patrick Walton
09c53f461d layout: Implement image-rendering per CSS-IMAGES-3 § 5.3 and
`background-size` per CSS-BACKGROUNDS § 3.9.

Nearest neighbor interpolation is used for `crisp-edges`, like Firefox.
A note has been added that we could do better if we wanted to.

Multiple backgrounds are not yet supported.
2015-03-03 17:54:12 +01:00
Simon Sapin
e209f5e0da Tidy. 2015-03-03 17:46:14 +01:00
Simon Sapin
50800940dc Refactor content property parsing.
It wasn’t wrong, but it could be a lot shorter.

* Use try! and match_ignore_ascii_case! macros whenever possible
* Use expect_comma() instead of parse_comma_separated() when comma-separated values don’t have the same syntax
* Prefer Parser::expect_* methods over doing the same with Parser::next
* Take advantage of parse_nested_block returnin the return value of the closure
* Use try! more.
2015-03-03 17:31:19 +01:00
Patrick Walton
30fd28d107 layout: Implement ordered lists, CSS counters, and quotes per CSS 2.1
§ 12.3-12.5.

Only simple alphabetic and numeric counter styles are supported. (This
is most of them though.)

Although this PR adds a sequential pass to layout, I verified that on
pages that contain a reasonable number of ordered lists (Reddit
`/r/rust`), the time spent in generated content resolution is dwarfed by
the time spent in the parallelizable parts of layout. So I don't expect
this to negatively affect our parallelism expect perhaps in pathological
cases.
2015-03-03 17:31:19 +01:00
Patrick Walton
a82fc00806 layout: Implement overflow-x and overflow-y per CSS-OVERFLOW § 3.
Fragmentation is not yet supported.
2015-03-03 17:03:27 +01:00
Patrick Walton
09358b908d layout: Implement text-shadow per CSS-TEXT-DECORATION-3 § 4. 2015-03-02 13:28:51 -08:00
Bryan Bell
ec2fa2558c Remove interior borders during flow construction
Instead of looking at the boundaries of the text run, set the border
width to zero and the border style to none on border sides that are not
the outermost for a node container that is display: inline.
2015-02-27 15:52:12 -08:00
Patrick Walton
f188278dd2 style: Fix parsing of text decorations.
Adds a reftest so it doesn't break again.
2015-02-24 17:51:22 -08:00
Simon Sapin
2a50755c8a Move selector matching to an external library, for use outside Servo. 2015-02-23 16:29:34 +01:00
Simon Sapin
be599158e0 Do "computed value" calculation with a trait with an associated type. 2015-02-20 21:32:01 +01:00
Ms2ger
aaed4a54c7 Use rustc-serialize rather than the built-in deprecated serialize. 2015-02-17 13:24:15 +01:00
Simon Sapin
2ddb13db4b Remove usage of the deprecated .as_slice() in libstyle. 2015-02-13 09:36:01 +01:00
Simon Sapin
1ceadf3813 Fix warnings in libstyle. 2015-02-13 08:24:34 +01:00
Simon Sapin
d5dd1d658e Upgrade to rustc ba2f13ef0 2015-02-04 2015-02-11 14:48:34 -08:00
Josh Matthews
446f0f447e Allow unused variables, imports, and mutable. 2015-02-09 17:41:57 -05:00
Simon Sapin
7bf3fcd0d6 Use the ToCss trait instead of Show for CSSOM serialization.
Fix #4440.
Close #4687.
2015-02-07 11:18:57 +11:00
Simon Sapin
19b390049c Require at least one value when parsing 'content' 2015-02-06 11:30:24 +11:00
Simon Sapin
a97893a3ed Parse filter: none 2015-02-06 09:11:29 +11:00
Simon Sapin
5baebb0d44 Requires at least one function in filter parsing. 2015-02-06 09:07:55 +11:00
Simon Sapin
00e7b56244 Serialize 'initial' as "initial", not as the inital value. 2015-02-06 08:52:59 +11:00
Josh Matthews
9e01d91947 Lock crates.io dependencies to specific versions. 2015-01-31 01:27:26 +01:00
Simon Sapin
dfb5c52131 Split overlong line. 2015-01-30 23:18:00 +01:00