Commit graph

165 commits

Author SHA1 Message Date
bors-servo
8e811229ba auto merge of #4417 : pcwalton/servo/border-spacing, r=larsbergstrom
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.

r? @SimonSapin
2015-03-12 13:03:49 -06: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
hirschenberger
2a91c317c0 Add reftest for issue #5176 2015-03-12 11:02:29 +01:00
Patrick Walton
64abea5780 Add a Japanese Web font 2015-03-09 20:50:39 -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
Matt Brubeck
8221bfc3ef Layout fixes for RTL child flows in LTR parents
...and vice-versa.  This is not a complete fix for all mixed-direction layout
cases, but it fixes enough problems to make some simple test cases pass, like
tha attached reftest.

There are FIXME comments for many of the remaining issues.  In particular,
this does not yet handle RTL layout of fixed/absolute elements.
2015-03-09 14:21:26 -07:00
Simon Sapin
f770dbabd7 Warn about sorting alphabetically in the reftest list file. 2015-03-07 17:58:00 +01:00
Gilles Leblanc
54dfb659ec Organize reftest list alphabetically and make the tidy script check it
Reftest list check is checked using Python's default string comparison.
Also added a notice in the tidy script when there are no errors.

Fixes #5092
2015-03-07 17:51:17 +01:00
Glenn Watson
14e438391a Disable flaky reftests until a proper solution is found.
A race condition exists where pipelines that are removed from a document
may not ever trigger a paint for that pipeline. The compositor relies
on a paint occurring for each pipeline before outputting the image when
in reftest mode.
2015-03-06 10:24:20 +10:00
bors-servo
9d58c086e7 auto merge of #5128 : bjwbell/servo/inline-block_fix_min-width, r=jdm
With inline-block elements set the width to max(min width,
specified width) instead of only using the specified width.

Fixes https://github.com/servo/servo/issues/4945
2015-03-03 22:24:44 -07:00
Bryan Bell
a35ffe1c6e For inline-block correctly use min-width
With inline-block elements set the width to max(min width,
specified width) instead of only using the specified width.
2015-03-03 21:06:57 -08:00
bors-servo
07a3ce2ce1 auto merge of #5130 : bjwbell/servo/inline_block_overflow_ref_test, r=glennw
For https://github.com/servo/servo/issues/3725
2015-03-03 21:48:43 -07:00
Bryan Bell
3b32178962 Add inline-block overflow ref test
For https://github.com/servo/servo/issues/3725
2015-03-03 20:44:49 -08:00
bors-servo
e19fbc686c auto merge of #5125 : glennw/servo/remove-iframe-layers, r=larsbergstrom 2015-03-03 15:12:45 -07:00
Glenn Watson
86baef2cc0 Remove compositor layers when iframes are removed from doc or display:none. 2015-03-04 07:51:46 +10: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
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
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
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
bors-servo
891dd496e3 auto merge of #5065 : glennw/servo/iframe-vis-fix, r=pcwalton
When an iframe is created with display:none it sets the root layer to be zero width and height. When updating the rect of the iframe from layout send the entire rect rather than just the new origin, which handles the case where the iframe has been made visible and now has a non-zero rect.
2015-03-02 15:30:52 -07:00
bors-servo
93d1f40a96 auto merge of #4475 : pcwalton/servo/text-shadow, r=mbrubeck
r? @mbrubeck 

Depends on servo/rust-geom#64.
2015-03-02 14:54:52 -07:00
Glenn Watson
f68386f0fa Fix making an iframe visible when it was initially set to display:none.
When an iframe is created with display:none it sets the root layer to be
zero width and height. When updating the rect of the iframe from layout
send the entire rect rather than just the new origin, which handles the case
where the iframe has been made visible and now has a non-zero rect.
2015-03-03 07:46:26 +10:00
Patrick Walton
09358b908d layout: Implement text-shadow per CSS-TEXT-DECORATION-3 § 4. 2015-03-02 13:28:51 -08:00
Mátyás Mustoha
774cc4a93a Canvas: added lineTo(). 2015-03-02 21:00:50 +01:00
bors-servo
b2f099026a auto merge of #4952 : bjwbell/servo/borders-txt-nodes, r=pcwalton
Inline fragments that are part of a text run don't have interior borders.
So don't draw interior borders or include them when calculating positioning.

Fixes https://github.com/servo/servo/issues/4658, where multiple text nodes that are adjacent have distinct borders.

r? @Ms2ger, @pcwalton
2015-02-27 16:57:53 -07: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
Bryan Bell
0f407804fe Remove WA for borders ref test
The borders_a.html ref test had a WA to avoid displaying a spurious
black pixel at (0,0). Details are at
https://github.com/servo/servo/issues/2879

