1
1
mirror of https://github.com/exyte/Macaw.git synced 2024-08-15 16:10:39 +03:00

Merge branch 'master'

Conflicts:
	Macaw.xcodeproj/project.pbxproj
This commit is contained in:
Daniil Manin 2019-05-22 18:24:35 +07:00
commit 5376e3cc05
5 changed files with 632 additions and 5 deletions

View File

@ -508,6 +508,8 @@
A718CD4F1F45C28F00966E06 /* MDisplayLink_macOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = A718CD4B1F45C28F00966E06 /* MDisplayLink_macOS.swift */; };
A718CD501F45C28F00966E06 /* MView_macOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = A718CD4C1F45C28F00966E06 /* MView_macOS.swift */; };
A718CD521F45C2A400966E06 /* MBezierPath+Extension_macOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = A718CD511F45C2A400966E06 /* MBezierPath+Extension_macOS.swift */; };
A74C81EC229284790085A832 /* struct-use-01-t-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = A74C81EA229284780085A832 /* struct-use-01-t-manual.reference */; };
A74C81ED229284790085A832 /* struct-use-01-t-manual.svg in Resources */ = {isa = PBXBuildFile; fileRef = A74C81EB229284780085A832 /* struct-use-01-t-manual.svg */; };
A74C81F12292B3940085A832 /* color-prop-05-t-manual.svg in Resources */ = {isa = PBXBuildFile; fileRef = A74C81F02292B3940085A832 /* color-prop-05-t-manual.svg */; };
A74C81F32292B45E0085A832 /* color-prop-05-t-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = A74C81F22292B45D0085A832 /* color-prop-05-t-manual.reference */; };
A7E675561EC4213500BD9ECB /* NodeBoundsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E675551EC4213500BD9ECB /* NodeBoundsTests.swift */; };
@ -927,6 +929,8 @@
A718CD511F45C2A400966E06 /* MBezierPath+Extension_macOS.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "MBezierPath+Extension_macOS.swift"; path = "Source/platform/macOS/MBezierPath+Extension_macOS.swift"; sourceTree = SOURCE_ROOT; };
A74C81F02292B3940085A832 /* color-prop-05-t-manual.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "color-prop-05-t-manual.svg"; sourceTree = "<group>"; };
A74C81F22292B45D0085A832 /* color-prop-05-t-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "color-prop-05-t-manual.reference"; sourceTree = "<group>"; };
A74C81EA229284780085A832 /* struct-use-01-t-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "struct-use-01-t-manual.reference"; sourceTree = "<group>"; };
A74C81EB229284780085A832 /* struct-use-01-t-manual.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "struct-use-01-t-manual.svg"; sourceTree = "<group>"; };
A7E675551EC4213500BD9ECB /* NodeBoundsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NodeBoundsTests.swift; path = Bounds/NodeBoundsTests.swift; sourceTree = "<group>"; };
C410148D1F834D280022EE44 /* style.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = style.svg; sourceTree = "<group>"; };
C4153A8E1F8793DD001BA5EE /* small-logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "small-logo.png"; sourceTree = "<group>"; };
@ -1550,6 +1554,8 @@
5B1AE1C420B6A669007EECCB /* struct-frag-06-t-manual.svg */,
5B1AE1CA20B6A669007EECCB /* struct-group-01-t-manual.reference */,
5B1AE22420B6A669007EECCB /* struct-group-01-t-manual.svg */,
A74C81EA229284780085A832 /* struct-use-01-t-manual.reference */,
A74C81EB229284780085A832 /* struct-use-01-t-manual.svg */,
5B1AE1BB20B6A669007EECCB /* struct-use-03-t-manual.reference */,
5B1AE20120B6A669007EECCB /* struct-use-03-t-manual.svg */,
5B1AE18D20B6A669007EECCB /* struct-use-12-f-manual.reference */,
@ -1768,6 +1774,7 @@
57CAB1361D7832E000FD8E47 /* triangle.svg in Resources */,
5B7E79CF20CBE69700C50BCF /* masking-path-02-b-manual.svg in Resources */,
5BFEF5D620BC1C1F008DAC11 /* paths-data-18-f-manual.svg in Resources */,
A74C81ED229284790085A832 /* struct-use-01-t-manual.svg in Resources */,
5B1AE23620B6A669007EECCB /* paths-data-07-t-manual.svg in Resources */,
5B1AE27720B6A669007EECCB /* coords-trans-03-t-manual.reference in Resources */,
5B1AE26420B6A669007EECCB /* painting-fill-03-t-manual.svg in Resources */,
@ -1914,6 +1921,7 @@
5B1AE23820B6A669007EECCB /* color-prop-01-b-manual.svg in Resources */,
5B1AE24620B6A669007EECCB /* painting-control-01-f-manual.svg in Resources */,
5B1AE2B120B6A669007EECCB /* color-prop-03-t-manual.svg in Resources */,
A74C81EC229284790085A832 /* struct-use-01-t-manual.reference in Resources */,
5B1AE23B20B6A669007EECCB /* struct-use-12-f-manual.reference in Resources */,
5B1AE29F20B6A669007EECCB /* painting-stroke-09-t-manual.svg in Resources */,
5B1AE27D20B6A669007EECCB /* shapes-polygon-03-t-manual.svg in Resources */,

