mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
Auto merge of #9080 - jdm:canvaspattern, r=Ms2ger
Enable Pattern variant of CanvasFillOrStrokeStyle This is a rebase of #8104, with a test added that exposes pre-existing problems in the canvas code for dealing with patterns. <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/9080) <!-- Reviewable:end -->
This commit is contained in:
commit
80135a70ce
4 changed files with 47 additions and 1 deletions
|
@ -50,10 +50,11 @@ use util::vec::byte_swap;
|
||||||
|
|
||||||
#[must_root]
|
#[must_root]
|
||||||
#[derive(JSTraceable, Clone, HeapSizeOf)]
|
#[derive(JSTraceable, Clone, HeapSizeOf)]
|
||||||
|
#[allow(dead_code)]
|
||||||
enum CanvasFillOrStrokeStyle {
|
enum CanvasFillOrStrokeStyle {
|
||||||
Color(RGBA),
|
Color(RGBA),
|
||||||
Gradient(JS<CanvasGradient>),
|
Gradient(JS<CanvasGradient>),
|
||||||
// Pattern(JS<CanvasPattern>), // https://github.com/servo/servo/pull/6157
|
Pattern(JS<CanvasPattern>),
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#canvasrenderingcontext2d
|
// https://html.spec.whatwg.org/multipage/#canvasrenderingcontext2d
|
||||||
|
@ -922,6 +923,9 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
|
||||||
CanvasFillOrStrokeStyle::Gradient(ref gradient) => {
|
CanvasFillOrStrokeStyle::Gradient(ref gradient) => {
|
||||||
StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(Root::from_ref(&*gradient))
|
StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(Root::from_ref(&*gradient))
|
||||||
},
|
},
|
||||||
|
CanvasFillOrStrokeStyle::Pattern(ref pattern) => {
|
||||||
|
StringOrCanvasGradientOrCanvasPattern::eCanvasPattern(Root::from_ref(&*pattern))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -966,6 +970,9 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
|
||||||
CanvasFillOrStrokeStyle::Gradient(ref gradient) => {
|
CanvasFillOrStrokeStyle::Gradient(ref gradient) => {
|
||||||
StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(Root::from_ref(&*gradient))
|
StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(Root::from_ref(&*gradient))
|
||||||
},
|
},
|
||||||
|
CanvasFillOrStrokeStyle::Pattern(ref pattern) => {
|
||||||
|
StringOrCanvasGradientOrCanvasPattern::eCanvasPattern(Root::from_ref(&*pattern))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5313,6 +5313,12 @@
|
||||||
"url": "/_mozilla/mozilla/canvas.initial.reset.2dstate.html"
|
"url": "/_mozilla/mozilla/canvas.initial.reset.2dstate.html"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"mozilla/canvas/fill_and_stroke_getters_setters.html": [
|
||||||
|
{
|
||||||
|
"path": "mozilla/canvas/fill_and_stroke_getters_setters.html",
|
||||||
|
"url": "/_mozilla/mozilla/canvas/fill_and_stroke_getters_setters.html"
|
||||||
|
}
|
||||||
|
],
|
||||||
"mozilla/caption.html": [
|
"mozilla/caption.html": [
|
||||||
{
|
{
|
||||||
"path": "mozilla/caption.html",
|
"path": "mozilla/caption.html",
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
[fill_and_stroke_getters_setters.html]
|
||||||
|
type: testharness
|
||||||
|
[strokeStyle roundtrips with \[object CanvasPattern\]]
|
||||||
|
expected: FAIL
|
||||||
|
[fillStyle roundtrips with \[object CanvasPattern\]]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,27 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>fillStyle/strokeStyle setters store the value for retrieval by getters</title>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<canvas id="c">
|
||||||
|
<script>
|
||||||
|
var ctx = document.getElementById('c').getContext('2d');
|
||||||
|
|
||||||
|
function roundtrip(property, vals) {
|
||||||
|
for (var i = 0; i < vals.length; i++) {
|
||||||
|
test(function() {
|
||||||
|
ctx[property] = vals[i];
|
||||||
|
assert_equals(ctx[property], vals[i]);
|
||||||
|
}, property + ' roundtrips with ' + vals[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var img = document.createElement('img');
|
||||||
|
img.src = '../2x2.png';
|
||||||
|
var pattern = ctx.createPattern(img, 'repeat');
|
||||||
|
|
||||||
|
var gradient = ctx.createLinearGradient(0.0, 0.0, 1.0, 1.0);
|
||||||
|
|
||||||
|
roundtrip('strokeStyle', ['#ff0000', gradient, pattern]);
|
||||||
|
roundtrip('fillStyle', ['#ff0000', gradient, pattern]);
|
||||||
|
</script>
|
Loading…
Add table
Add a link
Reference in a new issue