The WA can be removed since the bug is no longer reproducible.
2015-02-27 00:40:53 -08:00
Glenn Watson
a2f1f12c96 Fix setting display:none after a layout where the element was visible.
Prior to incremental layout, the code would remove the existing
construction result. However, with incremental layout the construction result
is cloned rather than removed. This change ensures that the previous
construction result is cleared when an element's display type
changes to none.
2015-02-27 07:44:24 +10: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
Patrick Walton
55a0ee6ec7 script: Implement enough 2D canvas support to render basic SVGs such as the tiger. 2015-02-22 22:29:58 -05:00
bors-servo
6d2e840bf4 auto merge of #4934 : glennw/servo/fix-1248, r=pcwalton 2015-02-16 14:06:52 -07:00
Glenn Watson
984012c9e3 Support root element having percentage heights in layout. This allows using standard CSS techniques to place a footer at the bottom of the page. 2015-02-16 14:46:19 +10:00
Glenn Watson
7aacf90161 Fixes background-color calculation for iframes. Fixes #1248 2015-02-16 08:16:18 +10:00
Matthew Rasmus
5b340599f2 Fix 'inline-block' sizing issues
Fixes #3624
2015-02-02 15:52:11 -08:00
Patrick Walton
5fdaba05a6 layout: Implement text-align: justify and text-justify per
CSS-TEXT-3 § 7.3.

`text-justify: distribute` is not supported.

The behavior of `text-justify: none` does not seem to match what Firefox
and Chrome do, but it seems to match the spec.

Closes #213.
2015-01-29 17:00:41 -08:00
Glenn Watson
1f37c6eabe Add layout support and tests for inline iframes. Fixes #1697. 2015-01-29 16:36:20 +10:00
Patrick Walton
d891c677aa layout: Implement floated list items.
This patch also makes Servo not crash when
`generated_containing_block_rect()` is called on a list item (as, for
example, GitHub does), and for good measure I added the fix to other
flows as well.
2015-01-28 19:58:24 -08:00
Patrick Walton
0f8e436745 layout: Implement text-overflow: ellipsis per CSS-UI-3 § 6.2.
Only the one-value syntax is supported for now.
2015-01-28 16:23:31 -08:00
bors-servo
c2076d707e auto merge of #4660 : deokjinkim/servo/font_style, r=jdm
'oblique' font-style is not supported now.
When I checked freetype.h, same macro is used for italic and oblique.

  /*    FT_STYLE_FLAG_ITALIC ::                                            */
  /*      Indicates that a given face style is italic or oblique.          */

So, when font style is 'oblique', enable flag for italic.
With tests/html/test_italic_bold.html, it works well.
2015-01-28 11:51:53 -07:00
Peter Reid
c9cbb5b071 Handle overlapping border-radius corners
Conforming to section 5.5 (Rounded Corners/Overlapping Curves) of "CSS
Background and Borders Module Level 3", border radii on elements whose
border curves would have overlapped are uniformly scaled down to the
point that they no longer do.

http://dev.w3.org/csswg/css-backgrounds/#corner-overlap
2015-01-26 09:04:42 -05:00
Deokjin Kim
80a6f0ae08 Support 'font-style: oblique'. 2015-01-20 10:48:23 +09:00
bors-servo
62d1761d2a auto merge of #4598 : mttr/servo/table_percentage, r=pcwalton
Fixes #4421
2015-01-13 13:24:48 -07:00
Patrick Walton
97d3443003 layout: Implement mix-blend-mode per COMPOSITING § 3.4.1.
`background-blend-mode` is not yet supported because we don't support
multiple backgrounds yet.
2015-01-12 08:02:41 -08:00
Matthew Rasmus
182f1a0d01 table_wrapper.rs: Fix for percentage widths
Fixes #4421
2015-01-11 11:39:09 -08:00
Patrick Walton
15d60d7ea4 layout: Implement filter per CSS-FILTERS § 5.
`blur` and `drop-shadow` are not yet supported, because the
`text-shadow` PR makes some fundamental changes to blur rendering that
are needed first.
2015-01-09 07:26:13 -08:00
Patrick Walton
af7cf26e76 layout: Implement outline-offset per CSS-UI-3 § 5.5. 2015-01-08 10:49:54 -08:00
Patrick Walton
0627d4c599 layout: Implement word-break: break-all per CSS3-TEXT § 5.2. 2015-01-08 09:04:24 -08:00
Patrick Walton
5ea2c6dcfd layout: Paint stacking contexts' overflow areas properly.
This was making `box-shadow` not show up in many cases, in particular,
but the effects were not limited to that.
2015-01-04 17:41:59 -08:00