mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Do not merge text fragments of differing colors
The display list item for a line of text has a single color assigned for it, so text fragments with different colors cannot be merged. There is no issue number for this, as far as I know. I found this while trying an internal program that uses red asterisks for required text fields.
This commit is contained in:
parent
0dc64daed9
commit
46396d7f3b
5 changed files with 48 additions and 7 deletions
|
@ -38,9 +38,9 @@ use std::collections::LinkedList;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use style::computed_values::content::ContentItem;
|
use style::computed_values::content::ContentItem;
|
||||||
use style::computed_values::{border_collapse, clear, display, mix_blend_mode, overflow_wrap};
|
use style::computed_values::{border_collapse, clear, color, display, mix_blend_mode};
|
||||||
use style::computed_values::{overflow_x, position, text_decoration, transform_style};
|
use style::computed_values::{overflow_wrap, overflow_x, position, text_decoration};
|
||||||
use style::computed_values::{vertical_align, white_space, word_break, z_index};
|
use style::computed_values::{transform_style, vertical_align, white_space, word_break, z_index};
|
||||||
use style::dom::TRestyleDamage;
|
use style::dom::TRestyleDamage;
|
||||||
use style::logical_geometry::{LogicalMargin, LogicalRect, LogicalSize, WritingMode};
|
use style::logical_geometry::{LogicalMargin, LogicalRect, LogicalSize, WritingMode};
|
||||||
use style::properties::{ComputedValues, ServoComputedValues};
|
use style::properties::{ComputedValues, ServoComputedValues};
|
||||||
|
@ -1304,6 +1304,10 @@ impl Fragment {
|
||||||
self.style().get_inheritedtext().white_space
|
self.style().get_inheritedtext().white_space
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn color(&self) -> color::T {
|
||||||
|
self.style().get_color().color
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the text decoration of this fragment, according to the style of the nearest ancestor
|
/// Returns the text decoration of this fragment, according to the style of the nearest ancestor
|
||||||
/// element.
|
/// element.
|
||||||
///
|
///
|
||||||
|
@ -2042,7 +2046,8 @@ impl Fragment {
|
||||||
// FIXME: Should probably use a whitelist of styles that can safely differ (#3165)
|
// FIXME: Should probably use a whitelist of styles that can safely differ (#3165)
|
||||||
if self.style().get_font() != other.style().get_font() ||
|
if self.style().get_font() != other.style().get_font() ||
|
||||||
self.text_decoration() != other.text_decoration() ||
|
self.text_decoration() != other.text_decoration() ||
|
||||||
self.white_space() != other.white_space() {
|
self.white_space() != other.white_space() ||
|
||||||
|
self.color() != other.color() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
[content-inherit-002.htm]
|
|
||||||
type: reftest
|
|
||||||
expected: FAIL
|
|
|
@ -1272,6 +1272,18 @@
|
||||||
"url": "/_mozilla/css/clip_a.html"
|
"url": "/_mozilla/css/clip_a.html"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"css/content_color.html": [
|
||||||
|
{
|
||||||
|
"path": "css/content_color.html",
|
||||||
|
"references": [
|
||||||
|
[
|
||||||
|
"/_mozilla/css/content_color_ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"url": "/_mozilla/css/content_color.html"
|
||||||
|
}
|
||||||
|
],
|
||||||
"css/counters_nested_a.html": [
|
"css/counters_nested_a.html": [
|
||||||
{
|
{
|
||||||
"path": "css/counters_nested_a.html",
|
"path": "css/counters_nested_a.html",
|
||||||
|
@ -8360,6 +8372,18 @@
|
||||||
"url": "/_mozilla/css/clip_a.html"
|
"url": "/_mozilla/css/clip_a.html"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"css/content_color.html": [
|
||||||
|
{
|
||||||
|
"path": "css/content_color.html",
|
||||||
|
"references": [
|
||||||
|
[
|
||||||
|
"/_mozilla/css/content_color_ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"url": "/_mozilla/css/content_color.html"
|
||||||
|
}
|
||||||
|
],
|
||||||
"css/counters_nested_a.html": [
|
"css/counters_nested_a.html": [
|
||||||
{
|
{
|
||||||
"path": "css/counters_nested_a.html",
|
"path": "css/counters_nested_a.html",
|
||||||
|
|
8
tests/wpt/mozilla/tests/css/content_color.html
Normal file
8
tests/wpt/mozilla/tests/css/content_color.html
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Pseudo-elements can have color</title>
|
||||||
|
<link rel="match" href="content_color_ref.html">
|
||||||
|
<style>
|
||||||
|
span:after{content:"B";color:red}
|
||||||
|
</style>
|
||||||
|
<span>A</span>
|
7
tests/wpt/mozilla/tests/css/content_color_ref.html
Normal file
7
tests/wpt/mozilla/tests/css/content_color_ref.html
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>This test should have a red B and a black A</title>
|
||||||
|
<style>
|
||||||
|
#a { float: left }
|
||||||
|
#b { color: red }
|
||||||
|
</style>
|
||||||
|
<span id=a>A</span><span id=b>B</span>
|
Loading…
Add table
Add a link
Reference in a new issue