Commit graph

2752 commits

Author SHA1 Message Date
Patrick Walton
a0b369ae7d layout: Mark the styles of elements with pseudos as unshareable.
Makes multiple `<br>` elements work, since those are implemented via
`before` pseudos.
2014-10-08 22:46:54 -07:00
Patrick Walton
01c90d8d6a layout: Implement z-index. 2014-10-08 22:30:44 -07:00
bors-servo
eff0de0ce1 auto merge of #3617 : mrobinson/servo/layer-positioning, r=pcwalton
Layers are currently all children of the root layer, so instead of
using coordinates relative to the parent flow we should use coordinates
relative to the page.

Fixes #2061.
2014-10-08 17:27:33 -06:00
Martin Robinson
659c45e7b0 Position layers using their absolute position
Layers are currently all children of the root layer, so instead of
using coordinates relative to the parent flow we should use coordinates
relative to the page.

Fixes #2061.
2014-10-08 13:18:44 -07:00
Tim Taubert
b9e23563bb Support [*|attr], attribute selectors in any namespace (fixes #1558) 2014-10-08 11:01:31 +02:00
Patrick Walton
d30762bb9f layout: white_space::pre should not yield ignorable whitespace.
Improves the Google home page.
2014-10-07 13:39:41 -07:00
Cameron Zwarich
fb810c08dc Remove trailing whitespace
The Mach test runner doesn't actually make these failures yet, which is
tracked by #3482.
2014-10-06 14:40:42 -07:00
bors-servo
ae4c9be536 auto merge of #3573 : Manishearth/servo/warnings, r=jdm 2014-10-06 11:51:32 -06:00
Manish Goregaokar
1aa98f866a Remove unused mutable variable 2014-10-05 23:28:27 +05:30
Manish Goregaokar
a8f96ddfb2 Remove Traceable/Untraceable from node.rs 2014-10-05 22:36:08 +05:30
Manish Goregaokar
dcda2cb94b Remove Traceable from htmliframelement.rs 2014-10-05 22:16:41 +05:30
Manish Goregaokar
96f6c2fd67 Remove Traceable from element.rs 2014-10-05 22:09:12 +05:30
Manish Goregaokar
4f574b4732 Remove Traceable from characterdata.rs 2014-10-05 21:33:43 +05:30
Patrick Walton
885fc1c28b layout: Implement box-sizing: border-box.
Improves GitHub.
2014-10-01 20:24:34 -07:00
Patrick Walton
287fe3b3ab layout: Implement the correct hypothetical box behavior for
absolutely-positioned elements declared with `display: inline`.

Although the computed `display` property of elements with `position:
absolute` is `block`, `position: absolute; display: inline` can still
behave differently from `position: absolute; display: block`. This is
because the hypothetical box for `position: absolute` can be at the
position it would have been if it had `display: inline`. CSS 2.1 §
10.3.7 describes this case in a parenthetical:

"The static-position containing block is the containing block of a
hypothetical box that would have been the first box of the element if
its specified 'position' value had been 'static' and its specified
'float' had been 'none'. (Note that due to the rules in section 9.7 this
hypothetical calculation might require also assuming a different
computed value for 'display'.)"

To handle this, I had to change both style computation and layout. For
the former, I added an internal property
`-servo-display-for-hypothetical-box`, which stores the `display` value
supplied by the author, before the computed value is calculated. Flow
construction now uses this value.

As for layout, implementing the proper behavior is tricky because the
position of an inline fragment in the inline direction cannot be
determined until height assignment, which is a parallelism hazard
because in parallel layout widths are computed before heights. However,
in this particular case we can avoid the parallelism hazard because the
inline direction of a hypothetical box only affects the layout if an
absolutely-positioned element is unconstrained in the inline direction.
Therefore, we can just lay out such absolutely-positioned elements with
a bogus inline position and fix it up once the true inline position of
the hypothetical box is computed. The name for this fix-up process is
"late computation of inline position" (and the corresponding fix-up for
the block position is called "late computation of block position").

This improves the header on /r/rust.
2014-10-01 18:34:53 -07:00
Josh Matthews
5794da904e Remove unneeded input type information from layout. 2014-10-01 15:40:36 -04:00
Josh Matthews
8112859d55 Disallow toggling radio buttons. Use generated content for checkboxes and radio buttons. Switching to the glyph 0 for the average advance width. 2014-10-01 15:37:40 -04:00
Josh Matthews
f70bb68503 Implement simple layout for text, button, radio, and checkbox inputs. Implement simple interaction for checkboxes and radio buttons. 2014-10-01 15:35:42 -04:00
Cameron Zwarich
79b4ec99b4 Convert TNode / TElement to use self methods rather than &self 2014-09-30 21:26:19 -07:00
Cameron Zwarich
ccc5d976f7 Refine a lifetime parameter on TElement's get_local_name 2014-09-30 21:22:24 -07:00
Cameron Zwarich
4ef0f39c78 Remove a prefix from a method name by manually resolving methods 2014-09-30 21:21:00 -07:00
Glenn Watson
55ef7ca5ad Refactor background image, fix fixed attachment. Improve acid2. 2014-10-01 08:54:24 +10:00
Keegan McAllister
d50114c41d Use string-cache's Namespace type 2014-09-29 21:40:54 -07:00
Keegan McAllister
6429750b33 Eliminate servo_util::atom
We only needed this for Encodable, and now we use JSTraceable instead.
2014-09-29 18:39:36 -07:00
Glenn Watson
52c5007b07 Add support for <super> and <sup> tags. Fixes equations on wikipedia. 2014-09-30 07:12:54 +10:00
Simon Sapin
b3245fa407 Upgrade to rustc d2b30f7d3 2014-09-23 2014-09-29 17:41:45 +01:00
bors-servo
c9c8d63727 Merge pull request #3501 from zwarich/telement-lifetimes
Remove the 'static lifetime parameters from TElement methods

Reviewed-by: jdm
2014-09-27 17:09:28 -06:00
Cameron Zwarich
b2a3519011 Remove the 'static lifetime parameters from TElement methods
This improves the static correctness of layout's use of DOM nodes.

Fixes #2595.
2014-09-27 11:14:10 -07:00
Cameron Zwarich
bf025e9b9b Refine a lifetime parameter 2014-09-27 11:14:10 -07:00
Cameron Zwarich
61ae80e186 Add an extra lifetime parameter to TElement / TNode
This isn't used for anything yet, but it's easier to propagate this
change in a separate commit.
2014-09-27 11:14:10 -07:00
Patrick Walton
690bf079f7 layout: Refactor a few things, mostly just to obey the line limit. 2014-09-27 06:07:58 -07:00
Patrick Walton
fb5952fed0 layout: Don't double-count padding, etc, and don't draw
backgrounds/borders/etc. twice for inline-blocks.

Improves Reddit, GitHub, and many other sites.
2014-09-27 06:07:58 -07:00
Glenn Watson
15e1e5e43f Fix some mutable variable warnings. 2014-09-27 15:04:40 +10:00
bors-servo
33e2a7b362 Merge pull request #3492 from pcwalton/clear-generated-content-table
layout: Support any `display` property in generated content, and allow

Reviewed-by: glennw
2014-09-26 22:24:32 -06:00
bors-servo
94b7c486b1 Merge pull request #3486 from glennw/inline-fixes
Improve acid2. Fix line height calculation. Text fragments get correct enclosing element style.

Reviewed-by: pcwalton
2014-09-26 21:57:35 -06:00
Glenn Watson
71758643dc Remove unneeded clones and add some comments. 2014-09-27 13:51:10 +10:00
Patrick Walton
47fc64052c layout: Support any display property in generated content, and allow
tables to clear floats.

Improves the GitHub header.
2014-09-26 14:09:25 -07:00
Glenn Watson
26cf00ef4e Don't render backgrounds for text fragments. 2014-09-26 18:28:40 +10:00
Patrick Walton
36f3f5a0ab layout: Block formatting contexts should contain all their floats.
Improves Pinterest considerably.
2014-09-26 00:39:07 -07:00
Glenn Watson
cf79e64a5a Improve acid2. Fix line height calculation. Text fragments get correct enclosing element style.
* Enabled acid2 on mac + linux. Updated the reference image. The only difference from the
real acid2 now is the paint order and a 1 pixel horizontal offset on the nose.
* Change line-height to be calculated correctly.
* Apply enclosing element style to text fragments.
2014-09-26 17:12:22 +10:00
Patrick Walton
5b4380389e layout: Enhance the heuristic that guesses the inline size of block
formatting contexts.

The widths of block formatting contexts depend on the floats prior to
them. To avoid a circular dependency between width assignment and height
assignment, we must guess their widths during the assign-widths pass.
The old code simply used the size of the last float, whether
left-floated or right-floated, but this proved insufficient to handle
layouts like those seen on Reddit. The new heuristic keeps track of both
left and right floats independently and sums the width of all left and
right floats to determine the width of a block formatting context. This
is still insufficient to properly lay out Reddit, but the results are
much more acceptable.

A fully correct approach will require that blocks be laid out again if
the initial guess proved to be incorrect. A `TODO` is in the code to
handle this case.
2014-09-25 17:50:24 -07:00
Patrick Walton
9f4c2de211 layout: Unify the block-size computation for blocks and floats.
The float code was old and did not support most of CSS 2.1. So unifying
the two paths both simplifies code and improves functionality.

Improves the Reddit sidebar.
2014-09-25 16:43:24 -07:00
Cameron Zwarich
ce2484a7ce Fix trailing whitespace tidy errors 2014-09-25 13:48:07 -07:00
Patrick Walton
62bb9093d7 layout: Float table wrappers directly instead of generating a block
wrapper around them.

Fixes Wikipedia tables leaking out.

Along the way, I refactored tables' width calculation significantly.
This was necessary in order to properly handle floated tables, as some
of the logic had to be ported over from block flows.
2014-09-25 08:06:03 -07:00
Patrick Walton
fffc7aaf38 layout: Consider relatively positioned blocks as possible block
formatting contexts, and translate floats out of block formatting
contexts.

These improve Reddit.
2014-09-24 22:03:06 -07:00
Patrick Walton
d9f836bc75 Merge pull request #3458 from pcwalton/whitespace-nowrap
layout: Implement `white-space: nowrap`.
2014-09-23 20:22:33 -07:00
glennw
98222cf24c Merge pull request #3459 from glennw/small-caps
Add support for small-caps font-variant.
2014-09-24 09:49:05 +10:00
Patrick Walton
9aacd4c10c layout: Implement white-space: nowrap.
Improves the Reddit header.
2014-09-23 15:47:45 -07:00
Patrick Walton
4546d5d23c Merge pull request #3460 from glennw/inline-block-padding
Fix inline context padding on inline-block.
2014-09-23 07:47:29 -07:00
Manish Goregaokar
fcb25a35ec Rename macros crate to plugins 2014-09-23 17:37:27 +05:30