Commit graph

159 commits

Author SHA1 Message Date
bors-servo
c87f34f877 auto merge of #3615 : pcwalton/servo/box-sizing-fix, r=glennw
Improves GitHub significantly.

r? @glennw
2014-10-12 23:45:45 -06:00
Matt Brubeck
b9fab5d861 Disable failing reftest (#3636) 2014-10-10 10:34:23 -07:00
Simon Sapin
1117d86b63 Add [foo=bar i] case-insensitive attribute selectors. 2014-10-10 14:29:24 +01:00
Patrick Walton
611c54ce8c layout: Make box-sizing only affect explicitly-specified or percentage
sizes, not automatically computed ones.

Improves GitHub significantly.
2014-10-09 07:59:54 -07:00
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
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
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
Patrick Walton
a4352b1da2 style: Remove max-height from the input style.
Some pages, like Google, want to set height explicitly.
2014-10-07 11:21:50 -07:00
bors-servo
a6cd13c890 auto merge of #3567 : mrobinson/servo/optimizer, r=zwarich
The page_rect passed to DisplayListOptimizer is relative to the
RenderLayer origin, but the display list components are relative to the
page origin. Before passing the page rect to the display list, we
translate it by the RenderLayer position.
2014-10-03 16:27:25 -06:00
Martin Robinson
ec29723f2b Account for RenderLayer position when optimizing display list
The page_rect passed to DisplayListOptimizer is relative to the
RenderLayer origin, but the display list components are relative to the
page origin. Before passing the page rect to the display list, we
translate it by the RenderLayer position.
2014-10-03 14:55:03 -07:00
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
Glenn Watson
2e32720129 Enable acid2 reftest on Linux. Update rust-layers. 2014-09-30 14:31:11 +10:00
Martin Robinson
a75594d7cf Mask root layer rectangles to their boundaries
This prevents iframes contents from overflowing their root layers.
2014-09-29 16:42:26 -07:00
Glenn Watson
52c5007b07 Add support for <super> and <sup> tags. Fixes equations on wikipedia. 2014-09-30 07:12:54 +10:00
Glenn Watson
bc06e27fe2 Add some vertical align reftests now that text elements get correct vertical align property. 2014-09-29 08:05:30 +10: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
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
Gilles Leblanc
8e77422d8e Handle dynamic addition of attributes
Handles dynamic addition of attributes to <link rel=stylesheet>
elements.

Fixes #3361
2014-09-26 19:04:32 -04: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
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
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
9aacd4c10c layout: Implement white-space: nowrap.
Improves the Reddit header.
2014-09-23 15:47:45 -07:00
Glenn Watson
32c02fc048 Fix inline context padding on inline-block.
Fixes categories bar on wikipedia - ref #2554.
2014-09-23 15:40:08 +10:00
Patrick Walton
3bb4020ff8 layout: Adjust the position of block formatting contexts based on float
placement.

Improves Reddit considerably.

Closes #3456.
2014-09-22 18:04:15 -07:00
Patrick Walton
34b3408a89 layout: Translate floats when clearing non-floated blocks.
Improves CNN layout considerably.

Closes #3439.
2014-09-22 14:14:20 -07:00
Glenn Watson
87d18b90a6 Add support for min-width and max-width to images.
This fixes the images on the homepage of github.
2014-09-22 14:03:10 +10:00
Patrick Walton
0604d0c6b1 layout: Handle floated blocks with percentage heights correctly.
Improves the top menu in Wikipedia.
2014-09-19 17:56:07 -07:00
Patrick Walton
39d7bf93d6 layout: Make percentage heights propagate through inline flows.
I found this random bug during an attempt to improve Wikipedia.
2014-09-19 17:20:56 -07:00
Patrick Walton
08e004d106 Merge pull request #3424 from SimonSapin/font-size-absolute
Add font-size absolute size keywords. Fix #3417
2014-09-19 15:17:55 -07:00
Patrick Walton
b4db9aeaeb Handle generated content with display: block correctly during flow
construction.

The iteration was incorrect here. Although it accidentally worked
before, it will cause problems when we have incremental style
recalculation.

The `after_block_iteration` reftest will become interesting once we have
incremental style recalc.
2014-09-19 12:25:37 -07:00
Simon Sapin
4e71b215b8 Add font-size absolute size keywords. Fix #3417.
Relative size keywords are still missing:
https://github.com/servo/servo/issues/3423
2014-09-19 19:04:31 +01:00
Glenn Watson
818f70e319 Fix img with display: block. Fixes text/image overflow on wikipedia.
Ref: #2554
2014-09-19 17:59:48 +10:00
Glenn Watson
fd176d5387 Fix padding on tables. This fixes the TOC on wikipedia pages.
Ref: #2554
2014-09-19 14:58:24 +10:00
Matt Brubeck
f35941d91d Fix line splitting in white-space: pre flows
The newline position from one line was getting used repeatedly, causing extra
"phantom" newlines in the following lines.  Fixes #3413.
2014-09-18 14:25:12 -07:00
Glenn Watson
6bc65f3b07 Include margin in inline block intrinsic width. Fixes [edit] links on wikipedia. 2014-09-18 16:07:28 +10:00
Simon Sapin
14f7d2dabd Merge pull request #3365 from SimonSapin/command-line-argument-filenames
Try to parse command line argument as file names
2014-09-16 20:32:40 +01:00
Matt Brubeck
6c9524b687 Implement background-position keyword values
Also fixes calculation of background-position percentages:

Rather than multiplying the container size by a percent and aligning the top
left of the image at the resulting width, we also need to subtract a
corresponding percent of the image size, per
http://dev.w3.org/csswg/css2/colors.html#propdef-background-position

"A value pair of '100% 100%' places the lower right corner of the image in the
lower right corner of the padding box. With a value pair of '14% 84%', the
point 14% across and 84% down the image is to be placed at the point 14%
across and 84% down the padding box."
2014-09-16 10:24:31 -07:00
Matt Brubeck
c7e30f87c4 Implement percentage heights for block flows
Fixes #2029
2014-09-16 09:02:01 -07:00
Simon Sapin
4768423eaa Give explicit file: URLs for reftests. Allow specifying a fragment id
The previous commit made #top be considered part of the file name in
../html/acid2.html#top
2014-09-16 16:22:52 +01:00
Matt Brubeck
1ae3bda172 Move link rel=stylesheet fetching to layout task
Fixes #3346.
2014-09-16 07:12:01 -07:00
Simon Sapin
11135d75cb Try to parse command line argument as file names
… when parsing as an absolute URL (without a base) fails.

Previously, arguments were parsed as URLs with the current working directory
converted to an URL and used as the base URL. This mostly worked for
relative filenames, except that `?` and `#` had a special meaning
and needed to be percent-encoded.

Fix #3340.
2014-09-16 14:41:45 +01:00
Glenn Watson
cab15531b5 Implement generated_containing_block_rect for TableFlow. Fixes #3337. 2014-09-15 15:39:58 +10:00