Commit graph

101 commits

Author SHA1 Message Date
bors-servo
b83b4932da auto merge of #4461 : glennw/servo/glutin-tests, r=larsbergstrom
This stops some ref tests on linux blocking while waiting for
user input events and never outputting the file.

Also mark vertical writing test as flaky on all platforms. Due
to unrelated timing reasons, this fails reliably on mac when glutin
is enabled. The related bug with details on the root cause is #3926.
2014-12-22 17:57:46 -07:00
Patrick Walton
cc7cacfd5f gfx: Clip the background properly when border-radius is used.
Improves Reddit, GitHub, etc.
2014-12-22 14:48:55 -08:00
Glenn Watson
2accabd554 Use event polling instead of blocking when outputting to a file.
This stops some ref tests on linux blocking while waiting for
user input events and never outputting the file.

Also mark vertical writing test as flaky on all platforms. Due
to unrelated timing reasons, this fails reliably on mac when glutin
is enabled. The related bug with details on the root cause is #3926.
2014-12-23 08:32:53 +10:00
Adenilson Cavalcanti
b6f315cb35 Adding outset ref test. 2014-12-18 13:55:45 -08:00
Adenilson Cavalcanti
06bbecc049 Adding inset ref test. 2014-12-18 13:55:07 -08:00
Patrick Walton
6b28965b94 layout: Implement clip per CSS 2.1 § 11.1.2.
Only the recommended, comma-separated syntax is supported.
2014-12-18 13:07:13 -08:00
Patrick Walton
a3f6f4e75b layout: Implement caption-side per CSS 2.1 § 17.4.1.
`caption-side` is used by 4% of pages by number of loads.
2014-12-17 22:06:14 -08:00
Patrick Walton
5675274c44 layout: Implement empty-cells per CSS 2.1 § 17.6.1.1. 2014-12-17 21:25:12 -08:00
Adenilson Cavalcanti
c41fc31655 Adding tests for outset. 2014-12-16 12:16:43 -08:00
Adenilson Cavalcanti
92f4ab6394 Thanks to differences on rendering between CPU X GPU, there is a 1 pixel wide
difference in the position where the top border meets the right border (as
also the right border X bottom border).

The workaround to have a test that will work on both modes is to cover the
affected area with a white div. This patch adds inset test.
2014-12-16 12:09:31 -08:00
Patrick Walton
a1ea44b294 style: Address review comments relating to bgcolor and column spans 2014-12-15 18:09:44 -08:00
Patrick Walton
56b78de5bc style: Implement basic column spans.
This patch provides some of the groundwork for column spans greater than
1. It implements the column-span CSS property (prefixed so as not to be
exposed to content) as well as the corresponding colspan attribute;
although the former is not well-specified outside of CSS multi-column
layout, INTRINSIC refers to it. Although width is distributed to
spanning columns, they do not yet contribute minimum and preferred
widths; this will be implemented in a follow-up.

Additionally, this patch cleans up some miscellaneous formatting issues
and improves the handling of table rowgroups.
2014-12-15 17:41:51 -08:00
Patrick Walton
14bafb11be style: Parse the legacy bgcolor attribute per the HTML5 specification.
Additionally, this patch cleans up some miscellaneous formatting issues.
2014-12-15 17:41:44 -08:00
Patrick Walton
10f1ed5e31 style: Parse the legacy border attribute per the legacy HTML specification.
Additionally, this patch cleans up some miscellaneous formatting issues
and refactors files in `layout/css/` somewhat to eliminate needless
levels of indirection. It also fixes our handling of presentational
hints that only apply if border is nonzero.
2014-12-15 17:41:37 -08:00
Patrick Walton
3029fbab92 layout: Implement basic lists and the CSS1 list properties.
The exact rendering is ill-spec'd. Some things are ugly (especially the
width and height of list style images) but they are infrequently used
and I believe this implementation matches the spec. Numeric lists are
not supported yet, since they will require a separate layout pass.

The implementation is a subclass of `BlockFlow`, on advice from Robert
O'Callahan.
2014-12-15 16:25:06 -08:00
Patrick Walton
3ba0abd8ff gfx: Implement box-shadow per CSS-BACKGROUNDS. 2014-12-15 13:39:06 -08:00
Patrick Walton
6943ddb93e layout: Implement overflow-wrap/word-wrap per CSS-TEXT § 6.2.
This property is used by approximately 55% of page loads.

To implement the line breaking behavior, the "breaking strategy" has
been cleaned up and abstracted. This should allow us to easily support
other similar properties in the future, such as `text-overflow` and
`word-break`.
2014-12-13 13:05:05 -08:00
Patrick Walton
106fdb1d32 layout: Implement word-spacing per CSS 2.1 § 16.4.
This assumes that there are no ligatures that span across multiple
words. Since we have a per-word shape cache, this is a safe assumption
as of now. I have left comments to ensure that, if and when this is
revisted, we make sure to handle it properly.
2014-12-12 17:55:11 -08:00
Patrick Walton
caee309ef4 layout: Implement text-indent per CSS 2.1 § 16.1.
I had to use a somewhat unconventional method of computing text
indentation (propagating from blocks down to inlines) because of the way
containing blocks are handled in Servo.

(As a side note, neither Gecko nor WebKit correctly handles percentages
in `text-align`, at least incrementally -- i.e. when the percentages are
relative to the viewport and the viewport is resized.)
2014-12-12 14:55:41 -08:00
Adenilson Cavalcanti
4d5cca2c69 Adding tests to check behavior. There are 3 files that will test:
a) If the groove border is different from a black border (the bug that this
patch set fixes);
b) If a ridge border is different from a black border (samething);
c) If groove is different from ridge (they should be inverse of each other).

All 3 new tests passes on OSX Yosemite (10.10).
2014-12-12 13:51:24 -08:00
Patrick Walton
07bc97e3e2 gfx: Implement letter-spacing per CSS 2.1 § 16.4.
The ligature disabling code has been manually verified, but I was unable
to reftest it. (The only way I could think of would be to create an
Ahem-like font with a ligature table, but that would be an awful lot of
work.)

Near as I can tell, the method used to apply the spacing (manually
inserting extra advance post-shaping) matches Gecko.
2014-12-12 11:43:43 -08:00
Patrick Walton
52b9951cad layout: Implement outline per CSS 2.1 § 18.4.
`invert` is not yet supported.

Objects that get layers will not yet display outlines properly. This is
because our overflow calculation doesn't take styles into account and
because layers are always anchored to the top left of the border box.
Since fixing this is work that is not related to outline *per se* I'm
leaving that to a followup and making a note in the code.
2014-12-11 14:25:10 -08:00
Patrick Walton
877f02f1d1 layout: Implement text-transform.
The Unicode awareness of `text-transform` is implemented as well as
possible given the Rust standard library's Unicode support. In
particular, the notion of an alphabetic character is used instead of a
letter.

Gecko has a subclass of text run to handle text transforms, but I
implemented this in a simpler way.
2014-12-10 14:09:08 -08:00
Patrick Walton
1c1c507c03 layout: Implement opacity per CSS-COLOR § 3.2.
This adds the infrastructure necessary to support stacking contexts that
are not containing blocks for absolutely-positioned elements. Our
infrastructure did not support that before. This minor revamp actually
ended up simplifying the logic around display list building and
stacking-relative position computation for absolutely-positioned flows,
which was nice.
2014-12-03 14:17:16 -08:00
Glenn Watson
59cdce3001 Fix layout on google search results. 2014-11-27 09:10:58 +10:00
Patrick Walton
55da2c97d5 layout: Incrementalize reflow of block formatting contexts impacted by
floats, and make float placement idempotent.

This moves float placement outside sequential block size computation.

Improves the maze solver.
2014-11-18 15:36:04 -08:00
Josh Matthews
a589ed7848 Mark vertical-lr-blocks.html as flaky to ease the pain while it's being investigated. #3926 2014-11-15 11:17:04 -05:00
Patrick Walton
215c2a9d4c layout: Implement CSS linear gradients per the CSS-IMAGES specification.
This implements the CSS `linear-gradient` property per the CSS-IMAGES
specification:

    http://dev.w3.org/csswg/css-images-3/

Improves GitHub.
2014-11-06 08:26:47 -08:00
Clark Gaebel
d22a64884d Implements case insensitive font family names.
One part (of 8!) of css font family disambiguation is that font families should
be matched case-insensitively.

This patch implements that. Once it lands, a bug needs to be filed to do lowercasing
properly (as a string, instead of char-by-char -- it's a unicode thing).

r? @gw
2014-11-03 17:15:51 -08:00
Josh Matthews
c4e9a42110 Mark the append_style reftest as flaky until we get better reliability. Fixes #3805. 2014-10-24 16:50:05 -04:00
Glenn Watson
d736a5ef82 Reenable visibilty ref test. Fixes #1576. 2014-10-22 13:21:17 +10:00
Clark Gaebel
2faf5b270f Fix image_dynamic_remove reftest with incremental layout turned out
This also adds some extra debugging infrastructure which I found useful tracking
this bug down. A regression in the br reftests is also uncovered by this patch,
which I'll work on fixing next.

r? @pcwalton
2014-10-17 11:11:14 -07:00
Keegan McAllister
c9b7d1f8df Add a reftest for #1324
Closes #1324, fixed by html5ever.
2014-10-16 13:06:34 -07:00
Gilles Leblanc
33bcd703db Uncomments the multiple css class ref-test
This test had been commented out because it was breaking the travis ci
build but was passing locally.

Issue #3681
2014-10-14 20:27:25 -04:00
Patrick Walton
c7e619dfe7 layout: Rewrite intrinsic inline-size and automatic table layout to
match L. David Baron's work-in-progress specification.

    http://dbaron.org/css/intrinsic/

Column spans are not yet supported.

This effectively adds support for percentage widths, and it also fixes
many bugs, improving the layout of Google and Wikipedia.
2014-10-14 14:17:57 -07:00
Patrick Walton
5f8d3f72d8 layout: Introduce support for legacy presentational attributes to selector
matching, and use it for `<input size>` and `<td width>`.

This implements a general framework for legacy presentational attributes
to the DOM and style calculation, so that adding more of them later will
be straightforward.
2014-10-14 12:44:09 -07:00
bors-servo
834df4e211 auto merge of #3673 : mrobinson/servo/iframe-margin, r=pcwalton
Instead of taking margin size into account twice when positioning
layers, just rely on the absolute position calculated during display
list construction.
2014-10-14 04:51:35 -06:00
Martin Robinson
e53093e127 Do not compound iframe margins when positioning
Instead of taking margin size into account twice when positioning
layers, just rely on the absolute position calculated during display
list construction.
2014-10-13 17:28:32 -07:00
bors-servo
a92e55597e auto merge of #3604 : pcwalton/servo/inline-block-overflow-hidden, r=glennw
Makes lots of GitHub appear.

r? @glennw
2014-10-13 15:54:41 -06:00
bors-servo
6e3c776387 auto merge of #3635 : SimonSapin/servo/ua-stylesheet, r=pcwalton
Based on https://html.spec.whatwg.org/multipage/rendering.html rather than http://dev.w3.org/csswg/css2/grammar.html

Fixes #3629.

r? @pcwalton
2014-10-13 12:21:44 -06:00
Martin Robinson
4c453ac519 Include leading margin in inline block size
According to the documentation for Fragment::position, the inline axis
should include margin size, so we include it for blocks. Also fix
place_float which assumed that it was not included and
assign_inline_sizes which overrode the size set in
set_inline_size_constraint_solutions.

Typically this issue was hidden by large tile sizes, but fitted tiles
makes it more common.
2014-10-13 09:12:56 -07:00
Patrick Walton
2b0e59725b layout: Make content of display: inline-block; overflow: hidden visible. 2014-10-13 08:03:34 -07:00
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