mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 676001 - Fix for stroke hit testing on cairo. r=jrmuizel
The mochitest was mostly written by Jonathan Watt (bug 719385).
This commit is contained in:
parent
1f7438dc92
commit
b824a27a11
@ -70,6 +70,7 @@ skip-if = android_version == '18' # bug 1147994
|
|||||||
[test_pointer-events-7.xhtml]
|
[test_pointer-events-7.xhtml]
|
||||||
[test_scientific.html]
|
[test_scientific.html]
|
||||||
[test_selectSubString.xhtml]
|
[test_selectSubString.xhtml]
|
||||||
|
[test_stroke-hit-testing.xhtml]
|
||||||
[test_stroke-linecap-hit-testing.xhtml]
|
[test_stroke-linecap-hit-testing.xhtml]
|
||||||
[test_SVGLengthList-2.xhtml]
|
[test_SVGLengthList-2.xhtml]
|
||||||
[test_SVGLengthList.xhtml]
|
[test_SVGLengthList.xhtml]
|
||||||
|
67
dom/svg/test/test_stroke-hit-testing.xhtml
Normal file
67
dom/svg/test/test_stroke-hit-testing.xhtml
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<!--
|
||||||
|
https://bugzilla.mozilla.org/show_bug.cgi?id=676001
|
||||||
|
-->
|
||||||
|
<head>
|
||||||
|
<title>Test hit-testing of stroke</title>
|
||||||
|
<style>
|
||||||
|
|
||||||
|
:hover { stroke: lime; }
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||||
|
</head>
|
||||||
|
<body onload="run()">
|
||||||
|
<script class="testbody" type="text/javascript">
|
||||||
|
<![CDATA[
|
||||||
|
|
||||||
|
SimpleTest.waitForExplicitFinish();
|
||||||
|
|
||||||
|
function run()
|
||||||
|
{
|
||||||
|
var div = document.getElementById('div');
|
||||||
|
var line = document.getElementById('line');
|
||||||
|
var circle = document.getElementById('circle');
|
||||||
|
var offsetX = div.offsetLeft;
|
||||||
|
var offsetY = div.offsetTop;
|
||||||
|
var got;
|
||||||
|
|
||||||
|
// line
|
||||||
|
got = document.elementFromPoint(offsetX + 116, offsetY + 103);
|
||||||
|
is(got, line, 'Should hit line (1)');
|
||||||
|
|
||||||
|
got = document.elementFromPoint(offsetX + 123, offsetY + 108);
|
||||||
|
is(got, line, 'Should hit line (2)');
|
||||||
|
|
||||||
|
// circle
|
||||||
|
got = document.elementFromPoint(offsetX + 188, offsetY + 158);
|
||||||
|
is(got, circle, 'Should hit circle (1)');
|
||||||
|
|
||||||
|
got = document.elementFromPoint(offsetX + 185, offsetY + 162);
|
||||||
|
is(got, circle, 'Should hit circle (2)');
|
||||||
|
|
||||||
|
SimpleTest.finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
]]>
|
||||||
|
</script>
|
||||||
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=676001">Mozilla Bug 676001</a>
|
||||||
|
<p id="display"></p>
|
||||||
|
<div id="content">
|
||||||
|
|
||||||
|
<div width="100%" height="1" id="div"></div>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" id="svg" width="500" height="300">
|
||||||
|
<line id="line" x1="100" y1="100" x2="600" y2="180"
|
||||||
|
stroke="red" stroke-width="40"/>
|
||||||
|
<!-- the circle test points need to be within the mochitest test harness
|
||||||
|
viewport for test content in order for elementFromPoint to work -->
|
||||||
|
<circle id="circle" cx="100" cy="150" r="100"
|
||||||
|
fill="none" stroke="red" stroke-width="40"/>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<pre id="test">
|
||||||
|
</pre>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1213,8 +1213,8 @@ _cairo_gstate_in_stroke (cairo_gstate_t *gstate,
|
|||||||
|
|
||||||
limit.p1.x = _cairo_fixed_from_double (x) - 5;
|
limit.p1.x = _cairo_fixed_from_double (x) - 5;
|
||||||
limit.p1.y = _cairo_fixed_from_double (y) - 5;
|
limit.p1.y = _cairo_fixed_from_double (y) - 5;
|
||||||
limit.p2.x = limit.p1.x + 5;
|
limit.p2.x = limit.p1.x + 10;
|
||||||
limit.p2.y = limit.p1.y + 5;
|
limit.p2.y = limit.p1.y + 10;
|
||||||
|
|
||||||
_cairo_traps_init (&traps);
|
_cairo_traps_init (&traps);
|
||||||
_cairo_traps_limit (&traps, &limit, 1);
|
_cairo_traps_limit (&traps, &limit, 1);
|
||||||
|
@ -252,13 +252,10 @@ _add_clipped_edge (cairo_polygon_t *polygon,
|
|||||||
right_y = _cairo_edge_compute_intersection_y_for_x (p1, p2,
|
right_y = _cairo_edge_compute_intersection_y_for_x (p1, p2,
|
||||||
limits->p2.x);
|
limits->p2.x);
|
||||||
|
|
||||||
if (left_y == right_y) /* horizontal within bounds */
|
|
||||||
continue;
|
|
||||||
|
|
||||||
p1_y = top;
|
p1_y = top;
|
||||||
p2_y = bottom;
|
p2_y = bottom;
|
||||||
|
|
||||||
if (left_y < right_y) {
|
if (p1->x < p2->x) {
|
||||||
if (p1->x < limits->p1.x && left_y > limits->p1.y) {
|
if (p1->x < limits->p1.x && left_y > limits->p1.y) {
|
||||||
p[0].x = limits->p1.x;
|
p[0].x = limits->p1.x;
|
||||||
p[0].y = limits->p1.y;
|
p[0].y = limits->p1.y;
|
||||||
|
Loading…
Reference in New Issue
Block a user