View File

@ -477,14 +477,18 @@ class MacawSVGTests: XCTestCase {
validateJSON("struct-frag-03-t-manual")
}
func testStructUse12() {
validateJSON("struct-use-12-f-manual")
func testStructUse01() {
validateJSON("struct-use-01-t-manual")
}
func testStructUse03() {
validateJSON("struct-use-03-t-manual")
}
func testStructUse12() {
validateJSON("struct-use-12-f-manual")
}
func testColorProp03() {
validateJSON("color-prop-03-t-manual")
}

View File

@ -10,12 +10,12 @@ There are [521 SVG tests](https://github.com/web-platform-tests/wpt/tree/master/
* [switch/object](https://www.w3.org/TR/SVG11/backward.html) (7)
The rest 306 tests can be split into following categories:
* 30.7% passed (94)
* 31.0% passed (95)
* 14.1% filters (43) [#390](https://github.com/exyte/Macaw/issues/390)
* 7.8% images (24) [wpt issue](https://github.com/web-platform-tests/wpt/issues/11178)
* 2.6% markers (8) [#392](https://github.com/exyte/Macaw/issues/392)
* 19.9% text (61) [#391](https://github.com/exyte/Macaw/issues/391)
* 25.2% blocked by issues (77)
* 24.8% blocked by issues (76)
Status of each test:
@ -274,7 +274,8 @@ Status of each test:
|[struct-image-19-f-manual](w3cSVGTests/struct-image-19-f-manual.svg) | [wpt issue](https://github.com/web-platform-tests/wpt/issues/11178) |
|[struct-svg-03-f-manual](w3cSVGTests/struct-svg-03-f-manual.svg) | [#344](https://github.com/exyte/Macaw/issues/344) |
|[struct-symbol-01-b-manual](w3cSVGTests/struct-symbol-01-b-manual.svg) | [#398](https://github.com/exyte/Macaw/issues/398) |
|[struct-use-01-t-manual](w3cSVGTests/struct-use-01-t-manual.svg) | [#399](https://github.com/exyte/Macaw/issues/399) |
|[struct-use-01-t-manual](w3cSVGTests/struct-use-01-t-manual.svg) |
|[struct-use-03-t-manual](w3cSVGTests/struct-use-03-t-manual.svg) | ✅ |
|[struct-use-09-b-manual](w3cSVGTests/struct-use-09-b-manual.svg) | [#398](https://github.com/exyte/Macaw/issues/398) |
|[struct-use-12-f-manual](w3cSVGTests/struct-use-12-f-manual.svg) | ✅ |

View File

@ -0,0 +1,503 @@
{
"contents" : [
{
"contents" : [
{
"contents" : [
{
"contents" : [
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"text" : "<rect>"
},
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 0, 30",
"text" : "<circle>"
},
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 0, 60",
"text" : "<ellipse>"
},
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 0, 90",
"text" : "<line>"
},
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 0, 120",
"text" : "<polyline>"
},
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 0, 150",
"text" : "<polygon>"
},
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 0, 180",
"text" : "<path>"
},
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 0, 210",
"text" : "<image>"
},
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 0, 240",
"text" : "<text>"
}
],
"node" : "Group",
"place" : "1, 0, 0, 1, 130, 40"
},
{
"contents" : [
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"text" : "<g>"
},
{
"align" : "max",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 20,
"weight" : "normal"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 0, 30",
"text" : "<use>"
}
],
"node" : "Group",
"place" : "1, 0, 0, 1, 310, 40"
}
],
"node" : "Group"
},
{
"contents" : [
{
"fill" : {
"type" : "Color",
"val" : 65280
},
"form" : {
"h" : 20,
"type" : "Rect",
"w" : 20,
"x" : 0,
"y" : 0
},
"node" : "Shape"
},
{
"fill" : {
"type" : "Color",
"val" : 65280
},
"form" : {
"cx" : 10,
"cy" : 10,
"r" : 10,
"type" : "Circle"
},
"node" : "Shape",
"place" : "1, 0, 0, 1, 0, 30"
},
{
"fill" : {
"type" : "Color",
"val" : 65280
},
"form" : {
"ellipse" : {
"cx" : 10,
"cy" : 10,
"rx" : 10,
"ry" : 10,
"type" : "Ellipse"
},
"extent" : 6.2831853071795862,
"shift" : 0,
"type" : "Arc"
},
"node" : "Shape",
"place" : "1, 0, 0, 1, 0, 60"
},
{
"fill" : {
"type" : "Color",
"val" : 0
},
"form" : {
"type" : "Line",
"x1" : 0,
"x2" : 20,
"y1" : 10,
"y2" : 10
},
"node" : "Shape",
"place" : "1, 0, 0, 1, 0, 90",
"stroke" : {
"cap" : "butt",
"dashes" : [
],
"fill" : {
"type" : "Color",
"val" : 65280
},
"join" : "miter",
"width" : 2
}
},
{
"form" : {
"points" : [
0,
0,
20,
0,
20,
20
],
"type" : "Polyline"
},
"node" : "Shape",
"place" : "1, 0, 0, 1, 0, 120",
"stroke" : {
"cap" : "butt",
"dashes" : [
],
"fill" : {
"type" : "Color",
"val" : 65280
},
"join" : "miter",
"width" : 2
}
},
{
"fill" : {
"type" : "Color",
"val" : 65280
},
"form" : {
"points" : [
0,
0,
20,
0,
20,
20,
0,
20,
0,
0
],
"type" : "Polygon"
},
"node" : "Shape",
"place" : "1, 0, 0, 1, 0, 150"
},
{
"fill" : {
"type" : "Color",
"val" : 65280
},
"form" : {
"segments" : [
{
"data" : [
0,
0
],
"type" : "M"
},
{
"data" : [
20,
0
],
"type" : "L"
},
{
"data" : [
20,
20
],
"type" : "L"
},
{
"data" : [
0,
20
],
"type" : "L"
},
{
"data" : [
],
"type" : "z"
}
],
"type" : "Path"
},
"node" : "Shape",
"place" : "1, 0, 0, 1, 0, 180"
},
{
"align" : "min",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 65280
},
"font" : {
"name" : "FreeSerif,serif",
"size" : 25,
"weight" : "bold"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 0, 260",
"text" : "Text"
},
{
"contents" : [
{
"fill" : {
"type" : "Color",
"val" : 65280
},
"form" : {
"h" : 20,
"type" : "Rect",
"w" : 10,
"x" : 0,
"y" : 0
},
"node" : "Shape"
},
{
"fill" : {
"type" : "Color",
"val" : 32768
},
"form" : {
"h" : 20,
"type" : "Rect",
"w" : 10,
"x" : 10,
"y" : 0
},
"node" : "Shape"
}
],
"node" : "Group",
"place" : "1, 0, 0, 1, 180, 0"
},
{
"fill" : {
"type" : "Color",
"val" : 52224
},
"form" : {
"h" : 20,
"type" : "Rect",
"w" : 20,
"x" : 0,
"y" : 0
},
"node" : "Shape",
"place" : "1, 0, 0, 1, 180, 30"
}
],
"node" : "Group",
"place" : "1, 0, 0, 1, 150, 25"
}
],
"node" : "Group"
},
{
"contents" : [
{
"align" : "min",
"baseline" : "bottom",
"fill" : {
"type" : "Color",
"val" : 0
},
"font" : {
"name" : "SVGFreeSansASCII,sans-serif",
"size" : 32,
"weight" : "normal"
},
"node" : "Text",
"place" : "1, 0, 0, 1, 10, 340",
"text" : "$Revision: 1.5 $"
}
],
"node" : "Group"
},
{
"form" : {
"h" : 358,
"type" : "Rect",
"w" : 478,
"x" : 1,
"y" : 1
},
"node" : "Shape",
"stroke" : {
"cap" : "butt",
"dashes" : [
],
"fill" : {
"type" : "Color",
"val" : 0
},
"join" : "miter",
"width" : 1
}
}
],
"layout" : {
"scalingMode" : "meet",
"svgSize" : {
"height" : "100.0%",
"width" : "100.0%"
},
"viewBox" : {
"h" : 360,
"type" : "Rect",
"w" : 480,
"x" : 0,
"y" : 0
},
"xAligningMode" : "mid",
"yAligningMode" : "mid"
},
"node" : "Canvas"
}

View File

@ -0,0 +1,111 @@
<svg version="1.1" baseProfile="tiny" id="svg-root"
width="100%" height="100%" viewBox="0 0 480 360"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!--======================================================================-->
<!--= SVG 1.1 2nd Edition Test Case =-->
<!--======================================================================-->
<!--= Copyright 2009 World Wide Web Consortium, (Massachusetts =-->
<!--= Institute of Technology, European Research Consortium for =-->
<!--= Informatics and Mathematics (ERCIM), Keio University). =-->
<!--= All Rights Reserved. =-->
<!--= See http://www.w3.org/Consortium/Legal/. =-->
<!--======================================================================-->
<d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
template-version="1.4" reviewer="CN" author="VH" status="accepted"
version="$Revision: 1.5 $" testname="$RCSfile: struct-use-01-t.svg,v $">
<d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/struct.html#UseElement">
<p>
The purpose of this test is to validate proper handling of
the use element. In particular, the test checks the proper inheritance
of properties through the shadow tree (rather than through the document
tree).
</p>
</d:testDescription>
<d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
<p>
Run the test. No interaction required.
</p>
</d:operatorScript>
<d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
<p>
The test should display various elements in different shades of green.
If an element is not displayed in green, but in red fill and/or yellow
stroke, then it is in error.
</p>
</d:passCriteria>
</d:SVGTestCase>
<title id="test-title">$RCSfile: struct-use-01-t.svg,v $</title>
<defs>
<font-face font-family="SVGFreeSansASCII" unicode-range="U+0-7F">
<font-face-src>
<font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
</font-face-src>
</font-face>
</defs>
<g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
<defs>
<font-face font-family="FreeSerif" unicode-range="U+0020-U+00FF">
<font-face-src>
<font-face-uri xlink:href="../resources/FreeSerifBoldItalic.svg#FreeSerifBoldItalic"/>
</font-face-src>
</font-face>
<g fill="red" stroke="yellow" stroke-width="3">
<rect id="usedRect" width="20" height="20"/>
<circle id="usedCircle" cx="10" cy="10" r="10"/>
<ellipse id="usedEllipse" cx="10" cy="10" rx="10" ry="10"/>
<line id="usedLine" x1="0" y1="10" x2="20" y2="10"/>
<path id="usedPath" d="M 0 0 L 20 0 L 20 20 L 0 20 Z"/>
<polygon id="usedPolygon" points="0,0 20,0 20,20 0,20 0 0"/>
<polyline id="usedPolyline" points="0,0 20,0 20,20"/>
<g id="usedG">
<rect width="10" height="20"/>
<rect x="10" width="10" height="20" fill="rgb(0,128,0)"/>
</g>
<use id="usedUse" xlink:href="#usedRect"/>
<image id="usedImage" xlink:href="../images/20x20.png" width="20" height="20"/>
<text id="usedText">Text</text>
</g>
</defs>
<g>
<g id="labels" transform="translate(130, 40)" font-size="20" text-anchor="end">
<text>&lt;rect&gt;</text>
<text y="30">&lt;circle&gt;</text>
<text y="60">&lt;ellipse&gt;</text>
<text y="90">&lt;line&gt;</text>
<text y="120">&lt;polyline&gt;</text>
<text y="150">&lt;polygon&gt;</text>
<text y="180">&lt;path&gt;</text>
<text y="210">&lt;image&gt;</text>
<text y="240">&lt;text&gt;</text>
</g>
<g id="labelsColumn2" transform="translate(310, 40)" font-size="20" text-anchor="end">
<text>&lt;g&gt;</text>
<text y="30">&lt;use&gt;</text>
</g>
</g>
<g transform="translate(150, 25)">
<use xlink:href="#usedRect" fill="#0F0"/>
<use y="30" xlink:href="#usedCircle" fill="#0F0"/>
<use y="60" xlink:href="#usedEllipse" fill="#0F0"/>
<use y="90" xlink:href="#usedLine" stroke="#0F0" stroke-width="2"/>
<use y="120" xlink:href="#usedPolyline" stroke="#0F0" stroke-width="2" fill="none"/>
<use y="150" xlink:href="#usedPolygon" fill="#0F0"/>
<use y="180" xlink:href="#usedPath" fill="#0F0"/>
<use y="210" xlink:href="#usedImage" fill="#FF0"/>
<use y="260" xlink:href="#usedText" fill="#0F0" font-weight="bold" font-size="25" font-style="italic" font-family="FreeSerif,serif"/>
<use x="180" y="0" xlink:href="#usedG" fill="#0F0"/>
<use x="180" y="30" xlink:href="#usedUse" fill="#0c0"/>
</g>
</g>
<g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
<text id="revision" x="10" y="340" stroke="none" fill="black">$Revision: 1.5 $</text>
</g>
<rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/>
<!-- comment out this watermark once the test is approved -->
<!--<g id="draft-watermark">
<rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
<text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
</g>-->
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB