diff --git a/webrender/src/frame_builder.rs b/webrender/src/frame_builder.rs index b9a30de858..48e9a85161 100644 --- a/webrender/src/frame_builder.rs +++ b/webrender/src/frame_builder.rs @@ -1153,7 +1153,7 @@ impl FrameBuilder { // we handle subpixel blending. if let Some(sc_index) = self.stacking_context_stack.last() { let stacking_context = &self.stacking_context_store[sc_index.0]; - if stacking_context.composite_ops.count() > 0 { + if !stacking_context.allow_subpixel_aa { render_mode = FontRenderMode::Alpha; } } diff --git a/webrender/src/tiling.rs b/webrender/src/tiling.rs index 0453951d07..2a1813493c 100644 --- a/webrender/src/tiling.rs +++ b/webrender/src/tiling.rs @@ -1601,6 +1601,11 @@ pub struct StackingContext { /// Current stacking context visibility of backface. pub is_backface_visible: bool, + + /// Allow subpixel AA for text runs on this stacking context. + /// This is a temporary hack while we don't support subpixel AA + /// on transparent stacking contexts. + pub allow_subpixel_aa: bool, } impl StackingContext { @@ -1618,6 +1623,8 @@ impl StackingContext { TransformStyle::Flat => ContextIsolation::None, TransformStyle::Preserve3D => ContextIsolation::Items, }; + let allow_subpixel_aa = composite_ops.count() == 0 && + isolation == ContextIsolation::None; StackingContext { pipeline_id, reference_frame_offset, @@ -1630,6 +1637,7 @@ impl StackingContext { is_pipeline_root, is_visible: false, is_backface_visible, + allow_subpixel_aa, } } diff --git a/wrench/reftests/text/isolated-text.png b/wrench/reftests/text/isolated-text.png new file mode 100644 index 0000000000..7b310e78dc Binary files /dev/null and b/wrench/reftests/text/isolated-text.png differ diff --git a/wrench/reftests/text/isolated-text.yaml b/wrench/reftests/text/isolated-text.yaml new file mode 100644 index 0000000000..897d410a84 --- /dev/null +++ b/wrench/reftests/text/isolated-text.yaml @@ -0,0 +1,14 @@ +root: + items: + - type: stacking-context + bounds: [0, 0, 1000, 100] + transform: perspective(1000) + items: + - type: stacking-context + bounds: [0, 0, 1000, 100] + transform-style: preserve-3d + items: + - text: "Cats making all the muffins knock over christmas tree" + origin: 20 30 + size: 20 + font: "FreeSans.ttf" diff --git a/wrench/reftests/text/reftest.list b/wrench/reftests/text/reftest.list index 10aa0f4ed0..9ad658a714 100644 --- a/wrench/reftests/text/reftest.list +++ b/wrench/reftests/text/reftest.list @@ -23,3 +23,5 @@ fuzzy(1,160) == shadow-grey.yaml shadow-grey-ref.yaml # enable when synthetic-italics implemented on mac platform(linux) != synthetic-italics.yaml synthetic-italics-ref.yaml options(disable-subpixel) == ahem.yaml ahem-ref.yaml +platform(linux) == isolated-text.yaml isolated-text.png + diff --git a/wrench/src/yaml_helper.rs b/wrench/src/yaml_helper.rs index 4db2b244a1..d6d1f87b66 100644 --- a/wrench/src/yaml_helper.rs +++ b/wrench/src/yaml_helper.rs @@ -332,6 +332,9 @@ impl YamlHelper for Yaml { "rotate-y" if args.len() == 1 => { make_rotation(transform_origin, args[0].parse().unwrap(), 0.0, 1.0, 0.0) } + "perspective" if args.len() == 1 => { + LayoutTransform::create_perspective(args[0].parse().unwrap()) + } _ => { println!("unknown function {}", function); break;